mcpField
A
azure-landing-zone-checklist

azure-landing-zone-checklist

github.com/julianobarbosa云与 DevOps1466 次安装2 天前更新
代码仓库

关于 azure-landing-zone-checklist

用于在通过 Bicep 或 Terraform 部署前填写 Microsoft Azure Landing Zone Accelerator 清单的技能。它收集决策、应用基于 CAF 的默认建议、映射订阅与 IP 信息,并在 Excel 中标出需要人工确认的项目。

主要功能

  1. 01读取并填写 Excel 清单
  2. 02分批收集部署决策
  3. 03将订阅映射到 ALZ 角色
  4. 04整合现有 IP 地址规划
  5. 05为建议和待审项目添加说明
  6. 06处理 Bicep 与 Terraform 清单页

适用场景

  1. 01准备 ALZ Accelerator 部署
  2. 02将基础设施选择整理为已填写的清单
  3. 03检查订阅和网络前置条件
  4. 04标记需要人工跟进的未决事项

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/julianobarbosa/claude-code-skills --skill azure-landing-zone-checklist

安装后在 Claude Code 中输入/azure-landing-zone-checklist确认已加载。

附带文件references/alz-best-practices.md

详细介绍

Azure Landing Zone 清单技能

此技能将指导你填写 Microsoft Azure Landing Zone (ALZ) 加速器清单——这份电子表格记录了通过 ALZ Accelerator 工具使用 Bicep 或 Terraform 部署 ALZ 前所需的所有决策。

目标是生成一份填写完整的 Excel 清单,其中每项决策都有合理依据,默认采用最佳实践,并清楚标记需要人工输入的项目,提醒用户注意。

为什么这很重要

ALZ 加速器清单是平台 Landing Zone 部署的唯一事实来源。填写错误会导致网络配置错误、安全漏洞或数小时的返工。此技能通过应用 Microsoft Cloud Adoption Framework (CAF) 的建议,同时尊重用户现有的基础设施(IP 范围、订阅、命名约定),确保一致性。

工作流程

阶段 1:阅读清单

使用 openpyxl 读取上传的 .xlsx 清单,以了解其结构。ALZ 清单通常包含三个选项卡:

  • Accelerator - Bootstrap:IaC 类型、VCS、订阅、命名、CI/CD 设置
  • Accelerator - Bicep:场景选择、组件开关、IP 寻址、策略
  • Accelerator - Terraform:与 Bicep 相同,另有其他选项(AMBA、主权 LZ)

解析清单,识别哪些字段已有值(列 F = “Chosen Value”),哪些为空。这能告诉你用户已经做出哪些决定,以及哪些仍需输入。

阶段 2:询问用户

通过结构化问题收集决策。每批提出 3-4 个问题,避免让用户应接不暇。按以下顺序优先提问:

第 1 批 — 基础决策:

  • IaC 类型(Bicep 或 Terraform)
  • 版本控制系统(Azure DevOps、GitHub 或本地)
  • 网络拓扑场景(中心辐射型还是 vWAN、单区域还是多区域、Azure Firewall 还是 NVA)
  • Azure 区域

第 2 批 — 组件决策:

  • 要部署哪些组件(DDoS、Private DNS、Bastion、VPN Gateway、ExpressRoute、Zero Trust)
  • 安全态势(AMA、Defender 计划)

第 3 批 — 特定环境的详细信息:

  • Azure DevOps / GitHub 组织和项目名称
  • 订阅 ID(Management、Connectivity、Identity、Security)
  • 流水线审批人
  • IP 寻址(询问用户是否有现有文档)

当用户说“采用最佳实践”或推迟某项决策时,应用 references/alz-best-practices.md 中的建议。始终说明提出建议的原因——用户理解建议的依据后才会信任这些建议。

阶段 3:映射订阅

如果用户提供了订阅列表(来自 az account list 或类似命令),根据命名模式将订阅映射到 ALZ 角色:

模式ALZ 角色
*mgmt*、*management*管理
*connectivity*、*network*、*hub*连接
*identity*、*ad*、*entra*身份
*security*、*sentinel*、*defender*安全

如果缺少必需的订阅(通常是 Security),使用黄色高亮标记,并添加注释说明可选方案:

  1. 创建专用订阅(推荐)
  2. 与 Management 订阅共用(预算受限时的替代方案)
阶段 4:整合 IP 寻址

如果用户提供了 IP 文档(Markdown、CSV、Excel 或文本),解析文档以提取:

  • 订阅级 CIDR 块 — 映射到 ALZ 中心/辐射型 VNet
  • 现有中心 VNet 布局 — 识别子网分配(Gateway、Firewall、Bastion、共享服务)
  • 本地公共 IP — 将其写入注释,以供 VPN/防火墙规则参考
  • AKS 网络 — 适用时填写 Pod/服务 CIDR

