松田です!

毎年2月ごろに思うことですが、なんともう1月が終わりかけています。。。
そんなタイミングで「EventBridge」がクロスアカウントターゲットへの直接配信のサポートをしたというアップデート情報が入りました。

このアップデート情報についての解説と注意点について、本ブログに記載します。

アップデート情報について

https://aws.amazon.com/jp/about-aws/whats-new/2025/01/amazon-eventbridge-direct-delivery-cross-account-targets/

以下、日本語訳の抜粋です。

Amazon EventBridge イベントバスでは、別のアカウントの AWS サービスにイベントを直接配信できるようになりました。
このリリースにより、中間の EventBridge イベントバスや Lambda 関数などの追加のインフラストラクチャを必要とせずに、別のアカウントのサービスを直接ターゲットにできるようになり、アーキテクチャが簡素化され、コストが削減されます。たとえば、EventBridge イベントバスから別のアカウントの別のチームの SQS キューにイベントを直接ルーティングできるようになりました。イベントを受信するチームは、EventBridge リソースについて学習したり管理したりする必要がなく、キューにアクセスできるように IAM アクセス許可を付与するだけで済みます。イベントは、Amazon SQS、AWS Lambda、Amazon Kinesis Data Streams、Amazon SNS、Amazon API Gateway などのリソースベースの IAM ポリシーをサポートする EventBridge ターゲットにクロスアカウントで配信できます。

今まで、EventBridgeのターゲットを異なるアカウントのリソースにしたい場合、そのアカウントのEventBridgeイベントバスに送信する必要がありました。

こちらのブログのイメージがわかりやすいです。

例えば、クロスアカウントでアカウントAのEventBridgeからアカウントBのSQSにイベントを配信する場合、以下のようにアカウントBのEventBridgeイベントバスを介してからSQSにイベントを配信する必要がありました。
(配信の間にくるものはブリッジコンポーネントと呼ばれているらしいです。)

今回のアップデートにより、このブリッジコンポーネントが不要になり、直接アカウントAのEventBridgeからアカウントBのSQSにイベントを配信できるようになりました。

しかし、上記ブログを読み進めていくと、ただ単に「EventBridgeがクロスアカウントリソースに直接配信できるようになった」という理解だけではいけないことがわかりました。

CodePipelineのクロスアカウントにも適用できるのでは?

私がこのアップデートを一目見た時、「お、これってCodePipelineのクロスアカウント構成にも使えそう!」と考えました。

異なるアカウントのCodeCommitをソースとした際のCodePipelineにおいて、CodeCommitにおけるコミットなどのイベント通知は以下のフローでCodePipelineに配信されます。

ブログで紹介されていたSQSの構成と同じですね。なのでこれもアカウントAのEventBridgeからアカウントBのCodePipelineに直接配信できるかなと思ったのですが、結論から言うとできません(2025年1月時点では)

対応しているサービス

2025年1月時点において、クロスアカウントターゲットへの直接配信をサポートしているのは、以下サービスのみとなっています。

  • Amazon API Gateway APIs
  • Amazon Kinesis Data Streams streams
  • Lambda functions
  • Amazon SNS topics
  • Amazon SQS queues

https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-service-cross-account.html

これらのサービスはIAMリソースベースのポリシーをサポートしています。

クロスアカウントアクセス(アカウント間を跨いてサービス連携)では、「IAMリソースベースポリシー」もしくは「AssumeRole」による権限の付与が一般的です。
ただしIAMリソースベースポリシーは一部のサービスにしか対応していません。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html

IAMリソースベースポリシーに対応していない場合は、AssumeRoleを用いる必要があります。

CodePipelineはIAMリソースベースポリシーに対応していないため、クロスアカウント構成ではAssumeRoleが必要になります。

結論として、現時点(2025年1月時点)においてはIAMリソースベースのポリシーをサポートしていないサービスは、クロスアカウントターゲットへの直接配信をサポートしていません

まとめ

2025年1月時点において

  • クロスアカウントターゲットへの直接配信をサポートするのはIAMリソースベースのポリシーをサポートする一部のサービス
    • Amazon API Gateway APIs
    • Amazon Kinesis Data Streams streams
    • Lambda functions
    • Amazon SNS topics
    • Amazon SQS queues
  • IAMリソースベースのポリシーをサポートしていないサービスは、クロスアカウントターゲットへの直接配信をサポートしていない