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, 权限控制, 身份与访问管理, 零信任