对于 ALZ 中心 VNet,建议使用连接订阅的 CIDR 块采用以下子网布局:

Hub VNet: <connectivity-base>/16
  GatewaySubnet:                <base>.0.0/27     (30 hosts)
  AzureFirewallSubnet:          <base>.0.64/26    (62 hosts)
  AzureFirewallManagementSubnet:<base>.0.128/26   (62 hosts)
  AzureBastionSubnet:           <base>.0.192/26   (62 hosts)
  Shared Services:              <base>.1.0/24     (254 hosts)
  DNS Resolver Inbound:         <base>.2.0/28
  DNS Resolver Outbound:        <base>.2.16/28

如果未提供 IP 文档,则使用 ALZ 默认值并标记为待审核。

第 5 阶段:填写清单

使用 openpyxl 将值写入相应选项卡的 F 列(“Chosen Value”)。应用一致的格式:

from openpyxl.styles import Font, PatternFill, Alignment
from openpyxl.comments import Comment

# Confirmed values — green background
green_fill = PatternFill('solid', fgColor='CCE5CC')

# Items needing user action — yellow background + red bold text
yellow_fill = PatternFill('solid', fgColor='FFFF00')
action_font = Font(bold=True, color='FF0000', size=10)

# Informational notes — italic yellow background
note_fill = PatternFill('solid', fgColor='FFFFCC')
note_font = Font(italic=True, size=10)

对于每个填写的单元格:

  • 添加批注,说明理由或最佳实践参考
  • 对已确认的决策使用绿色填充
  • 对需要用户操作的项目(例如“TO BE DEFINED”“TO BE PROVIDED”)使用黄色填充和红色文字
  • 对使用默认值、但应由用户审核的项目使用浅黄色填充和斜体

选项卡专属逻辑:

仅填写与用户 IaC 选择相匹配的选项卡。如果另一选项卡中有上次尝试留下的值,则将其清空。对于当前选项卡:

  1. Scenarios 部分:将选定的场景设为“Yes”,其他场景全部设为“No”。用更亮的绿色突出显示选中的场景。
  2. Options 部分:应用用户选择的组件。对于未明确讨论的选项,应用最佳实践默认值,并在批注中注明。
  3. Bootstrap 选项卡:无论选择哪种 IaC,都始终填写,因为这是共享内容。
第 6 阶段:呈现结果

保存已填写的清单后:

  1. 打印汇总表,显示所有已填写的值
  2. 列出标记为需要用户操作的项目(黄色高亮)
  3. 指出任何架构方面的注意事项(例如,若 ALZ 区域与现有基础设施所在区域不同,则需要进行跨区域对等互连)
  4. 提供文件下载链接

最佳实践建议

阅读 references/alz-best-practices.md,了解完整建议。用户选择暂不决定时,应用以下关键默认值:

  • 专用网络:true(状态存储绝不应公开访问)
  • 独立的 CI/CD 模板仓库:true(在代码和流水线定义之间建立安全边界)
  • 分支策略:true(所有变更都要求通过 PR 提交)
  • 自托管 Agent/运行器:true(专用网络所必需)
  • DDoS Protection:Yes(为所有 VNet 资源提供网络层防护)
  • Private DNS Zones:Yes(跨中枢辐射型拓扑使用 Private Endpoints 所必需)
  • Azure Bastion:Yes(无需暴露公共 IP 即可安全访问 VM)
  • AMA(Azure Monitoring Agent):保持启用(集中式监控)
  • Defender 计划:保持启用(跨所有资源类型进行威胁检测)
  • Zero Trust:Yes(最小权限访问和微分段)
  • AMBA 警报(仅 Terraform):Yes(主动监控平台资源)
  • Sovereign Landing Zone:No(除非合规要求明确规定必须使用)

跨区域注意事项

如果用户的现有基础设施与 ALZ 部署位于不同区域,请在 Bootstrap 选项卡的区域批注中标记这一点。他们需要规划 ALZ 中枢与任何现有中枢辐射型拓扑之间的跨区域 VNet 对等互连。

单元格引用映射

清单采用固定结构。写入值时,请使用这些确切的单元格引用,以避免行偏移错误。始终先检查 B 列(Name)是否与预期字段相符,再写入 F 列。

