Kerberos認証のセットアップと設定

このドキュメントは簡単にFlinkのセキュリティが様々な配備の仕組み (スタンドアローン, YARN あるいは Mesos)、ファイルシステム、コネクタ および 状態バックエンド の点においてどのように動作するかを説明します。

目的

Flink Kerberos セキュリティ基盤の主要な目的:

  1. コネクタ(例えば Kafka)を使ってクラスタ内のジョブへの安全なデータアクセスを有効にする
  2. ZooKeeperへの認証をする(SASLを使うように設定された場合)
  3. Hadoopコンポーネント(例えば、HDFS, HBase) への認証をする

プロダクションの配備のシナリオでは、ストリーミング ジョブは長期間(日/週/月)実行し、ジョブの生存期間を通して安全なデータソースへ認証できるものと理解されます。Hadoop移譲トークンあるいはチケット キャッシュ エントリと異なり、Kerberos キータブはその期間内で期限切れになりません。

現在の実装はFlinkクラスタ(ジョブマネージャ/タスクマネージャ/ジョブ)と、設定されたキータブの証明書あるいはHadoop移譲トークンのどちらかと一緒に実行することをサポートします。全てのジョブは指定されたクラスタのために設定された証明書を共有することに注意してください。あるジョブのために異なるキータブを使うには、単純に別個のFlinkクラスタを異なる設定で起動します。YARNあるいはMesos環境内で多数のFlinkクラスタが並列して実行するかもしれません。

概念では、Flinkのプログラムは任意の認証メソッド(Kerberos, SSL/TLS, username/password など)を必要とする一次あるいは第三者のコネクタ (Kafka, HDFS, Cassandra, Flume, Kinesis など) を使うかもしれません。全てのコネクタのセキュリティ要求を満たすことに努力を継続中ですが、Flink Kerberos 認証のみのためのfirst-classのサポートを提供します。以下のサービスとコネクタはKerberos認証のためにサポートされます:

  • Kafka (0.9+)
  • HDFS
  • HBase
  • ZooKeeper

各サービスあるいはコネクタのためにKerberosを自由に使うことができるようにすることが可能なことに注意してください。例えば、ユーザはZooKeeperのために Kerberos の使用を強制することなしにHadoopセキュリティを有効にするかもしれません。逆もまた然りです。共有される要素はKerberos証明書の設定です。これは各コンポーネントによって明示的に使われます。

内部的な構造は起動時にインストールされた(org.apache.flink.runtime.security.modules.SecurityModuleを実装する)セキュリティモジュールに基づきます。以下の章は各セキュリティモジュールを説明します。

Hadoop セキュリティ モジュール

このモジュールはプロセスの点でのlogin userコンテキストを確立するためにHadoop UserGroupInformation (UGI) クラスを使います。そしてログインユーザはHDFS, HBase および YARN を含むHadoopとの全てのやり取りのために使われます。

もしHadoopセキュリティが(core-site.xml内で)有効な場合、ログインユーザはKerberos証明書が設定された全てのものを持つでしょう。そうでなければ、ログインユーザはクラスタを起動したOSアカウントの身元のみを運びます。

JAAS セキュリティ モジュール

このモジュールは設定されたKerberos証明書を ZooKeeper, Kafka および他のそのようなJAASを当てにするコンポーネントに利用可能にして、クラスタに動的なJAAS設定を提供します。

ユーザはJava SE ドキュメントで説明される仕組みを使って静的なJAAS設定ファイルも提供するかもしれません。性的なエントリはこのモジュールによって提供される全ての動的なエントリを上書きます。

ZooKeeper セキュリティ モジュール

このモジュールは特定のプロセスの点でのZooKeeperのセキュリティに関係する設定、すなわち ZooKeeperサービス名 (デフォルト: zookeeper) とJAASログイン コンテキスト名 (デフォルト: Client)を設定します。

配備モード

以下は各配備モードに特有の情報です。

スタンドアローンモード

スタンドアローン/クラスタ モードでのセキュアなFlinkクラスタを実行するためのステップ:

  1. (全てのクラスタノード上の)Flinkの設定ファイルへセキュリティに関係する設定オプションを追加します (ここをみてください)。
  2. キータブファイルが全てのクラスタノード上で security.kerberos.login.keytabによって指し示されるパスに存在するようにしてください。
  3. 通常のFlinkクラスタの配備

YARN/Mesos モード

YARN/Mesos モードでのセキュアなFlinkクラスタをじっこうするためのステップ:

  1. クライアント上のFlinkの設定ファイルへセキュリティに関係する設定オプションを追加します (ここをみてください)。
  2. キータブファイルがクライアント上で security.kerberos.login.keytabによって指し示されるパスに存在するようにしてください。
  3. 通常のFlinkクラスタの配備

YARN/Mesos モードでは、キータブは自動的にクライアントからFlinkコンテナにコピーされます。

詳しい情報については、YARN セキュリティ ドキュメントを見てください。

kinitの使用 (YARNのみ)

YARNモードで、 (kinitで管理されるように)チケット キャッシュのみを使って、キータブ無しにセキュアなFlinkクラスタを配備することができます。これによりキータブの生成の複雑さを避けることができ、それを使ってクラスタマネージャを任せることを避けます。このシナリオでは、Flink CLIは(HDFS および HBaseのための) Hadoop移譲トークンを取得します。主な欠点は、生成された移譲トークンは期限切れになるため(一般的に1週間以内)、クラスタが必然的に短命なことです。

kinitを使ってセキュアなクラスタを実行するためのステップ:

  1. クライアント上のFlinkの設定ファイルへセキュリティに関係する設定オプションを追加します (ここをみてください)。
  2. kinitコマンドを使ってログインします。
  3. 通常のFlinkクラスタの配備

更なる詳細

トークンの更新

Kerberosを使用する各コンポーネントは独自にKerberosチケット認可チケット(TGT)を更新する責任があります。キータブが提供された時に、Hadoop, ZooKeeper および Kafka は全て自動的にTGTを更新します。移譲トークンのシナリオで、YARN自身はトークンを(最大生存期間まで)更新します。

上に戻る

TOP
inserted by FC2 system