【发布时间】:2021-08-10 15:19:00
【问题描述】:
我正在尝试设置 SQS 队列的策略以允许 SNS 主题发送消息。
我正在使用这个命令
policy=$(getPolicy $queueArn $topicArn)
echo $policy
aws sqs set-queue-attributes --queue-url $queueUrl --attributes "{\"Policy\":${policy}}"
getPolicy 函数构建策略文档
function getPolicy() {
queueArn=$1
topicArn=$2
policy="{\"Version\":\"2012-10-17\",\"Id\":\"policy12345\",\"Statement\":[{\"Sid\":\"stmt12345\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::${account}:root\"},\"Action\":\"SQS:*\",\"Resource\":\"${queueArn}\"},{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"sns.amazonaws.com\"},\"Action\":\"sqs:SendMessage\",\"Resource\":\"${queueArn}\",\"Condition\":{\"ArnEquals\":{\"aws:SourceArn\":\"${topicArn}\"}}}]}"
echo $policy
}
我的参数验证失败。参数 Attributes.Policy 的类型无效。
正在生成的政策已转义,似乎是有效的政策声明。
这是将 json 作为参数传递给 --attributes 参数。
如果我将其切换为使用简写语法 -
aws sqs set-queue-attributes --queue-url $queueUrl --attributes Policy=${policy}
我得到一个不同的错误:
【问题讨论】:
-
您能否将政策单引号括起来,这样可以避免转义双引号?我知道在我的带有 zsh 的 Mac 上,它更喜欢用单引号括起来的参数。如果做不到这一点,您能否将
echo放在set-queue-attributes行的前面并向我们展示发送到AWS 的命令的全文,以便我们尝试重现您的情况? -
我明白了。你在单引号和双引号中发现了。我已经在双引号内转义了 json,所以我的变量会被扩展。结果 bash 也转义了双引号内的项目,但单引号保留了字符串。我会发布答案解释它。
标签: amazon-web-services aws-cli amazon-sqs