如何创建跨AWS账户触发Lambda/Step Function的EventBridge规则?
跨账户EventBridge触发Lambda与Step Function解决方案
一、账户A的EventBridge触发账户B的Lambda
Lambda的资源权限仅能在账户B中配置,操作步骤如下:
- 给目标Lambda添加基于资源的权限策略,允许账户A的EventBridge规则触发它:
用AWS CLI执行(替换占位符为实际信息):
或者在Lambda控制台「配置」→「权限」→「基于资源的策略」中手动添加,核心逻辑是:允许aws lambda add-permission \ --function-name "arn:aws:lambda:<区域>:<账户BID>:function:<Lambda函数名>" \ --statement-id "AllowEventBridgeAccountATrigger" \ --action "lambda:InvokeFunction" \ --principal "events.amazonaws.com" \ --source-arn "arn:aws:events:<区域>:<账户AID>:rule:<账户A的EventBridge规则名>"events.amazonaws.com作为主体,限定来源为账户A的EventBridge规则ARN,授权动作lambda:InvokeFunction。 - 完成后,在账户A创建EventBridge规则时,直接将目标设为账户B的Lambda ARN即可,无需额外在账户A配置权限。
二、账户A的EventBridge触发账户B的Step Function
需同时配置账户B的IAM角色与账户A的规则权限,修正之前的错误配置:
1. 账户B侧配置
创建一个IAM角色,用于授权EventBridge触发Step Function:
- 信任策略:允许账户A的EventBridge服务假定该角色(可通过SourceArn限定仅目标规则触发):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:events:<区域>:<账户AID>:rule:<账户A的EventBridge规则名>" } } } ] } - 权限策略:授予该角色启动Step Function的权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "states:StartExecution", "Resource": "arn:aws:states:<区域>:<账户BID>:stateMachine:<Step Function状态机名>" } ] }
2. 账户A侧配置
- 创建一个IAM角色,用于账户A的EventBridge规则扮演账户B的上述角色:
权限策略示例:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::<账户BID>:role:<账户B中创建的角色名>" } ] } - 创建EventBridge规则时,目标选择「Step Functions 状态机」,勾选「跨账户」并输入账户B的Step Function ARN;在「执行角色」处选择刚才在账户A创建的IAM角色,而非账户B的角色。
内容的提问来源于stack exchange,提问作者I.H
相关产品推荐
相关产品推荐

