跨账号SNS触发Lambda时CloudFormation部署报403 Authorizationerror错误
跨账号SNS触发Lambda 403授权错误解决方案
你遇到的报错如下:
The account A is not the owner of Endpoint ARNof-lambda-in-accountB (Service: AmazonSNS,Status Code: 403,ErrorCode: Authorizationerror)
按以下优先级排查修复:
1. 修正SNS订阅的创建主体
- 这是该报错最常见的触发原因:AWS要求SNS订阅必须由端点所有者发起创建,不能由SNS topic的所有者跨账号为其他账号的端点创建订阅。如果你当前是在账号A的CloudFormation栈中定义了
AWS::SNS::Subscription资源指向账号B的Lambda,就会触发这个错误。 - 修复方案:将
AWS::SNS::Subscription资源的定义迁移到账号B的CloudFormation栈中,由账号B的部署身份发起订阅请求到账号A的SNS topic。
2. 校验Lambda资源策略配置
即使你已经添加了SNS触发,也要确认Lambda的资源策略配置符合最小权限要求,必须精确关联到账号A的SNS topic ARN,参考配置如下:
{ "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "<账号B的Lambda ARN>", "Condition": { "ArnEquals": { "AWS:SourceArn": "<账号A的SNS Topic ARN>" } } }
3. 校验SNS Topic访问策略配置
确认账号A的SNS Topic策略中,明确授予账号B的部署身份sns:Subscribe权限,参考配置如下:
{ "Effect": "Allow", "Principal": { "AWS": "<账号B的账号ID/CloudFormation部署角色ARN>" }, "Action": "sns:Subscribe", "Resource": "<账号A的SNS Topic ARN>", "Condition": { "ArnEquals": { "sns:Endpoint": "<账号B的Lambda ARN>" } } }
4. 配置验证
调整完成后可先在账号B的Lambda控制台手动添加账号A的SNS作为触发器,验证链路连通后再同步更新CloudFormation模板,降低部署试错成本。
内容的提问来源于stack exchange,提问作者AWS_Lernar
相关产品推荐
相关产品推荐

