CloudWatch イベントを異なる AWS アカウントに転送する方法を教えてください

2021.09.25

困っていた内容

CloudWatch イベントルールの設定で、ターゲットを別の AWS アカウントの SNS トピックにしたいです。

CloudWatch コンソールでは他アカウントの ARN などを指定できる箇所がないように見えますが、どう対応すればクロスアカウントのイベント通知が実現できますか?

どう対応すればいいの?

クロスアカウントのイベント通知は直接 SNS トピックをターゲットにするのではなく、イベントブリッジのイベントバスを使うことで実現できます。

CloudWatch イベントルールの設定画面では、ターゲットの別の AWS アカウントのイベントバスが該当します。

簡単な設定の流れとしては以下のようになります。

設定の流れ

前提

  • アカウント A: 通知の送信元
  • アカウント B: 通知の送信先(ターゲットのリソースが存在する AWS アカウント)

手順

  1. アカウント B で CloudWatch コンソール左ペイン「イベント」の「イベントバス」からアカウント A のイベントを許可する(アカウント ID / Organizations の組織が指定可能)
  2. アカウント A の CloudWatch イベントルール設定でターゲットに別の AWS アカウントのイベントバスを選択する
  3. アカウント B の AWS アカウント ID を入力する
  4. 新規のイベントバスであれば「この特定のリソースに対して新しいロールを作成する」をチェック、既存のロールがある場合は既存ロールを選択する
  5. アカウント B で CloudWatch 受信したいイベントルールを作成
  6. アカウント B の任意のターゲットを指定する

アカウント B で受信したいイベントをアカウント A のイベントに絞り込みたい場合は、以下のようなルールを指定します。

ドキュメントより抜粋

{
  "account": [
    "123456789012","111122223333"
  ],
  "source": [
    "aws.ec2"
  ],
  "detail-type": [
    "EBS Volume Notification"
  ]
}

上記の例では AWS アカウント ID: 123456789012, 111122223333 のイベントのみターゲットへ通知されます。

AWS CLI も同様の方法で実現できます。AWS CLI で設定する手順については AWS ドキュメントを参考にしてください。

参考資料