Amazon MSK クラスターを SASL/SCRAM 認証で使用する際の一般的な問題のトラブルシューティング方法を教えてください。

所要時間1分
0

SASL/SCRAM 認証が有効になっている Amazon Managed Streaming for Apache Kafka (Amazon MSK) クラスターに問題が発生しています。

解決方法

ブローカーのログに ClusterAuthorizationException エラーが表示される

Amazon MSK クラスターにアクセスすると、次のエラーメッセージが表示されることがあります。

org.apache.kafka.common.errors.ClusterAuthorizationException: Request Request(processor=11, connectionId=INTERNAL_IP-INTERNAL_IP-0, session=Session(User:ANONYMOUS,/INTERNAL_IP), listenerName=ListenerName(REPLICATION_SECURE), securityProtocol=SSL, buffer=null) is not authorized.

このエラーは、次の両方の条件に当てはまる場合に発生します。

  • Amazon MSK クラスターで、Simple Authentication and Security Layer (SASL)/Salted Challenge Response Mechanism (SCRAM) 認証が有効になっています。
  • クラスターのアクセスコントロールリスト (ACL) で resourceType=CLUSTERoperation=CLUSTER_ACTION を設定しました。

この設定では Apache Kafka の内部レプリケーションが妨げられるため、Amazon MSK クラスターはこの設定をサポートしていません。この設定では、ブローカー間の通信について、ブローカーの ID が ANONYMOUS として表示されます。SASL/SCRAM 認証の使用中にクラスターでこれらの ACL をサポートする必要がある場合は、ANONYMOUS ユーザーにすべての操作に対するアクセス権限を付与する必要があります。これにより、ブローカー間のレプリケーションが制限されなくなります。ANONYMOUS ユーザーにこのアクセス権限を付与するには、以下のコマンドを使用します。

./kafka-acls.sh --authorizer-properties
zookeeper.connect=example-ZookeeperConnectString --add --allow-principal
User:ANONYMOUS --operation ALL --cluster

AWS Secrets Manager シークレットのユーザー名またはパスワード、あるいはその両方を変更したが、古い認証情報がまだ有効である

AWS Secrets Manager シークレットは 1 人のユーザーに関連付ける必要があります。ユーザーがクラスターにアクセスする必要がなくなった場合は、シークレットの関連付けを解除し、ACL を更新する必要があります。シークレットのユーザー名を更新しても、古いユーザー名の関連付けは自動的には解除されません。そのため、新しいユーザー用に新しいシークレットを作成することをお勧めします。古いシークレットを使用する必要がある場合は、まずシークレットの関連付けを解除し、認証情報を更新してからシークレットを再度関連付けます。詳細については、「ユーザーの操作」を参照してください。

管理者以外のユーザーは、ACL の新規作成や、既存の ACL の変更が可能

デフォルトでは、すべてのユーザーが ACL を作成または変更できます。管理者以外のユーザーが Apache ZooKeeper を使用して ACL を作成または更新できないようにするには、ZooKeeper ノードを別のセキュリティグループに配置して、必ず Apache ZooKeeper へのアクセスを制限してください。また、すべての Apache Kafka コマンドとクライアント接続が、Apache ZooKeeper ではなく、ブートストラップブローカーを介して実行されていることを確認します。Apache Kafka のすべての操作は、ブートストラップ文字列を使用して実行できます。


関連情報

Apache Kafka ACL

Scram シークレット

AWS公式
AWS公式更新しました 2年前
コメントはありません