使用 Terraform 設定 Azure 虛擬桌面角色型訪問控制

文章使用下列 Terraform 和 Terraform 提供者版本進行測試:

Terraform 可讓您定義、預覽和部署雲端基礎結構。 使用 Terraform 時,您可以使用 HCL 語法來建立設定檔。 HCL 語法可讓您指定雲端提供者 (例如 Azure) 和構成雲端基礎結構的元素。 建立設定檔之後,您可以建立執行計畫,讓您先預覽基礎結構變更,之後再部署。 驗證變更之後,您可以套用執行計畫來部署基礎結構。

本文將逐步解說新增我們的使用者和 Microsoft Entra 群組,然後將群組指派給範圍設定為主機集區的「桌面虛擬化使用者」角色。

在本文中,您將學會如何:

  • 使用 Terraform 讀取 Microsoft Entra 現有使用者
  • 使用 Terraform 建立 Microsoft Entra 群組
  • Azure 虛擬桌面的角色指派

1.設定您的環境

  • Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

2.實作 Terraform 程式代碼

  1. 建立目錄,然後在目錄中測試範例 Terraform 程式碼,並將其設為目前的目錄。

  2. 建立名為 providers.tf 的檔案,並插入下列程式碼:

    terraform {
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>2.0"
        }
        azuread = {
          source = "hashicorp/azuread"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  3. 建立名為 main.tf 的檔案,並插入下列程式碼:

    data "azuread_user" "aad_user" {
      for_each            = toset(var.avd_users)
      user_principal_name = format("%s", each.key)
    }
    
    data "azurerm_role_definition" "role" { # access an existing built-in role
      name = "Desktop Virtualization User"
    }
    
    resource "azuread_group" "aad_group" {
      display_name     = var.aad_group_name
      security_enabled = true
    }
    
    resource "azuread_group_member" "aad_group_member" {
      for_each         = data.azuread_user.aad_user
      group_object_id  = azuread_group.aad_group.id
      member_object_id = each.value["id"]
    }
    
    resource "azurerm_role_assignment" "role" {
      scope              = azurerm_virtual_desktop_application_group.dag.id
      role_definition_id = data.azurerm_role_definition.role.id
      principal_id       = azuread_group.aad_group.id
    }
    
  4. 建立名為 variables.tf 的檔案,並插入下列程式碼:

variable "avd_users" {
  description = "AVD users"
  default = [
    "avduser01@contoso.net",
    "avduser02@contoso.net"
  ]
}

variable "aad_group_name" {
  type        = string
  default     = "AVDUsers"
  description = "Azure Active Directory Group for AVD users"
}
  1. 建立名為 output.tf 的檔案,並插入下列程式碼:
output "AVD_user_groupname" {
  description = "Azure Active Directory Group for AVD users"
  value       = azuread_group.aad_group.display_name
}

6. 初始化 Terraform

執行 terraform init 來初始化 Terraform 部署。 此命令會下載管理 Azure 資源所需的 Azure 提供者。

terraform init -upgrade

重點︰

  • -upgrade 參數會將必要的提供者外掛程式升級至符合設定版本條件約束的最新版本。

7.建立 Terraform 執行計劃

執行 terraform plan 以建立執行計畫。

terraform plan -out main.tfplan

重點︰

  • terraform plan 命令會建立執行計畫,但不會執行。 相反地,其會決定要在您指定的設定檔中建立設定所需的動作。 此模式可讓您在對實際資源進行任何變更之前,先確認執行方案是否符合您的預期。
  • 選用的 -out 參數可讓您指定計畫的輸出檔。 使用 -out 參數可確保您所檢閱的方案就是所套用的方案。

8.套用 Terraform 執行計劃

執行 terraform apply 將執行計畫套用至您的雲端基礎結構。

terraform apply main.tfplan

重點︰

  • 範例 terraform apply 命令會假設您先前已執行 terraform plan -out main.tfplan
  • 如果您為 -out 參數指定了不同的檔案名稱,請在呼叫 terraform apply 時使用該檔案名稱。
  • 若您未使用 -out 參數,請呼叫 terraform apply,不需要使用參數。

您現在已準備好使用角色型訪問控制來建置和部署基礎結構。

9. 清除資源

當您不再需要透過 Terraform 建立的資源時,請執行下列步驟:

  1. 執行 terraform plan 並指定 destroy 旗標。

    terraform plan -destroy -out main.destroy.tfplan
    

    重點︰

    • terraform plan 命令會建立執行計畫,但不會執行。 相反地,其會決定要在您指定的設定檔中建立設定所需的動作。 此模式可讓您在對實際資源進行任何變更之前,先確認執行方案是否符合您的預期。
    • 選用的 -out 參數可讓您指定計畫的輸出檔。 使用 -out 參數可確保您所檢閱的方案就是所套用的方案。
  2. 執行 terraform apply 以套用執行方案。

    terraform apply main.destroy.tfplan
    

對 Azure 上的 Terraform 進行疑難排解

針對在 Azure 上使用 Terraform 時的常見問題進行疑難排解

下一步