1

CDH 5.3.6から5.10.0にアップグレードし、カフカのトピックに書き込もうとするとエラーが発生しました。すべてのデフォルト設定があり、SSLまたはKerberos認証は有効になっていません。コンソールプロデューサーを使用してトピックの1つに書き込むとき、このエラーが発生します。Kafka on Cloudera - テスト= TOPIC_AUTHORIZATION_FAILED

/usr/bin/kafka-console-producer --broker-list = myhost1.dev.com:9092、myhost2.dev COM:、

2017-03-06 21:00:26,964 WARN org.apache.sentry.provider.common.HadoopGroupMappingService: Unable to obtain groups for ANONYMOUS 
java.io.IOException: No groups found for user ANONYMOUS 
    at org.apache.hadoop.security.Groups.noGroupsForUser(Groups.java:190) 
    at org.apache.hadoop.security.Groups.getGroups(Groups.java:210) 
    at org.apache.sentry.provider.common.HadoopGroupMappingService.getGroups(HadoopGroupMappingService.java:60) 
    at org.apache.sentry.provider.common.ResourceAuthorizationProvider.getGroups(ResourceAuthorizationProvider.java:167) 
    at org.apache.sentry.provider.common.ResourceAuthorizationProvider.doHasAccess(ResourceAuthorizationProvider.java:97) 
    at org.apache.sentry.provider.common.ResourceAuthorizationProvider.hasAccess(ResourceAuthorizationProvider.java:91) 
    at org.apache.sentry.kafka.binding.KafkaAuthBinding.authorize(KafkaAuthBinding.java:212) 
    at org.apache.sentry.kafka.authorizer.SentryKafkaAuthorizer.authorize(SentryKafkaAuthorizer.java:63) 
    at kafka.server.KafkaApis$$anonfun$kafka$server$KafkaApis$$authorize$2.apply(KafkaApis.scala:321) 
    at kafka.server.KafkaApis$$anonfun$kafka$server$KafkaApis$$authorize$2.apply(KafkaApis.scala:321) 
    at scala.Option.map(Option.scala:146) 
    at kafka.server.KafkaApis.kafka$server$KafkaApis$$authorize(KafkaApis.scala:321) 
    at kafka.server.KafkaApis$$anonfun$30.apply(KafkaApis.scala:702) 
    at kafka.server.KafkaApis$$anonfun$30.apply(KafkaApis.scala:702) 
    at scala.collection.TraversableLike$$anonfun$partition$1.apply(TraversableLike.scala:314) 
    at scala.collection.TraversableLike$$anonfun$partition$1.apply(TraversableLike.scala:314) 
    at scala.collection.immutable.Set$Set1.foreach(Set.scala:94) 
    at scala.collection.TraversableLike$class.partition(TraversableLike.scala:314) 
    at scala.collection.AbstractTraversable.partition(Traversable.scala:104) 
    at kafka.server.KafkaApis.handleTopicMetadataRequest(KafkaApis.scala:702) 
    at kafka.server.KafkaApis.handle(KafkaApis.scala:79) 
    at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:60) 
    at java.lang.Thread.run(Thread.java:745) 

私はこれに対する解決策を探してきました:9092 --topicテスト

17/03/06 21:00:57 INFO utils.AppInfoParser: Kafka version : 0.10.0-kafka-2.1.0 
17/03/06 21:00:57 INFO utils.AppInfoParser: Kafka commitId : unknown 
x 
17/03/06 21:00:59 WARN clients.NetworkClient: Error while fetching metadata with correlation id 0 : {test=TOPIC_AUTHORIZATION_FAILED} 

は/ var/log /カフカの/を見ると、私はこれらの例外の束を見ます今まで空になってしまった。 ANONYMOUSユーザーをどこかのグループに割り当てる必要はありますか? CDH 5.3.6のトピックにメッセージを書き込めましたが、アップグレードで何か問題が発生しているようです。

CDH 5.10.0にアップグレードしたあと、helloWorld/QuickstartのサンプルをDEV Kafkaで再び動作させようとしています。 Clouderaのマネージャで

-----------------一時的な回避策溶液---

5.10カフカ構成でsuper.users性があります。そのリストにANONYMOUSを追加すると、私は自分の話題から生産し消費することができました。

私はすでに/opt/cloudera/parcels/KAFKA-2.1.0-1.2.1.0.p0.115/etc/kafka/conf.dist/server.propertiesでこれをやってみましたが、これは効果がありませんでした。したがって、Clouderaは他の場所でこれらの値を管理している必要があります。

+0

_authorizer.class.name_に設定した値を確認できますか? KerberosやSSLが設定されていない場合でも、ここで何かが設定されていてもACLを強制することができます。接続しているすべてのユーザはログに記録されている「ANONYMOUS」と認証されます。 –

+0

私は/opt/cloudera/parcels/KAFKA-2.1.0-1.2.1.0.p0.115/etc/kafka/conf.dist/server.propertiesを次の行に変更しました:authorizer.class.name = kafka.security。 auth.SimpleAclAuthorizerしかし、それは重要ではないようで、私はそれが正しいファイルであるかどうか、または変更が有効になったかどうかを確認する方法が不明であった。 – medloh

+0

うんんん、これが原因です(ファイルについてはわかりませんが、フィットするようです)。その行では、カフカにすべての接続試行にACLを適用するように指示します。これらの試行はすべて「ANONYMOUS」に反対します。私はその行を削除することをお勧めしたいと思います。あるいは、同じ効果があるはずの設定でスーパーユーザーとしてANONYMOUSを設定できますが、追加のセキュリティは提供されませんので、実際には役に立ちません。 –

答えて

1

カフカは厳密認証と承認を区別 - あなたが縁石やSSL経由で認証を持っている場合でも、それを回し、以下のパラメータを介した上で認可を有効にすることが可能です:

authorizer.class.name=kafka.security.auth.SimpleAclAuthorize‌​r 

これがためカフカチェックのACLを行いますすべてのアクセス - あなたのケースでは認証が有効になっているため、すべてのユーザはANONYMOUSと評価され、このユーザにACLが設定されていないと拒否されます。

あなたの設定からその設定を削除することができます。これにより、カフカは元の信頼できる自己に戻ることができます。しかし、Cloudera Managerでどこでこれを行うのか分かりませんので、CMで利用できるスーパーユーザーのリストにANONYMOUSを追加することもできます。もちろん、アクセスを許可するACLを定義するだけでANONYMOUSにアクセスできます。

後で運用するために、外部からクラスタにアクセスする可能性がある場合は、SSLまたはKerberosを設定し、適切なACLを定義する必要があります。

関連する問題