Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

37
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 2017/7/6 ヤフー株式会社 浩軒 Kafka・Storm・ZooKeeper における認証と認可について 1

Transcript of Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Page 1: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

2017/7/6

ヤフー株式会社 梁 浩軒

Kafka・Storm・ZooKeeperにおける認証と認可について

1

Page 2: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

発表概要

・セキュリティが重要視されている中で、自分たちが持つクラスタに対して認証・認可がかけられておらず、情報漏えいなどのリスクがあった

・Ambari+HDPで構築したKafka+Storm+ZooKeeperクラスタに対して認証・認可を行ったので紹介する

2

Page 3: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

アジェンダ

• Kafka/Storm/ZooKeeperの概要

• Kafka/Storm/ZooKeeperの認証と認可(ACL)について• Kerberos認証• クラスタ全体の認証対応• パスワード認証• IPによるACL

• まとめ

3

Page 4: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

Kafka 概要

分散メッセージングシステム

4

KafkaProducers Consumers

Producer1Producer2Producer3・・・

Consumer1Consumer2Consumer3・・・

Broker1 Topic1Broker2 Topic2・・・

Page 5: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

Stormの概要

分散処理基盤

5

Nimbus

Supervisor 1Worker1(topology)

Supervisor 2Worker2(topology)

topology

データ 出力

Page 6: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

ZooKeeper

分散アプリケーション向けの高パフォーマンスな協調サービス

・KafkaのBrokerなどを管理

・StormのSupervisorなどを管理

6

Page 7: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

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

Page 8: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

AmbariとHDPについて

HDP

・HDPはHORTONWORKSがリリースするHadoopディストリビューションの一つ

Ambari

・Hadoopクラスタをプロビジョニング、管理、監視するコンポーネントだが、HDPのdeployに利用されている

8

Page 9: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

アジェンダ

• Kafka/Storm/ZooKeeperの概要

• Kafka/Storm/ZooKeeperの認証と認可(ACL)について• Kerberos認証• クラスタ全体の認証対応• パスワード認証• IPによるACL

• まとめ

9

Page 10: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

Kafka/Storm/ZooKeeperの認証と認可(ACL)について

10

認証:あなたはだれか

認可:あなたは何をして良いか認証 Kafka Storm ZooKeeper

Kerberos ◯ ◯ ◯

パスワード ◯ ✖️ ◯

SCRAM ◯ ✖️ ✖️

独自プラグイン ◯ ? ?

認可 Kafka Storm ZooKeeper

IP ◯ ✖️ ◯

Page 11: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

認証・認可の注意点

• 認証・認可の情報(ユーザ、アクセス可能なTopic情報など)はZooKeeperに書き込まれる• ZookeeperのACLを有効化しないと、情報の書き換えられる恐れがある

11

Page 12: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

アジェンダ

• Kafka/Storm/ZooKeeperの概要

• Kafka/Storm/ZooKeeperの認証と認可(ACL)について• Kerberos認証• クラスタ全体の認証対応• パスワード認証• IPによるACL

• まとめ

12

Page 13: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

Kerberos認証・認可

認証

・keytabを元に、KDCサーバがチケットを発行する

・パスワードとIDを認証で渡す必要がない(チケット)

・一度認証されると、複数のサーバにアクセスすることが可能

13

認可

・KafkaについてはTOPICのCONSUMEとPRODUCE権限などの設定が可能

・Stormについては、topologyの操作や、ログの参照権限などが設定可能

・ZooKeeperについては、ファイルの変更権限などのせっていが可能

Page 14: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

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)

Page 15: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

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

Page 16: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

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

Page 17: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

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

Page 18: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

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

Page 19: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

所感

• 学習コストが高い

• サービス起動に必要なkeytabは、ホスト名をつけるのが慣例== 全てのホストに別々のkeytabファイルを配布する必要がある!!

19

Page 20: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

アジェンダ

• Kafka/Storm/ZooKeeperの概要

• Kafka/Storm/ZooKeeperの認証と認可(ACL)について• Kerberos認証• クラスタ全体の認証対応• パスワード認証• IPによるACL

• まとめ

20

Page 21: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

クラスタ全体を認証対応させる

Ambari+HDPを利用すると楽

・コンポーネント(Kafka、Zookeeper、Storm)全体のKerberos化をしてくれる

・設定ファイルを規定の場所に配布してくれるので、学習コストが低い

21

Page 22: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

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

Page 23: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

アジェンダ

• Kafka/Storm/ZooKeeperの概要

• Kafka/Storm/ZooKeeperの認証と認可(ACL)について• Kerberos認証• クラスタ全体の認証対応• パスワード認証• IPによるACL

• まとめ

23

Page 24: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

パスワード認証とは

認証

・ユーザIDとパスワードごとの認証が可能

認可

・TOPICのCONSUMEとPRODUCE権限などの設定が可能

24

Page 25: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

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

Page 26: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

所感

・認証を行うときパスワードは平文で記述しなければならないので、通信を暗号化しておかないと、tcpdumpで内容が見られてしまう

・adminと言われるユーザはACLを設定しなくとも、他人のデータを読むことができる

26

Page 27: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

アジェンダ

• Kafka/Storm/ZooKeeperの概要

• Kafka/Storm/ZooKeeperの認証と認可(ACL)について• Kerberos認証• クラスタ全体の認証対応• パスワード認証• IPによるACL

• まとめ

27

Page 28: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

IPによるACLとは

・認証

ホストIPごとの認証が可能

・認可

TOPICのCONSUMEとPRODUCE権限などの設定が可能

28

Page 29: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

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

Page 30: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

アジェンダ

• Kafka/Storm/ZooKeeperの概要

• Kafka/Storm/ZooKeeperの認証と認可(ACL)について• Kerberos認証• クラスタ全体の認証対応• パスワード認証• IPによるACL

• まとめ

30

Page 31: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

まとめ

・Kafka+Storm+Zookeeper全体の認証を行いたく、AmbariでKerberos化がサポートされていたので、Kerberosを選択した

・AmbariでKerberos化を行うと学習コストは低い

31

Page 32: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

おまけ

セミナー案内

Kerberos化に必要な設定(Kafka,Storm)

SSL/TLS化に必要な設定(Kafka)

パスワード認証に必要な設定(Kafka)

32

Page 33: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved .

セミナー案内

7/26日(水曜日)

Stream Processing Casual Talks #2 at Yahoo! JAPAN 開催

募集ページ近日公開予定

33

Page 34: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

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ファイルも?)

Page 35: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

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 なし(新規追加) 任意

Page 36: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

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

Page 37: Kafka・Storm・ZooKeeperの認証と認可について #kafkajp

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 なし(新規追加) 任意