使用 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

但是,套装不保证顺序。因此要特别注意这一点。