View a markdown version of this page

什么是 Amazon Cognito? - Amazon Cognito

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

什么是 Amazon Cognito?

Amazon Cognito 是 Web 和移动应用程序的身份平台。它是用户目录、身份验证服务器以及 OAuth 2.0 访问令牌和 AWS 凭证的授权服务。使用 Amazon Cognito,您可以对内置用户目录、企业目录以及 Google 和 Facebook 等使用者身份提供者中的用户进行身份验证和授权。

随后的两个组件构成了 Amazon Cognito。它们根据用户的访问需求独立或协同运行。

用户池

身份验证流程图显示了用户通过 Cognito 用户池登录以及身份提供商和应用程序交互。

当您想要对您的应用程序或 API 进行身份验证和授权时,请创建用户池。用户池是一个用户目录,既有自助服务,也有管理员驱动的用户创建、管理和身份验证。用户池可以是独立的目录和 OIDC 身份提供者(IdP),也可以是员工身份和客户身份的第三方提供者的中间服务提供者(SP)。您可以在 SAML 2.0 和 OIDC 中使用用户池在应用程序中为组织的员工身份提供单点登录 (SSO IdPs )。还可以在应用程序中,为 Amazon、Google、Apple 和 Facebook 等 Auth 2.0 公共身份存储中组织的客户身份提供 SSO。有关客户身份和访问管理(CIAM)的更多信息,请参阅什么是 CIAM?

用户池不要求与身份池集成。从用户池中,您可以直接向应用程序、Web 服务器或 API 颁发经过身份验证的 JSON Web 令牌(JWT)。

身份池

序列图显示应用程序、身份池、用户池和 STS 之间的身份验证流程。

当您想要授权经过身份验证的用户或匿名用户访问您的 AWS 资源时,请设置 Amazon Cognito 身份池。身份池为您的应用程序颁发 AWS 证书,以向用户提供资源。您可以使用可信身份提供者(如用户池或 SAML 2.0 服务)对用户进行身份验证。此身份提供者还可以选择为访客用户颁发凭证。身份池使用基于角色和基于属性的访问控制来管理用户访问您的资源的授权。 AWS

身份池不要求与用户池集成。身份池可以直接接受来自员工和使用者身份提供者的经过身份验证的声明。

将 Amazon Cognito 用户池和身份池一起使用

在本主题开头的图表中,您使用 Amazon Cognito 对用户进行身份验证,然后向他们授予对 AWS 服务 的访问权限。

  1. 应用程序用户通过用户池登录并接收 OAuth 2.0 令牌。

  2. 您的应用程序使用用户池令牌与身份池交换临时 AWS 证书,您可以将这些证书用 AWS 于 API 和 AWS Command Line Interface (AWS CLI)。

  3. 您的应用程序将证书会话分配给您的用户,并提供对 Amazon S3 和 Amazon DynamoDB AWS 服务 等的授权访问权限。

有关使用身份池和用户池的更多示例,请参阅常见的 Amazon Cognito 场景

在亚马逊 Cognito 中,共担责任模型的云义务安全性符合SOC 1-3、PCI DSS、ISO 27001,并且符合条件。 HIPAA-BAA你可以在 Amazon Cognito 中设计自己的云端安全性 SOC1-3,使其符合 ISO 27001 HIPAA-BAA,但不符合 PCI DSS。有关更多信息,请参阅范围内的AWS 服务。另请参阅区域数据注意事项

Amazon Cognito 的功能

用户池

Amazon Cognito 用户池是一个用户目录。利用用户池,您的用户可以通过 Amazon Cognito 登录您的 Web 或移动应用程序,也可以通过第三方 IdP 进行联合身份验证。联合用户和本地用户在您的用户池中拥有用户配置文件。

本地用户是那些已注册或您直接在用户池中创建的用户。您可以在 AWS 管理控制台、 AWS SDK 或 AWS Command Line Interface (AWS CLI) 中管理和自定义这些用户配置文件。

Amazon Cognito 用户池接受来自第三方的令牌和断言 IdPs,并将用户属性收集到 JWT 中,由其发布给您的应用程序。您可以在一组 JWT 上对应用程序进行标准化,而 Amazon Cognito 则处理与的交互 IdPs,将其声明映射到中心代币格式。

Amazon Cognito 用户池可以是独立的 IdP。Amazon Cognito 以 OpenID Connect(OIDC)标准为基础生成用于身份验证和授权的 JWT。当您登录本地用户时,用户池对这些用户具有权限。对本地用户进行身份验证时,您可以访问以下功能。

  • 实现您自己的 Web 前端,此前端调用 Amazon Cognito 用户池 API 来对用户进行验证、授权和管理。

  • 为用户设置多重身份验证(MFA)。Amazon Cognito 支持基于时间的一次性密码(TOTP)和短信 MFA。

  • 可防止来自受恶意控制的用户账户的访问。

  • 创建您自己的自定义多步骤身份验证流程。

  • 在另一个目录中查找用户并将其迁移到 Amazon Cognito。

