松田です!
毎年2月ごろに思うことですが、なんともう1月が終わりかけています。。。
そんなタイミングで「EventBridge」がクロスアカウントターゲットへの直接配信のサポートをしたというアップデート情報が入りました。
このアップデート情報についての解説と注意点について、本ブログに記載します。
アップデート情報について
以下、日本語訳の抜粋です。
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リソースベースポリシーは一部のサービスにしか対応していません。
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リソースベースのポリシーをサポートしていないサービスは、クロスアカウントターゲットへの直接配信をサポートしていない