分享方式:


Azure 登陸區域 Terraform 模組

Azure 提供原生服務來建置您的 Azure 登陸區域。 其他工具也可協助進行這項工作。 客戶和合作夥伴經常用來部署登陸區域的工具之一是 HashiCorp的Terraform。

將資源部署至應用程式登陸區域超出模組的範圍。 部署方法和工具的決策適用於負責應用程式的小組。

Azure 登陸區域 Terraform 模組提供快速實作平台資源,您需要使用 Terraform 大規模管理 Azure 登陸區域。 此模組的設計目的是簡化連線和管理訂用帳戶中管理群組階層、原則和資源部署。

必要條件

如果您不熟悉 Terraform,而且想要安裝及使用它的相關信息,請參閱 HashiCorp Learn 上的 Install Terraform 教學課程。

如需如何設定 Terraform 提供者並使用 Azure 進行驗證的資訊,請參閱 Terraform 網站上的 AzureRM 提供者指南 。 若要瞭解如何設定提供者以跨多個訂用帳戶進行部署,請參閱 提供者設定 Wiki頁面。

使用標準模組的重要性

重複使用元件是基礎結構即程式代碼的基本原則。 模組有助於定義環境內和跨環境之資源部署的標準和一致性。

Azure 登陸區域 Terraform 模組會發佈至官方 Terraform 登錄 ,並由 HashiCorp 驗證。

從 Terraform Registry 部署模組提供:

  • 在您的環境中加速傳遞 Azure 登陸區域。
  • 最新版模組的已測試升級路徑,以及嚴格的版本控制。

使用模組的優點

使用 Azure 登陸區域 Terraform 模組的優點包括:

  • 透過管理群組,訂用帳戶組織的受控且可延伸的核心資源階層。
  • 透過 Azure 身分識別和存取管理 (IAM) 控件來調整安全性治理和合規性,並已準備好指派大量自定義定義連結庫。
  • 透過管理群組繼承跨訂用帳戶強制執行原則。
  • 管理與連線登陸區域的受控資源。 這些資源提供:
    • 透過緊密整合模組所管理的資源和對應的原則指派,確保原則合規性。
    • 資源之間的整合可減少管理額外負荷,並提供改良的用戶體驗,例如自動建立 Azure 私用 DNS 的虛擬網路連結。

提示

範本連結庫會以程序設計方式從 Azure/Enterprise-Scale GitHub 存放庫進行更新。 若要掌握最新的原型組態、原則和角色,請確定您使用的是最新版的模組。

資源部署

您可以設定模組來部署一組資源,以符合 Azure 登陸區域中下列重要設計區域。 自定義這些資源以符合貴組織的需求。

資源類別 關鍵設計區域
核心資源 資源組織
安全性
治理
管理資源 管理與監視
聯機資源 網路拓撲和連線能力
身分識別資源 身分識別和存取管理

將這些功能封裝成單一 Terraform 模組,可讓您在大規模運作時,更輕鬆地跨 Azure 平臺建置並強制執行一致性。

這些資源與 Azure 登陸區域概念架構一致:

Azure 登陸區域概念架構的圖表。

您可以使用模組區塊上的提供者組態,透過功能跨多個訂用帳戶部署這些資源。

下列各節概述資源類型和組態選項。

核心資源

本課程模組的核心功能會部署 Azure 登陸區域的概念架構基礎,並著重於中央資源組織

Azure 登陸區域概念架構的圖表,著重於核心資源階層。

當您開啟核心資源的部署時,模組會部署和管理下列資源類型:

資源 Azure 資源類型 Terraform 資源類型
管理群組 Microsoft.Management/managementGroups azurerm_management_group
管理群組訂用帳戶 Microsoft.Management/managementGroups/subscriptions azurerm_management_group
原則指派 Microsoft.Authorization/policyAssignments azurerm_management_group_policy_assignment
原則定義 Microsoft.Authorization/policyDefinitions azurerm_policy_definition
原則集定義 Microsoft.Authorization/policySetDefinitions azurerm_policy_set_definition
角色指派 Microsoft.Authorization/roleAssignments azurerm_role_assignment
角色定義 Microsoft.Authorization/roleDefinitions azurerm_role_definition

模組建立的資源確切數目取決於模組組態。 針對預設組態,您可以預期模組會建立大約180資源。

提示

這些資源都不會部署在訂用帳戶範圍,但 Terraform 仍然需要訂用帳戶來建立與 Azure 的已驗證會話。 如需使用 Azure 進行驗證的詳細資訊,請參閱 Azure 提供者:向 Azure 驗證檔。

管理資源

此模組提供一個選項,可讓您將管理和監視資源從 Azure 登陸區域的概念架構部署到指定的訂用帳戶,如提供者設定 Wiki 頁面所述。 模組也可確保指定的訂用帳戶會放在正確的管理群組中。

Azure 登陸區域概念架構的圖表,著重於管理資源。

當您啟用管理資源的部署時,模組會部署及管理下列資源類型(視組態而定):

