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

执行Terraform Apply时Azure Key Vault访问策略仅单主体生效问题

问题原因

执行terraform apply时,azurerm_client_config.current.object_id返回的是当前执行操作的身份ID:

  • 流水线运行时,返回值为流水线服务主体ID,对应azurerm_key_vault_access_policy.client策略绑定的是服务主体,开发人员AD用户没有对应访问策略
  • 本地命令行运行时,返回值为当前登录的租户AD用户ID,对应策略绑定的是本地用户,如果你没有固定配置流水线服务主体的访问策略,就会出现仅AD用户有权限的问题
修复方案

步骤1:固定开发人员身份的访问策略

不要动态取当前执行身份的ID配置开发人员权限,直接绑定开发人员对应的AD用户/AD用户组的固定object ID,可通过变量传入避免硬编码:

# 新增变量存储开发团队AD组ID
variable "dev_team_ad_object_id" {
  type        = string
  description = "开发团队AD用户/用户组的固定object ID"
}

替换原有azurerm_key_vault_access_policy.client的object_id取值:

resource "azurerm_key_vault_access_policy" "dev_team" {
  key_vault_id        = azurerm_key_vault.nscsecrets.id
  tenant_id           = data.azurerm_client_config.current.tenant_id
  object_id           = var.dev_team_ad_object_id # 替换原有动态取值逻辑
  secret_permissions  = ["Backup", "Delete", "Get", "List", "Purge", "Recover", "Restore", "Set"]
  key_permissions     = ["Backup", "Create", "Decrypt", "Delete", "Encrypt", "Get", "Import", "List", "Purge", "Recover", "Restore", "Sign", "UnwrapKey", "Update", "Verify", "WrapKey"]
  storage_permissions = ["Backup", "Delete", "DeleteSAS", "Get", "GetSAS", "List", "ListSAS", "Purge", "Recover", "RegenerateKey", "Restore", "Set", "SetSAS", "Update"]
}

步骤2:确认流水线服务主体策略配置正确

检查data.azuread_service_principal.current的object_id字段填写的是流水线服务主体的真实固定object ID,不要留占位符VALUE,该策略固定绑定流水线服务主体,不受执行身份影响。

步骤3:验证生效逻辑

调整后无论通过流水线还是本地执行terraform apply,都会同时保留开发团队、流水线服务主体、网站应用、日志存储账号四类访问策略,不会出现互相覆盖的问题。

注意事项

不要在azurerm_key_vault资源内部定义access_policy块,该配置会覆盖所有单独创建的azurerm_key_vault_access_policy资源,导致策略缺失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:36:04