Terraform v0.11.0配置S3存储桶KMS加密时server_side_encryption_configuration不被识别
问题原因及解决方案
你遇到这个问题的核心原因是Terraform v0.11.0是一个非常老旧的版本(发布于2017年),它搭配的AWS Provider版本也相对早期,而server_side_encryption_configuration作为aws_s3_bucket资源的嵌套块,是在后续的AWS Provider版本中才引入的——在Terraform 0.11的生态里,S3桶的服务器端加密配置根本不是这么实现的。
而且你猜测的没错,报错和kms_master_key_id无关,问题本质是0.11不认识你写的这个嵌套块结构。
0.11中正确的S3加密配置方式
在Terraform 0.11和对应的早期AWS Provider版本中,你需要通过单独的资源来配置S3桶的加密,而不是把配置嵌套在aws_s3_bucket里。具体写法如下:
- 先定义你的S3桶资源:
resource "aws_s3_bucket" "my_bucket" { bucket = "your-unique-bucket-name" # 这里放桶的其他基础配置,比如版本控制、标签等 }
- 再创建独立的加密配置资源关联到这个桶:
resource "aws_s3_bucket_server_side_encryption_configuration" "my_bucket_encryption" { bucket = "${aws_s3_bucket.my_bucket.id}" rule { apply_server_side_encryption_by_default { # 替换成你的KMS密钥ARN或ID kms_master_key_id = "arn:aws:kms:us-east-1:123456789012:key/your-key-id" sse_algorithm = "aws:kms" # 如果你用S3托管密钥,这里写"AES256" } } }
额外建议
Terraform 0.11已经停止维护多年了,不仅缺少很多新功能,还可能存在未修复的安全漏洞。如果条件允许,强烈建议你升级到Terraform 1.x或更高版本(现在最新的是1.5+),同时搭配对应的AWS Provider版本,这样不仅能使用更简洁的嵌套块写法,还能获得更好的稳定性和安全性。
内容的提问来源于stack exchange,提问作者Todd
相关产品推荐
相关产品推荐

