什么是 Amazon Cognito? - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

什么是 Amazon Cognito?

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

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

用户池

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

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

身份池

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

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

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

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

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

  2. 您的应用程序将用户池令牌与身份池交换,以获得可以与 Amazon API 和 Amazon Command Line Interface (Amazon CLI) 一起使用的临时 Amazon 证书。

  3. 您的应用程序会将凭证会话分配给您的用户,并授予对诸如 Amazon S3 和 Amazon DynamoDB 之 Amazon Web Services 类的授权访问权限。

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

在 Amazon Cognito 中,责任共担模式云安全义务符合 SOC 1-3、PCI DSS、ISO 27001 的要求且符合 HIPAA-BAA 的条件。您可以将 Amazon Cognito 中的云中安全性设计为符合 SOC1-3、ISO 27001 和 HIPAA-BAA 的要求,但不符合 PCI DSS。有关更多信息,请参阅范围内的Amazon 服务。另请参阅区域数据注意事项

Amazon Cognito 的功能

用户池

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

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

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 用户池还可以充当您的应用程序的服务提供商 (SP) 和您的应用程序的 IdPs IdP 的双重角色。Amazon Cognito 用户池可以连接到 Facebook 和谷歌 IdPs 等消费者,也可以连接 Okta 和 Active Directory 联合服务 (ADFS) IdPs 等员工。

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

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

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

  • 从 Amazon Cognito 身份池中检索 Amazon 证书。

Amazon Cognito 用户池的功能
功能 描述
OIDC IdP 发放 ID 令牌对用户进行身份验证
授权服务器 发放访问令牌以授权用户访问 API
SAML 2.0 SP 将 SAML 断言转换为 ID 和访问令牌
OIDC SP 将 OIDC 令牌转换为 ID 和访问令牌
OAuth 2.0 SP 将苹果、Facebook、亚马逊或谷歌的 ID 令牌转换为你自己的 ID 和访问令牌
认证前端服务 使用托管用户界面注册、管理和验证用户
为你自己的用户界面提供 API 支持 通过支持的 Amazon 软件开发工具包中的 API 请求创建、管理和验证用户¹
MFA 使用短信、TOTP 或用户的设备作为额外的身份验证因素¹
安全监控和响应 抵御恶意活动和不安全的密码¹
自定义身份验证流程 构建自己的身份验证机制,或在现有流程中添加自定义步骤¹
在将令牌传递给身份池时,创建用户的逻辑分组和 IAM 角色声明的层次结构
自定义 ID 令牌 使用新的、修改过的和禁止的声明自定义您的 ID 令牌
自定义用户属性 为用户属性分配值并添加您自己的自定义属性

¹ 功能仅适用于本地用户。

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

身份池

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

为了补充经过身份验证的身份,您还可以将身份池配置为在没有 IdP 身份验证的情况下授权 Amazon 访问。您可以提供自己的自定义身份验证证明,也可以不提供身份验证。您可以使用未经身份验证的 Amazon 身份向任何请求临时凭证的应用程序用户授予临时证书。身份池还接受声明,并根据您自己的自定义模式,使用经过开发人员验证的身份颁发凭证。

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

基于角色的访问控制

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

访问控制属性

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

Amazon Cognito 身份池的功能
功能 描述
亚马逊 Cognito 用户池 SP 使用用户池中的 ID 令牌交换来自的 Web 身份凭证 Amazon STS
SAML 2.0 SP 交换来自 Web 身份凭证的 SAML 断言 Amazon STS
OIDC SP 使用 OIDC 令牌兑换 Web 身份凭证 Amazon STS
OAuth 2.0 SP 使用来自亚马逊、Facebook、谷歌、苹果和 Twitter 的 OAuth 代币来换取来自的网络身份凭证 Amazon STS
自定义 SP 使用 Amazon 凭证,以任何格式交换来自的 Web 身份凭证的声明 Amazon STS
未经身份验证的访问 无需身份验证即可颁发访问受 Amazon STS 限的 Web 身份凭证
基于角色的访问控制 根据身份验证用户的声明为其选择一个 IAM 角色,并将您的角色配置为仅在您的身份池环境中担任
基于属性的访问控制 将声明转换为 Amazon STS 临时会话的委托人标签,并使用 IAM 策略根据委托人标签筛选资源访问权限

