什么是 Amazon Cognito? - Amazon Cognito

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

什么是 Amazon Cognito?

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

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

用户池

Amazon Cognito user pool authentication flow with app, identity provider, and API/Database.

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

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

身份池

Diagram showing Amazon Cognito federated identities flow between app, identity pool, provider, and STS.

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

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

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

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

  1. 您的应用程序用户通过用户池登录并收到 OAuth 2.0 个令牌。

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

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

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

在 Amazon 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 SDK 或 AWS Command Line Interface (AWS CLI) 中 AWS Management Console管理和自定义这些用户配置文件。

Amazon Cognito 用户池接受来自第三方的令牌和断言 IdPs,并将用户属性收集到发布给您的应用程序的 JWT 中。在 Amazon Cognito 处理与之交互的 JWTs 同时,您可以将应用程序标准化为一组 IdPs,将其声明映射到中央令牌格式。

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

  • 实现您自己的 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 等员工。

使用亚马逊 Cognito 用户池发行的 OAuth 2.0 和 OpenID Connect (OIDC) 令牌,你可以

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

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

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

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

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

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

身份池

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

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

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

基于角色的访问控制

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

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

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

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

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

Amazon Cognito 入门

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

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

有关用户池和身份池的引导式设置体验的链接,请参阅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 定价