宛先にイベント通知メッセージを発行するアクセス許可の付与
Amazon S3 プリンシパルに、SNS トピック、SQS キュー、Lambda 関数へメッセージを公開する関連する API を呼び出すため必要なアクセス許可を付与する必要があります。これは、Amazon S3 がイベント通知メッセージを宛先に公開できるようにするためです。
イベント通知メッセージを送信先に公開する場合のトラブルシューティングについては、「Amazon S3 イベント通知を Amazon Simple Notification Service に公開するためのトラブルシューティング
AWS Lambda 関数を呼び出すアクセス許可の付与
Amazon S3 は Lambda 関数を呼び出してイベントメッセージを AWS Lambda に発行し、イベントメッセージを引数として指定します。
Amazon S3 コンソールを使用して Lambda 関数の AmazonS3 バケットにイベント通知を設定すると、コンソールは Lambda 関数に必要なアクセス許可を設定します。これは、Amazon S3 がバケットから関数を呼び出す許可があるからです。詳細については、Amazon S3 コンソールを使用したイベント通知の有効化と設定 を参照してください。
AWS Lambda から Amazon S3 の許可を付与して、Lambda 関数を呼び出すこともできます。詳細については、AWS Lambda デベロッパーガイドのチュートリアル: Amazon S3 で AWS Lambda を使用するを参照してください。
SNS トピックまたは SQS キューにメッセージを発行するアクセス許可の付与
SNS トピックや SQS キューにメッセージを発行する許可を Amazon S3 に付与するには、AWS Identity and Access Management (IAM) ポリシーを宛先 SNS トピックや SQS キューにアタッチします。
SNS トピックや SQS キューにポリシーをアタッチする方法の例については、チュートリアル: 通知 (SNS トピックまたは SQS キュー) のバケットを設定する を参照してください。アクセス許可の詳細については、次のトピックを参照してください。
-
「Amazon Simple Notification Service デベロッパーガイド」の「Amazon SNS アクセスコントロールのケース例」
-
「Amazon Simple Queue サービスデベロッパーガイド」の「Amazon SQS での Identity and Access Management」
発行先 SNS トピックの IAM ポリシー
発行先の SNS トピックにアタッチする AWS Identity and Access Management (IAM) ポリシーの例を次に示します。このポリシーを使用してイベント通知の宛先 Amazon SNS トピックを設定する方法については、チュートリアル: 通知 (SNS トピックまたは SQS キュー) のバケットを設定する を参照してください。
{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "Example SNS topic policy", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SNS:Publish" ], "Resource": "
SNS-topic-ARN
", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name
" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id
" } } } ] }
発行先 SQS キューの IAM ポリシー
以下は、発行先 SQS キューにアタッチする IAM ポリシーの例です。このポリシーを使用してイベント通知の宛先 Amazon SQS キューを設定する方法については、チュートリアル: 通知 (SNS トピックまたは SQS キュー) のバケットを設定する を参照してください。
このポリシーを使用するには、Amazon SQS キューの ARN、バケット名、およびバケット所有者の AWS アカウント ID を更新する必要があります。
{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SQS:SendMessage" ], "Resource": "arn:aws:sqs:
Region
:account-id
:queue-name
", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1
" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id
" } } } ] }
Amazon SNS および Amazon SQS IAM ポリシーの両方について、StringLike
条件の代わりにポリシーで ArnLike
条件を指定できます。
ArnLike
を使用する場合、ARN のパーティション、サービス、アカウント ID、リソースタイプ、および部分的なリソース ID 部分が、リクエストコンテキストの ARN と完全に一致する必要があります。部分一致が許可されるのは、リージョンとリソースパスのみです。
ArnLike
の代わりに StringLike
を使用すると、マッチングでは ARN 構造が無視され、ワイルドカードで指定された部分に関係なく部分一致が可能になります。詳細については、「IAM ユーザーガイド」の「IAM JSON のポリシー要素」を参照してください。
"Condition": { "StringLike": { "aws:SourceArn": "arn:aws:s3:*:*:
bucket-name
" } }
AWS KMS キーポリシー
SQS キューまたは SNS トピックが AWS Key Management Service (AWS KMS) カスタマーマネージドキーで暗号化されている場合は、暗号化されたトピックまたはキューを操作するための許可を Amazon S3 サービスプリンシパルに付与する必要があります。Amazon S3 サービスプリンシパルに許可を付与するには、カスタマーマネージドキーのキーポリシーに次のステートメントを追加します。
{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" } ] }
AWS KMS キーポリシーの詳細については、AWS Key Management Service デベロッパーガイドの AWS KMS でキーポリシーを使用するを参照してください。
Amazon SQS および Amazon SNS 用の AWS KMS でのサーバー側の暗号化の使用の詳細については、以下を参照してください。
-
「Amazon Simple Notification Service デベロッパーガイド」の「キー管理」。
-
「Amazon Simple Queue Service デベロッパーガイド」の「キー管理」。
-
AWS KMS コンピューティングブログ
の Encrypting messages published to Amazon SNS with AWS。