You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LocalStack中SQS队列添加SNS访问策略失败及账号ID疑问

问题描述

我需要允许SNS主题向SQS队列发送消息,按照AWS官方文档编写了如下JSON格式的访问策略文件:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "sns.amazonaws.com"
      },
      "Action": "sqs:SendMessage",
      "Resource": "arn:aws:sns:eu-central-1:000000000000:ses_events_topic"
    }
  ]
}

在LocalStack环境中执行以下AWS CLI命令添加该策略:

aws --endpoint-url=http://localhost:4566 sqs set-queue-attributes --queue-url http://localhost:4566/000000000000/ses_events_queue --attributes file://set_queue_attributes.json --profile test-profile --region eu-central-1 --output table | cat

得到错误:

An error occurred (InvalidAttributeName) when calling the SetQueueAttributes operation: Unknown Attribute Statement.

尝试不同键值均提示未知属性,怀疑该策略仅适用于AWS控制台,打算改用add-permission命令:

aws sqs add-permission --queue-url https://sqs.us-east-1.amazonaws.com/80398EXAMPLE/MyQueue --label SendMessagesFromMyQueue --aws-account-ids 12345EXAMPLE --actions SendMessage

但不清楚LocalStack环境下--aws-account-ids参数应填写什么值。

解决方案

1. 修正set-queue-attributes的策略文件

你遇到的错误是因为策略文件格式不正确:使用set-queue-attributes时,策略内容必须放在Policy这个属性键下,而非直接用Statement。同时要注意Resource必须是SQS队列的ARN,而非SNS主题的ARN,这是你之前的另一个错误。

修正后的set_queue_attributes.json内容如下:

{
  "Policy": "{\"Statement\": [{\"Effect\": \"Allow\", \"Principal\": {\"Service\": \"sns.amazonaws.com\"}, \"Action\": \"sqs:SendMessage\", \"Resource\": \"arn:aws:sqs:eu-central-1:000000000000:ses_events_queue\"}]}"
}

注意:Policy的值是经过字符串转义的JSON,确保CLI能正确解析。

重新执行原set-queue-attributes命令即可成功设置权限。

2. 关于add-permission命令的账号ID

如果坚持使用add-permission命令,LocalStack环境下默认的AWS账号ID是000000000000。但需要注意:add-permission命令无法直接指定服务主体(如sns.amazonaws.com),只能指定AWS账号ID,因此这种方式无法满足允许SNS服务向队列发消息的需求,更推荐使用第一种修正后的set-queue-attributes方法。

内容的提问来源于stack exchange,提问作者AlbertMunichMar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:01:39