CloudWatchアラームの通知を別のアカウントのSNSトピックに送信したい。

CloudWatch アラームの通知先を他のアカウントの Amazon SNS トピックに設定したい時の、それぞれのアカウントでの設定内容について説明します。
2023.07.28

困っていた内容

Cloudwatchにて値がアラーム条件に達した時の通知先を別アカウントのSNSトピックにしたいです。

以下、二つのアカウントにどのような設定をしたらよいか教えてください。

  • アカウント A: CloudWatch アラームを設定するアカウント (例: 111111111111)
  • アカウント B: SNS トピックを所有するアカウント (例: 222222222222)

どう対応すればいいの?

アカウント A (111111111111) での設定

CloudWach アラームのアクションの設定にて [トピック ARN を使用して他のアカウントに通知] を選択、[通知の送信先] に通知したいアカウントの SNS トピック ARN を入力します。

アカウント B (222222222222) での設定

対象の SNS トピックに、アカウント A (111111111111) の CloudWatch からのメッセージ送信を許可するアクセスポリシーを設定します。

マネジメントコンソールを使用しこのポリシーを設定するには、アカウント B にて対象の SNS トピックを作成・編集時に [アクセスポリシー - オプション] 欄を JSON エディタで編集し、以下のステートメントを追加します。

    {
      "Sid": "Allow_Publish_Alarms",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "SNS:Publish",
      "Resource": "arn:aws:sns:your-region:222222222222:your-topic-name",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:cloudwatch:your-region:111111111111:alarm:*"
        }
      }
    }

※ Resource は 作成したトピックの ARN を使用します。Condition 内 Anlike の項目では、作成した Alarm が存在する region、アカウントID を適用します。

結果

閾値に達した後、CloudWatch アラームの履歴タブにて、SNSトピックに送信できたことが記録されています。

参考資料