跨AWS账号:Lambda向SQS发送消息失败求助
跨账号Lambda向SQS发消息报错排查方案
针对你遇到的The specified queue does not exist or you do not have access to it.错误,按以下步骤逐一排查:
1. 验证队列URL的准确性
- 检查
QueueUrl中的AWS_ACCOUNT_B_NUMBER是否为账号B的12位数字ID,不能包含任何多余字符; - 确认队列名称
TEST.fifo与账号B中实际创建的FIFO队列名称完全一致(SQS队列名称区分大小写,若实际队列名为test.fifo则会匹配失败); - 确保队列所在区域与Lambda代码中
SQSClient配置的ap-southeast-1一致,不同区域的SQS URL域名格式不同(例如us-east-1区域URL为https://sqs.us-east-1.amazonaws.com/...)。
2. 检查账号B的SQS访问策略
- 确认Principal中的ARN是否为账号A Lambda角色的完整正确ARN:
ARN格式应为arn:aws:iam::AWS_ACCOUNT_A_NUMBER:role/test-ap-southeast-1-lambdaRole,需核对账号ID、角色名无拼写错误; - 确保SQS的访问策略中没有其他拒绝(Deny)语句覆盖当前允许规则;
- 建议将策略中
Resource的*替换为目标队列的具体ARN(arn:aws:sqs:ap-southeast-1:AWS_ACCOUNT_B_NUMBER:TEST.fifo),避免潜在的权限范围问题; - 登录账号B的SQS控制台,查看目标队列的「访问策略」是否已正确添加该允许语句,无格式错误(如逗号、括号缺失)。
3. 确认账号A Lambda角色的IAM权限
- 检查Lambda关联的IAM角色是否包含针对账号B SQS的
sqs:SendMessage权限,正确的IAM策略示例如下:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:ap-southeast-1:AWS_ACCOUNT_B_NUMBER:TEST.fifo" } ] } - 若角色权限仅限制在账号A的资源范围内(比如Resource设为
arn:aws:sqs:ap-southeast-1:AWS_ACCOUNT_A_NUMBER:*),则会导致跨账号访问被拒绝。
4. 验证队列存在性与状态
- 登录账号B的AWS控制台,进入SQS服务,切换到
ap-southeast-1区域,确认TEST.fifo队列确实存在且状态为「可用」,未被删除或禁用。
5. 排查FIFO队列特殊配置(可选)
若上述排查完成后仍有问题,需确认:
- 若队列开启了「内容去重」,则无需指定
MessageDeduplicationId;若未开启,则必须在请求参数中添加该字段(否则会触发另一种错误,但可能间接影响权限校验)。
内容的提问来源于stack exchange,提问作者Dev1ce
相关产品推荐
相关产品推荐

