如何解决AWS 通过 Cloudwatch 事件总线调用跨账户 lambda
我在多个账户中部署了一个 AWS lambda 函数。我正在寻找一种方法来安排通过 Cloudwatch 事件总线从主帐户触发这些 lambda 函数。这可能吗?
解决方法
请参考 AWS 提供的以下选项和相关文档;
- 使用 CloudWatchEvents:
一个。 Sending and Receiving Events Between AWS Accounts
B. Cross-Account Delivery of CloudWatch Events
或
- 使用 Amazon EventBridge:
一个。 Simplifying cross-account access with Amazon EventBridge
B. Sending and recieving Amazon EventBridge events between AWS accounts
,根据@amitd 的建议,您需要实现这样的东西(使用 EventBridge 、EventBus)。
要配置跨账户事件桥通信,需要完成以下工作。我提供了示例事件和过滤器,您可以根据需要替换事件和过滤器。
要对帐户 B 执行的步骤:收款人帐户
- 创建一个名为 event-bus-b 的事件总线。放置基于资源的策略,如下所示。
{
"Version": "2012-10-17","Statement": [{
"Sid": "WebStoreCrossAccountPublish","Effect": "Allow","Principal": {
"AWS": "arn:aws:iam::<account-A>:root"
},"Action": "events:PutEvents","Resource": "arn:aws:events:<your-region>:<Account-B>:event-bus/event-bus-b"
}]
}
-
在账户 B 中创建一个规则,我们称之为 eb-rule-b。在此规则中选择 event-bus-b 作为源事件总线。
-
提供以下事件过滤器模式:
事件模式:
{
"detail-type": [
"uoe"
],"source": [
"somesource"
]
}
另外,使用测试事件测试模式。
测试事件:
{
"version": "0","id": "55fghj-89a9-a0b3-1ccb-79c25c7d6cd2","detail-type": "uoe","source": "somesource","account": "<ACCOUNT_ID>","time": "2020-04-24T13:53:21Z","region": "<YOUR_REGION>","resources": [],"detail": {
"userOrg" : "OrgName"
}
}
-
在下拉列表中选择事件总线 event-bus-b。
-
选择目标“Lambda”
-
将您创建的事件总线的 ARN 放入账户 B。
arn:aws:lambda:<your-region>:<AccountB>:function:<AccountBLambda>
-
同时选中“为此特定资源创建新角色”复选框。这将在账户 A 中创建一个启用 lambda 执行的角色。
-
点击创建并创建规则。
-
现在点击事件总线 event-bus-a 并点击发送事件按钮。
-
发送一个如下所示的虚拟事件,并验证事件总线和账户 B 中的 lambda 之间的通信一切正常。
-
如果您在此管道中遇到一些问题,请参阅:https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-troubleshooting.html#eb-lam-function-not-invoked
-
一旦我们在帐户 B 中表现良好(即我们能够通过在事件总线上发送事件来调用 lambda,请按照相同的步骤配置其他帐户。
要对帐户 A 执行的步骤:发件人帐户
-
在账户 A 中创建一个事件总线 event-bus-a。
-
在账户 A 中创建一个规则 eb-rule-a,其中包含以下详细信息:
事件模式:
{
"detail-type": [
"uoe"
],"detail": {
"userOrg" : "OrgName"
}
}
-
在下拉列表中选择事件总线 event-bus-a。
-
选择目标“不同账号或地区的事件总线”
-
将您创建的事件总线的 ARN 放入账户 B。
arn:aws:events:<your-region>:<Account-B>:event-bus/event-bus-b
- 同时选中“为此特定资源创建新角色”复选框。这将在账户 A 中创建一个角色,使账户 A 中的用户能够在账户 b 事件总线上发布。以下政策是自动创建的,您无需执行任何操作。
{
"Version": "2012-10-17","Statement": [
{
"Effect": "Allow","Action": [
"events:PutEvents"
],"Resource": [
arn:aws:events:<your-region>:<Account-B>:event-bus/event-bus-b
]
}
]
}
-
点击创建并创建规则。
-
现在点击事件总线 event-bus-a 并点击发送事件按钮。
-
提供详细信息并点击发送。
示例事件:
{
"version": "0","detail": {
"userOrg" : "OrgName"
}
}
-
事件将传播到帐户 B 中定义的事件总线。
-
对所有其他帐户重复步骤 4-10(即在同一规则中创建多个目标)。
-
在帐户 A 中配置单个事件后,将传播到多个帐户,您将实现必要的扇形。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。