Amazon Simple Storage Service (Amazon S3) のイベント通知を作成するときに表示されるエラー 「Amazon S3 イベント通知を作成する際に、次の宛先の設定を検証できません」をトラブルシューティングしたいと考えています。
簡単な説明
このエラーを防ぐには、次の条件を満たす必要があります。
- Amazon S3 イベント通知を作成する場合、指定された送信先には、S3 が送信先に通知を発行することを許可するリソースベースのポリシーが必要です。
- 送信先の AWS リージョンは S3 バケットのリージョンと同じでなければなりません。
- 送信先が AWS Key Management Service (AWS KMS) キーで暗号化されている場合、キーポリシーで S3 へのアクセスを許可する必要があります。
イベント通知の設定を更新すると、Amazon S3 はすべてのイベント送信先が存在することを確認します。また S3 は、イベント送信先にリソースベースのポリシーが適用されていることを確認し、イベント送信先のタイプに応じて S3 が次のことを行えるようにします。
S3 は、新しいイベント送信先と、更新中に削除しなかった既存のイベント送信先に対してもこれらのチェックを行います。これらのチェックが失敗すると、「Unable to validate the following destination configurations」(次の宛先構成を検証できません) というエラーが表示されることがあります。
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
解決策
すべてのイベント送信先が存在することを確認する
このエラーは、バケット内にイベント送信先が存在しない場合に表示されます。
既存のイベント通知から、存在しない送信先にイベントが送信される場合は、イベント通知設定を更新する前にこれらのイベントを削除してください。通知はバケットに存在していても、イベント通知設定を更新した後に削除したため、送信先が存在しない可能性があります。
同じ PutBucketNotificationConfiguration API を使用して、送信先が存在しないすべてのイベントを削除することをお勧めします。Amazon S3 コンソール、AWS CLI、または AWS SDK を使用して PutBucketNotificationConfiguration API を呼び出すことができます。
イベント送信先に有効なリソースベースのポリシーが適用されていることを確認する
関連する API を呼び出して以下の AWS サービスにメッセージを発行するために必要なアクセス権限を Amazon S3 に確実に付与します。
- Amazon Simple Notification Service (Amazon SNS) トピック
- Amazon Simple Queue Service (Amazon SQS) のキュー
- AWS Lambda 関数
Amazon SNS トピックの送信先ポリシーの例
{
"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"
}
}
}
]
}
Amazon SQS キューの送信先ポリシーの例
{
"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"
}
}
}
]
}
Lambda 関数の送信先ポリシーの例
{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "s3invoke",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:Region:account-id:function:function-name",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "bucket-owner-account-id"
},
"ArnLike": {
"AWS:SourceArn": "arn:aws:s3:::awsexamplebucket1"
}
}
}
]
}
バケットに新しいイベントを追加する場合は、新しいイベントに有効なリソースベースのポリシーが適用されていることを確認します。
Amazon SNS トピックまたは Amazon SQS キューの権限の詳細については、「SNS トピックまたは SQS キューにメッセージを発行する権限の付与」を参照してください。
Lambda 関数を有効なポリシーで更新するには、「チュートリアル: Amazon S3トリガーを使用してLambda 関数を呼び出す」を参照してください。
注: S3 コンソールを使用してイベント通知を有効にすると、S3 はポリシーがイベントに追加される前にポリシーを更新しようとします。イベント送信先のリソースベースのポリシーが有効で、同じエラーが表示される場合は、既存のすべてのイベント宛先で有効なリソースベースのポリシーを確認してください。バケットのイベント通知設定を更新した後に、イベント送信先のリソースベースのポリシーを変更すると、このエラーが発生します。エラーを防ぐには、すべての権限が有効であることを確認し、送信先が有効でないイベントを削除してください。
AWS KMS キーポリシーが AWS KMS で暗号化されたトピックとキューに対して正しいことを確認する
SQS または SNS の送信先で AWS KMS 暗号化を有効にする場合は、S3 がキーを使用できるようにカスタマーマネージドキーポリシーを更新します。詳細については、「AWS KMS キーポリシー」を参照してください。
aws/sns キーや aws/sqs キーなどの AWS マネージドキーはサポートされていません。イベント送信先で AWS マネージドキーを使用する場合は、カスタマーマネージドキーを使用するように送信先を更新する必要があります。その後に、キーポリシーを更新します。
AWS KMS キーポリシーの例
{
"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": "*"
}
]
}
関連情報
発行先 SNS トピックの IAM ポリシー
送信先 SQS キューの IAM ポリシー