有关身份池的更多信息,请参阅开始使用 Amazon Cognito 身份池Amazon Cognito 身份池 API 参考

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

功能 描述 用户池 身份池
OIDC IdP 发放 OIDC ID 令牌以对应用程序用户进行身份验证
API 授权服务器 发放访问令牌以授权用户访问接受 OAuth 2.0 授权范围的 API、数据库和其他资源
IAM 网络身份授权服务器 生成可用于交换临时 Amazon 凭证 Amazon STS 的令牌
SAML 2.0 SP 和 OIDC IdP 根据来自 SAML 2.0 IdP 的主张发行定制的 OIDC 代币
OIDC SP 和 OIDC IdP 根据OIDC IdP的索赔发行定制的OIDC代币
OAuth 2.0 SP 和 OIDC IdP 根据苹果和谷歌等 OAuth 2.0 社交提供商的范围发行自定义 OIDC 代币
SAML 2.0 SP 和凭证代理 根据 SAML 2.0 IdP 的声明颁发临时 Amazon 证书
OIDC SP 和凭证经纪人 根据 OIDC IdP 的声明颁发临时 Amazon 证书
OAuth 2.0 SP 和凭证代理 根据苹果和谷歌等 OAuth 2.0 社交提供商的范围颁发临时 Amazon 证书
亚马逊 Cognito 用户池 SP 和凭证代理 根据 Amazon Cognito 用户池中的 OIDC 声明颁发临时 Amazon 证书
自定义 SP 和凭证代理 根据开发者 IAM 授权颁发临时 Amazon 证书
认证前端服务 使用托管用户界面注册、管理和验证用户
API 支持你自己的身份验证界面 通过支持的 Amazon 软件开发工具包中的 API 请求创建、管理和验证用户¹
MFA 使用短信、TOTP 或用户的设备作为额外的身份验证因素¹
安全监控和响应 防范恶意活动和不安全的密码¹
自定义身份验证流程 构建自己的身份验证机制,或在现有流程中添加自定义步骤¹
在将令牌传递给身份池时,创建用户的逻辑分组和 IAM 角色声明的层次结构
自定义 ID 令牌 使用新的、修改过的和禁止的声明自定义您的 ID 令牌
Amazon WAF 网页 ACL 通过以下方式监控和控制对身份验证环境的请求 Amazon WAF
自定义用户属性 为用户属性分配值并添加您自己的自定义属性
未经身份验证的访问 无需身份验证即可颁发访问受 Amazon STS 限的 Web 身份凭证
基于角色的访问控制 根据身份验证用户的声明为其选择一个 IAM 角色,并将您的角色配置为仅在您的身份池环境中担任
基于属性的访问控制 将用户声明转换为 Amazon STS 临时会话的委托人标签,并使用 IAM 策略根据委托人标签筛选资源访问权限

¹ 功能仅适用于本地用户。

Amazon Cognito 入门

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

有关身份池的介绍,请参阅开始使用 Amazon Cognito 身份池

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

有关视频、文章、文档和更多示例应用程序,请参阅 Amazon Cognito 开发者资源

您需要 Amazon Web Services 账户才能使用 Amazon Cognito。有关更多信息,请参阅 入门 Amazon

区域可用性

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

有关 Amazon Cognito 当前可用的所有区域的列表,请参阅《Amazon Web Services 一般参考》中的 Amazon 区域和端点。要详细了解每个区域中可用的可用区数量,请参阅 Amazon 全球基础设施

Amazon Cognito 的定价

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