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

Azure 登陆区域 - Terraform 模块设计注意事项

本文讨论使用 Azure 登陆区域 Terraform 模块时要考虑的重要区域。 该模块提供了一种基于 Azure 登陆区域概念体系结构来部署和操作 Azure 平台的个性化方法,如云采用框架 (CAF) 中详述。

Terraform 是一种基础结构即代码 (IaC) 开源工具,由 HashiCorp 创建,该工具使用声明性语法部署基础结构资源。 该工具是可扩展的,具有跨平台支持,并通过状态跟踪启用不可变基础结构。


重要

Terraform 注册表:Azure 登陆区域 Terraform 模块上提供了该模块。 可以使用它作为起点,并根据需要进行配置。

注意

存在多种部署技术的实现,包括基于门户的 ARM 模板和 Terraform 模块。 部署技术的选择不应影响生成的 Azure 登陆区域部署。

ALZ Terraform 加速器

若要快速开始使用 Terraform 来部署 ALZ,可以利用设计用作模板的 ALZ Terraform 加速器。 此存储库提供了 Azure 登陆区域 Terraform 模块的支持实现,以及 Azure DevOps 管道和 GitHub Actions 工作流。

ALZ Terraform 加速器遵循一个 3 阶段方法:

  1. 先决条件:配置凭据和订阅的说明。
  2. 启动:运行 PowerShell 脚本以生成持续交付环境。
  3. 运行:更新模块(如果需要)以满足组织的需求,并通过持续交付进行部署。

从用户指南着手,逐步启动并运行 Azure 登陆区域环境。

设计

显示 Azure 登陆区域概念体系结构的示意图。

该体系结构利用 Terraform 的可配置性,由主业务流程模块组成。 该模块封装 Azure 登陆区域概念体系结构的多个核心功能。 可以单独或部分部署每个功能。 例如,可以仅部署中心网络、Azure DDoS 防护计划或 DNS 资源。 执行此操作时,需要考虑到这些功能具有依赖项。

体系结构利用业务流程协调程序方法来简化部署体验。 你可能更喜欢使用一个或多个专用模块实例来实现每个功能,其中每个实例专用于体系结构的特定部分。 只要配置正确,一切皆有可能

模块

Terraform 中的核心概念是模块的使用。 模块使你能够将部署组织成逻辑分组。 使用模块,可以通过封装部署的复杂细节来改善 Terraform 文件的可读性。 你还可以轻松地将模块重用于不同的部署。

在定义和部署登陆区域时,重新使用模块的能力带来了真切的好处。 它在代码中实现了可重复、一致的环境,同时减少了大规模部署所需的工作量。

Azure 登陆区域的 Terraform 实现是使用充当业务流程层的单个模块进行的。 业务流程层允许你选择要使用该模块部署和管理的资源。 可以在同一环境中多次使用该模块来独立部署资源。 这对于负责不同功能或子资源集合的组织非常有用。

层和暂存

实现侧重于 Azure 登陆区域概念体系结构的中心资源层次结构。 设计以以下功能为中心:

  • 核心资源
  • 管理资源
  • 连接资源
  • 标识资源

模块将资源分组到这些功能中,因为打算将这些资源一起进行部署。 这些组构成了实现的逻辑阶段。

可以使用功能标志来控制各个功能的部署。 此方法的优点是能够随时间以增量方式添加到环境中。 例如,可以从少量功能入手。 准备就绪后,可以在后续阶段添加剩余功能。

核心资源

模块的核心资源功能与云采用框架的资源组织设计区域保持一致。 它为 Azure 登陆区域概念体系结构部署基础资源。

显示由 Terraform 模块部署的核心 Azure 登陆区域体系结构的示意图。

原型

核心资源功能中的一个重要概念是包含原型。

原型提供了一种可重用的基于代码的方法,用于定义必须在给定范围内应用哪些策略定义、策略集定义、策略分配、角色定义和角色分配。 在 Terraform 实现中,这些决策封装为原型定义

