古くからある認証方式らしい. 単にパスワードを毎回入力する方式と、パスワード情報をハッシュ化して保存したファイル (これをkeytabという) を参照することでパスワード入力をスキップする方式とがある. 自動化する場合などには後者が必須.
ktutil コマンドを使う. Linux のそれと Mac のそれとで全く使い方が違う. Linux のそれは対話式プログラムになっている.
サーバのドメインはなぜか全部大文字で書く.
$ # Linux
$ ktutil
add_entry -password -p ${USER}@DOMAIN.CO.JP -k 1 -e aes256-cts
(パスワード入力)
write_kt output.keytab
quit
Mac だとそもそも対話式ではなくてワン・コマンド.
$ # Mac
ktutil -k output.keytab add -p $USER@DOMAIN.CO.JP -e aes256-cts-hmac-sha1-96 -V 1
Kerberos クライアントは、ドキュメントに書いてなくても、次の環境変数を勝手に読んで使う.
KRB5_CLIENT_KTNAME
KRB5_KTNAME
ともに、参照させたい keytab ファイルのパスを入れておく. クライアントはこれを読んで keytab ファイルを参照しようとする.
Hadoop に使われるファイルシステム. Kerberos 認証がかかってることがよくあるので、このメモに一緒に書いておく.
HDFSをブラウザで見る以外のクライアントについてメモする.
Python製クライアント. Pythonプログラムの中からも使えるが、CLIも提供している. バージョンによって動作の説明が激しく異なるようなので注意が必要.
$ pip install pykerberos==1.2.1 requests-kerberos==0.11.0 hdfs==2.1.0
$ cat <<EOM > ~/.hdfscli.cfg
[global]
autoload.modules = hdfs.ext.kerberos
default.alias = server
[server.alias]
url = http://domain.co.jp:80
client = KerberosClient
$ hdfscli # ipython が立ち上がる
...
Welcome to the interactive HDFS python shell.
The HDFS client is available as `CLIENT`.
In [1]: CLIENT.list('/') # 認証に失敗したらここでコケる
Out[1]: ['lib', 'system', 'tmp', 'user']
In [2]:
webhdfs REST API という API が提供されている. これを curl で直接叩けば、ファイル操作が一通りできる. 大抵は、サーバの url domain.co.jp
に対して /webhdfs/v1/
が API のエンドポイント.
$ kinit -kt $KRB5_CLIENT_KTNAME ${USER}@DOMAIN.CO.JP # はじめの認証. 一定時間で切れる
$ curl --negotiate -u : 'http://domain.co.jp/webhdfs/v1/?op=LISTSTATUS'
{"FileStatuses":{"FileStatus":[{"pathSuffix":"lib","type":"DIRECTORY",...},{"pathSuffix":"system","type":"DIRECTORY",...},{"pathSuffix":"tmp","type":"DIRECTORY",...},{"pathSuffix":"user","type":"DIRECTORY",...}]}}