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=CLUSTER と operation=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 シークレット