若要创建登陆区域,将管理组与原型定义相关联。 在下面的公司登陆区域示例中,archetype_config 具有指向“es_corp”原型定义的指针。 该定义包含将添加到此管理组的所有策略和角色配置。

  es_corp_landing_zones = {
    "contoso-corp" = {
      display_name               = "Corp"
      parent_management_group_id = "contoso-landing-zones"
      subscription_ids           = []
      archetype_config           = {
        archetype_id ="es_corp"
        parameters   = {}
        access_control = {}
    }
  }

当内置原型不符合你的要求时,该模块提供了创建新原型更改现有原型的选项。

管理资源

模块的管理功能与云采用框架的管理设计区域保持一致。 此功能提供将管理和监视资源部署到管理平台登陆区域的选项。

连接资源

模块的连接资源功能提供了部署 Azure 登陆区域概念体系结构网络拓扑和连接的选项。

标识资源

模块的标识资源功能与云采用框架的 Azure 标识和访问管理设计区域保持一致。 此功能提供在标识平台登陆区域中配置策略的选项。

注意

没有资源部署了此功能。 当 deploy_identity_resources 变量设置为 true 时,Azure Policy 分配配置为保护标识平台登陆区域订阅中的资源。

模块说明

本部分简要概述了此模块部署的资源。

资源类型 说明 有用链接
核心 管理组 管理组是 Azure 租户中的最高级别资源。 使用管理组可以更轻松地管理资源。 可以在管理组级别应用策略,较低级别的资源将继承该策略。 具体而言,可以在管理组级别应用以下项,这些项将由管理组下的订阅继承:
  • Azure 策略
  • Azure 基于角色的访问控制 (RBAC) 角色分配
  • 成本控制
核心 策略定义、策略分配和策略集定义 DeployIfNotExists (DINE) 或修改策略有助于确保构成登陆区域的订阅和资源符合要求。 策略通过策略分配分配给管理组。 这些策略减轻了登陆区域的管理负担。 策略集定义将策略集组合在一起。

并非所有客户都可以使用 DINE 或修改策略。 如果你遇到这种情况,CAF 自定义策略指南提供了相应指导。
核心 角色定义和角色分配 基于角色的访问控制 (RBAC) 简化了系统中用户权限的管理。 无需管理个人权限,而是确定系统中不同角色所需的权限。 Azure RBAC 具有多个内置角色。 自定义角色定义允许你为环境创建自定义角色。

标识和访问管理 (IAM) 是云计算中的关键安全边界。 Azure RBAC 允许跨管理组和订阅对服务主体、托管标识或安全组执行内置角色或自定义角色定义的角色分配。
管理 Azure Monitor、Azure 自动化和 Microsoft Sentinel 通过 Azure Monitor、Azure 自动化和 Microsoft Sentinel 可监视和管理基础结构和工作负载。 Azure Monitor 是一种解决方案,可用于从环境中收集、分析和处理遥测数据。

Microsoft Sentinel 是云原生的安全信息和事件管理 (SIEM)。 该功能允许:
  • 收集 - 在整个基础结构中收集数据
  • 检测 - 检测以前未检测到的威胁
  • 响应 - 通过内置编排应对合法威胁
  • 调查 - 通过人工智能调查威胁

Azure 自动化是基于云的自动化系统。 其中包括:
  • 配置管理 - 清点和跟踪 Linux 和 Windows 虚拟机的更改并管理所需的状态配置
  • 更新管理 - 评估 Windows 和 Linux 系统合规性并创建计划部署以满足合规性
  • 流程自动化 - 自动执行管理任务
连接 此处列出的核心网络资源类型 网络拓扑是 Azure 登陆区域部署中的一个关键考虑因素。 CAF 重点介绍两种核心网络方法
  • 基于 Azure 虚拟 WAN 的拓扑
  • 传统拓扑
连接 Azure DDoS 防护 Azure 登陆区域指南建议启用 Azure DDoS 网络保护。 此服务针对 DDoS 攻击提供转包保护。
连接 DNS 区域、专用 DNS 区域和专用 DNS 区域虚拟网络链接 可以部署专用 DNS 区域以支持使用专用终结点。 专用终结点是分配来自虚拟网络的专用 IP 地址的 NIC。 可以使用专用 IP 地址与支持 Azure 专用链接的服务进行安全通信。 专用 DNS 区域可配置为将服务的完全限定域名 (FQDN) 解析为专用终结点专用 IP 地址。

使用 Terraform 模块

部署核心资源

默认情况下,模块将部署以下层次结构,这是登陆区域管理组的核心集:

  • Root
    • 平台
      • 标识
      • 管理
      • 连接
    • 登陆区域
    • 已停用
    • 沙盒

SAP、Corp 和 Online 登陆区域管理组并非适用于所有人,因此没有设置默认部署。 以下是部署的方法:

  1. 出于演示目的,可以将 deploy_demo_landing_zones 变量设置为 true,以便部署 SAP、Corp 和 Online 登陆区域
  2. 出于生产目的,可以通过将以下变量设置为 true 来打开所需管理组:
    • deploy_corp_landing_zones
    • deploy_online_landing_zones
    • deploy_sap_landing_zones
  3. 可以通过创建自定义登陆区域定义来部署自己的自定义登陆区域管理组

部署管理资源

若要部署管理资源,必须将 deploy_management_resources 变量设置为 true,并且 subscription_id_management 变量必须设置为要在其中部署资源的管理订阅的 ID。

deploy_management_resources = true
subscription_id_management = <management subscription id>

部署连接资源

部署连接资源提供了有关如何部署这些拓扑的指导。

部署标识资源

若要部署标识功能,必须将 deploy_identity_resources 变量设置为 true,并且 subscription_id_identity 变量必须设置为要在其中配置策略的标识订阅的 ID。

deploy_identity_resources = true
subscription_id_identity = <identity subscription id>

自定义 Terraform 实现

作为云采用框架的一部分提供的 Azure 登陆区域实现符合各种要求和用例。 但是,通常也存在一些场景,需要自定义以满足特定业务需求。

提示

有关详细信息,请参阅定制 Azure 登陆区域体系结构以满足要求

Azure 登陆区域 Terraform 模块可用作自定义部署的基础。 它为你提供了一种加速实现的方法,消除了从头开始的需要,因为需要进行特定的更改,从而排除了现成的选项。

GitHub 徽标 GitHub 存储库 wiki 中提供了有关自定义模块的信息 GitHub:Azure 登陆区域 Terraform 模块 - Wiki。 可以使用它作为起点,并根据需要进行配置。