你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 登陆区域 Terraform 模块

Azure 提供用于生成 Azure 登陆区域的本机服务。 其他工具也可以帮助完成这项工作。 HashiCorp 的 Terraform 是客户和合作伙伴经常用来部署登陆区域的一种工具。

本模块不介绍资源到应用程序登陆区域的部署。 有关部署方法和工具的选择由负责应用程序的团队决定。

Azure 登陆区域 Terraform 模块提供了所需的平台资源快速实现来让你使用 Terraform 大规模管理 Azure 登陆区域。 该模块旨在简化连接和管理订阅中管理组层次结构、策略和资源的部署。

必备条件

如果你是 Terraform 的新手并想要了解有关安装和使用它的信息,请参阅 HashiCorp Learn 上的安装 Terraform 教程。

有关如何设置 Terraform 提供程序和使用 Azure 进行身份验证的信息,请参阅 Terraform 网站上的 AzureRM 提供程序指南。 若要了解如何设置提供程序以跨多个订阅进行部署,请参阅提供程序配置 Wiki 页。

使用标准模块的重要性

重用组件是基础结构即代码的一项基本原则。 模块有助于定义环境内部和跨环境的资源部署的标准和一致性。

Azure 登陆区域 Terraform 模块发布到官方 Terraform Registry 并由 HashiCorp 验证。

从 Terraform Registry 部署模块可以:

  • 在环境中加速交付 Azure 登陆区域。
  • 提供最新模块版本的已测试升级路径,以及严格的版本控制。

使用模块的好处

使用 Azure 登陆区域 Terraform 模块的好处包括:

  • 通过管理组的订阅组织的托管和可扩展核心资源层次结构。
  • 通过 Azure 标识和访问管理 (IAM) 控件提供可缩放的安全治理和合规性,并提供可供分配的广泛自定义定义库。
  • 通过管理组继承跨订阅强制执行策略。
  • 管理和连接登陆区域的受管理资源。 这些资源提供:
    • 通过紧密集成模块管理的资源和相应的策略分配来确保策略合规性。
    • 资源之间的集成可减少管理开销并提供改进的用户体验,例如为 Azure 专用 DNS 自动创建虚拟网络链接。

提示

模板库从 Azure/企业级 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 保护,建议在特定情况下使用此选项。 查看有关 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 页。

虚拟 WAN 网络拓扑(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 Registry 中的“依赖项”选项卡上查看最新模块和提供程序依赖项。

重要

某些 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

}

后续步骤

适用于云采用框架企业级的 Terraform 模块提供了一个用于构建企业级登陆区域的加速路径。 它还可以灵活地扩展和自定义部署,同时利用简化方法来管理每个登陆区域的配置。

若要了解详细信息,请查看 Terraform Registry 上的模块,并浏览 GitHub 上的模块文档。 在文档中,可以找到有关如何自定义部署的更多示例和教程。

通过 HashiCorp Learn 了解如何部署 Azure 登陆区域 Terraform 模块。 在那里,你还可以了解该模块的某些部分的工作原理。