terraform 中现有存储帐户的 Key Vault 访问策略

问题描述

我尝试将策略分配给现有存储帐户的 Azure Key Vault。问题是找不到如何获取分配策略所需的帐户(principal_id)的 UUID。我试图为数据找到正确的属性,但对于数据对象来说它似乎不存在。所以问题是如何为现有存储帐户分配 Key Vault 访问策略?

resource "azurerm_key_vault_access_policy" "storage2" {
  key_vault_id = azurerm_key_vault.keyvault.id
  tenant_id    = data.azurerm_client_config.current.tenant_id
  object_id    = data.azurerm_storage_account.example.identity.0.principal_id

  key_permissions    = ["get","create","list","restore","recover","unwrapkey","wrapkey","purge","encrypt","decrypt","sign","verify"]
  secret_permissions = ["get"]
}

解决方法

Azure Key Vault Access Policy

Azure 存储帐户使用包含帐户名称和密钥的凭据。密钥是自动生成的,用作密码,而不是作为加密密钥。 Key Vault 通过定期在存储帐户中重新生成存储帐户密钥来管理存储帐户密钥,并提供共享访问签名令牌以委派访问存储帐户中的资源。

用户可以使用 Key Vault 托管存储帐户密钥功能列出(同步)与 Azure 存储帐户的密钥,并定期重新生成(轮换)密钥。用户可以管理存储帐户和经典存储帐户的密钥。

用户可以通过 PowershellCLI 使用密钥保管库设置策略管理存储帐户。

,

下面的链接为您提供了有关如何在 terraform 中创建客户管理的密钥的信息,其中创建密钥保管库策略是其中的一部分 https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/storage_account_customer_managed_key

通用唯一标识符 (UUID) 分配给整个目录和 Azure Active Directory (AAD) 中存在的每个用户个人帐户,无论该帐户是在云中创建还是最初在 Active Directory (AD) 上创建-前提实例,然后同步到云端

根据上述信息,UUID 只不过是活动目录中可用的用户的对象 ID。如果您参考以下文档,您可以从门户中找到用户的对象 ID https://docs.microsoft.com/en-us/azure/marketplace/find-tenant-object-id

您可以参考下面的 SO 线程使用 terraform 创建对象 id

Terraform create a azure key vault

,

您也许可以使用:

data "azurerm_resources" "storage_account" {  
    type = "Microsoft.Storage/storageAccounts"  
    name = "<your_storage_account_name>"
}  

如果您使用的是托管服务标识,principal_id 可能会在那里公开,而它不在 data.azurerm_storage_account 资源中...

我还没有尝试过,所以 ymmv,但是我在为具有 MSI 的现有 WebApp 查找 principal_id 时遇到了同样的问题,并且它们的数据资源也没有公开 .identity 属性,所以我计划……

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...