使用Terraform创建Azure Key Vault密钥时持续遭遇403权限错误
问题根源与解决方案
你的问题核心是Key Vault启用了Azure RBAC访问控制模式,但代码中仍在使用传统的Access Policy配置——这两种权限模式互斥,Access Policy在RBAC模式下完全不生效,导致你的Service Principal没有实际的密钥操作权限,触发403错误。
具体修正步骤
移除所有Access Policy相关配置:
- 删除
azurerm_key_vault中的access_policy块 - 删除独立的
azurerm_key_vault_access_policy资源
- 删除
添加RBAC角色分配:
给指定的Service Principal分配Key Vault Secrets Officer角色(该角色包含你需要的Get/Set/List/Delete权限),使用azurerm_role_assignment资源实现。
修正后的完整代码
# 变量部分(保留你原有变量定义,此处省略) output "connection_string" { value = azurerm_key_vault_secret.key_vault_secret.value } resource "azurerm_resource_group" "keyvault_rg" { name = lower("${var.application_name}-keyvault-${var.location_short}-${var.environment}-rg") location = var.location } resource "azurerm_key_vault" "key_vault" { depends_on = [azurerm_resource_group.keyvault_rg] name = lower("${var.application_name}-keyvault-${var.location_short}-${var.environment}") resource_group_name = azurerm_resource_group.keyvault_rg.name location = azurerm_resource_group.keyvault_rg.location tenant_id = var.tenant_Id soft_delete_retention_days = 7 sku_name = "standard" # 显式声明启用RBAC模式(与现有配置保持一致,可省略但更清晰) enabled_for_rbac = true } # 给目标SP分配密钥操作权限的RBAC角色 resource "azurerm_role_assignment" "kv_secrets_officer" { depends_on = [azurerm_key_vault.key_vault] scope = azurerm_key_vault.key_vault.id role_definition_name = "Key Vault Secrets Officer" principal_id = var.object_Id } resource "azurerm_key_vault_secret" "key_vault_secret" { depends_on = [azurerm_key_vault.key_vault, azurerm_role_assignment.kv_secrets_officer] name = lower("${var.application_name}-${var.environment}-connection-string") value = "connection_string" key_vault_id = azurerm_key_vault.key_vault.id }
额外说明
Key Vault Secrets Officer是Azure内置角色,完全覆盖你需要的密钥操作权限,无需自定义角色。- 确保执行Terraform的账号拥有管理角色分配的权限(比如Owner或User Access Administrator),否则角色分配会失败。
内容的提问来源于stack exchange,提问作者Code Ratchet
相关产品推荐
相关产品推荐

