Terraform - 如何获取 azurerm 密钥保管库访问策略的应用服务对象 ID?

问题描述 投票:0回答:2

使用 Terraform,我尝试向应用程序(也在 Terraform 中创建)添加 keyvault 访问策略,这需要该应用程序的 object_it (即 GUID)。在 ARM 模板中,它看起来像这样:

 "objectId": "[reference(variables('myAppResourceId'), '2015-08-31-PREVIEW').principalId]"

因此 Terraform 需要将principal id 分配给object_id。如果我像这样使用值 “object_id = ${azurerm_app_service.myApp.id}”

  resource "azurerm_key_vault_access_policy" "pol1" {
  vault_name          = "${azurerm_key_vault.kv1.name}"
  resource_group_name = "${azurerm_key_vault.kv1.resource_group_name}"

  tenant_id = "${data.azurerm_subscription.current.subscription_id}"
  object_id = "${azurerm_app_service.myApp.id}"

  key_permissions = "${var.app_keys_permissions}"
  secret_permissions = "${var.app_secrets_permissions}"
} 

然后当我运行 apply 命令时,出现以下错误:

azurerm_key_vault_access_policy.pol1: "object_id" is an invalid UUUID: encoding/hex: invalid byte: U+002F '/'

这可能是看起来像带有斜线的 url 的 id,所以这不起作用,因为我只需要 GUID。


我还尝试了 Terraform grant azure function app with msi access to azure keyvault 的建议,通过对应用程序使用 object_id = "${lookup(azurerm_app_service.app1.identity[0],"principal_id")}"服务而不是函数,我收到错误:

 azurerm_key_vault_access_policy.appPolicy1: At column 43, line 1: list "azurerm_app_service.app1.identity" does not have any elements so cannot determine type. in:

${lookup(azurerm_app_service.app1.identity[0],"principal_id")}

有人可以帮我解决这个 object_id 吗?

谢谢

azure terraform azure-keyvault
2个回答
20
投票

当您阅读 azurerm_key_vault_access_policy 属性 object_id 的描述时,您应该知道它可能意味着 Web 应用程序主体 ID。

您输入的 azurerm_app_service.myApp.id 不是主体 Id,而是应用服务资源 Id。您应该输入与您的 Web 应用程序关联的 azurerm_app_service.myApp.identity.principal_id。查看应用服务资源的属性。希望这对您有帮助。

但是,文档中没有提到需要在 app_service 声明中指定身份块。

identity { type = "SystemAssigned" }

如果您不指定它,您可能会得到一个空列表作为身份属性。


0
投票

因此,我可以将 azurerm_windows_web_app.appservice.identity[0].principal_id 作为“object_id”输入到资源 azurerm_key_vault_access_policy 中?

例如

resource "azurerm_key_vault_access_policy" "kvaccesspolicy" {
  key_vault_id = azurerm_key_vault.keyvault.id
  tenant_id    = var.tenant_id
  object_id    = data.azurerm_client_config.current.object_id

  secret_permissions = [
  "Get",
  ]

  depends_on = [ azurerm_key_vault.keyvault ]
}

你好@RalphWillgoss!

© www.soinside.com 2019 - 2024. All rights reserved.