【问题标题】:MalformedPolicyDocument error while creating an IAM Policy创建 IAM 策略时出现 MalformedPolicyDocument 错误
【发布时间】:2017-11-02 17:09:17
【问题描述】:

我正在尝试通过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.

我不知道错误在哪里。 有什么想法吗?

【问题讨论】:

  • 您是否尝试从 CLI 运行它?您是否在 AWS 控制台中验证了这一点?我的猜测是这个问题是由于单引号和双引号引起的。
  • 是的,它来自 CLI。当我做echo "'${POLICY}'" 时,我会用简单的引号得到 json
  • 您的 CLI 在哪个操作系统上运行? Windows、Linux 还是 Mac?
  • Linux ubuntu 16
  • 在您花时间进行调试之前,如果您可以访问 AWS 控制台,我建议您尝试使用它创建一个策略并确保它在那里通过验证,确认 json 是正确的。一旦 JSON 验证完成,对于命令行 json 参数,我建议使用这种方法(文件中的参数)docs.aws.amazon.com/cli/latest/userguide/…

标签: json shell amazon-web-services amazon-cloudformation amazon-iam


【解决方案1】:

每个操作系统都有自己的处理单引号和双引号转义的方式,并且按照AWS CLI documentation:

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

Quoting Strings 方法在传递 Json 数据时可能不是最佳选择,而是使用 Loading parameters from file approach。

【讨论】:

    猜你喜欢
    • 2017-07-27
    • 2017-11-26
    • 1970-01-01
    • 2021-10-16
    • 2020-11-30
    • 1970-01-01
    • 2021-09-26
    • 2021-05-13
    • 2018-08-25
    相关资源
    最近更新 更多