コーディネーター Kerberos 認証¶
Presto コーディネーターは、Presto CLI や JDBC および ODBC ドライバーなどのクライアントに対して、HTTPS 経由での Kerberos 認証を有効にするように構成できます。
Presto の Kerberos 認証を有効にするには、Presto コーディネーターで構成を変更します。ワーカー構成を変更する必要はありません。ワーカーノードは認証されていない HTTP 経由でコーディネーターに接続し続けます。ただし、SSL/TLS で Presto ノード間の通信を保護する場合は、セキュアな内部通信を構成してください。
環境設定¶
Kerberos サービス¶
Presto コーディネーターがネットワーク経由で到達できるノードで実行されている Kerberos KDC が必要になります。KDC は、プリンシパルを認証し、Kerberos 対応サービスで使用できるセッションキーを発行する役割を担います。通常、KDC は Kerberos 用に IANA が割り当てたポートであるポート 88 で実行されます。
MIT Kerberos 設定¶
Kerberos は Presto コーディネーターで構成する必要があります。少なくとも、/etc/krb5.conf
ファイルの [realms]
セクションに kdc
エントリが必要です。admin_server
エントリを含めて、Presto コーディネーターがポート 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 プロジェクトでホストされています。Kerberos プロトコルの別の実装を使用している場合は、環境に合わせて構成を調整する必要があります。
Kerberos プリンシパルとキータブファイル¶
Presto コーディネーターには Kerberos プリンシパルが必要です。Presto コーディネーターに接続するユーザーにも必要です。kadmin を使用して、Kerberos でこれらのユーザーを作成する必要があります。
さらに、Presto コーディネーターにはキータブファイルが必要です。プリンシパルを作成した後、kadmin を使用してキータブファイルを作成できます。
kadmin
> addprinc -randkey presto@EXAMPLE.COM
> addprinc -randkey presto/presto-coordinator.example.com@EXAMPLE.COM
> ktadd -k /etc/presto/presto.keytab presto@EXAMPLE.COM
> ktadd -k /etc/presto/presto.keytab presto/presto-coordinator.example.com@EXAMPLE.COM
注意
ktadd を実行すると、プリンシパルのキーがランダム化されます。プリンシパルを作成したばかりの場合、これは問題ではありません。プリンシパルがすでに存在する場合、既存のユーザーまたはサービスがパスワードまたはキータブを使用して認証できることに依存している場合は、ktadd に -norandkey
オプションを使用します。
Java 暗号化拡張ポリシーファイル¶
Java ランタイム環境には、使用できる暗号化キーの強度を制限するポリシーファイルが同梱されています。Kerberos はデフォルトで、同梱されているポリシーファイルでサポートされているキーよりも大きいキーを使用します。この問題には 2 つの可能な解決策があります。
JCE ポリシーファイルを更新します。
強度を下げたキーを使用するように Kerberos を構成します。
2 つのオプションのうち、JCE ポリシーファイルを更新することをお勧めします。JCE ポリシーファイルは、Oracle からダウンロードできます。JCE ポリシーファイルは、実行している Java のメジャーバージョンによって異なることに注意してください。たとえば、Java 6 ポリシーファイルは Java 8 では機能しません。
Java 8 ポリシーファイルはこちらから入手できます。ポリシーファイルをインストールする手順は、ZIP アーカイブの README
ファイルに含まれています。システム JRE にポリシーファイルをインストールする場合は、管理者アクセス権が必要になります。
TLS 用の Java キーストアファイル¶
Kerberos 認証を使用する場合、Presto コーディネーターへのアクセスは HTTPS 経由で行う必要があります。コーディネーターでTLS 用の Java キーストアファイルを作成することで実行できます。
システムアクセスコントロールプラグイン¶
Kerberos を有効にした Presto コーディネーターでは、目的のレベルのセキュリティを実現するために、システムアクセス制御プラグインが必要になる可能性があります。
Presto コーディネーターノードの設定¶
Presto コーディネーターで Kerberos 認証と HTTPS を使用するように構成する前に、上記の設定を環境に適用する必要があります。次の環境変更を行った後、Presto 構成ファイルに変更を加えることができます。
config.properties¶
Kerberos 認証は、コーディネーターノードの config.properties
ファイルで構成されます。追加する必要があるエントリを以下に示します。
http-server.authentication.type=KERBEROS
http.server.authentication.krb5.service-name=presto
http.server.authentication.krb5.service-hostname=presto.example.com
http.server.authentication.krb5.keytab=/etc/presto/presto.keytab
http.authentication.krb5.config=/etc/krb5.conf
http-server.https.enabled=true
http-server.https.port=7778
http-server.https.keystore.path=/etc/presto_keystore.jks
http-server.https.keystore.key=keystore_password
プロパティ |
説明 |
---|---|
|
Presto コーディネーターの認証タイプ。必ず |
|
Presto コーディネーターの Kerberos サービス名。Kerberos プリンシパルと一致する必要があります。 |
|
Presto コーディネーターの Kerberos ホスト名。Kerberos プリンシパルと一致する必要があります。このパラメーターはオプションです。含まれている場合、Presto はマシンのホスト名の代わりに、Kerberos プリンシパルのホスト部分にこの値を使用します。 |
|
Kerberos プリンシパルを認証するために使用できるキータブの場所。 |
|
Kerberos 構成ファイルの場所。 |
|
Presto コーディネーターの HTTPS アクセスを有効にします。 |
|
HTTPS サーバーポート。 |
|
TLS を保護するために使用される Java キーストアファイルの場所。 |
|
キーストアのパスワード。これは、キーストアの作成時に指定したパスワードと一致する必要があります。 |
注意
HTTPSを有効にした後、PrestoコーディネーターのCPU使用率を監視してください。Javaは、大きなリストから選択できる場合、CPU負荷の高い暗号スイートを優先します。HTTPSを有効にした後、CPU使用率が許容できないほど高い場合は、http-server.https.included-cipher
プロパティを設定して安価な暗号のみを許可するようにJavaを構成できます。前方秘匿性(FS)のない暗号はデフォルトで無効になっています。その結果、FSではない暗号を選択したい場合は、デフォルトの除外を上書きするために、http-server.https.excluded-cipher
プロパティを空のリストに設定する必要があります。
http-server.https.included-cipher=TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256
http-server.https.excluded-cipher=
Javaのドキュメントには、サポートされている暗号スイートが記載されています。
access-controls.properties¶
少なくとも、access-control.properties
ファイルには、access-control.name
プロパティが含まれている必要があります。その他の構成はすべて、構成される実装に固有です。詳細については、システムアクセス制御を参照してください。
トラブルシューティング¶
Kerberos認証を正常に機能させるのは難しい場合があります。問題を解決しようとするときに焦点を絞るために、Prestoの外部で構成の一部を個別に検証できます。
Kerberosの検証¶
telnetを使用して、PrestoコーディネーターからKDCに接続できることを確認します。
$ telnet kdc.example.com 88
kinitとklistを使用して、keytabファイルを使用してチケットを正常に取得できることを確認します。
$ kinit -kt /etc/presto/presto.keytab presto@EXAMPLE.COM
$ klist
Javaキーストアファイルの検証¶
Javaキーストアファイルの検証を使用して、キーストアファイルのパスワードを検証し、その内容を表示します。
Kerberosの追加デバッグ情報¶
Presto jvm.config
ファイルに次の行を追加することにより、PrestoコーディネータープロセスのKerberos追加デバッグ情報を有効にできます
-Dsun.security.krb5.debug=true
-Dlog.enable-console=true
-Dsun.security.krb5.debug=true
は、JRE KerberosライブラリからのKerberosデバッグ出力を有効にします。デバッグ出力はstdout
に送られ、Prestoはロギングシステムにリダイレクトします。-Dlog.enable-console=true
は、stdout
への出力をログに表示できるようにします。
Kerberosデバッグ出力がログに送信する情報の量と有用性は、認証が失敗している場所によって異なります。例外メッセージとスタックトレースも、問題の本質について有用な手がかりを提供できます。