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

Terraform dynamic块for_each如何按条件设置S3加密sse_algorithm值

Terraform 动态配置S3服务端加密实现方案

你当前的写法是仅当加密模式为SSE-KMS时才渲染整个服务端加密配置块,条件不满足时直接不生成对应配置,无法覆盖AES256加密的场景。按需求动态设置sse_algorithm可以参考以下两种实现方式,根据实际场景选择即可。


方案1:始终显式配置加密规则(生产推荐)

S3桶的服务端加密配置块不需要做条件动态生成——无论使用KMS还是AES256加密,都需要该配置块存在。直接在块内部通过三元表达式控制参数取值即可,注意AES256模式下不需要传入kms_master_key_id,赋值为null时Terraform会自动忽略该参数,不会触发API校验报错。

server_side_encryption_configuration {
  rule {
    apply_server_side_encryption_by_default {
      // 按条件动态赋值加密算法
      sse_algorithm = local.encryption == "SSE-KMS" ? "aws:kms" : "AES256"
      // 仅KMS模式下传入自定义KMS密钥ID
      kms_master_key_id = local.encryption == "SSE-KMS" ? local.kmsKey : null
    }
  }
}

方案2:通过dynamic块分支渲染配置

如果你需要沿用dynamic块的写法,通过两个互斥的dynamic块分别渲染两种加密场景的配置即可,两个块的for_each条件互斥,同一时间只会渲染其中一个:

// KMS加密分支
dynamic "server_side_encryption_configuration" {
  for_each = local.encryption == "SSE-KMS" ? [true] : []
  content {
    rule {
      apply_server_side_encryption_by_default {
        sse_algorithm = "aws:kms"
        kms_master_key_id = local.kmsKey
      }
    }
  }
}

// AES256加密分支
dynamic "server_side_encryption_configuration" {
  for_each = local.encryption != "SSE-KMS" ? [true] : []
  content {
    rule {
      apply_server_side_encryption_by_default {
        sse_algorithm = "AES256"
      }
    }
  }
}

内容的提问来源于stack exchange,提问作者thulasi39

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:42:09