Terraform部署S3 Bucket ACL时遇MissingSecurityHeader错误求助
S3 Bucket Terraform配置报错排查
遇到的情况
我用下面的Terraform代码定义S3 Bucket:
module "bucket" { source = "terraform-aws-modules/s3-bucket/aws" version = "3.1.0" bucket = local.test-bucket-name acl = null grant = [{ type = "CanonicalUser" permission = "FULL_CONTROL" id = data.aws_canonical_user_id.current.id }, { type = "CanonicalUser" permission = "FULL_CONTROL" id = data.aws_cloudfront_log_delivery_canonical_user_id.cloudfront.id } ] object_ownership = "BucketOwnerPreferred" }
执行terraform apply时弹出错误:
Error: error updating S3 bucket ACL (logs,private): MissingSecurityHeader: Your request was missing a required header status code: 400
这个提示太模糊,想搞清楚是不是缺了什么请求头?
排查修复方向
别担心,这个错误不是你手动漏加请求头,是Terraform和AWS API交互时的权限或配置出了问题,按下面几个方向查:
- 检查AWS凭据权限:确保Terraform用的AWS凭据(不管是环境变量、本地配置文件还是IAM角色)有
s3:PutBucketAcl权限,而且凭据没过期、配置没写错。 - 调整ACL配置:你现在设了
acl = null,同时开了object_ownership = "BucketOwnerPreferred",再加上grant配置,可能和AWS的API逻辑冲突。试试把acl改成"private",显式指定基础ACL,配合grant更稳妥:acl = "private" - 升级模块版本:你用的
s3-bucket模块是3.1.0,版本比较老,可能存在和AWS API交互的bug,换成最新的稳定版试试(改一下version字段就行)。 - 确认数据源有效性:检查
data.aws_canonical_user_id.current.id和data.aws_cloudfront_log_delivery_canonical_user_id.cloudfront.id能不能正常拿到有效值,要是数据源为空,也会导致API请求出问题。
总结
这个错误本质是Terraform调用S3的PutBucketAcl接口时的身份验证或配置逻辑问题,不是手动漏了HTTP请求头,按上面的步骤排查就能解决。
内容的提问来源于stack exchange,提问作者jipot
相关产品推荐
相关产品推荐

