使用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吗?
谢谢
答案 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