AWS Config から Amazon SNS 通知を受け取るようにするにはどうすればよいですか?

最終更新日: 2021 年 4 月 8 日

AWS Config 用に Amazon Simple Notification Service (Amazon SNS) 通知を設定しましたが、通知を受信しません。

簡単な説明

以下のトラブルシューティングのための解決策を試みます。

  • Amazon SNS トピックサブスクリプションのステータスを確認する
  • AWS アカウントに SNS トピックを発行するためのアクセス権限を付与する
  • AWS クロスアカウントに Amazon SNS トピックを発行するためのアクセス権限を付与する
  • AWS Config が暗号化された Amazon SNS トピックにアクセスできることを確認する
  • Amazon CloudWatch Events と SNS のアクセス権限の設定を修正する

解決方法

Amazon SNS トピックサブスクリプションのステータスを確認する

1.    Amazon SNS コンソールを開きます。

2.    ナビゲーションペインで、[Subscriptions] (サブスクリプション) を選択します。

3.    サブスクリプションの一覧から、サブスクリプションの [Status] (ステータス) が [Confirmed] (確認済み) に設定されていることを確認します。[Status] (ステータス) が [PendingConfirmation] に設定されている場合は、手順に従ってサブスクリプションを確認します。

AWS アカウントに SNS トピックを発行するためのアクセス権限を付与する

レコーダーロールとして、サービスにリンクされたロールまたはカスタムロールを選択する必要があります。レコーダーロールは、設定情報を記録できる AWS Identity and Access Management (IAM) ロールです。

重要: セキュリティのベストプラクティスとして、カスタム設定サービスロールをレコーダーロールとして使用してください。クロスアカウントトピックポリシーのレコーダーロールとして、サービスにリンクされたロールを使用しないでください。これは、サービスにリンクされたロールでは、Amazon SNS トピックポリシーの [Service] (サービス) プロパティとして「config.amazonaws.com」を設定する必要があるためです。

サービスにリンクされたロールの Amazon リソースネーム (ARN) をカスタムサービスロール ARN に置き換えるには、ロールのアクセス権限ポリシーに次のアクセス権限を追加します。

{
    "Effect": "Allow",
    "Action": "sns:Publish",
    "Resource": "arn:aws:sns:Region:AccountId:Topic-Name"
}

カスタムロールの詳細については、AWS Config に割り当てられた IAM ロールのアクセス権限をご参照ください。

AWS クロスアカウントに Amazon SNS トピックを発行するためのアクセス権限を付与する

別のアカウントから SNS トピックを選択した場合は、次の設定をセットアップしてクロスアカウントアクセスを取得します。

1.    SNS トピックにアタッチされたアクセスポリシーに次のステートメントを追加します。

{
    "Sid": "__console_pub_0",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::config-AccountId:root" OR "arn:aws:iam::config-AccountId:role/Custom_Service_role_name"
    },
    "Action": "sns:Publish",
    "Resource": "arn:aws:sns:Region:SNS-topic-AccountId:Topic-Name"
}

2.    AWS Config が引き受ける IAM ロールに次のステートメントをアタッチします。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublishToSNSTargetAccount",
            "Effect": "Allow",
            "Action": "sns:Publish",
            "Resource": "arn:aws:sns:Region:config-AccountId:Topic-Name"
        }
    ]
}

AWS Config が暗号化された Amazon SNS トピックにアクセスできることを確認する

SNS トピックが AWS Key Management Service (AWS KMS) キーで暗号化されている場合は、次の手順を実行します。

1.    AWS Config によって引き受けられる IAM ロールが SNS トピックの復号に必要なキーにアクセスできることを確認します。例:

{
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::config-AccountId:role/ConfigRoleName"
    },
    "Action": [
        "kms:GenerateDataKey*",
        "kms:Decrypt",
        "kms:Encrypt"
    ],
    "Resource": "*"
}

2.    ロールのアクセスポリシーに AWS KMS アクセス権限を追加します。

{
    "Effect": "Allow",
    "Action": [
        "kms:GenerateDataKey*",
        "kms:Decrypt",
         
    ],
    "Resource": "*"
}

Amazon CloudWatch Events と SNS のアクセス権限の設定を修正する

1.    CloudWatch Events ルールのターゲットとして正しい SNS トピックを選択していることを確認します。

2.    Amazon CloudWatch を使用して AWS Config API をモニタリングし、Amazon SNS を使用して通知を送信する場合は、CloudWatch が SNS トピックの発行権限を有していることを確認してください。例えば、トピックのリソースポリシーに次のステートメントを含めます。

{
    "Sid": "Allow_Publish_Events",
    "Effect": "Allow",
    "Principal": {
        "Service": "events.amazonaws.com"
    },
    "Action": "sns:Publish",
    "Resource": "arn:aws:sns:Region:AccountId:Topic-Name"
}