我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
为 Amazon EventBridge 事件总线引入跨账户目标
本文由无服务器首席解决方案架构师安东·亚历山德罗夫和无服务器高级解决方案架构师亚历山大·弗拉基米罗夫撰写
今天,Amazon EventBridge 宣布支持事件总线的跨账户目标。这项新功能允许您直接向位于其他账户中的目标发送事件,例如 Amazon Simple Queue Service(Amazon SQS)、Amazon Lambda 和 Amazon Simple Notification Service(Amazon SNS)。
以前,EventBridge 支持跨账户事件从一个账户中的事件总线传输到另一个账户的事件总线。此次发布扩展了该功能,允许您将源事件总线配置为将事件直接传送到其他账户中支持的所有 EventBridge 目标,而不仅仅是事件总线。这样就无需在目标账户中添加额外的事件总线。
概述
使用 EventBridge 构建的事件驱动架构允许您创建跨公司许多部门和业务领域的解决方案,同时保持异步和松散耦合。随着解决方案的发展,您可能需要跨账户边界发送事件。
例如,您可能在多个账户中托管了一组事件总线,这些总线正在将与安全相关的事件分发到托管在集中式账户中的 Amazon SQS 队列中,以进行进一步的异步处理和分析。
以前,EventBridge 规则允许您在同一个账号中定义目标。支持跨账户事件传送的唯一目标类型是另一个事件总线。如果您想跨账户边界发送事件,则必须在源账户和目标账户中创建事件总线。之后,您将在源事件总线上配置一条规则以将事件发送到目标总线,并在目标事件总线上配置另一条规则,将事件传送到目标账户中的所需目标。或者,可以使用 Lambda 函数或 SNS 主题作为跨账户发送事件的桥接机制。
下图说明了新功能推出之前的跨账户事件交付架构是什么样子。需要一个"桥接"组件,例如另一个事件总线、SNS 主题或 Lambda 函数,才能将事件从一个账户发送到另一个账户。

图 1:将跨账户事件从源总线传送到目标总线
借助这项新的 EventBridge 功能,您可以将事件从源事件总线直接传送到不同账户中的所需目标。这简化了架构和权限模型。它还可以减少从源到目标的路径上处理事件的组件,从而减少事件驱动解决方案的延迟。

图 2:直接向目标交付跨账户事件
为跨账户事件交付配置 EventBridge 传送规则目标
启用跨账户事件交付时应考虑到安全性。你必须在来源和目标之间建立相互信任。源事件总线规则必须具有 Amazon Identity and Access Management (IAM) 角色,允许它们向特定目标发送事件。这是通过向交付规则目标附加执行角色来实现的。
托管在不同账户中的事件交付目标必须附加资源访问策略,明确允许从源账户中使用的执行角色接收事件。由于此要求,您只能为支持资源访问策略的目标启用跨账户事件传输,例如 Amazon SQS 队列、Amazon SNS 主题和 Amazon Lambda 函数。
在源账户中同时具有 IAM 角色和在目标账户中使用资源策略,您可以精细控制允许哪些委托人使用 PuteEvents 操作以及在哪些条件下使用 PuteVents 操作。您可以定义服务控制策略 (SCP) 来设置组织边界,确定谁可以在您的组织中发送和接收事件。
如下图所示,假设团队 A 拥有来源账户(账户 A)。团队 A 负责设置源事件总线、其执行角色、规则和目标。团队 B 和 C 拥有目标账户(相应地是账户 B 和账户 C)。两支队伍都管理各自的目标账户。例如,创建 SQS 队列等交付目标,并授予在源账户中接受来自事件总线的事件的权限。这种方法使团队 A 能够管理其他团队的集中源事件总线,而团队 B 和 C 可以控制谁可以向目标发送事件。它提供了高度的整体控制和治理。

图 3:跨团队协作将事件从源账户发送到目标账户目标
以下示例介绍如何设置向 SQS 队列传送跨账户事件。您也可以将相同的技术应用于其他目标类型,例如 Lambda 函数或 SNS 主题。
有关概念性架构布局和资源创建顺序,请参阅下图。

图 4:跨账户事件交付所需的权限
假设源事件总线已经存在,则设置跨账户事件交付需要三个一般步骤:
- 目标账户 — 创建交付目标,例如 SQS 队列。
- 源账户 — 为跨账户事件传送配置规则。将目标 SQS 队列 ARN 设置为规则目标,并附加具有向目标 SQS 队列发送消息权限的执行角色。
- 目标帐户 — 对目标 SQS 队列应用资源策略,允许源事件总线执行角色发送事件。
显示跨账户配送的实际情况
按照此 GitHub 存储库中的说明使用 Amazon Serverless Application Model (Amazon SAM) 在亚马逊云科技账户中预置示例。源账户中的事件总线规则将事件直接发送到目标账户中的 SQS 队列、Lambda 函数和 SNS 主题。必须有两个帐户才能使样本生效。

图 5:示例项目架构,跨账户向 Lambda、SQS 和 SNS 交付事件。
确保输入有效的电子邮件地址作为 SNSsubscriptionEmail 值,并在部署目标堆栈后确认您的电子邮件订阅。
部署后,在源账号中打开 EventBridge 控制台。导航到新创建的事件总线,其名称中包含"SourceEventBus"。使用"发送事件"功能发布示例事件,如以下屏幕截图所示。确保将事件来源设置为"测试"。

图 6:发送测试事件
验证事件是否成功传送到所有三个跨账户目标。在其他浏览器或隐身窗口中打开目标账户:
- 导航到 SQS 控制台。打开新创建的队列,该队列的名称中包含"targetSQQueue"。
- 选择"发送和接收消息",然后选择"对邮件进行投票"。您可以看到在上一步中发送的事件。
图 7:使用 SQS 接收测试事件 - 导航到 Amazon CloudWatch Logs。打开新创建的 Lambda 函数的日志组,该函数的名称中包含"targetLambdaFunction"。它显示在上一步中发送的事件。
图 8:使用 Lambda 接收测试事件 - 查看您的电子邮件。如果您在示例代码部署期间确认了 SNS 主题订阅,则它会显示在上一步中发送的事件。
图 9:使用 SNS 接收测试事件
结论
新的 EventBridge 功能允许您跨账户边界直接向目标投放事件。此功能有助于简化事件驱动架构,并通过减少事件从事件总线传输到目的地时处理事件的组件数量来改善延迟。
请参阅 EventBridge 定价页面,了解有关跨账户活动配送费用的更多信息。
有关其他文档,请参阅 Amazon EventBridge 文档。从此 GitHub 存储库获取此博客中使用的示例代码。
如需更多无服务器学习资源,请访问 Serverless Land。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。