Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 Terraform中的S3策略格式错误_Amazon S3_Terraform_Terraform Provider Aws - Fatal编程技术网

Amazon s3 Terraform中的S3策略格式错误

Amazon s3 Terraform中的S3策略格式错误,amazon-s3,terraform,terraform-provider-aws,Amazon S3,Terraform,Terraform Provider Aws,看起来我在Terraform部署中得到了一个格式不正确的策略,并且在查看时没有发现任何问题,所有的原则似乎都已到位,没有任何异常。有人能找出为什么这项政策被认为是不正确的吗 这是正在抛出的TF输出 module.s3-bucket.aws_s3_bucket_policy.bucket_policy: Creating... bucket: "" => "the_s3_bucket" policy: "" => "{\n \"Version\":\"2012-10-17\"

看起来我在Terraform部署中得到了一个格式不正确的策略,并且在查看时没有发现任何问题,所有的
原则似乎都已到位,没有任何异常。有人能找出为什么这项政策被认为是不正确的吗

这是正在抛出的TF输出

module.s3-bucket.aws_s3_bucket_policy.bucket_policy: Creating...
  bucket: "" => "the_s3_bucket"
  policy: "" => "{\n  \"Version\":\"2012-10-17\",\n    \"Statement\":[{\n      \"Principal\": \"*\",\n      \"Action\":[\n        \"s3:GetBucketLocation\",\n        \"s3:ListAllMyBuckets\"\n      ],\n        \"Resource\":[\n          \"arn:aws:s3:::*\"\n      ],\n    \"Effect\":\"Allow\"\n  }, {\n    \"Principal\": \"*\",\n    \"Action\":[\n      \"s3:ListBucket\",\n      \"s3:ListBucketMultipartUploads\"\n    ],\n    \"Resource\":[\n      \"arn:aws:s3:::the_s3_bucket\"\n    ],\n    \"Effect\":\"Allow\"\n    }, {\n      \"Principal\": \"*\",\n    \"Action\":[\n      \"s3:GetObject\",\n      \"s3:AbortMultipartUpload\",\n      \"s3:ListMultipartUploadParts\",\n      \"s3:DeleteObject\",\n      \"s3:PutObject\",\n      \"s3:GetObjectAcl\",\n      \"s3:PutObjectAcl\"\n    ],\n    \"Resource\":[\n      \"arn:aws:s3:::the_s3_bucket/*\"\n    ],\n    \"Effect\":\"Allow\"\n  }]\n}\n"
(非详细)错误:

Error applying plan:

1 error(s) occurred:

* module.s3-bucket.aws_s3_bucket_policy.bucket_policy: 1 error(s) occurred:

* aws_s3_bucket_policy.bucket_policy: Error putting S3 policy: MalformedPolicy: Policy has invalid action
    status code: 400, request id: DCAEB510D9FE431C, host id: FwZ187PM8RKZljAZGo1578UvsgW3kwtZpaI2Mom46lu7Jr+NV9Jum8txjsfwdJw0jm9ct0awRWk=
这是一张关于它所包含内容的精美印刷品

{
  "Version":"2012-10-17",
    "Statement":[{
      "Principal": "*",
      "Action":[
        "s3:GetBucketLocation",
        "s3:ListAllMyBuckets"
      ],
        "Resource":[
          "arn:aws:s3:::*"
      ],
    "Effect":"Allow"
  }, {
    "Principal": "*",
    "Action":[
      "s3:ListBucket",
      "s3:ListBucketMultipartUploads"
    ],
    "Resource":[
      "arn:aws:s3:::the_s3_bucket"
    ],
    "Effect":"Allow"
    }, {
      "Principal": "*",
    "Action":[
      "s3:GetObject",
      "s3:AbortMultipartUpload",
      "s3:ListMultipartUploadParts",
      "s3:DeleteObject",
      "s3:PutObject",
      "s3:GetObjectAcl",
      "s3:PutObjectAcl"
    ],
    "Resource":[
      "arn:aws:s3:::the_s3_bucket/*"
    ],
    "Effect":"Allow"
  }]
}
更新

很明显,这与
Principal
字段有关,通过AWS控制台运行后,我得到了错误

This policy contains the following error: Has prohibited field Principal For more information about the IAM policy grammar, see AWS IAM Policies 

s3:listallymybucket
权限不能应用于s3 bucket策略,而是IAM策略权限。您还必须在bucket策略中直接指定策略附加到的bucket,而不是使用
“Resource”:[“*”]
或bucket的其他通配符

IAM策略和S3桶策略密切相关且重叠严重,但应将它们视为另一级别的控制,有时可能是必要的。不幸的是,S3权限模型非常混乱,有多个添加访问控制的层,从和对象ACL(包括完全可配置的和封装的ACL)添加到IAM用户或角色,也直接连接到IAM用户或角色


大多数情况下,您最好使用,然后使用IAM用户策略来控制谁可以执行ACL不允许的额外操作。在.

中有关于这些的进一步解释。

中有
主体
是否有效?我倾向于发现在这里使用IAM策略编辑器很有帮助-如果您将上面的内容粘贴到其中,它将有助于跟踪错误。此外,您可以使用第一个选项卡构建策略,然后切换到json选项卡将其复制到Terraform中使用。
Principal
适用于bucket策略,但不适用于IAM策略(除了假定角色策略…叹气…)。您应该使用实际的bucket策略编辑器进行测试,而不是使用类似语法但实际上不同的密切相关的IAM策略编辑器。