Amazon Cognito 用户池还可以扮演您的 IdPs服务提供商 (SP) 和应用程序的 IdP 的双重角色。亚马逊Cognito用户群可以连接到Facebook和谷歌 IdPs 等消费者,也可以连接到Okta和Active Directory联合服务(ADFS) IdPs 等员工。

有了 Amazon Cognito 用户池颁发的 OAuth 2.0 和 OpenID Connect(OIDC)令牌,您可以

  • 在应用程序中接受 ID 令牌,该令牌可对用户进行身份验证,并提供设置用户配置文件所需的信息

  • 在您的 API 中接受访问令牌,此令牌具有用于对用户的 API 调用进行授权的 OIDC 范围。

  • 从亚马逊 Cognito 身份池检索 AWS 证书。

Amazon Cognito 用户池的功能
功能 说明
OIDC 身份提供者 发放 ID 令牌对用户进行身份验证
授权服务器 颁发访问令牌以授权用户访问 API
SAML 2.0 服务提供商 将 SAML 断言转换为 ID 和访问令牌
OIDC 依赖方 将 OIDC 令牌转换为 ID 和访问令牌
社交提供商依赖方 将苹果、Facebook、亚马逊或谷歌的 ID 令牌转换为您自己的 ID 和访问令牌
身份验证前端服务 使用托管登录注册、管理和验证用户
为你自己的用户界面提供API支持 在支持的 AWS SDK¹ 中通过身份验证 API 请求创建、管理和验证用户
Multi-factor authentication 使用 SMS 消息、TOTP 或用户的设备作为额外的身份验证因素¹
安全监控与响应 抵御恶意活动和不安全的密码¹
自定义身份验证流程 构建自己的身份验证机制,或向现有流程添加自定义步骤²
将令牌传递给身份池时,创建用户的逻辑分组和 IAM 角色声明的层次结构
自定义代币 使用新的、修改的和禁止的声明自定义您的 ID 和访问令牌
自定义用户属性 为用户属性分配值并添加自己的自定义属性

¹ 该功能对联合用户不可用。

² 该功能对联合用户和托管登录用户不可用。

有关用户池的更多信息,请参阅用户池入门Amazon Cognito 用户池 API 参考

身份池

身份池是您分配给用户或访客并授权接收临时 AWS 证书的唯一标识符或身份的集合。当您以来自 SAML 2.0、OpenID Connect(OIDC)或 OAuth 2.0 社交身份提供者(IdP)的可信声明的形式向身份池提供身份验证证明时,您将用户与身份池中的身份相关联。您的身份池为该身份创建的令牌可以从 AWS Security Token Service (AWS STS) 检索临时会话证书。

为了补充经过身份验证的身份,您还可以配置身份池以在没有 IdP 身份验证的情况下授权 AWS 访问。您可以通过Developer-authenticated 身份提供自定义身份验证证明。也可以使用未经身份验证的身份向访客用户授予临时 AWS 凭证。

使用身份池,您可以通过两种方式在您的 AWS 账户中与 IAM 策略集成。您可以同时使用这两个功能,也可以单独使用。

Role-based 访问控制

当用户将声明传递到身份池时,Amazon Cognito 会选择它请求的 IAM 角色。要根据您的需求自定义角色的权限,您可以对每个角色应用 IAM policy。例如,如果您的用户证明自己在市场营销部门工作,则他们将获得相应角色的凭证,该角色的策略是根据营销部门访问需求量身定制的。Amazon Cognito 可以请求原定设置角色、基于查询用户声明的规则来请求角色,或者基于用户在用户池中的组成员资格来请求角色。您还可以配置角色信任策略,以便 IAM 仅信任您的身份池来生成临时会话。

访问控制属性

您的身份池读取用户声明中的属性,并将它们映射到用户临时会话中的主体标签。然后,您可以配置基于 IAM 资源的 IAM policy,以基于您的身份池中携带会话标签的 IAM 主体允许或拒绝访问资源。例如,如果您的用户证明他们在市场营销部门,则为他们的会话添加 AWS STS 标签Department: marketing。您的 Amazon S3 存储桶允许基于 a ws: PrincipalTag 条件进行读取操作,该条件要求Department标签的marketing值为。

Amazon Cognito 身份池的功能
功能 说明
亚马逊 Cognito 用户池依赖方 将用户池中的 ID 令牌交换为来自的 Web 身份凭证 AWS STS
SAML 2.0 服务提供商 将 SAML 断言交换为来自 Web 身份凭证 AWS STS
OIDC 依赖方 将 OIDC 令牌兑换 Web 身份凭证 AWS STS
社交提供商依赖方 使用来自亚马逊、Facebook、谷歌、苹果和 Twitter 的 OAuth 代币兑换来自的网络身份证书 AWS STS
自定义依赖方 使用 AWS 证书,以任何格式交换来自的网络身份凭证的索赔 AWS STS
未经身份验证的访问 在未进行身份验证的情况下发放访问受 AWS STS 限的 Web 身份凭证
Role-based 访问控制 根据经过身份验证的用户的声明为其选择 IAM 角色,并将您的角色配置为仅在身份池环境中代入
Attribute-based 访问控制 将声明转换为 AWS STS 临时会话的主体标签,并使用 IAM 策略根据委托人标签筛选资源访问权限

