亚马逊AWS官方博客

为 Amazon EventBridge 事件传输规则推出跨账户目标

今天,我们宣布,将支持跨账户目标。这项 Amazon EventBridge 新功能允许您直接向位于其他账户中的目标(例如 Amazon SQSAmazon LambdaAmazon SNS)发送事件。

以前,EventBridge 支持将事件从一个账户中的事件总线跨账户传输到另一个账户中的事件总线。本次发布对此功能进行了扩展,您可以配置源事件总线,将事件直接传输到其他账户中受支持的所有 EventBridge 目标,而不仅仅是事件总线。这样就无需在目标账户中添加额外的事件总线。

概述

使用 EventBridge 构建的事件驱动型架构允许您创建跨多个公司部门和业务领域的解决方案,同时保持异步和松散耦合。随着解决方案的发展,您可能需要跨账户边界发送事件。

例如,您可能在多个账户中托管了一组事件总线,这些总线将与安全相关的事件分发到托管在集中式账户中的 Amazon SQS 队列,以便进行进一步的异步处理和分析。

以前,EventBridge 规则允许您在同一个账号中定义目标。唯一一种支持跨账户事件传输的目标类型是另一个事件总线。如果您想跨账户边界发送事件,则必须在源账户和目标账户中都创建事件总线。然后,您需要在源事件总线上配置一条规则,将事件发送到目标总线,并在目标事件总线上再配置一条规则,才能将事件传输到目标账户中的所需目标。

或者,您可以使用 Lambda 函数或 SNS 主题作为桥接机制,以跨账户发送事件,但这需要复杂的 IAM 角色假设。

上图说明了新功能推出之前的跨账户事件传输架构。以前,需要使用“桥接”组件,例如另一个事件总线、SNS 主题或 Lambda 函数,才能将事件从一个账户发送到另一个账户。

现在,借助这项 EventBridge 新功能,您可以将事件从源事件总线直接传输到不同账户中的所需目标。这项新功能减少了从源到目标的过程中用于处理事件的组件,从而简化架构并降低事件驱动型解决方案的延迟。

为跨账户事件传输配置 EventBridge 传输规则目标

启用跨账户事件传输时应考虑到安全性。必须在源和目标之间建立双向信任关系。源事件总线规则必须具有允许其向特定目标发送事件的 IAM 角色。这是通过向传输规则目标附加执行角色来实现的。

托管在不同账户中的事件传输目标必须附加资源访问策略,其中明确允许从源账户中使用的执行角色接收事件。

通常,在设置环境以进行跨账户访问时,有两种可用的方法。选择哪种方法则取决于您的用例。两种方法都有源账户和目标账户,但是跨账户通信的设置方式不同。

第一种是集中式方法。团队 A 拥有源账户,负责设置源事件总线、其执行角色、规则和目标。团队 B 和 C 拥有目标账户,不能对源事件总线进行任何修改。这两个团队只能管理目标账户,例如创建 SQS 队列等传输目标,并授予权限,以接受来自源账户中集中式事件总线的事件。如果您计划组建一支专门的团队来管理所有人的集中式事件总线,这种方法非常合适。这种方法可以为您提供高度集中的控制和治理。

第二种是分布式方法。团队 A 负责设置源事件总线,并向目标账户团队(团队 B 和 C)授予创建新规则和目标的权限。如果您想允许事件使用器(团队 B 和 C)自行创建新的传输规则,又不涉及集中式团队,那么这种方法可能非常合适。这种方法提供了更高的灵活性。但是,使用这种方法也需要考虑其他注意事项,例如所有团队都必须了解 EventBridge 规则和源账户的目标配额。

在集中式方法中,以下说明介绍如何设置目标为 SQS 队列的跨账户事件传输。您也可以对其他目标类型应用相同的设置办法,例如 Lambda 函数或 SNS 主题。为方便起见,本博客附带的示例项目涵盖多个传输目标。

有关概念性架构布局和资源创建顺序,请参阅下图:

设置跨账户事件传输分为三个步骤:

  1. 目标账户:创建传输目标,例如 SQS 队列。
  2. 源账户:为跨账户事件传输配置规则。将目标 SQS 队列 ARN 设置为规则目标,并附加有权限向目标 SQS 队列发送消息的执行角色。
  3. 目标账户:对目标 SQS 队列应用访问策略,允许源事件总线执行角色发送事件。

示例项目

示例项目展示了这项新功能。您将使用源账户中的事件总线将事件直接发送到目标账户中的 SQS 队列、Lambda 函数和 SNS 主题。按照 GitHub 存储库中的说明,使用 Amazon CloudFormationAmazon Serverless Application Model(Amazon SAM)在您的亚马逊云科技账户中预置示例。必须拥有两个账户,示例才能正常运行。

请确保输入有效的电子邮件地址作为 SnsSubscriptionEmail 值,并在部署了目标堆栈后确认已进行电子邮件订阅。

部署后,在源账户中打开 EventBridge 控制台。导航到新创建的事件总线,其名称中包含“SourceEventBus”。使用发送事件功能发布示例事件,如以下屏幕截图所示。确保将事件来源已设置为“测试”。

接下来,验证事件是否已成功传输到全部三个跨账户目标。为此,请在其他浏览器或隐身窗口中打开目标账户:

  1. 导航到 SQS 控制台。打开新创建的队列,其名称中包含“TargetSqsQueue”。
  2. 选择“发送和接收消息”,然后选择“轮询消息”。您可以看到在上一步中发送的事件。
  3. 导航到 Amazon CloudWatch Logs。打开新创建的 Lambda 函数的日志组,其名称中包含“TargetLambdaFunction”。其中显示在上一步中发送的事件。
  4. 查看电子邮件。如果您在示例代码部署期间确认了 SNS 主题订阅,电子邮件将显示在上一步中发送的事件。

总结

EventBridge 新功能可帮助您跨账户边界直接向目标传输事件。此功能减少了将事件从事件总线传输到目标的过程中用于处理事件的组件数量,因此可帮助您简化事件驱动型架构并降低延迟。

跨账户事件传输不会产生额外的费用。如需了解更多信息,请参阅 EventBridge 定价页面

如需查看其他文档,请参阅 Amazon EventBridge 文档。 从 GitHub 存储库获取本博客中使用的示例代码。