Terraform创建Azure Key Vault添加Secret时服务主体无Secrets Get权限报错
我尝试用Service Principal通过Terraform在Azure上创建Key Vault,相关代码如下:
data "azurerm_client_config" "current" {} resource "azurerm_key_vault" "key_vault" { name = "${var.project_name}-keyvault" location = var.resource_group_location resource_group_name = var.resource_group_name enabled_for_disk_encryption = true tenant_id = data.azurerm_client_config.current.tenant_id soft_delete_retention_days = 7 purge_protection_enabled = false sku_name = "standard" } resource "azurerm_key_vault_access_policy" "access_policy" { key_vault_id = azurerm_key_vault.key_vault.id tenant_id = data.azurerm_client_config.current.tenant_id object_id = data.azurerm_client_config.current.object_id secret_permissions = [ "Set", "Get", "Delete", "Purge", "List", ] } resource "azurerm_key_vault_secret" "client_id" { name = "client-id" value = var.client_id_value key_vault_id = azurerm_key_vault.key_vault.id } resource "azurerm_key_vault_secret" "client_secret" { name = "client-secret" value = var.client_secret_value key_vault_id = azurerm_key_vault.key_vault.id } resource "azurerm_key_vault_secret" "subscription_id" { name = "subscription-id" value = var.subscription_id_value key_vault_id = azurerm_key_vault.key_vault.id } resource "azurerm_key_vault_secret" "tenant_id" { name = "tenant-id" value = var.tenant_id_value key_vault_id = azurerm_key_vault.key_vault.id }
执行代码时出现如下错误:
Error: checking for presence of existing Secret "client-id" (Key Vault "https://formulaeinsdef-keyvault.vault.azure.net/"): keyvault.BaseClient#GetSecret:
Failure responding to request: StatusCode=403 -- Original Error: autorest/azure:
Service returned an error. Status=403 Code="Forbidden" Message="The user, group or application 'appid=;oid=32d24355-0d93-476d-a775-6882d5a22e0b;iss=https://sts.windows.net//' does not have secrets get permission on key vault 'formulaeinsdef-keyvault;location=westeurope'.
For help resolving this issue, please see https://go.microsoft.com/fwlink/?linkid=2125287" InnerError={"code":"AccessDenied"}
目前代码能成功创建Key Vault,但无法向其中添加秘钥。我的Service Principal已经拥有Contributor角色,原本以为该角色具备GET和SET秘钥的权限,后来尝试为其分配Reader甚至Owner权限,都没有效果。我也查看过相关问题但未能解决,并且已经在Access Policies选项卡中配置了Set、Get、Delete、Purge、List权限。

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

