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

GitLab中Terraform敏感值加密方案咨询(Azure KeyVault场景)

问题场景与需求
  • 操作流程:
    1. 本地编写Terraform代码
    2. 将代码推送到GitLab
    3. GitLab流水线自动执行terraform init、terraform plan,手动触发terraform apply
  • 核心问题:需要将敏感值存入Azure KeyVault,但Terraform代码中的value字段不能以明文形式提交到GitLab。尝试用git-crypt加密敏感文件后,Terraform会将加密后的密文直接存入KeyVault,而非原始敏感值,寻求可行解决方案。
  • 当前使用的Terraform代码:
resource "azurerm_key_vault_secret" "example" {
  name         = "secret-sauce"
  value        = "szechuan"
  key_vault_id = azurerm_key_vault.example.id
}
可行解决方案

方案1:GitLab CI/CD变量传递敏感值

  • 在GitLab项目的设置 → CI/CD → 变量中添加敏感变量(如SECRET_SAUCE),勾选「保护变量」和「掩码变量」,防止明文泄露。
  • 修改Terraform代码,通过变量接收值:
resource "azurerm_key_vault_secret" "example" {
  name         = "secret-sauce"
  value        = var.secret_sauce
  key_vault_id = azurerm_key_vault.example.id
}

variable "secret_sauce" {
  type        = string
  sensitive   = true
  description = "敏感值,由GitLab CI/CD变量传入"
}
  • 在.gitlab-ci.yml的apply阶段传递变量:
apply:
  stage: apply
  script:
    - terraform init
    - terraform apply -auto-approve -var "secret_sauce=$SECRET_SAUCE"
  when: manual

方案2:Terraform Cloud/Enterprise敏感变量(若使用该服务)

如果团队在用Terraform Cloud或Enterprise,直接在工作区添加敏感变量,Terraform会自动读取,无需在代码或流水线中暴露明文。代码只需保留上述的变量定义即可。

方案3:Azure KeyVault数据源读取(提前存入敏感值)

  • 先通过安全渠道(如Azure Portal、Azure CLI)将敏感值存入目标KeyVault。
  • Terraform通过数据源读取该值,再写入新的机密(适合同步/复制场景):
data "azurerm_key_vault_secret" "existing_secret" {
  name         = "pre-stored-secret"
  key_vault_id = azurerm_key_vault.example.id
}

resource "azurerm_key_vault_secret" "example" {
  name         = "secret-sauce"
  value        = data.azurerm_key_vault_secret.existing_secret.value
  key_vault_id = azurerm_key_vault.example.id
}

需确保Terraform服务主体有读取目标KeyVault的权限。

方案4:SOPS加密敏感变量文件

  • 使用SOPS工具加密敏感变量文件(如secrets.tfvars),加密后的文件可安全提交GitLab。建议配置SOPS用Azure KeyVault作为加密密钥。
  • 在GitLab流水线中先解密文件,再执行Terraform命令:
plan:
  stage: plan
  script:
    - terraform init
    - sops -d secrets.tfvars > decrypted.tfvars
    - terraform plan -var-file=decrypted.tfvars

apply:
  stage: apply
  script:
    - terraform init
    - sops -d secrets.tfvars > decrypted.tfvars
    - terraform apply -auto-approve -var-file=decrypted.tfvars
  when: manual
  • Terraform代码同样通过变量读取值,参考方案1的变量定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:51:19