Kafka・Storm・ZooKeeperの認証と認可について #kafkajp
-
Upload
yahoo -
Category
Technology
-
view
723 -
download
1
Transcript of Kafka・Storm・ZooKeeperの認証と認可について #kafkajp
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
2017/7/6
ヤフー株式会社 梁 浩軒
Kafka・Storm・ZooKeeperにおける認証と認可について
1
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
発表概要
・セキュリティが重要視されている中で、自分たちが持つクラスタに対して認証・認可がかけられておらず、情報漏えいなどのリスクがあった
・Ambari+HDPで構築したKafka+Storm+ZooKeeperクラスタに対して認証・認可を行ったので紹介する
2
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
アジェンダ
• Kafka/Storm/ZooKeeperの概要
• Kafka/Storm/ZooKeeperの認証と認可(ACL)について• Kerberos認証• クラスタ全体の認証対応• パスワード認証• IPによるACL
• まとめ
3
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
Kafka 概要
分散メッセージングシステム
4
KafkaProducers Consumers
Producer1Producer2Producer3・・・
Consumer1Consumer2Consumer3・・・
Broker1 Topic1Broker2 Topic2・・・
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
Stormの概要
分散処理基盤
5
Nimbus
Supervisor 1Worker1(topology)
Supervisor 2Worker2(topology)
topology
データ 出力
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
ZooKeeper
分散アプリケーション向けの高パフォーマンスな協調サービス
・KafkaのBrokerなどを管理
・StormのSupervisorなどを管理
6
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
利用バージョン
Ambari 2.5 + HDP 2.6
・Kafkaは0.10.2を利用
・Stormは1.1.0を利用
・ZooKeeperは3.4.6を利用
7
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
AmbariとHDPについて
HDP
・HDPはHORTONWORKSがリリースするHadoopディストリビューションの一つ
Ambari
・Hadoopクラスタをプロビジョニング、管理、監視するコンポーネントだが、HDPのdeployに利用されている
8
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
アジェンダ
• Kafka/Storm/ZooKeeperの概要
• Kafka/Storm/ZooKeeperの認証と認可(ACL)について• Kerberos認証• クラスタ全体の認証対応• パスワード認証• IPによるACL
• まとめ
9
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
Kafka/Storm/ZooKeeperの認証と認可(ACL)について
10
認証:あなたはだれか
認可:あなたは何をして良いか認証 Kafka Storm ZooKeeper
Kerberos ◯ ◯ ◯
パスワード ◯ ✖️ ◯
SCRAM ◯ ✖️ ✖️
独自プラグイン ◯ ? ?
認可 Kafka Storm ZooKeeper
IP ◯ ✖️ ◯
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
認証・認可の注意点
• 認証・認可の情報(ユーザ、アクセス可能なTopic情報など)はZooKeeperに書き込まれる• ZookeeperのACLを有効化しないと、情報の書き換えられる恐れがある
11
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
アジェンダ
• Kafka/Storm/ZooKeeperの概要
• Kafka/Storm/ZooKeeperの認証と認可(ACL)について• Kerberos認証• クラスタ全体の認証対応• パスワード認証• IPによるACL
• まとめ
12
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
Kerberos認証・認可
認証
・keytabを元に、KDCサーバがチケットを発行する
・パスワードとIDを認証で渡す必要がない(チケット)
・一度認証されると、複数のサーバにアクセスすることが可能
13
認可
・KafkaについてはTOPICのCONSUMEとPRODUCE権限などの設定が可能
・Stormについては、topologyの操作や、ログの参照権限などが設定可能
・ZooKeeperについては、ファイルの変更権限などのせっていが可能
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
Kerberos認証(チケット発行)
keytabファイルを利用して、KDCサーバにチケットを発行してもらう
14
KDC 1
keytab チケット要求
User 1: keytabチケット1(KDC 1)
チケット1(KDC 1)
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
Kerberos認証(Service)
keytabファイルを各サーバに配置して、サービス起動認証を行う
15
KDC 1
keytab 1 チケット要求
keytab2 チケット要求
keytab3 チケット要求
KafkaBroker 1
チケット1(KDC 1)
Broker 2
Broker 3
チケット2(KDC 1)
チケット3(KDC 1)
チケット1(KDC 1)
チケット2(KDC 1)
チケット3(KDC 1)
起動OK
起動OK
起動OK
Storm
ZooKeeper
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
KafkaにおけるKerberos認証(Client)
Produce、Consume、TOPIC操作に対する認証
16
User1 Kafkabroker 1
broker 2
broker 3
チケット4 (KDC 1)TOPIC1 Produce OKTOPIC1 Delete OK
TOPIC 1
TOPIC 2
TOPIC 3User2チケット5 (KDC 1)TOPIC3 Consume OK
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
StormのKerberos認証(Client)
Topologyのlogやkillなどに対する認証
17
Storm
Topology 1
keytab:User1 log
User1チケット1:check log okkill ok
User2チケット2:check log ngkill ng
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
ZooKeeperのKerberos認証(Client)
各種ACL情報が格納されたフォルダに対する認証
18
ZooKeeper
/kafka-acl-Group,Cluster,Topic
/storm/credentials-topology names
User1チケット1:read ok
User2 チケット2:read ng
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
所感
• 学習コストが高い
• サービス起動に必要なkeytabは、ホスト名をつけるのが慣例== 全てのホストに別々のkeytabファイルを配布する必要がある!!
19
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
アジェンダ
• Kafka/Storm/ZooKeeperの概要
• Kafka/Storm/ZooKeeperの認証と認可(ACL)について• Kerberos認証• クラスタ全体の認証対応• パスワード認証• IPによるACL
• まとめ
20
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
クラスタ全体を認証対応させる
Ambari+HDPを利用すると楽
・コンポーネント(Kafka、Zookeeper、Storm)全体のKerberos化をしてくれる
・設定ファイルを規定の場所に配布してくれるので、学習コストが低い
21
Copyrig ht © 2017 Yahoo Japan Corporation. 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の方法が変わる• worker_launcherを利用したdeployになるが、resource_directoryを作成し
ないと起動しない
22
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
アジェンダ
• Kafka/Storm/ZooKeeperの概要
• Kafka/Storm/ZooKeeperの認証と認可(ACL)について• Kerberos認証• クラスタ全体の認証対応• パスワード認証• IPによるACL
• まとめ
23
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
パスワード認証とは
認証
・ユーザIDとパスワードごとの認証が可能
認可
・TOPICのCONSUMEとPRODUCE権限などの設定が可能
24
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
Kafkaにおけるパスワード認証
ProduceとConsume時にユーザ名とパスワードを要求
25
Kafka
Producer
ユーザ1:パスワードTOPIC1 Produce OK
Consumer
ユーザ2:パスワードTOPIC1 Consume OK
Broker 1
Jaas fileユーザ1:パスワードユーザ2:パスワード
Broker 2 Jaas fileユーザ1:パスワードユーザ2:パスワード
TOPIC 1
TOPIC 2
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
所感
・認証を行うときパスワードは平文で記述しなければならないので、通信を暗号化しておかないと、tcpdumpで内容が見られてしまう
・adminと言われるユーザはACLを設定しなくとも、他人のデータを読むことができる
26
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
アジェンダ
• Kafka/Storm/ZooKeeperの概要
• Kafka/Storm/ZooKeeperの認証と認可(ACL)について• Kerberos認証• クラスタ全体の認証対応• パスワード認証• IPによるACL
• まとめ
27
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
IPによるACLとは
・認証
ホストIPごとの認証が可能
・認可
TOPICのCONSUMEとPRODUCE権限などの設定が可能
28
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
KafkaにおけるIPによるACLについて
TOPIC毎にデータをproduce、consumeできるサーバをIPで制限
29
Kafka
TOPIC 1IP:172.xxx.xxx.xxxIP:162.xxx.xxx.xxx
ProducerIP:172.xxx.xxx.xxxTOPIC1 Produce OK
ConsumerIP:162.xxx.xxx.xxxTOPIC1 Consume OK
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
アジェンダ
• Kafka/Storm/ZooKeeperの概要
• Kafka/Storm/ZooKeeperの認証と認可(ACL)について• Kerberos認証• クラスタ全体の認証対応• パスワード認証• IPによるACL
• まとめ
30
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
まとめ
・Kafka+Storm+Zookeeper全体の認証を行いたく、AmbariでKerberos化がサポートされていたので、Kerberosを選択した
・AmbariでKerberos化を行うと学習コストは低い
31
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
おまけ
セミナー案内
Kerberos化に必要な設定(Kafka,Storm)
SSL/TLS化に必要な設定(Kafka)
パスワード認証に必要な設定(Kafka)
32
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
セミナー案内
7/26日(水曜日)
Stream Processing Casual Talks #2 at Yahoo! JAPAN 開催
募集ページ近日公開予定
33
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .
Kerberos認証の設定(Ambari Kafka)
34
設定値 変更前 変更後
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ファイルも?)
Copyrig ht © 2017 Yahoo Japan Corporation. 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 なし(新規追加) 任意
Copyrig ht © 2017 Yahoo Japan Corporation. 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
KAFKA_KERBEROS_PARAMS=kafka_
kerberos_params
export
KAFKA_KERBEROS_PARAMS=-
Djava.security.auth.login.config=/usr
/hdp/current/kafka-
broker/config/kafka_jaas.conf
Copyrig ht © 2017 Yahoo Japan Corporation. 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 なし(新規追加) 任意