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



使用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的一个建议,通过使用object_id="${lookup(azurerm_app_service.app1.identity[0],"principal_id")}">为应用程序服务而不是函数授予azure函数应用程序msi访问azure密钥库的权限,我得到了一个错误:

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吗?

感谢

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

并且您放置的azurerm_app_service.myApp.id不是主体id,而是应用程序服务资源id。您应该放置与web应用程序关联的azurerm_app_service.miApp.identity_pripal_id。请查看应用程序服务资源的属性。希望这对你有帮助。

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

identity { type = "SystemAssigned" }

若不指定它,可能会得到一个空列表作为标识属性。

最新更新