1K Views
July 07, 17
スライド概要
Apache Kafka Meetup Japan #3 https://kafka-apache-jp.connpass.com/event/58619/ 発表資料
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
Kafka・Storm・ZooKeeper における認証と認可について 2017/7/6 ヤフー株式会社 梁 浩軒 1 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
発表概要 ・セキュリティが重要視されている中で、自分たちが持つクラ スタに対して認証・認可がかけられておらず、情報漏えいな どのリスクがあった ・Ambari+HDPで構築したKafka+Storm+ZooKeeperクラスタに 対して認証・認可を行ったので紹介する 2 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
アジェンダ • Kafka/Storm/ZooKeeperの概要 • Kafka/Storm/ZooKeeperの認証と認可(ACL)について • Kerberos認証 • クラスタ全体の認証対応 • パスワード認証 • IPによるACL • まとめ 3 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
Kafka 概要 分散メッセージングシステム Producers Kafka Producer1 Producer2 Producer3 ・・・ 4 Broker1 Topic1 Broker2 Topic2 ・・・ Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved . Consumers Consumer1 Consumer2 Consumer3 ・・・
Stormの概要 分散処理基盤 Nimbus topology Supervisor 1 Worker1(topology) データ Supervisor 2 Worker2(topology) 5 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved . 出力
ZooKeeper 分散アプリケーション向けの高パフォーマンスな協調サービ ス ・KafkaのBrokerなどを管理 ・StormのSupervisorなどを管理 6 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
利用バージョン Ambari 2.5 + HDP 2.6 ・Kafkaは0.10.2を利用 ・Stormは1.1.0を利用 ・ZooKeeperは3.4.6を利用 7 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
AmbariとHDPについて HDP ・HDPはHORTONWORKSがリリースするHadoopディストリ ビューションの一つ Ambari ・Hadoopクラスタをプロビジョニング、管理、監視するコンポー ネントだが、HDPのdeployに利用されている 8 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
アジェンダ • Kafka/Storm/ZooKeeperの概要 • Kafka/Storm/ZooKeeperの認証と認可(ACL)について • Kerberos認証 • クラスタ全体の認証対応 • パスワード認証 • IPによるACL • まとめ 9 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
Kafka/Storm/ZooKeeperの認証と認可(ACL)について 認証:あなたはだれか 認可:あなたは何をして良いか 10 認証 Kafka Storm ZooKeeper Kerberos ◯ ◯ ◯ パスワード ◯ ✖️ ◯ SCRAM ◯ ✖️ ✖️ 独自プラグイン ◯ ? ? 認可 Kafka Storm ZooKeeper IP ◯ ✖️ ◯ Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
認証・認可の注意点 • 認証・認可の情報(ユーザ、アクセス可能なTopic情報な ど)はZooKeeperに書き込まれる • ZookeeperのACLを有効化しないと、情報の書き換え られる恐れがある 11 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
アジェンダ • Kafka/Storm/ZooKeeperの概要 • Kafka/Storm/ZooKeeperの認証と認可(ACL)について • Kerberos認証 • クラスタ全体の認証対応 • パスワード認証 • IPによるACL • まとめ 12 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
Kerberos認証・認可 認証 ・keytabを元に、KDCサーバがチケットを発行する ・パスワードとIDを認証で渡す必要がない(チケット) ・一度認証されると、複数のサーバにアクセスすることが可能 認可 ・KafkaについてはTOPICのCONSUMEとPRODUCE権限などの設定が可能 ・Stormについては、topologyの操作や、ログの参照権限などが設定可能 ・ZooKeeperについては、ファイルの変更権限などのせっていが可能 13 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
Kerberos認証(チケット発行) keytabファイルを利用して、KDCサーバにチケットを発行して もらう keytab チケット要求 チケット1(KDC 1) KDC 1 User 1: keytab チケット1(KDC 1) 14 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
Kerberos認証(Service) keytabファイルを各サーバに配置して、サービス起動認証を 行う keytab 1 チケット要求 チケット1(KDC 1) Broker 1 起動OK Kafka チケット1(KDC 1) keytab2 チケット要求 KDC 1 チケット2(KDC 1) Broker 2 チケット2(KDC 1) 起動OK Storm keytab3 チケット要求 チケット3(KDC 1) チケット3(KDC 1) 15 Broker 3 Co p yrig ht © 2 0 1 7 起動OK Yaho o Jap an Co rp o ratio n. All Rig hts Reserved . ZooKeeper
KafkaにおけるKerberos認証(Client) Produce、Consume、TOPIC操作に対する認証 User1 User2 16 チケット4 (KDC 1) TOPIC1 Produce OK TOPIC1 Delete OK broker 1 TOPIC 1 broker 2 TOPIC 2 broker 3 TOPIC 3 チケット5 (KDC 1) TOPIC3 Consume OK Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved . Kafka
StormのKerberos認証(Client) Topologyのlogやkillなどに対する認証 User1 User2 17 チケット1: check log ok kill ok チケット2: check log ng kill ng Co p yrig ht © 2 0 1 7 Storm Topology 1 keytab:User1 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved . log
ZooKeeperのKerberos認証(Client) 各種ACL情報が格納されたフォルダに対する認証 ZooKeeper User1 User2 18 チケット1: read ok チケット2: read ng Co p yrig ht © 2 0 1 7 /kafka-acl -Group,Cluster,Topic /storm/credentials -topology names Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
所感 • 学習コストが高い • サービス起動に必要なkeytabは、ホスト名をつけるのが慣 例== 全てのホストに別々のkeytabファイルを配布する必 要がある!! 19 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
アジェンダ • Kafka/Storm/ZooKeeperの概要 • Kafka/Storm/ZooKeeperの認証と認可(ACL)について • Kerberos認証 • クラスタ全体の認証対応 • パスワード認証 • IPによるACL • まとめ 20 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
クラスタ全体を認証対応させる Ambari+HDPを利用すると楽 ・コンポーネント(Kafka、Zookeeper、Storm)全体のKerberos 化をしてくれる ・設定ファイルを規定の場所に配布してくれるので、学習コス トが低い 21 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
所感 • HDPのコンポーネントはパッチが当たっているので、I/Fが 違ってはまることがある • Kafkaのsecurity protocolの定数がHDPの独自定数なので 注意 • 一般(security.inter.broker.protocol=PLAINTEXTSASL) • HDP(security.inter.broker.protocol=SASLPLAINTEXT) • HDP2.5のStormでは、Kerberos認証すると、Topology Deployの方法が変わる • 22 worker_launcherを利用したdeployになるが、resource_directoryを作成し ないと起動しない Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
アジェンダ • Kafka/Storm/ZooKeeperの概要 • Kafka/Storm/ZooKeeperの認証と認可(ACL)について • Kerberos認証 • クラスタ全体の認証対応 • パスワード認証 • IPによるACL • まとめ 23 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
パスワード認証とは 認証 ・ユーザIDとパスワードごとの認証が可能 認可 ・TOPICのCONSUMEとPRODUCE権限などの設定が可能 24 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
Kafkaにおけるパスワード認証 ProduceとConsume時にユーザ名とパスワードを要求 Kafka ユーザ1:パスワード TOPIC1 Produce OK Producer Broker 1 TOPIC 1 Jaas file ユーザ1:パスワード ユーザ2:パスワード Broker 2 TOPIC 2 Jaas file ユーザ1:パスワード ユーザ2:パスワード 25 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved . ユーザ2:パスワード TOPIC1 Consume OK Consumer
所感 ・認証を行うときパスワードは平文で記述しなければならない ので、通信を暗号化しておかないと、tcpdumpで内容が見ら れてしまう ・adminと言われるユーザはACLを設定しなくとも、他人の データを読むことができる 26 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
アジェンダ • Kafka/Storm/ZooKeeperの概要 • Kafka/Storm/ZooKeeperの認証と認可(ACL)について • Kerberos認証 • クラスタ全体の認証対応 • パスワード認証 • IPによるACL • まとめ 27 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
IPによるACLとは ・認証 ホストIPごとの認証が可能 ・認可 TOPICのCONSUMEとPRODUCE権限などの設定が可能 28 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
KafkaにおけるIPによるACLについて TOPIC毎にデータをproduce、consumeできるサーバをIPで制 限 Kafka Producer TOPIC 1 Consumer IP:172.xxx.xxx.xxx TOPIC1 Produce OK IP:172.xxx.xxx.xxx IP:162.xxx.xxx.xxx IP:162.xxx.xxx.xxx TOPIC1 Consume OK 29 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
アジェンダ • Kafka/Storm/ZooKeeperの概要 • Kafka/Storm/ZooKeeperの認証と認可(ACL)について • Kerberos認証 • クラスタ全体の認証対応 • パスワード認証 • IPによるACL • まとめ 30 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
まとめ ・Kafka+Storm+Zookeeper全体の認証を行いたく、Ambari でKerberos化がサポートされていたので、Kerberosを選択し た ・AmbariでKerberos化を行うと学習コストは低い 31 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
おまけ セミナー案内 Kerberos化に必要な設定(Kafka,Storm) SSL/TLS化に必要な設定(Kafka) パスワード認証に必要な設定(Kafka) 32 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
セミナー案内 7/26日(水曜日) Stream Processing Casual Talks #2 at Yahoo! JAPAN 開催 募集ページ近日公開予定 33 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
Kerberos認証の設定(Ambari Kafka) 設定値 変更前 変更後 security.inter.broker.protocol なし(新規追加) PLAINTEXTSASL authorizer.class.name なし(新規追加) kafka.security.auth.SimpleAclAuthori zer principal.to.local.class なし(新規追加) kafka.security.auth.KerberosPrincipa lToLocal super.users なし(新規追加) User:kafka zookeeper.set.acl なし(新規追加) true kafka_keytab なし(新規追加) 任意 kafka_principal_name なし(新規追加) 任意 上記に加え、krb5.confの配布が必要(jceファイルも?) 34 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
Kerberos認証の設定(Ambari Storm) 35 設定値 変更前 変更後 Nimbus,ui,supervisorのkeytabとprincipaleの名前 なし(新規追加) 任意 nimbus.authorizer なし(新規追加) org.apache.storm.security.auth.authorizer.SimpleACLAu thorizer nimbus.impersonation.acl なし(新規追加) { {{storm_bare_jaas_principal}} : {hosts: ['*'], groups: ['*']}} nimbus.impersonation.authorizer なし(新規追加) org.apache.storm.security.auth.authorizer.Impersonatio nAuthorizer drpc.authorizer なし(新規追加) org.apache.storm.security.auth.authorizer.DRPCSimple ACLAuthorizer ava.security.auth.login.config なし(新規追加) 任意の場所 nimbus.admins、nimbus.supervisor.users なし(新規追加) 任意 storm.principal.tolocal なし(新規追加) org.apache.storm.security.auth.KerberosPrincipalToLoc al storm.zookeeper.superACL なし(新規追加) 任意 supervisor.run.worker.as.user なし(新規追加) 任意 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
パスワード認証の設定(Ambari Kafka) 36 設定値 変更前 変更後 listeners PLAINTEXT://localhost:6667 SASL_PLAINTEXT://localhost:6667 security.inter.broker.protocol なし(新規追加) SASL_PLAINTEXT sasl.mechanism.inter.broker.protocol なし(新規追加) PLAIN sasl.enabled.mechanisms なし(新規追加) PLAIN authorizer.class.name undef kafka.security.auth.SimpleAclAuthori zer kafka-env template export export KAFKA_KERBEROS_PARAMS=kafka_ KAFKA_KERBEROS_PARAMS=kerberos_params Djava.security.auth.login.config=/usr /hdp/current/kafkabroker/config/kafka_jaas.conf Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .
SSL/TLSの設定(Ambari Kafka) 37 設定値 変更前 変更後 listeners PLAINTEXT://localhost:6667 SASL_SSL://localhost:6667 security.inter.broker.protocol なし(新規追加) SASL_SSL ssl.key.password なし(新規追加) 任意 ssl.keystore.location なし(新規追加) 任意 ssl.keystore.password なし(新規追加) 任意 ssl.secure.random.implementation なし(新規追加) 任意 ssl.truststore.location なし(新規追加) 任意 ssl.truststore.password なし(新規追加) 任意 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .