Lambda 実行ロールのアクセス許可の設定
Amazon MSK クラスターにアクセスするには、関数とイベントソースマッピングはさまざまな Amazon MSK API アクションを実行するアクセス許可を必要とします。これらのアクセス許可を、関数の実行ロールに追加します。アクセスを必要とするユーザーがいる場合、そのユーザーまたはロールのアイデンティティポリシーに必要なアクセス許可を追加します。
必要なアクセス許可をすべてカバーするには、AWSLambdaMSKExecutionRole のマネージドポリシーを実行ロールにアタッチします。または、各アクセス許可を手動で追加することもできます。
基本的なアクセス許可
CloudWatch Logs でログを作成して保存するには、Lambda 関数の実行ロールに次の必要なアクセス許可を付与してください。
クラスターのアクセス許可
Lambda がユーザーに代わって Amazon MSK クラスターにアクセスするには、Lambda 関数の実行ロールに次の許可が必要です。
-
kafka:DescribeVpcConnection: クロスアカウントのイベントソースマッピングにのみ必要です。
-
kafka:ListVpcConnections: 実行ロールには必要ありませんが、クロスアカウントのイベントソースマッピングを作成する IAM プリンシパルには必要です。
kafka:DescribeCluster または kafka:DescribeClusterV2 のうちいずれか一つを追加してください。プロビジョニングされた Amazon MSK クラスターの場合、どちらかのアクセス許可でも機能します。サーバーレス Amazon MSK クラスターの場合は kafka:DescribeClusterV2 を使用する必要があります。
注記
Lambda では今後、AWSLambdaMSKExecutionRole のマネージドポリシーから kafka:DescribeCluster のアクセス許可を削除する予定です。現在 kafka:DescribeCluster ポリシーを使用している場合、使用対象のアプリケーションを kafka:DescribeClusterV2 へ移行させてください。
VPC アクセス許可
Amazon MSK クラスターが VPC のプライベートサブネットにある場合、Lambda 関数が Amazon VPC リソースにアクセスするには追加のアクセス許可が必要です。対象となるリソースには、VPC、サブネット、セキュリティグループ、ネットワークインターフェイスが含まれます。関数の実行ロールには、次のアクセス許可が必要です。
オプションのアクセス許可
Lambda 関数には、以下を実行する許可も必要になる場合があります。
-
SASL/SCRAM 認証を使用している場合、SCRAM シークレットにアクセスします。これにより、関数はユーザー名とパスワードを使用して Kafka に接続できます。
-
SASL/SCRAM または mTLS 認証を使用している場合、Secrets Manager のシークレットを記述します。これにより、関数は安全な接続に必要な認証情報または証明書を取得できます。
-
フィルター条件を暗号化したい場合、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 を検証できます。
-
この対象となるのは以下のアクセス許可です。
-
kafka:ListScramSecrets - Kafka 認証用の SCRAM シークレットのリストを許可します
-
secretsmanager:GetSecretValue - Secrets Manager からのシークレットの取得を有効にします
-
kms:Decrypt - AWS KMS を使用して暗号化されたデータの復号を許可します
-
glue:GetRegistry - AWS Glue スキーマレジストリへのアクセスを許可します
-
glue:GetSchemaVersion - AWS Glue スキーマレジストリから特定のスキーマバージョンを取得できるようにします
さらに、失敗した呼び出しのレコードを障害発生時の送信先に送信する場合、送信先タイプに応じて次のアクセス許可が必要です。
-
Amazon SQS 送信先の場合: sqs:SendMessage - Amazon SQS キューへのメッセージの送信を許可します
-
Amazon SNS 送信先の場合: sns:Publish - Amazon SNS トピックへのメッセージの発行を許可します
-
Amazon S3 バケット送信先の場合: s3:PutObject および s3:ListBucket - Amazon S3 バケット内のオブジェクトの書き込みと一覧表示を有効にします
認証および承認エラーをトラブルシューティングするには、「セルフマネージド Kafka イベントソースマッピングエラーのトラブルシューティング」を参照してください。