You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 00:07:35