跨账号跨区域SNS触发Lambda无效问题排查求助
问题排查与缺失配置分析
你的Lambda函数未触发,核心是存在以下几个配置错误或缺失:
1. 代码笔误导致权限配置无效
代码最后一行的thirdBridgeTriggerHandler应为triggerHandler,这个错误会让你把SNS服务的调用权限给了错误的函数,而实际需要触发的triggerHandler并没有获得正确的SNS调用权限。
2. 跨账号跨区域SNS订阅未完成确认
仅在Lambda账号配置SnsEventSource不足以完成跨账号跨区域触发:
- 跨账号订阅需要对方账号(eu-west-1区域的SNS所属账号)给主题添加权限,允许你的Lambda账号创建订阅;或者直接由对方账号在SNS侧创建到你方Lambda的订阅
- 跨账号自动创建的订阅通常会处于
PendingConfirmation状态,必须完成确认后才能生效,要么手动在控制台确认,要么通过API完成
3. 跨区域调用的权限逻辑验证
跨区域SNS触发Lambda时,请求从eu-west-1的SNS服务发起,除了Lambda侧的权限,还要确保:
- 双方账号的IAM策略没有拦截跨区域的Lambda调用请求
- Lambda资源策略里的
sourceArn确实是对方SNS主题的正确ARN(你代码里这部分配置是对的,但要再次核对ARN是否有误)
修正后的关键代码片段
// 修正笔误,给目标函数添加正确权限 triggerHandler.addPermission("trigger-sns-service-permission", { action: "lambda:InvokeFunction", principal: new iam.ServicePrincipal("sns.amazonaws.com"), sourceArn: snsTopicArn, });
同时,需要联系对方账号管理员,在eu-west-1区域的SNS主题上添加如下权限(或直接由对方创建订阅):
{ "Version": "2008-10-17", "Id": "AllowCrossAccountSubscription", "Statement": [ { "Sid": "AllowYourAccountToSubscribe", "Effect": "Allow", "Principal": { "AWS": "你的Lambda账号ARN" }, "Action": "sns:Subscribe", "Resource": "对方SNS主题的ARN", "Condition": { "StringEquals": { "sns:Protocol": "lambda" } } } ] }
内容的提问来源于stack exchange,提问作者bmargulies
相关产品推荐
相关产品推荐

