Amazon MSK イベントソースマッピングの Lambda アクセス許可の設定 - AWS Lambda

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:GetRegistryglue: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 イベントソースマッピングエラーのトラブルシューティング」を参照してください。