Json 创建IAM策略时出现格式错误的策略文档错误

Json 创建IAM策略时出现格式错误的策略文档错误,json,shell,amazon-web-services,amazon-cloudformation,amazon-iam,Json,Shell,Amazon Web Services,Amazon Cloudformation,Amazon Iam,我正试图通过AWS CLI创建托管策略: POLICY=' { "Version":"2012-10-17", "Statement": [{ "Effect":"Allow", "Action": [ "cloudformation:*" ], "Resource":"*" }, { "Effect":"Deny", "Action": [ "cloudformation:UpdateS

我正试图通过
AWS CLI
创建托管策略:

POLICY='
{
  "Version":"2012-10-17",
  "Statement":
  [{
    "Effect":"Allow",
    "Action":
    [
      "cloudformation:*"
    ],
    "Resource":"*"
  },
  {
    "Effect":"Deny",
    "Action":
    [
      "cloudformation:UpdateStack",
      "cloudformation:DeleteStack"
    ],
    "Resource": "'${arn}'"
  }]
}'

# Create policy if not already created
[ $(aws iam list-policies | grep -ce CloudFormation-policy-${StackName}) -eq 0 ] && (aws iam create-policy --policy-name CloudFormation-policy-${StackName} --policy-document "'${POLICY}'")
运行脚本时,出现以下错误:

An error occurred (MalformedPolicyDocument) when calling the CreatePolicy operation: Syntax errors in policy.
我想不出错误在哪里。
有什么想法吗?

每个操作系统都有自己的处理单引号转义与双引号转义的方法,并根据:

当传入大数据块时,您可能会发现保存起来更容易 将JSON转换为一个文件,并从命令行引用它。JSON数据 在文件中更易于阅读、编辑和与他人共享


传递Json数据时,这种方法可能不是最佳选择,请改用。

是否尝试从CLI运行此方法?您是否在AWS控制台中对此进行了验证?我猜这个问题是由于单引号和双引号引起的。是的,它来自CLI。当我执行
echo“${POLICY}”时
我以简单的引号获取json,您的CLI在哪个操作系统上运行?Windows、Linux或Mac?Linux ubuntu 16在您花费任何时间进行调试之前,如果您可以访问AWS控制台,我建议您尝试创建一个策略,并确保它通过了验证,确认json是正确的。一旦JSON验证完成,对于命令行JSON参数,我建议使用这种方法(文件中的参数)