Terraform授予azure功能应用程序对azure keyvault的msi访问权限
我正在尝试使用Terraform在Azure中设置一个场景,Terraform在其中创建:Terraform授予azure功能应用程序对azure keyvault的msi访问权限,azure,terraform,Azure,Terraform,我正在尝试使用Terraform在Azure中设置一个场景,Terraform在其中创建: -具有托管服务标识的Azure功能应用程序 -Azure密钥保险库 -密钥库访问策略,允许功能应用程序访问密钥库中的机密 我的问题是在密钥库访问策略的定义中使用为函数应用程序设置的MSI的对象id(原则id),我怀疑我做错了什么(和/或愚蠢) 我从Terraform应用程序中得到的错误是: azurerm_key_vault_access_policy.msi-test-to-keyvault-test:
-具有托管服务标识的Azure功能应用程序
-Azure密钥保险库
-密钥库访问策略,允许功能应用程序访问密钥库中的机密 我的问题是在密钥库访问策略的定义中使用为函数应用程序设置的MSI的对象id(原则id),我怀疑我做错了什么(和/或愚蠢) 我从Terraform应用程序中得到的错误是:
azurerm_key_vault_access_policy.msi-test-to-keyvault-test: "object_id" is an invalid UUUID: uuid: UUID string too short: 1
我怀疑问题可能在于我试图引用访问策略定义中使用msi标识创建的服务原则的对象id的方式:
object_id = "${azurerm_function_app.rg-func-app__funcapp.identity.principal_id}"
(azurerm函数应用程序属性的doco部分说identity导出principle_id,但是我不知道引用此属性的正确语法是什么:()
地形模板是:
resource "azurerm_function_app" "rg-func-app__funcapp" {
name = "${local.deployed-func-app-name}"
location = "${azurerm_resource_group.rg-func-app.location}"
resource_group_name = "${azurerm_resource_group.rg-func-app.name}"
app_service_plan_id = "${azurerm_app_service_plan.rg-func-app__appsvcpln.id}"
storage_connection_string = "${azurerm_storage_account.rg-func-app__sa.primary_connection_string}"
version = "~1"
app_settings {
"TEST_KEYVAULT_URL" = "${azurerm_key_vault.test.vault_uri}"
}
identity {
type = "SystemAssigned"
}
}
resource "azurerm_key_vault" "test" {
name = "msi-test-vault"
location = "${azurerm_resource_group.rg-func-app.location}"
resource_group_name = "${azurerm_resource_group.rg-func-app.name}"
sku {
name = "standard"
}
tenant_id = "${data.azurerm_client_config.current.tenant_id}"
}
resource "azurerm_key_vault_secret" "test" {
name = "secret-sauce"
value = "szechuan"
vault_uri = "${azurerm_key_vault.test.vault_uri}"
}
resource "azurerm_key_vault_access_policy" "msi-test-to-keyvault-test" {
vault_name = "${azurerm_key_vault.test.name}"
resource_group_name = "${azurerm_key_vault.test.resource_group_name}"
tenant_id = "${azurerm_key_vault.test.tenant_id}"
object_id = "${azurerm_function_app.rg-func-app__funcapp.identity.principal_id}"
key_permissions = [
"get",
]
secret_permissions = [
"get",
]
}
感谢您的指点
干杯,安迪经过一段时间的探索,一个解决方案似乎是将咒语改为检索原则id:
object_id = "${lookup(azurerm_function_app.rg-func-app__funcapp.identity[0],"principal_id")}"
这将导致按预期创建访问策略。检查包含所有可用选项的
terraform.tfstate
文件。或terraform show
命令。这将显示您要查找的GUID属性可在以下位置找到:
object_id = "${azurerm_function_app.rg-func-app__funcapp.identity.0.principal_id}"