通过 AWS IAM Identity Center 实现单点登录 - 多账户访问管理
实现多账户环境的单点登录,通过权限集控制各账户的访问级别。介绍与外部 IdP 的集成和 ABAC 的活用。
IAM Identity Center 概述
IAM Identity Center(原 AWS SSO)是统一管理多账户环境单点登录和访问管理的服务。用户登录 AWS 访问门户后,可一键访问分配的 AWS 账户和应用程序。无需为每个账户创建 IAM 用户,从根本上消除了凭证分散导致的安全风险。从 Organizations 管理账户或委托管理员账户启用,可对组织内所有账户统一应用访问控制。支持的协议包括 SAML 2.0 和 OIDC,为 AWS 管理控制台、CLI v2、SDK 以及支持 SAML 的第三方应用程序(Salesforce、Slack、GitHub 等)提供联合访问。通过 AWS Builder ID 登录并配置与 AWS 账户的连接,可集中管理部署目标。
ID 源选择与外部 IdP 集成
IAM Identity Center 支持 3 种 ID 源。第一种是 Identity Center 目录(内置),适合小型组织或验证环境。第二种是 Active Directory(通过 AWS Managed Microsoft AD 或 AD Connector),可直接使用本地 AD。第三种是外部 IdP,通过 SAML 2.0 委托认证,通过 SCIM 2.0 自动同步用户和组信息。Okta、Microsoft Entra ID(原 Azure AD)、Google Workspace、OneLogin、Ping Identity 均支持 SCIM 自动同步,在 IdP 端添加、删除用户或变更组成员会即时反映到 IAM Identity Center。在 IdP 端禁用用户即可立即切断 AWS 访问,消除了离职人员账户删除遗漏的安全风险。
权限集与访问分配
权限集是 IAM 策略的集合,包含 AdministratorAccess、ReadOnlyAccess 等 AWS 托管策略、自定义策略(直接以 JSON 格式编写)以及客户托管策略的引用。单个权限集最多可包含 10 个托管策略和 1 个内联策略。将权限集分配给用户/组与账户的组合后,用户访问该账户时会自动创建对应的 IAM 角色。还可配置权限边界,通过 IAM 策略约束权限集的上限以强制执行最小权限原则。访问分配由权限集 × AWS 账户 × 用户或组 3 个要素定义,基于组的分配使成员增减时仅需变更组归属即可自动更新权限。
ABAC 与会话管理
IAM Identity Center 支持基于属性的访问控制(ABAC),根据用户属性(部门、职位、项目、成本中心)动态授予访问权限。将 IdP 传递的 SAML 属性映射到 IAM 会话标签,通过与资源标签的匹配控制访问。例如,department=engineering 的用户仅可访问带有 department=engineering 标签的 S3 存储桶,此控制可跨账户应用。会话时间按权限集可设置为 1〜12 小时,高安全环境设置短会话(1 小时),开发环境设置长会话(12 小时)。从 AWS 访问门户一键访问管理控制台或 CLI,轻松切换账户。 ```bash # AWS CLI v2 SSO 配置文件示例 (~/.aws/config) [profile dev-admin] sso_session = my-sso sso_account_id = 123456789012 sso_role_name = AdministratorAccess region = ap-northeast-1 [sso-session my-sso] sso_start_url = https://my-org.awsapps.com/start sso_region = ap-northeast-1 sso_registration_scopes = sso:account:access # 执行 SSO 登录 aws sso login --profile dev-admin ``` CLI v2 的 sso login 命令启动基于浏览器的认证流程,认证完成后临时凭证会自动缓存。无需管理长期访问密钥,安全性得到提升。
设计最佳实践与常见陷阱
设计权限集时应遵循「每个职能一个权限集」的原则,通过为单个用户分配多个权限集来实现职责分离。例如,为开发人员准备 DevOps 权限集(用于部署)和 ReadOnly 权限集(用于审计),在生产环境和开发环境分配不同的权限集。常见陷阱之一是 SCIM 同步延迟。IdP 端的组变更反映到 Identity Center 需要数秒到数分钟的延迟,期间可能以旧权限访问,因此涉及权限提升的变更应执行手动同步。另一个注意点是委托管理员设置。从管理账户以外的账户运营 Identity Center 时需指定委托管理员账户,但该账户本身无法被分配权限集。此外,每个 Organizations 只能启用一个 Identity Center 实例,且区域固定。多区域组织中,主区域的选择会影响所有用户的访问门户延迟。
与 Cognito 的区分及其他认证方式
IAM Identity Center 和 Cognito 都是认证服务,但目标用户不同。IAM Identity Center 是员工和开发人员访问 AWS 管理控制台或 CLI 的认证基础设施,而 Cognito 是面向 Web/移动应用程序最终用户(客户)的认证授权服务。Cognito 提供注册、社交登录和令牌管理,IAM Identity Center 则专注于 AWS 账户的联合访问。其他多账户管理方式包括:为每个账户创建 IAM 用户(凭证分散、运维负担重)、跨账户 IAM 角色 AssumeRole(数十账户规模时难以管理)、第三方 SSO 产品(每次添加账户都需变更 IdP 配置)。IAM Identity Center 通过与 Organizations 的深度集成统一解决了这些问题。CloudTrail 集成还可自动记录谁在何时访问了哪个账户的审计日志。
IAM Identity Center 费用
IAM Identity Center 免费使用。用户数、组数、SSO 会话数均不产生额外费用。与外部 IdP(Okta、Microsoft Entra ID、Google Workspace)的 SAML/SCIM 集成也免费。成本取决于 Identity Center 管理的 AWS 账户和应用程序的使用费。Identity Center 的服务配额包括每个实例最多 100,000 个用户、100,000 个组、2,000 个权限集以及每个账户最多 50 个权限集分配。在所有 Organizations 账户中启用 IAM Identity Center 并废除直接创建 IAM 用户,可同时提升安全性和运维效率。
总结
IAM Identity Center 是免费统一管理多账户环境 SSO 和访问管理的服务。从 3 种 ID 源(内置目录、Active Directory、外部 IdP)中选择适合环境的方式,通过权限集组合 AWS 托管策略和自定义策略定义访问权限。通过 ABAC 基于用户属性动态授权,通过 CLI v2 的 SSO 配置文件从终端无缝认证。权限集应按职能单位设计,在部署前充分了解委托管理员的约束和区域固定的规格特性。