CLI Kerberos認証¶
Prestoのコマンドラインインターフェースは、Kerberos認証が有効になっているPrestoコーディネーターに接続できます。
環境設定¶
Kerberosサービス¶
クライアントがネットワーク経由でアクセスできるノードで実行されているKerberos KDCが必要です。KDCは、プリンシパルを認証し、Kerberos対応サービスで使用できるセッションキーを発行する役割を担います。KDCは通常、Kerberos用にIANAが割り当てたポートであるポート88で実行されます。
MIT Kerberosの設定¶
Kerberosはクライアントで設定する必要があります。少なくとも、/etc/krb5.conf
ファイルの[realms]
セクションにkdc
エントリが必要です。また、admin_server
エントリを含め、クライアントがポート749でKerberos管理サーバーにアクセスできることを確認する必要があります。
[realms]
PRESTO.EXAMPLE.COM = {
kdc = kdc.example.com
admin_server = kdc.example.com
}
[domain_realm]
.presto.example.com = PRESTO.EXAMPLE.COM
presto.example.com = PRESTO.EXAMPLE.COM
krb5.conf
の完全なドキュメントは、MIT Kerberos Projectによってホストされています。Kerberosプロトコルの異なる実装を使用している場合は、環境に合わせて構成を調整する必要があります。
Kerberosプリンシパルとkeytabファイル¶
Prestoコーディネーターに接続する各ユーザーには、Kerberosプリンシパルが必要です。kadminを使用して、Kerberosでこれらのユーザーを作成する必要があります。
また、各ユーザーにはkeytabファイルが必要です。keytabファイルは、プリンシパルを作成した後、kadminを使用して作成できます。
kadmin
> addprinc -randkey someuser@EXAMPLE.COM
> ktadd -k /home/someuser/someuser.keytab someuser@EXAMPLE.COM
注意
ktaddを実行すると、プリンシパルのキーがランダム化されます。プリンシパルを作成したばかりの場合は、これは問題ではありません。プリンシパルが既に存在し、既存のユーザーまたはサービスがパスワードまたはkeytabを使用して認証できることに依存している場合は、ktaddに-norandkey
オプションを使用してください。
Java Cryptography Extensionポリシーファイル¶
Java Runtime Environmentには、使用できる暗号化キーの強度を制限するポリシーファイルが付属しています。Kerberosはデフォルトで、付属のポリシーファイルでサポートされているキーよりも大きいキーを使用します。この問題には2つの可能な解決策があります
JCEポリシーファイルを更新します。
強度の低いキーを使用するようにKerberosを構成します。
2つのオプションのうち、JCEポリシーファイルを更新することをお勧めします。JCEポリシーファイルはOracleからダウンロードできます。JCEポリシーファイルは、実行しているJavaのメジャーバージョンによって異なることに注意してください。たとえば、Java 6ポリシーファイルはJava 8では機能しません。
Java 8ポリシーファイルはこちらで入手できます。ポリシーファイルのインストール手順は、ZIPアーカイブ内のREADME
ファイルに含まれています。システムJREにインストールする場合は、ポリシーファイルをインストールするための管理者アクセス権が必要です。
TLS用のJavaキーストアファイル¶
Kerberos認証を使用する場合、Prestoコーディネーターへのアクセスはhttpsを介して行う必要があります。Prestoコーディネーターは、TLS構成にJavaキーストアファイルを使用します。このファイルは、クライアントマシンにコピーして、構成に使用できます。
Presto CLIの実行¶
Kerberos認証を必要としないPrestoコーディネーターに接続する場合に必要なオプションに加えて、Kerberosサポートを有効にしてCLIを起動するには、いくつかの追加のコマンドラインオプションが必要です。CLIを起動する最も簡単な方法は、ラッパースクリプトを使用することです。
#!/bin/bash
./presto \
--server https://presto-coordinator.example.com:7778 \
--krb5-config-path /etc/krb5.conf \
--krb5-principal someuser@EXAMPLE.COM \
--krb5-keytab-path /home/someuser/someuser.keytab \
--krb5-remote-service-name presto \
--keystore-path /tmp/presto.jks \
--keystore-password password \
--catalog <catalog> \
--schema <schema>
オプション |
説明 |
---|---|
|
Prestoコーディネーターのアドレスとポート。ポートは、PrestoコーディネーターがHTTPS接続をリッスンしているポートに設定する必要があります。 |
|
Kerberos設定ファイル。 |
|
コーディネーターへの認証に使用するプリンシパル。 |
|
|
|
PrestoコーディネーターのKerberosサービス名。 |
|
TLSを保護するために使用されるJavaキーストアファイルの場所。 |
|
キーストアのパスワード。これは、キーストアの作成時に指定したパスワードと一致する必要があります。 |
トラブルシューティング¶
Prestoコーディネーターのトラブルシューティングに使用できるのと同じ手順の多くが、CLIのトラブルシューティングにも適用されます。
Kerberosの追加デバッグ情報¶
CLIプロセスを開始するときに、-Dsun.security.krb5.debug=true
をJVM引数として渡すことで、Presto CLIプロセスの追加のKerberosデバッグ情報を有効にできます。そのためには、自己実行可能なJARを直接実行するのではなく、java
を介してCLI JARを起動する必要があります。自己実行可能なjarファイルは、オプションをJVMに渡すことができません。
#!/bin/bash
java \
-Dsun.security.krb5.debug=true \
-jar presto-cli-*-executable.jar \
--server https://presto-coordinator.example.com:7778 \
--krb5-config-path /etc/krb5.conf \
--krb5-principal someuser@EXAMPLE.COM \
--krb5-keytab-path /home/someuser/someuser.keytab \
--krb5-remote-service-name presto \
--keystore-path /tmp/presto.jks \
--keystore-password password \
--catalog <catalog> \
--schema <schema>
PrestoコーディネーターのKerberos認証の設定に関するドキュメントにリストされている追加リソースは、Kerberosデバッグメッセージを解釈する際に役立つ場合があります。