Terraform-如何获取Azurerm密钥库访问策略的App Service对象ID?

tri*_*idy 5 azure terraform azure-keyvault

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

 "objectId": "[reference(variables('myAppResourceId'), '2015-08-31-PREVIEW').principalId]"
Run Code Online (Sandbox Code Playgroud)

因此Terraform需要将主体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}"
} 
Run Code Online (Sandbox Code Playgroud)

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

azurerm_key_vault_access_policy.pol1: "object_id" is an invalid UUUID: encoding/hex: invalid byte: U+002F '/'
Run Code Online (Sandbox Code Playgroud)

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


我还尝试了Terraform授予azure函数应用程序的建议,该应用程序具有msi访问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")}
Run Code Online (Sandbox Code Playgroud)

有人可以帮我这个object_id吗?

谢谢

Cha*_* Xu 7

阅读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资源属性。希望这会帮助你。

但是,文档中未提及的是需要在app_service声明中指定一个身份块。

identity { type = "SystemAssigned" }
Run Code Online (Sandbox Code Playgroud)

如果未指定,则可能会获得一个空列表作为身份属性。

  • 好吧。似乎将 `identity { type = "SystemAssigned" }` 添加到 azurerm_app_service 就成功了,现在 `output "application_identity_principal_id" { value = "${azurerm_app_service.app1.identity.0.principal_id}" }` 显示了 id。我认为这将解决我的问题。感谢您指出身份分配的明确需求。 (3认同)