- 公開日
- 最終更新日
【EventBridge】別アカウントのS3オブジェクト検知でEventBridgeをトリガーしてみた
この記事を共有する
目次
はじめに
皆さんこんにちは!パーソル&サーバーワークスの三宅です。
マルチアカウント環境を運用していると、あるアカウントのAmazon S3 (以下、S3) バケットへのオブジェクト操作をトリガーに、別のアカウントで処理を実行したいケースありませんか?
今回は、アカウントAのS3イベントをAmazon EventBridge(以下、EventBridge)のクロスアカウントルールを使ってアカウントBへ転送し、CloudWatch Logsにログが出力されることを確認する検証を行いましたので、その手順をご紹介します。
やりたいこと
今回実現する構成は以下の通りです。
- アカウントBのS3バケットにオブジェクトをアップロードする
- アカウントBのEventBridgeがS3イベントを検知し、アカウントAのEventBusへ転送する
- アカウントAのEventBridgeルールがイベントを受け取り、CloudWatch Logsへ出力する

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

カスタム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) を入力して、「作成」 をクリックします。

アカウントB 設定手順
S3のEventBridge通知をONにする
S3コンソールで対象バケットを選択します。「プロパティ」 タブから 「Amazon EventBridge」 の項目を見つけ、「編集」 をクリックします。

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

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を入力します。

IAMロールには、前述で作成したロール(例: EventBridgeCrossAccountRole)を選択し、「作成」 をクリックします。
動作確認
設定が完了したので、試しにアカウントBのS3バケットに任意のファイルをアップロードします。

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

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

まとめ
マルチアカウント環境においてアカウントBのS3イベントをEventBridgeのクロスアカウントルールを使ってアカウントAへ転送し、CloudWatch Logsで受信を確認する検証を行いました。今回はターゲットをCloudWatch Logsにしてシンプルな検証にとどめましたが、ターゲットをLambdaやSQSに変えることで、クロスアカウントでのS3イベント駆動処理を柔軟に構築できます。
マルチアカウント環境の自動化を検討されている方はぜひ試してみてください。
この記事は私が書きました
三宅 啓右
記事一覧2025 Japan All AWS Certifications Engineers