Terraform S3模块问题:禁用加密时仍需传入kms_policy变量
解决Terraform S3模块中kms_policy变量必填问题
问题核心在于当前kms_policy变量被定义为必填的字符串类型,即使encrypt_s3_bucket设为false,Terraform的变量验证阶段仍会强制要求传入该值。
修复步骤
1. 修改variables.tf中的kms_policy变量定义
将变量设置为可选,允许为null,同时保留字符串类型约束:
variable "kms_policy" { type = string description = "KMS密钥策略,仅在启用S3加密时需要" default = null }
2. 保持KMS密钥资源的条件逻辑不变
原有的count和policy字段的条件判断无需修改,因为当encrypt_s3_bucket为false时,count会设为0,KMS资源不会创建,此时kms_policy的null值也不会被使用:
resource "aws_kms_key" "mykey" { count = var.encrypt_s3_bucket ? 1 : 0 description = "This key is used to encrypt bucket objects" deletion_window_in_days = 10 enable_key_rotation = false multi_region = false policy = var.encrypt_s3_bucket ? var.kms_policy : null }
这样修改后,当用户设置encrypt_s3_bucket = false时,无需传入kms_policy变量,Terraform验证阶段也不会报错;当需要启用加密时,再传入有效的KMS策略字符串即可。
内容的提问来源于stack exchange,提问作者rahuls_
相关产品推荐
相关产品推荐

