Terraform创建S3 Bucket Policy遇MalformedPolicy错误:资源无效
尝试通过Terraform的aws_s3_bucket_policy资源配置S3桶策略,但遇到MalformedPolicy错误提示资源无效。相关配置代码如下:
#Create a s3 bucket policy resource "aws_s3_bucket_policy" "jenkins-prj1-cloudstore-policy" { bucket = aws_s3_bucket.jenkins-prj1-cloudstore.id policy = <<POLICY { "Version": "2012-10-17", "Id": "Policy1704624583452", "Statement": [ { "Sid": "Stmt1704622653819", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::jenkins-prj01-s3bucket/", "arn:aws:s3:::jenkins-prj01-s3bucket/*" ] }, { "Sid": "PublicReadGetObject", "Action": "s3:GetObject", "Effect": "Allow", "Resource": [ "arn:aws:s3:::jenkins-prj01-s3bucket/", "arn:aws:s3:::jenkins-prj01-s3bucket/*" ] } ] } POLICY depends_on = [aws_s3_bucket_public_access_block.override_default_setting] }
具体错误信息:
Error: putting S3 Bucket (jenkins-prj01-s3bucket) Policy: operation error S3: PutBucketPolicy, https response error StatusCode: 400, RequestID: F5FDY6ABC5D3G4F5, HostID: NhyFijzzU5MIfFWDtiuN7hPGo5qCdQUI1PihUOlDUg2AuLrPXM/MlXjmnlASRPhmx6MsJABpsZw=, api error MalformedPolicy: Policy has invalid resource
with aws_s3_bucket_policy.jenkins-prj1-cloudstore-policy,
on Main.tf line 73, in resource "aws_s3_bucket_policy" "jenkins-prj1-cloudstore-policy":
73: resource "aws_s3_bucket_policy" "jenkins-prj1-cloudstore-policy" {
资源ARN格式错误:S3桶的ARN末尾不能带斜杠
/。配置里的"arn:aws:s3:::jenkins-prj01-s3bucket/"属于无效格式,正确的桶ARN应为"arn:aws:s3:::jenkins-prj01-s3bucket",对象ARN保持"arn:aws:s3:::jenkins-prj01-s3bucket/*"即可。第二个Statement缺少Principal字段:S3桶策略的每个
Statement必须明确指定Principal(被授权的实体),第二个授权语句遗漏了该字段,导致策略格式不合法。
内容的提问来源于stack exchange,提问作者Mohamed Inshaf

