Amazon S3 イベント通知の使用時に、「次の宛先設定を検証できません」というエラーが発生する理由を知りたいです。
Amazon Simple Storage Service (Amazon S3) イベント通知を使用して通知設定を追加すると、「Amazon S3 イベント通知の作成時に、次の宛先設定を検証できませんでした」というエラーが発生します。この問題をトラブルシューティングして解決したいです。
簡単な説明
宛先設定における検証の問題を防ぐには、次の手順を実行します。
- 指定する宛先には、Amazon S3 が宛先に通知を発行できるようにするリソースベースのポリシーが必要です。
- 宛先 AWS リージョンは、S3 バケットと同じリージョンである必要があります。
- 送信先が AWS Key Management Service (AWS KMS) キーで暗号化されている場合、キーポリシーで S3 へのアクセスを許可する必要があります。
イベント通知の設定を更新した場合、Amazon S3 はすべてのイベント送信先が存在することを確認します。さらに S3 は、イベント送信先には S3 がイベント送信先の種類に応じて、次のアクションの実行を許可するリソースベースのポリシーがあることを確認します。
- イベントの公開
- メッセージの送信
- 関数の呼び出し
S3 は、新しいイベント送信先と、更新時に削除しなかった既存のイベント送信先に対してチェックを実行します。チェックが不合格の場合は、「次の宛先構成を検証できません」というエラーが発生する場合があります。
解決策
AWSSupport-TroubleshootS3EventNotifications オートメーションランブックを実行する
ベストプラクティスは、AWSSupport-TroubleshootS3EventNotifications を実行し、イベント通知設定の追加時に発生する一般的な問題をトラブルシューティングすることです。
注:
- バケット所有者がオートメーションを実行する AWS アカウントの所有者と同じ場合のみ、ランブックでイベント通知設定を評価することができます。
- このランブックでは、別のアカウントでホストされている宛先リソースに対するポリシーを評価することはできません。
オートメーションを実行するには、次の手順を実行します。
- AWS Systems Manager コンソールを開き、AWSSupport-TroubleshootS3EventNotifications を開きます。
- [オートメーションの実行] を選択します。
- 入力パラメータを指定します。
- [実行] を選択します。
- [出力] セクションで結果を確認します。
最終レポートには、S3 バケットで宛先イベント通知として設定されたリソースが含まれます。Amazon S3 イベント通知の問題が解消されない場合は、次の解決策を使用して問題を手動でトラブルシューティングしてください。
現在存在しない宛先に関するイベントを削除する
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
既存のイベント通知から、現在は存在しない宛先にイベントが送信される場合は、イベント通知設定を更新する前にそのイベントを削除します。イベント通知設定を更新した後に宛先を削除したことが原因で、通知はバケットにあっても、宛先は存在しない場合があります。
Amazon S3 コンソール、AWS CLI、PutBucketNotificationConfiguration API のいずれかを使用することで、現在は存在しない宛先用のイベントをすべて削除できます。すべてのイベントに同じ 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/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": "*" } ] }
関連情報
関連するコンテンツ
- 質問済み 2年前
