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

时间:2019-01-14 21:29:55

标签: azure terraform azure-keyvault

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

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

因此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}"
} 

然后当我运行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吗?

谢谢

2 个答案:

答案 0 :(得分:3)

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

您输入的 azurerm_app_service.myApp.id 不是主体ID,而是应用程序服务资源ID。您应该放置与您的Web应用程序关联的azurerm_app_service.myApp.identity.principal_id。看一下Attributes of the App Service Resource。希望对您有帮助。

答案 1 :(得分:0)

当尝试在Terraform KeyVault策略 azurerm_key_vault_access_policy 中使用其object_id引用应用程序服务时,可接受的答案还可以解决以下错误:

Error: "object_id" isn't a valid UUID