Amazon MSK イベントソースマッピングの Lambda アクセス許可の設定
Amazon MSK クラスターにアクセスするには、関数とイベントソースマッピングはさまざまな Amazon MSK API アクションを実行するアクセス許可を必要とします。これらのアクセス許可を、関数の実行ロールに追加します。アクセスを必要とするユーザーがいる場合、そのユーザーまたはロールのアイデンティティポリシーに必要なアクセス許可を追加します。
AWSLambdaMSKExecutionRole マネージドポリシーには、Amazon MSK Lambda イベントソースマッピングに必要な最小限のアクセス許可が含まれています。アクセス許可プロセスを簡素化するには、次の操作を行います。
-
AWSLambdaMSKExecutionRole マネージドポリシーを実行ロールにアタッチします。
-
Lambda コンソールでアクセス許可を生成できるようにします。コンソールで Amazon MSK イベントソースマッピングを作成すると、Lambda は実行ロールを評価し、アクセス許可がない場合に警告します。[アクセス許可の生成] を選択して、実行ロールを自動的に更新します。これは、実行ロールポリシーを手動で作成または変更した場合、またはポリシーが複数のロールにアタッチされている場合、機能しません。障害発生時の送信先や AWS Glue スキーマレジストリなどの高度な機能を使用する場合、実行ロールに追加のアクセス許可が必要になる場合があります。
必要なアクセス許可
Lambda 関数の実行ロールには、Amazon MSK イベントソースマッピングに必要な以下のアクセス許可が必要です。これらのアクセス許可は、AWSLambdaMSKExecutionRole マネージドポリシーに含まれています。
CloudWatch Logs のアクセス許可
次のアクセス許可により、Lambda は Amazon CloudWatch Logs にログを作成して保存できます。
MSK クラスターのアクセス許可
次のアクセス許可により、Lambda はユーザーに代わって Amazon MSK クラスターにアクセスできます。
kafka:DescribeCluster の代わりに kafka:DescribeClusterV2 を使用することをお勧めします。v2 アクセス許可は、プロビジョニングされた Amazon MSK クラスターとサーバーレス Amazon MSK クラスターの両方で機能します。ポリシーでは、これらのアクセス許可のいずれかのみが必要です。
VPC アクセス許可
次のアクセス許可により、Lambda は Amazon MSK クラスターに接続するときにネットワークインターフェイスを作成および管理できます。
オプションのアクセス許可
Lambda 関数には、以下を実行する許可も必要になる場合があります。
-
クロスアカウント Amazon MSK クラスターにアクセスする。クロスアカウントイベントソースマッピングの場合は、実行ロールに kafka:DescribeVpcConnection が必要です。クロスアカウントイベントソースマッピングを作成する IAM プリンシパルには、kafka:ListVpcConnections が必要です。
-
SASL/SCRAM 認証を使用している場合で、SCRAM シークレットにアクセスする場合。これにより、関数はユーザー名とパスワードを使用して Kafka に接続できます。
-
SASL/SCRAM または mTLS 認証を使用している場合で、Secrets Manager のシークレットを記述する場合。これにより、関数は安全な接続に必要な認証情報または証明書を取得できます。
-
AWS Secrets Manager シークレットが AWS KMS カスタマーマネージドキーで暗号化されている場合で、AWS KMS カスタマーマネージドキーにアクセスする場合。
-
認証付きのスキーマレジストリを使用している場合で、スキーマレジストリシークレットにアクセスする場合。
-
AWS Glue Glue スキーマレジストリの場合、関数には
glue:GetRegistryとglue:GetSchemaVersionのアクセス許可が必要です。これにより、関数は AWS Glue に保存されているメッセージ形式のルールを検索して使用できます。 -
BASIC_AUTHまたはCLIENT_CERTIFICATE_TLS_AUTHを使用した Confluent スキーマレジストリの場合: 関数には、認証情報を含むシークレットに対する secretsmanager:GetSecretValueアクセス許可が必要です。これにより、関数は Confluent スキーマレジストリにアクセスするために必要なユーザー名/パスワードまたは証明書を取得できます。 -
プライベート CA 証明書の場合: 関数には、証明書を含むシークレットに対する secretsmanager:GetSecretValue アクセス許可が必要です。これにより、関数はカスタム証明書を使用するスキーマレジストリの ID を検証できます。
-
-
イベントソースマッピングに IAM 認証を使用している場合で、Kafka クラスターコンシューマーグループにアクセスし、トピックからメッセージをポーリングする場合。
この対象となるのは以下のアクセス許可です。
-
kafka:ListScramSecrets - Kafka 認証用の SCRAM シークレットのリストを許可します
-
secretsmanager:GetSecretValue - Secrets Manager からのシークレットの取得を有効にします
-
kms:Decrypt - AWS KMS を使用して暗号化されたデータの復号を許可します
-
glue:GetRegistry - AWS Glue スキーマレジストリへのアクセスを許可します
-
glue:GetSchemaVersion - AWS Glue スキーマレジストリから特定のスキーマバージョンを取得できるようにします
-
kafka-cluster:Connect – クラスターに接続して認証するためのアクセス許可を付与
-
kafka-cluster:AlterGroup – Apache Kafka の READ GROUP ACL に相当する、クラスター上のグループに参加させるためのアクセス許可を付与
-
kafka-cluster:DescribeGroup – Apache Kafka の DESCRIBE GROUP ACL に相当する、クラスター上のグループを記述するためのアクセス許可を付与
-
kafka-cluster:DescribeTopic – Apache Kafka の DESCRIBE TOPIC ACL に相当する、クラスター上のトピックを記述するためのアクセス許可を付与
-
kafka-cluster:ReadData – Apache Kafka の READ TOPIC ACL に相当する、クラスター上のトピックからデータを読み取るためのアクセス許可を付与
さらに、失敗した呼び出しのレコードを障害発生時の送信先に送信する場合、送信先タイプに応じて次のアクセス許可が必要です。
-
Amazon SQS 送信先の場合: sqs:SendMessage - Amazon SQS キューへのメッセージの送信を許可します
-
Amazon SNS 送信先の場合: sns:Publish - Amazon SNS トピックへのメッセージの発行を許可します
-
Amazon S3 バケット送信先の場合: s3:PutObject および s3:ListBucket - Amazon S3 バケット内のオブジェクトの書き込みと一覧表示を有効にします
認証および承認エラーをトラブルシューティングするには、「セルフマネージド Kafka イベントソースマッピングエラーのトラブルシューティング」を参照してください。