日本語 English
インターステラ株式会社の技術ブログです

Amazon S3でイベント通知をAmazon SNSに送信するよう設定しようとしたら “Unable to validate the following destination configurations” というエラーが出る場合の対処

こんにちは、阿形です。

今回はAmazon S3でイベント通知をAmazon SNSに送信するよう設定しようとしたら、”Unable to validate the following destination configurations” というエラーが出て設定できないということがあったので、その作業メモです。

原因

SNSのトピック側の問題です。

デフォルトではAccess policyがS3からのアクセスを許可するようになっていないため、S3バケット側からAmazon SNSのトピックにアクセスできるようにAccess policyを設定する必要があります。

設定

以下の手順でAmazon SNSのトピックのAccess policyを設定します。

  1. AWSマネジメントコンソールを開きます。
  2. Amazon SNSの設定画面に移動します。
  3. 左側メニューのTopicをクリックし、トピックのリストを表示します。
  4. トピックのリストから、S3のイベント通知を送信するトピックをクリックします。
  5. 右上の”Edit”ボタンをクリックします。
  6. Access policyのトグルをクリックして開きます。
  7. JSON editorに以下のようなポリシーを入力します。オレンジ色の部分が追加したポリシーです。<Region>や<AccountID>、<Topic>、<BucketName>は適宜置き換えてください。
{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "SNS:GetTopicAttributes",
        "SNS:SetTopicAttributes",
        "SNS:AddPermission",
        "SNS:RemovePermission",
        "SNS:DeleteTopic",
        "SNS:Subscribe",
        "SNS:ListSubscriptionsByTopic",
        "SNS:Publish"
      ],
      "Resource": "arn:aws:sns:<Region>:<AccountID>:<Topic>",
      "Condition": {
        "StringEquals": {
          "AWS:SourceOwner": "<AccountID>"
        }
      }
    },
    {
      "Sid": "S3-policy",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "SNS:Publish",
      "Resource": "arn:aws:sns:<region>:<AccountID>:<Topic>",
      "Condition": {
        "StringEquals": {
          "AWS:SourceArn": "arn:aws:s3:::<BucketName>"
        }
      }
    }
  ]
}

入力が終わったら、右下の”Save Changes”ボタンをクリックして終了します。

このあと、S3側で通知の設定を行えば、問題なく設定できるはずです。

SNSでフォローする