olmidej-a11y/layicorp-platform-governannce
GitHub: olmidej-a11y/layicorp-platform-governannce
一个基于 Bicep 的企业级 Azure Landing Zone 完整实现,整合 Hub-spoke 网络架构、Azure Policy 治理、安全工作负载部署和 RBAC 审计自动化。
Stars: 0 | Forks: 0
# LayiCorp 云治理与 Landing Zone
## 概述
本项目实现了一个具有真实治理、安全网络和受控工作负载部署的 Azure Landing Zone。它使用 Azure Bicep、Azure Policy 和用于 RBAC 审计的 PowerShell 自动化构建。
该环境旨在反映真实的 Azure 平台模式,包括:
- Hub and spoke(中心辐射)网络架构
- 集中式防火墙和共享服务
- 部门级 Spoke(IT, HR, SM)
- 通过 Azure Policy 进行标记和安全强制执行
- 工作负载 VM 加入到受监管的 Spoke 中
- 备份和 RBAC 审计自动化
Landing Zone 从平台层向下强制执行安全和运营标准,确保部署到环境中的任何工作负载自动继承治理、分段和访问控制。
## 为什么这很重要
如果没有受监管的 Landing Zone,Azure 环境会变得不一致、难以保护且难以扩展。
本项目展示了如何将网络、策略执行、安全工作负载加入和 RBAC 审计结合到一个结构化的 Azure 平台基础中。
## 架构
平台遵循 Hub and Spoke(中心辐射)拓扑。Hub 托管共享安全服务。每个 Spoke 代表一个拥有独立地址空间和子网的部门。
每个 Spoke 都可以独立扩展,但所有检查、路由和共享服务仍集中在 Hub 中,这符合 Microsoft 的 Cloud Adoption Framework Landing Zone 标准。
```
flowchart LR
subgraph Hub["Hub VNet (Shared Services)"]
FW["Azure Firewall"]
end
subgraph ITSpoke["IT Spoke VNet"]
ITFE["Frontend Subnet"]
ITBE["Backend Subnet"]
ITDB["Database Subnet"]
VM["Workload VM (vm-it-app01)"]
end
subgraph HR["HR Spoke VNet"]
HRFE["Frontend Subnet"]
HRBE["Backend Subnet"]
HRDB["Database Subnet"]
end
subgraph SM["SM Spoke VNet"]
SMFE["Frontend Subnet"]
SMBE["Backend Subnet"]
SMDB["Database Subnet"]
end
ITFE --> VM
VM --> ITBE
ITBE --> ITDB
Hub <--> ITSpoke
Hub <--> HR
Hub <--> SM
```
选择 Hub-and-spoke 架构是因为它在 Hub 中集中了安全性、路由和共享服务,同时将每个部门隔离在其自己的 Spoke 中。这符合多团队或多租户环境的企业最佳实践。
这提供了:
- 部门之间的隔离
- 安全和检查的中心阻塞点
- 东西向和南北向流量的清晰路径
## 网络基础
网络使用位于 infra/networking 的 Bicep 模板进行部署。
网络架构作为 Landing Zone 的骨干。它确保工作负载的分段、集中的安全检查以及通过 Hub 的一致路由。此结构限制了横向移动,确保了跨部门职责的清晰分离,并通过防火墙实现可预测的路由以进行检查和日志记录。
### 典型结构:
```
infra/
networking/
hub.bicep
spoke-hr.bicep
spoke-it.bicep
spoke-sm.bicep
peerings.bicep
modules/
vnet.bicep
nsg.bicep
subnet.bicep
firewall.bicep
parameters/
hub.parameters.json
spoke-hr.parameters.json
spoke-it.parameters.json
spoke-sm.parameters.json
```
首先执行 Hub 部署以建立共享服务(如 Azure Firewall)。然后独立部署每个 Spoke,并将其与 Hub 对等互连,以保持 HR、IT 和 SM 工作负载之间的隔离。
网络部署负责:
- Hub 虚拟网络
- IT、HR 和 SM Spoke 虚拟网络
- 用于前端、后端和数据库的子网
- Hub 和 Spoke 之间的 VNet 对等互连
- Hub 中的 Azure Firewall
这符合常见的 Azure Landing Zone 模式,可以在其他订阅或环境中重用。
## 工作负载部署
IT 部门有一个工作负载 VM,使用 Bicep 部署到 IT Spoke 中。
### 示例结构:
```
infra/
workload/
it-vm.bicep
it-vm.parameters.json
```
该 VM 具有:
- 仅私有 IP
- 位于 IT Spoke 前端子网中的网络接口
- 仅允许来自 Azure Bastion 的 RDP 的 NSG
- 无面向互联网的 RDP 或 SSH
- 作为参数传递的凭据
这种工作负载部署模式成为进入平台的所有未来应用程序的蓝图,确保一致的安全态势和集中的治理。
## 治理
治理在网络基础部署后应用。在基础部署后应用治理是本项目的有意安排。它允许环境显示不合规的资源,以用于演示和审计目的,这在面试、演示和教育场景中非常有用。在真实的生产 Landing Zone 中,这些策略通常会在工作负载部署之前应用,以尽早阻止违规。
### 标记强制执行
资源上需要以下标记。如果缺少或为空,则拒绝部署:
- Owner
- Environment
- CostCenter
### 网络和安全控制
- 禁止将 RDP、SSH 或 WinRM(端口 3389、22、5985、5986)暴露给互联网的 NSG 规则。
- 公共 IP 使用仅限于批准的服务,如 Firewall、Bastion、VPN Gateway、Load Balancer 和 Application Gateway。
- 除非策略明确允许,否则 VM NIC 不能接收公共 IP 地址。
### 资源组和资源因缺少标记而被审计
这些策略确保 Landing Zone 持续应用元数据,限制开放的管理端口,并清晰地查看不合规资源。
一旦应用,这些策略将在整个环境中强制执行操作纪律。
## 备份和恢复
配置了一个 Recovery Services Vault 以保护 IT 工作负载 VM。
配置包括:
- 每日备份策略
- 工作负载 VM 注册为受保护项
- 至少一个成功的备份作业
- 证明在需要时可以恢复的证据
这表明平台不仅已部署,而且在操作上已准备就绪。
## RBAC 审计自动化
使用基于 PowerShell 的审计脚本审查和导出基于角色的访问控制。这确保了特权访问被记录,并且不会无意中授予过多的权限。
文件 scripts/rbac-audits.ps1 对订阅运行 RBAC 审计。
它生成:
- 所有角色分配的 CSV
- 高特权角色(如 Owner、Contributor 和 Security Admin)的 CSV
- 直接用户分配的 CSV
- 来宾用户分配的 CSV
- 导出文件写入 exports 文件夹,该文件夹被 git 排除,以避免泄露任何特定于租户的数据。
这为治理团队提供了一种可重复的审查访问权限的方法,并支持合规性审计。
## 影响
- 实施了具有 Hub-and-spoke 分段和集中安全控制的受监管 Azure Landing Zone
- 使用 Azure Policy 强制执行标记、网络安全和公共访问限制
- 实现了将安全工作负载加入到受控 Spoke 环境中
- 通过 VM 备份和 RBAC 审计自动化增加了操作就绪性
- 展示了如何将云治理和平台控制从基础层构建到 Azure 环境中
## 仓库结构
```
infra/
networking/
hub.bicep
peerings.bicep
spoke-hr.bicep
spoke-it.bicep
spoke-sm.bicep
modules/
firewall.bicep
nsg.bicep
subnet.bicep
vnet.bicep
parameters/
hub.parameters.json
spoke-hr.parameters.json
spoke-it.parameters.json
spoke-sm.parameters.json
workloads/
it-vm.bicep
it-vm.parameters.json
policy/
require-tag-owner.json
require-tag-environment.json
require-tag-costcenter.json
deny-open-nsg.json
audit-rg-missing-tags.json
initiative-baseline.json
scripts/
rbac-audits.ps1
exports/ (gitignored)
README.md
```
这种结构将治理、网络和工作负载关注点分开,允许每一层独立演进。它还反映了企业模式,即团队维护独立的模块,但通过标准化的管道进行部署。每个文件夹都设计为可重用、模块化且易于集成到 CI/CD 工作流中。
其意图是明确分离基础设施、治理和自动化。
## 部署
部署遵循分阶段方法,反映了本项目使用的实际顺序。网络和工作负载先部署,之后再应用治理,以便为了演示目的仍然可以部署不合规的资源。
### 1. 创建资源组
```
az group create --name RG-LayiCorp-Network --location westeurope
az group create --name RG-LayiCorp-IT --location westeurope
```
### 2. 部署 Hub VNet 和防火墙
```
az deployment group create \
--resource-group RG-LayiCorp-Network \
--template-file ./infra/networking/hub.bicep \
--parameters @./infra/parameters/hub.parameters.json
```
### 3. 部署三个 Spoke VNet
IT Spoke:
```
az deployment group create \
--resource-group RG-LayiCorp-Network \
--template-file ./infra/networking/spoke-it.bicep \
--parameters @./infra/parameters/spoke-it.parameters.json
```
HR Spoke:
```
az deployment group create \
--resource-group RG-LayiCorp-Network \
--template-file ./infra/networking/spoke-hr.bicep \
--parameters @./infra/parameters/spoke-hr.parameters.json
```
SM Spoke:
```
az deployment group create \
--resource-group RG-LayiCorp-Network \
--template-file ./infra/networking/spoke-sm.bicep \
--parameters @./infra/parameters/spoke-sm.parameters.json
```
### 4. 在 Hub 和 Spoke 之间部署 VNet 对等互连
```
az deployment group create \
--resource-group RG-LayiCorp-Network \
--template-file ./infra/networking/peerings.bicep
```
部署 Hub 和 Spoke 后,您应该看到:
- 1 个带有防火墙和共享子网的 Hub 虚拟网络
- 3 个 Spoke VNet(HR、IT、SM)
- 成功的 VNet 对等连接(仅 Spoke 到 Hub)
- 与部门特定 IP 范围匹配的子网
### 5. 将 IT 工作负载 VM 部署到 IT Spoke 中
```
az deployment group create \
--resource-group RG-LayiCorp-IT \
--template-file ./infra/workloads/it-vm.bicep \
--parameters @./infra/workloads/it-vm.parameters.json
```
这会将 vm-it-app01 放置在 vnet-spoke-it-layicorp 前端子网中,并配备私有 NIC 和仅允许来自 Bastion 的 RDP 的 NSG。
### 6. 从仓库定义创建计划策略
```
az policy set-definition create \
--name layicorp-baseline-governance \
--definition ./policy/initiative-baseline.json
```
然后将其分配在订阅范围:
```
az policy assignment create \
--name layicorp-baseline-governance-assignment \
--policy-set-definition layicorp-baseline-governance \
--scope /subscriptions/
```
### 7. 运行 RBAC 审计脚本
从仓库根目录:
```
./scripts/rbac-audits.ps1 -SubscriptionId
```
这将把 CSV 写入 exports 文件夹。
## 验证
验证步骤证明 Landing Zone 不仅已部署,而且受到治理、保护并完全运行。
为此项目收集的证据包括:
- 资源组概览
- Hub 和 Spoke VNet 配置
- Azure Firewall 部署
- VNet 对等互连状态
- 策略计划和策略定义视图
- 显示不合规资源的策略合规性视图(由于部署顺序,这是预期的)
- VM 概览和网络,显示无公共 IP
- 证明管理端口受到限制的 NSG 入站规则
- VM 的 Recovery Services Vault 和备份状态
- 按资源组分组的成本分析
- RBAC 审计脚本的终端输出和导出的 CSV 文件
这些验证点表明平台已部署、受治理且可运行,而不仅仅是理论上的。
## 总结
本项目展示了如何构建 Azure Landing Zone,并将治理、分段和操作控制从平台层向下嵌入。它将网络、策略执行、工作负载加入、备份和 RBAC 审计结合到一个可重用的 Azure 基础中。
标签:AI合规, Azure, Azure Firewall, Azure Policy, Azure虚拟网络, Bicep, CAF, EC2, Hub-and-Spoke, IaC, IPv6, IT运维, Landing Zone, PowerShell, RBAC审计, Socks5代理, 云治理, 云采用框架, 企业云架构, 基础架构即代码, 备份自动化, 安全合规, 混合云, 网络代理, 网络安全, 虚拟机入驻, 资源标签, 身份与访问管理, 隐私保护