有关身份池的更多信息,请参阅Amazon Cognito 身份池入门Amazon Cognito 身份池 API 参考

Amazon Cognito 用户池和身份池的比较

功能 说明 用户池 身份池
OIDC 身份提供者 发放 OIDC ID 令牌对应用程序用户进行身份验证
用户目录 存储用于身份验证的用户配置文件
授权 API 访问权限 颁发访问令牌以授权用户访问接受 OAuth 范围的 API(包括用户配置文件自助服务 API 操作)、数据库和其他资源
IAM 网络身份授权 生成可以用来交换临时 AWS 证书 AWS STS 的代币
SAML 2.0 服务提供商和 OIDC 身份提供商 根据 SAML 2.0 身份提供商的声明发行自定义 OIDC 代币
OIDC 依赖方和 OIDC 身份提供商 根据 OIDC 身份提供商的声明发行自定义 OIDC 代币
OAuth 2.0 依赖方和 OIDC 身份提供商 根据苹果和谷歌等 OAuth 2.0 社交提供商的范围发行自定义 OIDC 代币
SAML 2.0 服务提供商和凭证代理 根据 SAML 2.0 身份提供商的声明颁发临时 AWS 证书
OIDC 依赖方和凭证经纪人 根据 OIDC AWS 身份提供商的声明颁发临时证书
社交提供商依赖方和凭证经纪人 根据开发者应用程序向苹果和谷歌等社交提供商提供的JSON网络令牌颁发临时 AWS 证书
亚马逊 Cognito 用户池依赖方和凭证经纪人 根据 Amazon Cognito 用户池中的 JSON 网络令牌颁发临时 AWS 证书
自定义依赖方和凭证代理 向任意身份颁发临时 AWS 证书,由开发者 IAM 证书授权
身份验证前端服务 使用托管登录注册、管理和验证用户
对您自己的身份验证用户界面的 API 支持 通过 API 请求在支持的 AWS SDK¹ 中创建、管理和验证用户
MFA 使用 SMS 消息、TOTP 或用户的设备作为额外的身份验证因素¹
安全监控与响应 防范恶意活动和不安全的密码¹
自定义身份验证流程 建立自己的身份验证机制,或向现有流程添加自定义步骤¹
用户组 将令牌传递给身份池时,创建用户的逻辑分组和 IAM 角色声明的层次结构
自定义代币 使用新的、修改的和禁止的声明和范围自定义您的 ID 和访问令牌
AWS WAF 网络 ACL 使用以下命令监控和控制向您的身份验证前端发出的请求 AWS WAF
自定义用户属性 为用户属性分配值并添加自己的自定义属性
未经身份验证的访问 在未进行身份验证的情况下发放访问受 AWS STS 限的 Web 身份凭证
Role-based 访问控制 根据经过身份验证的用户的声明为其选择 IAM 角色,并配置您的角色信任以限制 Web 身份用户的访问权限
Attribute-based 访问控制 将用户声明转换为 AWS STS 临时会话的主体标签,并使用 IAM 策略根据委托人标签筛选资源访问权限

¹ 该功能对联合用户不可用。

Amazon Cognito 入门

有关用户池应用程序的示例,请参阅用户池入门

有关身份池的介绍,请参阅Amazon Cognito 身份池入门

有关用户池和身份池的引导式设置体验的链接,请参阅Amazon Cognito 的引导式设置选项

要开始使用 S AWS DK,请参阅AWS 开发者工具。有关特定于 Amazon Cognito 的开发人员资源,请参阅 Amazon Cognito 开发人员资源

您需要 AWS 账户才能使用 Amazon Cognito。有关更多信息,请参阅 开始使用 AWS

区域可用性

亚马逊 Cognito 可在全球多个 AWS 地区使用。在每个区域中,Amazon Cognito 分布在多个可用区内。这些可用区的物理位置是相互隔离的,但可通过私有、低延迟、高吞吐量和高度冗余的网络连接联合在一起。这些可用区 AWS 能够提供包括Amazon Cognito在内的服务,具有非常高的可用性和冗余性,同时最大限度地减少延迟。

要查看 Amazon Cognito 当前是否在任何地区可用 AWS 区域,请参阅按地区划分的AWS 服务。

要了解有关区域 API 服务端点的信息,请参阅 Amazon Web Services 一般参考 中的 AWS 区域和端点

要详细了解每个区域中可用的可用区数量,请参阅 AWS 全球基础设施

Amazon Cognito 的定价

有关 Amazon Cognito 定价的信息,请参阅 Amazon Cognito 定价