如何使用 Terraform 将动态用户组添加到 Azure 广告企业应用程序

How to add a dynamic user group to an azure ad enterprise app with terraform

我正在尝试将动态用户组添加到我的 azure ad Enterprise 应用程序。 我尝试按照文档步骤进行操作,但在设置 app_roles.

后没有任何反应

自 2021 年 9 月 2 日起,Terraform 添加了动态组支持: https://github.com/hashicorp/terraform-provider-azuread/issues/132#issuecomment-911843531

资源:azuread_application — 文档: https://registry.terraform.io/providers/hashicorp/azuread/latest/docs/resources/application

如果我对文档的理解正确,我可以向我的应用程序添加角色的唯一方法是 app_role 功能。所以我的第一次尝试是只添加对象组 ID 并将“allowed_member_types”设置为用户。

resource "azuread_application" "test-app" {
  display_name = "test-app"
  owners       = [data.azuread_client_config.current.object_id]

  app_role {
    allowed_member_types = ["User"]
    description          = "Reader"
    display_name         = "Reader"
    enabled              = true
    id = "#####-####-####-####-######" <- Group Object ID
    value = "Reader"
  }
  
  web {
    logout_url    = var.logout_url
    redirect_uris = var.redirect_uris

    implicit_grant {
      access_token_issuance_enabled = true
      id_token_issuance_enabled     = true
    }
  }
}

但这不起作用,因为组没有出现在企业应用程序中,也许我在这里误解了什么?

我们还可以 group_membership_claims: https://registry.terraform.io/providers/hashicorp/azuread/latest/docs/resources/application#group_membership_claims

但是我觉得文档比较难懂,虽然我试着按照文档看,但感觉不适合我。

如果有人可以帮助我离开这里或纠正我,那就太好了。

请注意:

  1. 以下权限,例如 Group.ReadWrite.AllDirectory.ReadWrite.All 需要对组执行操作。
  2. 如果使用 assignable_to_role 属性,此资源另外 需要以下应用程序角色之一: RoleManagement.ReadWrite.Directory 或 Directory.ReadWrite.All

assignable_to_role which is (Optional) Indicates whether this group can be assigned to an Azure Active Directory role. Can only be true for security-enabled groups.

Check if security enable is true and dynamic membership rule are given: Group with dynamic membership.

参见第 Assign a user and group to an internal application 部分 还要检查版本,因为此功能已 在 Terraform Provider 的 v2.13.0 中发布。

当使用 service principal 进行身份验证时,此资源需要以下应用程序角色之一:AppRoleAssignment.ReadWrite.AllApplication.Read.All,或(AppRoleAssignment.ReadWrite.All 和 Directory.Read.All),或Application.ReadWrite.All,或Directory.ReadWrite.All

这里尝试加入allowed_member_types = ["Application", "User"],security_enabled = true对于 Azure 广告组和 app_role_assignment_required = true

data "azuread_domains" "example" {
  only_initial = true
}

resource "azuread_application" "internal" {
  display_name = "internal"

  app_role {
    allowed_member_types = ["Application", "User"]
    description          = "Admins can perform all task actions"
    display_name         = "Admin"
    enabled              = true
    id                   = "00000000-0000-0000-0000-222222222222"
    value                = "Admin.All"
  }
}

resource "azuread_service_principal" "internal" {
  application_id = azuread_application.internal.application_id
  app_role_assignment_required = true
}

resource "azuread_group" "example" {
  display_name     = "example"
  security_enabled = true
}

resource "azuread_app_role_assignment" "example" {
  app_role_id         = azuread_service_principal.internal.app_role_ids["Admin.All"]
  principal_object_id = azuread_group.example.object_id
  resource_object_id  = azuread_service_principal.internal.object_id
}

检查是否可以尝试使用 rest api endpoint