

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

# 什么是 Amazon Cognito？
<a name="what-is-amazon-cognito"></a>

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

**Topics**
+ [用户池](#what-is-amazon-cognito-user-pools)
+ [身份池](#what-is-amazon-cognito-identity-pools)
+ [Amazon Cognito 的功能](#what-is-amazon-cognito-features)
+ [Amazon Cognito 用户池和身份池的比较](#what-is-amazon-cognito-features-comparison)
+ [Amazon Cognito 入门](#getting-started-overview)
+ [区域可用性](#getting-started-regional-availability)
+ [Amazon Cognito 的定价](#pricing-for-amazon-cognito)
+ [常见 Amazon Cognito 术语和概念](cognito-terms.md)
+ [入门 Amazon](cognito-getting-started-account-iam.md)

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

## 用户池
<a name="what-is-amazon-cognito-user-pools"></a>

![\[Amazon Cognito user pool authentication flow with app, identity provider, and API/Database.\]](http://docs.amazonaws.cn/cognito/latest/developerguide/images/user-pools-overview.png)


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

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

## 身份池
<a name="what-is-amazon-cognito-identity-pools"></a>

![\[Diagram showing Amazon Cognito federated identities flow between app, identity pool, provider, and STS.\]](http://docs.amazonaws.cn/cognito/latest/developerguide/images/identity-pools-overview.png)


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

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

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

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

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

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

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

有关使用身份池和用户池的更多示例，请参阅[常见的 Amazon Cognito 场景](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-scenarios.html)。

在 Amazon Cognito 中，[责任共担模式](https://www.amazonaws.cn/compliance/shared-responsibility-model/)的*云安全*义务符合 SOC 1-3、PCI DSS、ISO 27001 的要求且符合 HIPAA-BAA 的条件。你可以在 Amazon Cognito *中将云端安全*设计为符合 SOC1 -3、ISO 27001 和 HIPAA-BAA，但不符合 PCI DSS。有关更多信息，请参阅[范围内的Amazon 服务](https://www.amazonaws.cn/compliance/services-in-scope/)。另请参阅[区域数据注意事项](https://docs.amazonaws.cn/cognito/latest/developerguide/security-cognito-regional-data-considerations.html)。

## Amazon Cognito 的功能
<a name="what-is-amazon-cognito-features"></a>

### 用户池
<a name="what-is-amazon-cognito-features-user-pools"></a>

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

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

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 身份池中检索 Amazon 证书。


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

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

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

有关用户池的更多信息，请参阅[用户池入门](getting-started-user-pools.md)和 [Amazon Cognito 用户池 API 参考](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/)。

### 身份池
<a name="what-is-amazon-cognito-features-identity-pools"></a>

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

为了补充经过身份验证的身份，您还可以将身份池配置为在没有 IdP 身份验证的情况下授权 Amazon 访问。您可以通过[经开发人员验证的身份](developer-authenticated-identities.md)提供自定义身份验证证明。也可以使用[未经身份验证的身份](identity-pools.md#authenticated-and-unauthenticated-identities)向访客用户授予临时 Amazon 凭证。

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

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

**访问控制属性**  
您的身份池读取用户声明中的属性，并将它们映射到用户临时会话中的主体标签。然后，您可以配置基于 IAM 资源的 IAM policy，以基于您的身份池中携带会话标签的 IAM 主体允许或拒绝访问资源。例如，如果您的用户证明他们在市场营销部门工作，则会为他们的会话添加 Amazon STS 标签`Department: marketing`。您的 Amazon S3 存储桶允许基于 a [ws: PrincipalTag](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag) 条件进行读取操作，该条件要求`Department`标签的`marketing`值为。


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

有关身份池的更多信息，请参阅[Amazon Cognito 身份池入门](getting-started-with-identity-pools.md)和 [Amazon Cognito 身份池 API 参考](https://docs.amazonaws.cn/cognitoidentity/latest/APIReference/)。



## Amazon Cognito 用户池和身份池的比较
<a name="what-is-amazon-cognito-features-comparison"></a>


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

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

## Amazon Cognito 入门
<a name="getting-started-overview"></a>

有关用户池应用程序的示例，请参阅[用户池入门](getting-started-user-pools.md)。

有关身份池的介绍，请参阅[Amazon Cognito 身份池入门](getting-started-with-identity-pools.md)。

有关用户池和身份池的引导式设置体验的链接，请参阅[Amazon Cognito 的引导式设置选项](cognito-guided-setup.md)。

要开始使用 S Amazon DK，请参阅[Amazon 开发者工具](https://www.amazonaws.cn/products/developer-tools)。有关特定于 Amazon Cognito 的开发人员资源，请参阅 [Amazon Cognito 开发人员资源](https://www.amazonaws.cn/cognito/dev-resources/)。

您需要 Amazon Web Services 账户才能使用 Amazon Cognito。有关更多信息，请参阅 [入门 Amazon](cognito-getting-started-account-iam.md)。

## 区域可用性
<a name="getting-started-regional-availability"></a>

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

要查看 Amazon Cognito 目前是否在任何版本中可用 Amazon Web Services 区域，请参阅[按地区划分的Amazon 服务](https://www.amazonaws.cn/about-aws/global-infrastructure/regional-product-services/)。

要了解有关区域 API 服务端点的信息，请参阅 *Amazon Web Services 一般参考* 中的 [Amazon 区域和端点](https://docs.amazonaws.cn/general/latest/gr/rande.html##cognito_identity_region)。

要详细了解每个区域中可用的可用区数量，请参阅 [Amazon 全球基础设施](https://www.amazonaws.cn/about-aws/global-infrastructure/)。

## Amazon Cognito 的定价
<a name="pricing-for-amazon-cognito"></a>

有关 Amazon Cognito 定价的信息，请参阅 [Amazon Cognito 定价](https://www.amazonaws.cn/cognito/pricing/)。