svre/azure-governance-landing-zone

GitHub: svre/azure-governance-landing-zone

一个合规优先的 Azure Landing Zone 参考实现,整合 Hub-Spoke 网络隔离、集中式出口、Policy-as-Code 护栏和 CI 安全门禁。

Stars: 0 | Forks: 0

# 治理架构师 — Azure Landing Zone(Hub–Spoke + Policy-as-Code + DevSecOps) 本仓库演示了一个**合规优先的 Azure Landing Zone** 实现,包含: - **Hub–Spoke 网络隔离** - 由 **Azure Firewall + UDR** 强制执行的**集中式出口** - **代码化护栏** (Azure Policy-as-Code) - 通过 GitHub Actions 实现的 **PR 门禁** (terraform 检查 + Checkov) ## 架构(最终版) ![Azure 治理 Landing Zone 架构](https://static.pigsec.cn/wp-content/uploads/repos/cas/08/0802567dd9f351df1d269759b53b40a1bf7f26c815ffd63fa1234f85c967a106.png) **核心理念** - Hub 托管共享安全和出口控制 (Azure Firewall)。 - Spoke (Prod / NonProd) 运行的**工作负载没有直接的 Internet 路径**。 - 使用 **UDR 默认路由**强制 Spoke 子网的出口流量经过 Hub Firewall。 - 治理护栏防止不合规的部署(位置/标签/公共 IP)。 - CI 确保每个 PR 都经过格式化、验证、规划 (plan) 和安全扫描。 ## 我构建的内容(按天记录) ### 第 1 天 — 项目初始化与 IaC 基线 **目标** - 创建项目仓库结构。 - 建立 Terraform 基础设施即代码基线。 - 准备用于存放架构图、证据和决策的文档文件夹。 **证据** - 已创建仓库文件夹:`.github/`、`docs/` 和 `infra/terraform/` - Terraform 文件已组织在 `infra/terraform` 下 - 已创建用于 README、证据索引和决策日志的文档文件 - GitHub 仓库已初始化,作为 Landing Zone 项目的唯一事实来源 ### 第 2 天 — Hub–Spoke 基础(Peering + IaC 基线) **目标** - 部署初始的 Hub-Spoke 网络基础。 - 在 Hub 和 Spoke 网络之间建立 VNet peering。 - 验证 Terraform 部署并确认没有意外的基础设施漂移。 - 为未来的应用和数据工作负载创建基线网络结构。 **证据** - Hub peering 已连接:`docs/architecture/day02-portal-hub-peering-connected.png` - RG 概览:`docs/architecture/day02-portal-rg-core-overview-ok.png` - Terraform apply 成功:`docs/architecture/day02-tf-dev-apply-ok.png` - Terraform plan 无更改:`docs/architecture/day02-tf-dev-plan-nochanges.png` ### 第 3 天 — 通过 Azure Firewall + UDR 实现集中式出口(SNAT + 审计) **目标** - 强制 Spoke 子网将 `0.0.0.0/0` 路由到防火墙的私有 IP (VirtualAppliance)。 - 证明出口 SNAT:VM 出口 IP 等于防火墙的公共 IP。 - 在 Log Analytics 中捕获防火墙日志以供审计。 **证据** - 防火墙输出(IP):`docs/architecture/day03-dev-tf-firewall-rg-core-output-ips-ok.png` - 子网关联证明(UDR 绑定到子网): - `docs/architecture/day03-dev-portal-udr-spoke-nonprod-assoc-snet-app-ok.png` - `docs/architecture/day03-dev-portal-udr-spoke-nonprod-assoc-snet-data-ok.png` - `docs/architecture/day03-dev-portal-udr-spoke-prod-assoc-snet-app-ok.png` - `docs/architecture/day03-dev-portal-udr-spoke-prod-assoc-snet-data-ok.png` - 最强证明(UDR 默认路由 → 防火墙): - `docs/architecture/day03-dev-portal-udr-spoke-nonprod-default-to-fw-ok.png` - `docs/architecture/day03-dev-portal-udr-spoke-prod-default-to-fw-ok.png` - SNAT 出口证明(运行命令): - `docs/architecture/day03-dev-cli-vm-spoke-nonprod-runcommand-egress-ip-ok.png` - 审计证明(Log Analytics 中的 AZFW 日志): - `docs/architecture/day03-dev-logs-azfw-rg-core-query-ok.png` - 资源清单证明: - `docs/architecture/day03-dev-portal-rg-rg-core-resource-list-ok.png` ### 第 4 天 — Policy-as-Code(拒绝证明) **强制执行的护栏** - 允许的位置:仅限 `eastasia`(实验环境) - 必需标签:`CostCenter`、`Owner` - 拒绝创建公共 IP(限定范围),但 Azure Firewall 的公共 IP 例外 **证据** - 可见的策略分配(Portal):`docs/architecture/day04-portal-subscription-policy-assign-ok.png` - 拒绝不允许的位置 (eastus):`docs/architecture/day04-cli-deny-location-eastus.png` - 拒绝缺少必需标签:`docs/architecture/day04-cli-deny-tags-missing.png` - 拒绝创建公共 IP:`docs/architecture/day04-cli-deny-publicip-rg-core.png` ### 第 5 天 — CI/CD PR 门禁(Terraform + Checkov) **PR 检查** - `terraform fmt -check` - `terraform validate` - `terraform plan` - Checkov 扫描 + 故意失败的证据 **证据** - CI 通过:`docs/architecture/day05-actions-ci-terraform-checkov-ok.png` - PR 被 CI 阻止(故意失败):`docs/architecture/day05-actions-ci-pr-blocked-failed.png` - Checkov 失败详情:`docs/architecture/day05-actions-ci-terraform-checkov-failed.png` ### 第 6 天 — 作品集打包(架构 + 叙述) **产出物** - 最终架构 PNG:`docs/architecture/day06-dev-drawio-landingzone-architecture-diagram-final.png` - 源图表:`docs/architecture/day06-dev-drawio-landingzone-architecture-source.drawio` - 证据索引:`docs/evidence.md` - 决策日志:`docs/decision-log.md` ## 仓库结构 ``` docs/ architecture/ # diagrams + screenshots evidence.md # evidence index decision-log.md # decision log / trade-offs infra/terraform/ envs/dev/ # dev environment modules/ # reusable modules (hub/spoke/firewall/udr/policy) .github/workflows/ ci.yml # PR gate workflow ``` ## 如何运行(复现) ``` cd infra/terraform/envs/dev terraform init terraform fmt -recursive terraform validate terraform plan terraform apply # 清理 terraform destroy ``` ## 注意事项(规范) - 切勿提交:`terraform.tfstate`、`.terraform/` 以及 plan 输出文件。 - 标签(`CostCenter`、`Owner`)支持责任追究和成本跟踪。 - 由于订阅限制,实验区域使用 `eastasia`。
标签:Azure, DevSecOps, ECS, Terraform, 上游代理, 合规治理, 网络安全, 隐私保护