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

如何通过Terraform安全构建Azure Key Vault且不明文存储密钥

解决方案

以下两种方案均无需手动预先创建独立Key Vault,完全符合基础设施即代码的理念,不会出现密钥明文存储的问题:

方案一:Azure DevOps保密变量传递(最推荐,轻量无额外依赖)

  • 在Azure DevOps对应流水线的变量组/运行时变量中录入所有需要填充到Key Vault的敏感值,勾选保密选项,Azure DevOps会对这些值做加密存储,日志输出时自动掩码,不会明文泄露。
  • 在Terraform代码中定义敏感类型的变量接收密钥,示例如下:
# 定义存储密钥的敏感变量
variable "key_vault_secrets" {
  type        = map(string)
  sensitive   = true
  description = "Secrets to be stored in the target Key Vault"
}

# 创建Key Vault资源
resource "azurerm_key_vault" "target" {
  # 常规配置省略
}

# 填充密钥到Key Vault
resource "azurerm_key_vault_secret" "secrets" {
  for_each     = var.key_vault_secrets
  name         = each.key
  value        = each.value
  key_vault_id = azurerm_key_vault.target.id
}
  • 在流水线执行Terraform命令的阶段,通过TF_VAR_前缀的环境变量将Azure DevOps的保密变量传递给Terraform,不需要将密钥写入任何配置文件或提交到git。整个传递过程仅在流水线运行时的内存中生效,无明文落盘风险。

方案二:SOPS加密配置文件(适合多密钥、多环境批量管理场景)

如果确实需要将密钥配置文件存入源代码管理,可通过以下方式实现无需手动前置部署Key Vault:

  • 拆分Terraform部署为两个流水线阶段:第一阶段仅部署用于加密解密的根Key Vault,同时为Azure DevOps服务主体授予该根Key Vault的密钥加密/解密权限,该阶段完全自动化执行,不需要手动操作,符合IaC规范。
  • 用SOPS工具配合根Key Vault的加密密钥加密所有敏感配置文件,加密后的文件可直接签入git,无明文泄露风险。
  • 第二阶段部署业务用Key Vault时,流水线先通过Azure DevOps的服务身份自动解密配置文件,Terraform读取解密后的内容填充到业务Key Vault,解密内容仅在运行时内存中生效,不会持久化存储。

通用注意事项

无论采用哪种方案,都需要将Terraform状态文件存储在开启了服务端加密的Azure Blob Storage中,严格限制Blob的访问权限,避免状态文件中泄露敏感值。
Terraform代码中所有和密钥相关的变量、输出都要标记sensitive = true,避免相关值被打印到流水线日志中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:36:04