为什么此IAM策略存在语法错误?

时间:2020-04-27 23:48:37

标签: json amazon-web-services amazon-s3 amazon-iam

我是AWS的新手/学习者,目前使用LocalStack代替实时AWS

arn:aws:s3:::my-bucket/path/to/foo.json是指向新创建的S3存储桶中的对象的有效S3键。由于存储桶是新创建的并且是原始的(除了上传一个文件之外),因此无法从外部访问其中的任何文件。我正在尝试通过示例来学习创建{@ 1}}存储桶中的部分内容的策略,以了解IAM

我根据S3 CLI参考中的this example创建了以下策略文件:

AWS

在相同的链接示例中,我尝试使用此命令创建策略,但失败了:

$ cat ./policy
{
  "Version": "2020-04-27",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
          "s3:Get*",
          "s3:List*"
      ],
      "Resource": [
          "arn:aws:s3:::my-bucket/path/to/foo.json"
      ]
    }
  ]
}

此命令为什么失败,或者有什么方法可以获取更具描述性的错误消息?

({$ aws --endpoint-url=http://localhost:4593 iam create-policy --policy-name my-bucket-policy --policy-document file://policy An error occurred (MalformedPolicyDocument) when calling the CreatePolicy operation: Syntax errors in policy. policy中执行cwd CLI命令的文件)

根据我的阅读,错误消息表示JSON格式错误,但是类似https://jsonlint.com/的短绒表示文本是有效的JSON。此外,源示例中的更改很小,并且看起来很合理:aws更改为今天的日期,而"Version" "Resource"更改为与我相关的内容。

1 个答案:

答案 0 :(得分:3)

给出的版本不正确。应该是:“ 2012-10-17”

编辑:原则错误。看评论。对于基于资源的策略,原则是required

主体(仅在某些情况下需要)–如果您创建基于资源的策略,则必须指明要使用的帐户,用户,角色或联盟用户您想允许还是拒绝访问。如果要创建 IAM权限策略以附加到用户或角色,则不能包含该元素。委托人隐含为该用户或角色。