Bootstrap 选项卡(加速器 - Bootstrap)
行单元格字段(B 列)配置设置(D 列)
4F4基础设施即代码iac_type
5F5版本控制系统bootstrap_module_name
6F6入门模块starter_module_name
8F8Bootstrap 资源区域bootstrap_location
9F9父级管理组 IDroot_parent_management_group_id
10F10管理订阅 IDsubscription_id_management
11F11连接订阅 IDsubscription_id_connectivity
12F12标识订阅 IDsubscription_id_identity
13F13安全订阅 IDsubscription_id_identity(注意:模板中的拼写错误)
15F15Bootstrap 订阅 IDbootstrap_subscription_id
16F16资源命名:服务名称service_name
17F17资源命名:环境名称environment_name
18F18资源命名:后缀数字postfix_number
21F21为模板使用单独的存储库use_separate_repository_for_templates
22F22使用专用网络use_private_networking
23F23允许从我的 IP 访问存储allow_storage_access_from_my_ip
24F24应用审批者apply_approvers
25F25创建分支策略create_branch_policies
28F28Azure DevOps PATazure_devops_personal_access_token
29F29Azure DevOps Agent PATazure_devops_agents_personal_access_token
30F30Azure DevOps 组织azure_devops_organization_name
31F31Azure DevOps 旧版 URLazure_devops_use_organisation_legacy_url
32F32创建 Azure DevOps 项目azure_devops_create_project
33F33Azure DevOps 项目azure_devops_project_name
34F34使用自托管 Agentuse_self_hosted_agents

注意:第 7、14、19、20、26、27、35、36、41 行为空白或为分节标题,请跳过。

Bicep 选项卡(加速器 - Bicep)— 场景
行单元格场景
6F6多区域中心辐射型网络 + Azure Firewall
7F7多区域 vWAN + Azure Firewall
8F8多区域中心辐射型网络 + NVA
9F9多区域 vWAN + NVA
10F10仅管理组、策略和管理
11F11单区域中心辐射型网络 + Azure Firewall
12F12单区域 vWAN + Azure Firewall
13F13单区域中心辐射型网络 + NVA
14F14单区域 vWAN + NVA
Bicep 选项卡 — 选项(第 17-30 行)
行单元格选项
17F17资源命名约定
18F18自定义管理组名称
19F19部署 DDOS Protection Plan
20F20部署 Private DNS
21F21部署 Bastion Host
22F22部署 VPN Gateway
23F23部署 ExpressRoute Gateway
24F24部署到 2 个以上区域
25F25IP 地址
26F26更改策略分配强制模式
27F27移除策略分配
28F28关闭 Azure Monitoring Agent
29F29关闭 Defender 计划
30F30零信任安全
Terraform 选项卡(加速器 - Terraform)

场景布局与 Bicep 相同(第 6–14 行)。选项位于第 17–32 行:

行单元格选项
17F17资源命名约定
18F18自定义管理组名称
19F19部署 DDOS Protection Plan
20F20部署 Private DNS
21F21部署 Bastion Host
22F22部署 VPN Gateway
23F23部署 ExpressRoute Gateway
24F24部署到 2 个以上区域
25F25IP 寻址
26F26更改策略分配的强制模式
27F27移除策略分配
28F28关闭 Azure Monitoring Agent
29F29部署 Azure Monitoring Baseline Alerts (AMBA)
30F30关闭 Defender 计划
31F31零信任安全
32F32主权着陆区

验证方法:写入任何值之前,先读取单元格 B{row} 并确认其与预期字段名称一致。如果不一致,则扫描工作表以找到正确的行。这样可以防止因模板版本差异而导致的数据静默损坏。

输出格式

最终交付内容为一个 .xlsx 文件,其中包含:

  • 保留原始模板中的全部三个选项卡
  • 在 F 列中填入所选值
  • 添加附有理由和最佳实践参考的单元格批注
  • 颜色编码:绿色(已确认)、黄色(需要处理)、浅黄色(默认值,需审核)
  • 在对话中清晰总结所有决定和标记项

注意事项

  • openpyxl 行索引从 1 开始——偏移一行的错误会静默地破坏错误的行;提交前请通过读取 cell.value 进行验证。
  • 订阅正则表达式匹配在非标准命名时会失效(例如 sub-xyz-platform-mgmt)——模式匹配失败时,请改用枚举方式。
  • 跨区域注意事项:跨区域的 VNet 对等互连会产生出口流量费用;默认的 ALZ 模板未对此进行定价。
  • Excel 复选框与单元格值:openpyxl 无法写入复选框状态——使用单元格值 "✓" + 命名范围表示已选中。
  • 订阅配额传播:请求的配额增加在实际应用之前会显示为 "Approved"——请使用 az vm list-usage 进行验证。

评论

支持 Markdown