資源 Azure 資源類型 Terraform 資源類型
資源群組 Microsoft.Resources/resourceGroups azurerm_resource_group
Log Analytics 工作區 Microsoft.OperationalInsights/workspaces azurerm_log_analytics_workspace
Log Analytics 解決方案 Microsoft.OperationsManagement/solutions azurerm_log_analytics_solution
自動化帳戶 Microsoft.Automation/automationAccounts azurerm_automation_account
Log Analytics 鏈接服務 Microsoft.OperationalInsights/workspaces /linkedServices azurerm_log_analytics_linked_service

除了部署上述資源之外,模組還提供原生整合至對應的原則指派,以確保完整的原則合規性。

如需如何使用這項功能的詳細資訊,請參閱 部署管理資源 Wiki頁面。

聯機資源

此模組提供選項,可讓您將網路拓撲和連線資源從 Azure 登陸區域的概念架構部署到目前的訂用帳戶內容。 它也可確保指定的訂用帳戶會放在正確的管理群組中。

這項功能可讓您根據傳統 Azure 網路拓撲(中樞和輪輻)和虛擬 WAN 網路拓撲(Microsoft管理)的任何組合來部署多個中樞網路。

模組也可以建立 DDoS 網路保護並將其連結至 虛擬網絡,以及管理集中式公用和私人 DNS 區域

注意

我們目前不建議在 Azure 登陸區域中使用 DDoS IP Protection,並建議在特定情況下使用此選項。 檢閱有關 Azure DDoS 保護 SKU 比較的產品檔

傳統 Azure 網路拓撲(中樞和輪輻)

模組可以選擇性地根據 傳統的 Azure 網路拓撲(中樞和輪輻)部署一或多個中樞網路。

Azure 登陸區域概念架構的圖表,著重於使用傳統 Azure 網路拓撲(中樞和輪輻)的聯機資源。

注意

模組目前只會設定連線訂用帳戶的網路中樞和相依資源。 雖然有一個選項可從中樞對等互連到輪輻啟用輸出虛擬網路對等互連,但使用者仍然需要起始從輪輻對中樞對等互連。 這是因為 AzureRM 提供者如何以特定訂用帳戶作為部署目標的限制。

當您根據傳統的 Azure 網路拓撲(中樞和輪輻)部署資源時,模組會部署和管理下列資源類型(視組態而定):

資源 Azure 資源類型 Terraform 資源類型
資源群組 Microsoft.Resources/resourceGroups azurerm_resource_group
虛擬網路 Microsoft.Network/virtualNetworks azurerm_virtual_network
子網路 Microsoft.Network/virtualNetworks/subnets azurerm_subnet
虛擬網路閘道 Microsoft.Network/virtualNetworkGateways azurerm_virtual_network_gateway
Azure 防火牆 Microsoft.Network/azureFirewalls azurerm_firewall
公用 IP 位址 Microsoft.Network/publicIPAddresses azurerm_public_ip
虛擬網路對等互連 Microsoft.Network/virtualNetworks/virtualNetworkPeerings azurerm_virtual_network_peering

如需如何使用這項功能的詳細資訊,請參閱 部署連線資源 Wiki頁面。

虛擬網路拓撲(Microsoft管理)

模組可以選擇性地根據虛擬 WAN 網路拓撲部署一或多個中樞網路(Microsoft受管理)。

Azure 登陸區域概念架構的圖表,著重於使用虛擬 WAN 網路拓撲的連線資源(Microsoft管理)。

注意

由於透過傳統虛擬 WAN 網路資源的不同功能,因此使用這項功能時,虛擬 WAN 輪輻的對等互連是雙向的。

當您根據虛擬 WAN 網路拓撲部署資源時(Microsoft管理),模組會部署和管理下列資源類型(視組態而定):

資源 Azure 資源類型 Terraform 資源類型
資源群組 Microsoft.Resources/resourceGroups azurerm_resource_group
虛擬 WAN Microsoft.Network/virtualWans azurerm_virtual_wan
虛擬中樞 Microsoft.Network/virtualHubs azurerm_virtual_hub
Express Route 閘道 Microsoft.Network/expressRouteGateways azurerm_express_route_gateway
VPN 閘道 Microsoft.Network/vpnGateways azurerm_vpn_gateway
Azure 防火牆 Microsoft.Network/azureFirewalls azurerm_firewall
Azure 防火牆原則 Microsoft.Network/firewallPolicies azurerm_firewall_policy
虛擬中樞連線 Microsoft.Network/virtualHubs/hubVirtualNetworkConnections azurerm_virtual_hub_connection

如需如何使用這項功能的詳細資訊,請參閱 部署虛擬 WAN 資源 Wiki 頁面。

DDoS 保護方案

模組可以選擇性地部署 DDoS 網路保護,並視需要將 虛擬網絡 連結至方案。

注意

由於平臺限制,DDoS 保護方案只能針對傳統虛擬網路啟用。 目前無法使用虛擬中樞支援。

重要

Azure 登陸區域指引建議啟用 DDoS 網路保護,以提高 Azure 平台的保護。 若要避免非生產環境與 MVP 部署中的非預期成本,Azure 登陸區域 Terraform 模組會因為與此資源相關聯的成本而停用此功能。

