shahabhassankhan/NorthBridge-Cloud-Solutions-Identity-Access-Management-Lab
GitHub: shahabhassankhan/NorthBridge-Cloud-Solutions-Identity-Access-Management-Lab
基于 Azure 构建的身份与访问管理实验室,通过 Managed Identity、RBAC 和 Key Vault 端到端演示了无密码、零硬编码密钥的安全资源访问方案。
Stars: 0 | Forks: 0
# NorthBridge — 身份与访问管理实验室
为一家虚构公司构建的身份与访问实验室,涵盖 Microsoft Entra ID、Azure RBAC、Key Vault 和 Managed Identity。该项目的核心在于正确实现无密码访问:不存储密码、不硬编码密钥、不在明文中暴露连接字符串。
**作者:** Shahab Hassan Khan
## 目录
- [概述](#overview)
- [业务场景](#business-scenario)
- [目标](#objectives)
- [使用的 Azure 服务](#azure-services-used)
- [创建的资源](#resources-created)
- [项目步骤](#project-steps)
- [身份验证流程](#authentication-flow)
- [验证](#verification)
- [展示的安全概念](#security-concepts-demonstrated)
- [展示的技能](#skills-demonstrated)
- [截图](#screenshots)
- [未来改进](#future-improvements)
## 概述
本项目在 Azure 上为一家虚构公司 NorthBridge Cloud Solutions 搭建了一个安全的身份与访问管理环境。它展示了 Microsoft Entra ID、Azure RBAC、Managed Identity、Key Vault、Storage、Windows Server VM 和 Log Analytics 是如何协同工作的。
这里测试的核心思想是:虚拟机能否在不存储任何密码、密钥或连接字符串的情况下访问 Key Vault 和 Blob Storage。借助 Managed Identity,这是完全可以实现的,本实验室端到端地证明了这一点。
## 业务场景
NorthBridge Cloud Solutions 需要按部门组织员工,按工作角色而非个人分配权限,安全地存储机密而非将其嵌入代码中,并要求应用程序进行无密码身份验证。本实验的所有操作都遵循最小权限原则,这意味着每个身份只获得其所需的访问权限,仅此而已。
## 目标
- 在 Microsoft Entra ID 下组织身份资源
- 按部门对用户进行分组,并将角色分配给组而不是个人
- 使用最小权限原则应用 Azure RBAC
- 将机密存储在 Key Vault 中,而不是进行硬编码
- 在 VM 上启用 Managed Identity,使其无需凭据即可进行身份验证
- 验证对 Key Vault 和 Blob Storage 的无密码访问
- 通过 Log Analytics 集中管理日志
## 使用的 Azure 服务
- Microsoft Entra ID
- Azure RBAC
- Azure Virtual Machine
- Azure Virtual Network
- Azure Storage Account 和 Blob Storage
- Azure Key Vault
- Managed Identity
- Azure CLI
- Azure Monitor
- Log Analytics Workspace
## 创建的资源
| 资源 | 名称 |
|---|---|
| Resource Group | `nbl3-identity-rg` |
| Virtual Network | `nbl3-identity-vnet` |
| Windows Server VM | `nbl3-vm01` |
| Storage Account | 创建于资源组内部 |
| Blob Container | `documents` |
| 测试 Blob | `identity-test.txt` |
| Key Vault | 创建于资源组内部 |
| Log Analytics Workspace | `nbl3-law01` |
## 项目步骤
**身份设置。** 创建了一个专用的资源组,将所有与身份相关的资源集中管理。创建了代表不同角色(IT 管理员、开发人员、HR、审计员)的 Entra ID 用户,随后创建了相匹配的安全组(IT Admins、Developers、HR、Auditors)并将每个用户添加到其所在的组中。将权限分配给组而不是个人,使得随着后续更多人员的加入,整个系统具备良好的可扩展性。
**访问控制。** 根据每个角色的实际需求为其组分配了 Azure 的内置角色:IT Admins 分配为 Owner,Developers 分配为 Contributor,Auditors 分配为 Reader。没有任何组获得了超出其工作要求的访问权限。
**安全存储。** 为应用程序文件创建了一个 Storage Account,并为机密创建了一个 Key Vault,接着向该保险库添加了一个测试机密,并为管理员账户分配了 Key Vault Secrets Officer 角色,以便能够妥善管理机密。
**基础设施。** 使用 Azure CLI 而非门户构建了虚拟网络和 Windows Server VM,因为 CLI 更贴近真实环境中的实际操作方式。
**Managed Identity。** 在 VM 上启用了系统分配的 Managed Identity。这为 VM 在 Azure 中提供了自己的身份,因此无需使用用户名和密码登录,Azure 会直接识别这台机器本身。
**授权。** 将 Storage Blob Data Reader 和 Key Vault Secrets User 角色直接分配给 VM 的 Managed Identity,使其无需触及任何密码即可读取 blob 数据和检索机密。
**无密码身份验证。** 通过 RDP 连接到 VM,在其内部安装了 Azure CLI,并使用 `az login --identity` 进行了身份验证。Azure 直接向 VM 颁发了访问令牌,整个过程无需涉及任何用户名或密码。
**监控。** 创建了一个 Log Analytics Workspace 并为 Key Vault 启用了诊断日志,从而记录每一次对机密的访问以备审查。
## 身份验证流程
```
Microsoft Entra ID
│
Azure RBAC
│
──────────────────────────
│
Windows Server VM
│
System Assigned Managed Identity
│
──────────────────────────
│
├────────────► Azure Key Vault
│ │
│ └── Secret
│
├────────────► Azure Storage
│ │
│ ├── Blob Container
│ └── identity-test.txt
│
└────────────► Log Analytics
```
## 验证
一旦配置好 Managed Identity,就可以直接在 VM 内部使用 Azure CLI 测试两件事:
- 从 Key Vault 检索存储的机密,确认无密码访问生效
- 使用 `--auth-mode login` 列出 Storage 中的容器和 blob,确认 VM 在完全不涉及存储密钥、SAS token 或连接字符串的情况下即可访问 Storage
两者均在首次尝试时即告成功,这证实了 Managed Identity 上的 RBAC 分配是正确的。
## 展示的安全概念
Microsoft Entra ID 身份管理、安全组、Azure RBAC、最小权限原则、Managed Identity、无密码身份验证、Key Vault 机密管理、无密钥 Storage 授权、Azure CLI 自动化,以及通过 Log Analytics 进行集中监控。
## 展示的技能
Microsoft Entra ID、Azure 身份与访问管理、Azure RBAC、安全组、Managed Identity、无密码身份验证、Key Vault、Azure Storage、blob 容器、虚拟机、Azure CLI、虚拟网络、Azure Monitor、Log Analytics 以及企业安全实践。
## 截图
所有截图均位于 `/screenshots` 目录中。
| # | 截图 | 描述 |
|---|---|---|
| 01 | `01_nbl3_identity_rg.jpg` | 身份资源组 |
| 02 | `02_nbl3_create_user_admin.jpg` | 创建管理员用户 |
| 03 | `03_nbl3_create_user_list.jpg` | Entra ID 用户列表 |
| 04 | `04_nbl3_create_group_developer.jpg` | 创建 Developers 组 |
| 05 | `05_nbl3_create_group_list.jpg` | 安全组列表 |
| 06 | `06_nbl3_assigning_rbac_role_to_admin_group.jpg` | 向 Admin 组分配 RBAC 角色 |
| 07 | `07_nbl3_iam_role_assignments.jpg` | IAM 角色分配 |
| 08 | `08_nbl3_add_member_to_group.jpg` | 向组中添加成员 |
| 09 | `09_nbl3_create_storage.jpg` | 创建存储账户 |
| 10 | `10_nbl3_create_key_vault.jpg` | 创建 Key Vault |
| 11 | `11_nbl3_add_secret_keyvault.jpg` | 向 Key Vault 添加机密 |
| 12 | `12_nbl3_add_role_secret_officer.jpg` | 分配 Key Vault Secrets Officer 角色 |
| 13 | `13_nbl3_identity_vnet_portal.jpg` | 身份虚拟网络 |
| 14 | `14_nbl3_create_vm01_cli.jpg` | 通过 Azure CLI 创建 VM01 |
| 15 | `15_nbl3_vm01_portal.jpg` | 门户中的 VM01 概览 |
| 16 | `16_nbl3_vm01_managed_identity.jpg` | VM01 上已启用 Managed Identity |
| 17 | `17_nbl3_storage_rbac_assigned_managed_identity.jpg` | 分配给 Managed Identity 的 Storage 角色 |
| 18 | `18_nbl3_keyvault_rbac_assigned_managed_identity.jpg` | 分配给 Managed Identity 的 Key Vault 角色 |
| 19 | `19_nbl3_created_container_for_testing.jpg` | 为测试创建的 Blob 容器 |
| 20 | `20_nbl3_created_log_analytics_workspace.jpg` | 创建的 Log Analytics Workspace |
| 21 | `21_nbl3_enabled_log_analytics_keyvault.jpg` | 为 Key Vault 启用诊断日志 |
| 22 | `22_nbl3_verification.jpeg` | 通过 CLI 验证无密码访问 |
| 23 | `23_nbl3_all_resources.jpg` | 资源组中的所有资源 |
| 24 | `24_nbl3_resource_visualizer_identity_rg.jpg` | 身份资源组的资源可视化工具 |
## 未来改进
- 添加 Conditional Access 策略以实现更强大的登录控制
- 将 Managed Identity 扩展到第二个工作负载,以构建更贴近现实的多服务架构
- 围绕 Key Vault 审计日志构建 Log Analytics 仪表板,而不仅仅是收集日志
- 使用 Bicep 自动化整个部署过程,而不是混合使用门户和 CLI 步骤
由 **Shahab Hassan Khan** 作为实践型 Azure 身份与访问管理项目构建并部署。
标签:Azure, JSONLines, 权限控制, 身份与访问管理, 零信任