使用 Terraform 从 azuread_application 获取 oauth2_permissions
Get oauth2_permissions from azuread_application using Terraform
我有一个应用程序注册,它定义了两个 oauth2_permissions 块,例如(省略其他细节)
resource "azuread_application" "myapp" {
oauth2_permissions {
is_enabled = true
type = "User"
value = "Permission.One"
}
oauth2_permissions {
is_enabled = true
type = "User"
value = "Permission.Two"
}
}
这在应用时效果很好。然后我想在另一个应用程序注册中引用这些权限,例如
resource "azuread_application" "myotherapp" {
required_resource_access {
resource_app_id = azuread_application.myapp.application_id
resource_access {
id = ??
type = "Scope"
}
}
}
这里的id,我试过:
id = lookup(azuread_application.myapp.oauth2_permissions[0], "id")
得出 This value does not have any indices
。和
一样
id = azuread_application.myapp.oauth2_permissions.0.id
我可以定义一个数据块并从 myapp 获取 oauth2_permissions 的输出:
data "azuread_application" "myapp" {
application_id = azuread_application.myapp.application_id
}
output "myapp-perms" {
value = data.azuread_application.myapp.oauth2_permissions
}
并且在应用时,将正确显示两个权限块的数组。如果我尝试引用数据块而不是应用程序块,即
id = lookup(data.azuread_application.myapp.oauth2_permissions[0], "id")
这给了我一个不同的错误:The given key does not identify an element in this collection value
如果我在控制台上手动应用这两个权限,一切正常。通过阅读,我相当确定至少上述方法中的一种应该有效,但我显然遗漏了一些东西。
为了完整性,供应商定义:
provider "azurerm" {
version = "~> 2.12"
}
provider "azuread" {
version = "~> 0.11.0"
}
基于评论。
解决方案是使用tolist。原因是多个 oauth2_permissions
块将表示为对象集,无法使用索引访问这些对象。
id = tolist(azuread_application.myapp.oauth2_permissions)[0].id
但是,套装不保证顺序。因此要特别注意这一点。
我有一个应用程序注册,它定义了两个 oauth2_permissions 块,例如(省略其他细节)
resource "azuread_application" "myapp" {
oauth2_permissions {
is_enabled = true
type = "User"
value = "Permission.One"
}
oauth2_permissions {
is_enabled = true
type = "User"
value = "Permission.Two"
}
}
这在应用时效果很好。然后我想在另一个应用程序注册中引用这些权限,例如
resource "azuread_application" "myotherapp" {
required_resource_access {
resource_app_id = azuread_application.myapp.application_id
resource_access {
id = ??
type = "Scope"
}
}
}
这里的id,我试过:
id = lookup(azuread_application.myapp.oauth2_permissions[0], "id")
得出 This value does not have any indices
。和
id = azuread_application.myapp.oauth2_permissions.0.id
我可以定义一个数据块并从 myapp 获取 oauth2_permissions 的输出:
data "azuread_application" "myapp" {
application_id = azuread_application.myapp.application_id
}
output "myapp-perms" {
value = data.azuread_application.myapp.oauth2_permissions
}
并且在应用时,将正确显示两个权限块的数组。如果我尝试引用数据块而不是应用程序块,即
id = lookup(data.azuread_application.myapp.oauth2_permissions[0], "id")
这给了我一个不同的错误:The given key does not identify an element in this collection value
如果我在控制台上手动应用这两个权限,一切正常。通过阅读,我相当确定至少上述方法中的一种应该有效,但我显然遗漏了一些东西。
为了完整性,供应商定义:
provider "azurerm" {
version = "~> 2.12"
}
provider "azuread" {
version = "~> 0.11.0"
}
基于评论。
解决方案是使用tolist。原因是多个 oauth2_permissions
块将表示为对象集,无法使用索引访问这些对象。
id = tolist(azuread_application.myapp.oauth2_permissions)[0].id
但是,套装不保证顺序。因此要特别注意这一点。