針對生產環境,強烈建議您啟用這項功能。

當您啟用部署 DDoS 保護方案資源的部署時,模組會部署及管理下列資源類型(視設定而定):

資源 Azure 資源類型 Terraform 資源類型
資源群組 Microsoft.Resources/resourceGroups azurerm_resource_group
DDoS 保護方案 Microsoft.Network/ddosProtectionPlans azurerm_network_ddos_protection_plan

DNS

模組可以選擇性地部署 私用 DNS 區域以支援私人端點,並將其連結至中樞和/或輪輻 虛擬網絡。 您也可以視需要部署和連結使用者指定的公用和私人 DNS 區域。

當您啟用部署 DNS 資源的部署時,模組會部署及管理下列資源類型(視組態而定):

資源 Azure 資源類型 Terraform 資源類型
資源群組 Microsoft.Resources/resourceGroups azurerm_resource_group
DNS 區域 Microsoft.Network/dnsZones azurerm_dns_zone
私人 DNS 區域 Microsoft.Network/privateDnsZones azurerm_private_dns_zone
私用 DNS 區域 虛擬網絡 連結 Microsoft.Network/privatednszones/virtualnetworklinks azurerm_private_dns_zone_virtual_network_link

身分識別資源

此課程模組提供一個選項來設定與身分識別和存取管理登陸區域相關的原則。 它也可確保指定的訂用帳戶會放在正確的管理群組中。

Azure 登陸區域概念架構的圖表,著重於身分識別資源。

注意

這項功能不會部署任何資源。 如果您想要更新與身分識別管理群組相關的原則設定,請使用 configure_identity_resources 輸入變數。

如需如何使用這項功能的詳細資訊,請參閱 部署身分識別資源 Wiki頁面。

開始使用

開始使用課程模組的需求記載於 用戶入門 Wiki頁面上。

為了簡化用戶入門,模組已發行至 Terraform Registry。 您可以直接在程式代碼中參考它,如本文稍後的 簡單範例 所示。 執行 terraform init 會自動下載模組和所有相依性。

您可以在 Terraform 登錄的 [相依性] 索引卷標上 檢視最新的模組和提供者相依性

重要

某些 Terraform 和 AzureRM 提供者版本組合有已知問題。 您可以升級至最新的 Terraform 和 AzureRM 提供者版本來解決一些已知問題。 其他已知問題是一般可藉由重新執行部署來修正的暫時性錯誤。

我們通常會建議釘選至特定版本,並在升級之前徹底測試。

當需要變更時,我們將發行模組的新版本。 新版本可確保與最新的 Terraform 和 AzureRM 提供者版本相容。 如需詳細資訊,請參閱我們的模組版本指引。

若要取得最新功能,請確定模組版本已設定為最新版本。 如果您要升級至較新版本的模組,請執行 terraform init -upgrade

GitHub 版本 (最新 SemVer)

簡單範例

此範例程式代碼會從企業級參考架構部署最低建議 的管理群組和訂用帳戶組織 。 在啟動並執行這個簡單的範例之後,您就可以開始自定義部署。

提示

即使 root_parent_id 模組是唯一的強制變數,我們也建議設定 root_id。 變更 root_id 值將會開始完整重新部署模組所管理的所有資源,包括下游相依性。

下列程式代碼是根模組的 main.tf 簡單起始組態:

# Configure Terraform to set the required AzureRM provider
# version and features{} block.

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 2.77.0"
    }
  }
}

provider "azurerm" {
  features {}
}

# Get the current client configuration from the AzureRM provider.
# This configuration is used to populate the root_parent_id variable with the
# current tenant ID used as the ID for the "Tenant Root Group"
# management group.

data "azurerm_client_config" "core" {}

# Use variables to customize the deployment

variable "root_id" {
  type    = string
  default = "es"
}

variable "root_name" {
  type    = string
  default = "Enterprise-Scale"
}

# Declare the Terraform Module for Cloud Adoption Framework
# Enterprise-scale and provide a base configuration.

module "enterprise_scale" {
  source  = "Azure/caf-enterprise-scale/azurerm"
  version = ">= 1.0.0"

  providers = {
    azurerm              = azurerm
    azurerm.connectivity = azurerm
    azurerm.management   = azurerm
  }

  root_parent_id = data.azurerm_client_config.core.tenant_id
  root_id        = var.root_id
  root_name      = var.root_name

}

下一步

適用於 雲端採用架構 Enterprise-scale 的 Terraform 模組提供加速路徑來建置企業級登陸區域。 它也提供擴充和自定義部署的彈性,同時維護管理每個登陸區域設定的簡化方法。

若要深入瞭解, 請檢閱 Terraform Registry 上的模組,並探索 GitHub 上的模組檔 。 在檔中,您可以找到更多有關如何自定義部署的範例和教學課程。

瞭解如何 透過HashiCorp Learn 部署 Azure 登陸區域 Terraform 模組 。 您也可以從該處探索模組的某些部分的運作方式。