ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

【EventBridge】別アカウントのS3オブジェクト検知でEventBridgeをトリガーしてみた

この記事を共有する

目次

はじめに

皆さんこんにちは!パーソル&サーバーワークスの三宅です。

マルチアカウント環境を運用していると、あるアカウントのAmazon S3 (以下、S3) バケットへのオブジェクト操作をトリガーに、別のアカウントで処理を実行したいケースありませんか?

今回は、アカウントAのS3イベントをAmazon EventBridge(以下、EventBridge)のクロスアカウントルールを使ってアカウントBへ転送し、CloudWatch Logsにログが出力されることを確認する検証を行いましたので、その手順をご紹介します。

やりたいこと

今回実現する構成は以下の通りです。

  1. アカウントBのS3バケットにオブジェクトをアップロードする
  2. アカウントBのEventBridgeがS3イベントを検知し、アカウントAのEventBusへ転送する
  3. アカウントAのEventBridgeルールがイベントを受け取り、CloudWatch Logsへ出力する

EBCA_構成図.png

アカウントA 設定手順

カスタムEventBusを作成する

EventBridgeコンソールを開きます。左ナビゲーションから 「イベントバス」 を選択し、「イベントバスを作成」 をクリックします。 任意の名前(例: receiver)を入力し、「作成」 をクリックします。

EBCA1.png

カスタムEventBusにリソースポリシーを設定する

作成したカスタムEventBusを選択し、「アクセス許可を管理」 から以下のリソースポリシーを設定します。 これにより、後述で設定するアカウントBからのイベント送信を許可します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowFromAccountB",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<アカウントBのID>:root"
      },
      "Action": "events:PutEvents",
      "Resource": "arn:aws:events:ap-northeast-1:<アカウントAのID>:event-bus/receiver"
    }
  ]
}

EventBridgeルールを作成する

EventBridgeコンソールの左ナビゲーションから 「ルール」 を選択し、「ルールを作成」 をクリックします。 イベントバスには前述で作成したカスタムEventBusを選択します。

イベントパターンは以下のように設定します。 アカウントBの対象S3バケットでオブジェクトが作成されたイベントのみをフィルタリングしています。

{
  "source": ["aws.s3"],
  "detail-type": ["Object Created"],
  "detail": {
    "bucket": {
      "name": ["<バケット名>"]
    }
  }
}

ターゲットでは 「CloudWatch Logsロググループ」 を選択し、任意のロググループ名(例: /aws/events/PushCloudWatchLogsFromS3) を入力して、「作成」 をクリックします。

EBCA10.png

アカウントB 設定手順

S3のEventBridge通知をONにする

S3コンソールで対象バケットを選択します。「プロパティ」 タブから 「Amazon EventBridge」 の項目を見つけ、「編集」 をクリックします。

EBCA3.png

通知を送信する設定をオンにし、「変更の保存」 をクリックします。これにより、このバケットへのオブジェクト操作が同アカウント内のEventBridgeへ通知されるようになります。

EBCA4.png

IAMロールを作成する

アカウントBのEventBridgeがアカウントAのカスタムEventBusへイベントを送信するために必要なIAMロールを作成します。

IAMコンソールの左ナビゲーションから 「ロール」 を選択し、「ロールを作成」 をクリックします。信頼されたエンティティには 「AWSのサービス」 を選択し、ユースケースに 「EventBridge」 を選択します。アタッチするポリシーの画面で 「インラインポリシーを作成」 をクリックし、以下のポリシーを入力します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "events:PutEvents",
      "Resource": "arn:aws:events:ap-northeast-1:<アカウントAのID>:event-bus/receiver"
    }
  ]
}

EventBridgeルールを作成する

EventBridgeコンソールの左ナビゲーションから 「ルール」 を選択し、「ルールを作成」 をクリックします。 イベントバスにはデフォルトバスを選択します。アカウントA側でイベントフィルタリングパターンを設定しているため、ここではS3の全イベントを対象とします。

{
  "source": ["aws.s3"]
}

ターゲットでは 「EventBusを指定」 を選択し、アカウントAのカスタムEventBusのARNを入力します。

EBCA7.png

IAMロールには、前述で作成したロール(例: EventBridgeCrossAccountRole)を選択し、「作成」 をクリックします。

動作確認

設定が完了したので、試しにアカウントBのS3バケットに任意のファイルをアップロードします。

EBCA11.png

アカウントAでターゲットとして指定したロググループにログストリームが作成されていることが確認できました。

EBCA12.png

アカウントAのEventBridgeモニタリングからもアカウントBからのイベントが正常に受信され、ターゲットが呼び出されていることが分かります。

EBCA13.png

まとめ

マルチアカウント環境においてアカウントBのS3イベントをEventBridgeのクロスアカウントルールを使ってアカウントAへ転送し、CloudWatch Logsで受信を確認する検証を行いました。今回はターゲットをCloudWatch Logsにしてシンプルな検証にとどめましたが、ターゲットをLambdaやSQSに変えることで、クロスアカウントでのS3イベント駆動処理を柔軟に構築できます。

マルチアカウント環境の自動化を検討されている方はぜひ試してみてください。

この記事は私が書きました

三宅 啓右

記事一覧

2025 Japan All AWS Certifications Engineers

三宅 啓右

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。