Amazon s3 Terraform中的S3策略格式错误
看起来我在Terraform部署中得到了一个格式不正确的策略,并且在查看时没有发现任何问题,所有的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\"
原则似乎都已到位,没有任何异常。有人能找出为什么这项政策被认为是不正确的吗
这是正在抛出的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策略编辑器。