Terraform - 如何获取 azurerm 密钥保管库访问策略的应用服务对象 ID?
Terraform - How to get App Service object id for azurerm key vault access policy?
使用 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}"
}
然后当我 运行 应用命令时,出现以下错误:
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?
谢谢
当您阅读 azurerm_key_vault_access_policy 属性 object_id 的说明时,您应该知道它可能表示 Web 应用主体 ID。
而您输入的 azurerm_app_service.myApp.id 不是主体 ID,而是应用服务资源 ID。您应该放置与您的网络应用相关联的 azurerm_app_service.myApp.identity.principal_id。看看Attributes of the App Service Resource。希望对您有所帮助。
但是,文档中没有提到的是需要在 app_service 声明中指定标识块。
identity { type = "SystemAssigned" }
如果您不指定它,您可能会得到一个空列表作为标识属性。
使用 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}"
}
然后当我 运行 应用命令时,出现以下错误:
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?
谢谢
当您阅读 azurerm_key_vault_access_policy 属性 object_id 的说明时,您应该知道它可能表示 Web 应用主体 ID。
而您输入的 azurerm_app_service.myApp.id 不是主体 ID,而是应用服务资源 ID。您应该放置与您的网络应用相关联的 azurerm_app_service.myApp.identity.principal_id。看看Attributes of the App Service Resource。希望对您有所帮助。
但是,文档中没有提到的是需要在 app_service 声明中指定标识块。
identity { type = "SystemAssigned" }
如果您不指定它,您可能会得到一个空列表作为标识属性。