rahatislamanik-spec/EntraID-AWS-SAML-SSO-Integration

GitHub: rahatislamanik-spec/EntraID-AWS-SAML-SSO-Integration

该项目是一个跨云身份联合实验室,演示了通过 SAML 2.0 实现 Microsoft Entra ID 到 AWS 的单点登录与零信任访问控制。

Stars: 1 | Forks: 0

# Microsoft Entra ID 至 AWS SAML 2.0 SSO 集成 🌐 **[查看实时演示](https://rahatislamanik-spec.github.io/EntraID-AWS-SAML-SSO-Integration/)** ## 场景说明 一家不断发展的金融科技公司将其内部工具和用户身份运行在 **Microsoft 365 和 Entra ID** 上,但其工程和 DevOps 团队还需要访问 **Amazon Web Services** 以进行云基础设施工作。 问题在于:为每位工程师管理单独的 AWS 用户名和密码存在安全风险。当有人离职时,IT 部门必须记得单独将他们从 AWS 中移除。如果忘记,就会留下一个安全漏洞。 解决方案:**使用 SAML 2.0 SSO 通过 Entra ID 联合 AWS 访问**。工程师使用 Microsoft 凭据进行身份验证,AWS 信任来自 Entra ID 的已签名 SAML 断言。这减少了单独的 AWS 密码使用,降低了孤儿账号风险,并集中了身份提供商的登录证据。 这就是实践中的 **零信任** —— *身份即边界*。 ## 架构范围 本仓库演示了 Microsoft Entra ID 中的 **AWS Single-Account Access 企业应用程序** 模式以及 AWS IAM SAML 角色联合。 它**不**声称完成了完整的 AWS IAM Identity Center 多账户部署。一些 AWS 控制台界面引用了 IAM Identity Center 指南,因为 AWS 会在控制台中显示相关的身份选项,但已记录的实现路径为: 1. Microsoft Entra ID 企业应用程序 2. 基于 SAML 的登录配置 3. AWS IAM SAML 身份提供商 4. AWS IAM 角色信任关系 5. Entra ID 角色声明映射 6. 通过联合角色担任访问 AWS 控制台 ## 构建内容 ### Microsoft Entra ID 端(身份提供商) - 添加 **AWS Single-Account Access** 作为企业应用程序 - 通过 Microsoft Entra 库工作流配置 AWS Single-Account Access SAML 2.0 设置: - **标识符 / Entity ID:** 由 AWS 库工作流固定 - **回复 URL (ACS):** `https://signin.aws.amazon.com/saml` - 映射在 SAML 断言中发送的用户属性: - UPN 作为唯一用户标识符 - 名字、姓氏、电子邮件作为用户配置文件 - 将 **Role ARN** 直接映射到用户担任的 AWS IAM 角色 - 会话持续时间设置为 900 秒,以缩短联合会话时间 - 管理 **Token Signing Certificate** 生命周期(RS256,2029 年到期) - 为用户分配应用程序以进行访问控制 - 导出 **Federation Metadata XML** 用于 AWS 信任配置 ### Amazon Web Services 端(服务提供商) - 在 AWS IAM 中将 **EntraID** 注册为受信任的 **SAML 2.0 Identity Provider** - 上传 Federation Metadata XML 以建立加密信任 - 创建带有 SAML 2.0 联合信任策略的 **EntraID-ReadOnly** IAM 角色 - 将完整的 Role ARN 映射回 Entra ID 属性声明 ## SSO 流程的工作原理 ![Entra ID 到 AWS SAML 认证流程](https://static.pigsec.cn/wp-content/uploads/repos/cas/81/8110afb7b0a1aa7afcccbd983195ac3d8748c44511454f0cb19ddf60d3570f04.svg) 此流程展示了从用户通过 Entra ID 登录、发出 SAML 断言、AWS IAM 信任验证、角色担任到访问 AWS 控制台的实验室联合路径。 [查看交互式 HTML 版本](https://rahatislamanik-spec.github.io/EntraID-AWS-SAML-SSO-Integration/docs/entra-aws-saml-authentication-flow.html) ``` User opens AWS in their browser | v Redirected to Microsoft Entra ID login | v User authenticates (password + MFA if required) | v Entra ID generates a signed SAML assertion (contains user identity + assigned AWS role ARN) | v Assertion posted to AWS ACS URL | v AWS validates signature against EntraID metadata | v User assumes EntraID-ReadOnly IAM Role | v AWS Console opens -- no separate AWS credentials used ``` ## 结果 - 用户通过 Entra ID 认证并直接登录到 AWS 控制台 - 角色路径记录为 `EntraID-ReadOnly/user@example.com` - 联合用户路径不需要单独的长期 AWS 用户凭据 - Entra ID 登录证据集中在身份提供商处;AWS CloudTrail 验证列为未来的证据 ## 与受监管行业的相关性 在 OSFI E-21 和 FINTRAC 预期下运营的加拿大金融机构中,跨平台身份联合是减少非托管访问的常见控制模式。当工程和 DevOps 团队使用单独的凭据访问 AWS 基础设施时,组织面临三种风险:员工离职时的孤儿账号、两个平台上分裂的审计跟踪,以及不一致的 MFA 或 Conditional Access 执行。 通过 Microsoft Entra ID 联合 AWS 访问有助于解决这些风险,方法是使 Entra ID 成为身份验证的前门。在生产部署中,分配移除、Conditional Access、会话生命周期、AWS 角色信任和 CloudTrail 监控都需要一起验证。本实验室演示了联合路径,并记录了生产级保证所需的后续证据。 ## 技术栈 | 组件 | 技术 | |-----------|-----------| | 身份提供商 (IdP) | Microsoft Entra ID (Azure AD) | | 服务提供商 (SP) | Amazon Web Services IAM | | 联合协议 | SAML 2.0 | | 角色映射 | 通过 SAML 属性声明映射 IAM Role ARN | | 证书 | RS256 Token Signing Certificate | | 访问策略 | AWS ReadOnlyAccess (托管) | ## 演示的关键概念 **SAML 2.0 联合** - 云平台之间企业 SSO 的行业标准 **零信任身份** - 没有隐式信任,每个访问请求都通过中央身份提供商进行验证 **最小权限访问** - ReadOnlyAccess 策略授予最低限度的所需权限 **证书生命周期管理** - 追踪 token 签名证书并进行到期监控 **基于属性的访问控制** - 通过 Entra ID 属性声明驱动 AWS 角色分配 **审计跟踪** - 身份提供商登录证据集中在 Entra ID 中;AWS 端的 CloudTrail 证据是计划中的验证项 ## 验证边界 | 领域 | 状态 | 备注 | |---|---|---| | Entra 企业应用程序 | 已配置 | 在 Entra ID 中显示 AWS Single-Account Access 应用程序 | | SAML 登录设置 | 已配置 | 记录了 AWS 库工作流和 ACS URL | | AWS IAM 身份提供商 | 已配置 | 显示了 AWS IAM SAML 提供商和信任路径 | | AWS IAM 角色 | 已配置 | 为联合访问创建了 ReadOnlyAccess 角色 | | 联合控制台访问 | 已测试 | SSO 流程后显示了 AWS 控制台访问 | | Conditional Access / MFA 策略 | 未提供证据 | 未来增强功能 | | 取消配置测试 | 未提供证据 | 未来增强功能 | | CloudTrail 登录证据 | 未提供证据 | 未来增强功能 | | 生产部署 | 未声明 | 自主实验室案例研究 | 有关逐张截图的证据摘要,请参见 [docs/evidence-map.md](docs/evidence-map.md)。 ## 截图 - 构建证据 ### Entra ID 配置 **步骤 1 - Entra 租户与管理员上下文** ![SAML Setup](https://static.pigsec.cn/wp-content/uploads/repos/cas/1f/1ffd8fbde36bec7da46b6aeb33b2ae6c1dd2289bf8ff4b03e486692c91444931.png) **步骤 2 - 企业应用程序视图** ![Basic SAML Config](https://static.pigsec.cn/wp-content/uploads/repos/cas/14/143cbce36dc2eaaabe5d6b50187f5baba4cc98c91679180144a409dcdf974e51.png) **步骤 3 - 浏览 Microsoft Entra 应用库** ![Entity ID and Reply URL](https://static.pigsec.cn/wp-content/uploads/repos/cas/16/163eb4b2fcc1ebd174602a97bc5e9842903490db6ce8da61b8a8c6cf9eefe321.png) **步骤 4 - AWS Single-Account Access 应用程序概览** ![Attribute Claims](https://static.pigsec.cn/wp-content/uploads/repos/cas/ff/ff1199637bafa30f57928bd133a0b82381d79bd5d3236eaf18efa241ce71a2a5.png) **步骤 5 - 用户和组分配视图** ![Token Certificate](https://static.pigsec.cn/wp-content/uploads/repos/cas/3c/3c01e07d113f09239158860d740b2c9036c3ab55518eeb86e295838783801359.png) **步骤 6 - SAML 设置保存提示和属性声明** ![SAML Overview](https://static.pigsec.cn/wp-content/uploads/repos/cas/8f/8f58541bf32c711e34473456729c8b97072146e15134262b2ed8daa7007886cf.png) **步骤 7 - 用户和组部分** ![Users Groups](https://static.pigsec.cn/wp-content/uploads/repos/cas/c0/c0577ba237f8aa606443ca075e7bdcb7298090f0ca16cb6e577c420bd7f95433.png) **步骤 8 - AWS IAM Identity Center 指导界面** ![User Assigned](https://static.pigsec.cn/wp-content/uploads/repos/cas/b0/b07d49aa21670f52653467d80434d80133210e27cd80d651f6d41c4069352623.png) **步骤 9 - Entra 分配确认** ![Assignment Confirmed](https://static.pigsec.cn/wp-content/uploads/repos/cas/78/78c59eb85dfe65d08c15c3b3094386718ea5773ec2485d2d634c1168a0120dde.png) **步骤 10 - AWS IAM Identity Center 相关服务界面** ![Final Config](https://static.pigsec.cn/wp-content/uploads/repos/cas/b8/b88de051e5b1117a46d095fce4b5573ed4360b687994691fae870fa1ee2d7986.png) ### AWS IAM 配置 **步骤 11 - AWS IAM 仪表板** ![AWS IAM](https://static.pigsec.cn/wp-content/uploads/repos/cas/45/450831b79d7d360201fde8a23f724034cebb477bea849f110af03c71dac33fed.png) **步骤 12 - Entra 基础 SAML 配置界面** ![Identity Provider Created](https://static.pigsec.cn/wp-content/uploads/repos/cas/e6/e6473db9e6fa705d803c4a5e821a6a294cc6d1c9737cf89e6034d959528d5097.png) **步骤 13 - 使用 SAML 联合创建 AWS 角色** ![Create Role](https://static.pigsec.cn/wp-content/uploads/repos/cas/1c/1c76388cacf6a1597eb91829d18d2b58c2caaead55037ed869d09d5034aea2f7.png) **步骤 14 - 选择 ReadOnlyAccess 策略** ![ReadOnly Policy](https://static.pigsec.cn/wp-content/uploads/repos/cas/45/45dfd7fb63584130867590bd8ffc98c0b92d939b3978f27810f841b48f22d25c.png) **步骤 15 - 角色名称和审查** ![Role Review](https://static.pigsec.cn/wp-content/uploads/repos/cas/86/867a30add4c0ef55b93ab952a2da0250cdc42405947fdcb8a44a3900cf5c1087.png) **步骤 16 - 创建 EntraID-ReadOnly 角色** ![Role Created](https://static.pigsec.cn/wp-content/uploads/repos/cas/6a/6abfc1a6706799db32d759f5ffe42704795f2c524d7617d22fc771d75c092e70.png) ### 最终配置和证明 **步骤 17 - Entra ID 中的角色声明映射** ![Role ARN Mapped](https://static.pigsec.cn/wp-content/uploads/repos/cas/7f/7f36d3a03bddc4e3db287aa69a3a9cbf4a34ba5d135612bc1d836217e7195473.png) **步骤 18 - SSO 流程后的 AWS 控制台访问** ![SSO Success](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/991fb4d536932e94af8a5d3106ea019e0741c5ab5658c9e6f43dabce6ac24de1.png) **步骤 19 - Entra ID SSO 测试面板** ![SSO Test](https://static.pigsec.cn/wp-content/uploads/repos/cas/27/27fdfc8c31cf66bb9e4fbb6ff6389e1ef9aa471dc8ed7d74210442695b6a46d7.png) ## 安全提示 本集成中使用的 Federation Metadata XML 不包含在此仓库中。它包含租户特定的配置数据,包括身份提供商 URL、证书信息和目录标识符,这些内容不适合公开在公共仓库中。如有需要,可索取 Federation Metadata XML。 ## 下一步计划 - 添加针对 AWS 访问的 Conditional Access 策略证据 - 根据Entra ID 组成员身份扩展到多个 AWS 角色 - 通过 PowerShell 和 Microsoft Graph API 自动化用户分配 - 添加联合登录事件的 AWS CloudTrail 证据 - 添加取消配置验证,显示分配移除和会话行为 ## 作者 **Md Rahat Islam Anik** 身份与云运营专家 · 加拿大多伦多 [linkedin.com/in/rahatislamanik](https://linkedin.com/in/rahatislamanik) - [github.com/rahatislamanik-spec](https://github.com/rahatislamanik-spec)
标签:JSONLines, SAML 2.0, 云计算, 单点登录, 后端开发, 系统集成, 规则引擎, 身份与访问管理, 零信任