

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

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

Amazon Cognito 是 Web 和移动应用程序的身份平台。它是一个用户目录、一个身份验证服务器以及一个用于 OAuth 2.0 访问令牌和 AWS 凭据的授权服务。使用 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)
+ [入门 AWS](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.aws.amazon.com/zh_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://aws.amazon.com/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.aws.amazon.com/zh_cn/cognito/latest/developerguide/images/identity-pools-overview.png)


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

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

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

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

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

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

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

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

在 Amazon Cognito 中，[责任共担模式](https://aws.amazon.com/compliance/shared-responsibility-model/)的*云安全*义务符合 SOC 1-3、PCI DSS、ISO 27001 的要求且符合 HIPAA-BAA 的条件。你可以在 Amazon Cognito *中将云端安全*设计为符合 SOC1 -3、ISO 27001 和 HIPAA-BAA，但不符合 PCI DSS。有关更多信息，请参阅[范围内的AWS 服务](https://aws.amazon.com/compliance/services-in-scope/)。另请参阅[区域数据注意事项](https://docs.aws.amazon.com/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 进行联合身份验证。联合用户和本地用户在您的用户池中拥有用户配置文件。

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

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 证书。


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

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

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

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

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

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

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

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

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

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


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

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



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


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

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

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

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

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

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

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

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

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

# 常见 Amazon Cognito 术语和概念
<a name="cognito-terms"></a>

Amazon Cognito 为 Web 和移动应用程序提供凭证。它借鉴*身份和访问管理*中的常见术语并在此基础上构建。有许多关于通用身份和访问管理术语的指南可供参考。部分示例包括：
+ IDPro 知识体系中的[术语](https://bok.idpro.org/article/id/41/)
+ [AWS 身份服务](https://aws.amazon.com/identity/)
+ 来自 NIST CSRC 的[术语表](https://csrc.nist.gov/glossary)

以下列表说明了 Amazon Cognito 独有的术语或在 Amazon Cognito 中具有特定上下文的术语。

**Topics**
+ [常规](#cognito-terms-general)
+ [用户池](#cognito-terms-user-pools)
+ [身份池](#cognito-terms-identity-pools)

## 常规
<a name="cognito-terms-general"></a>

此列表中的术语并非特定于 Amazon Cognito，而是在身份和访问管理从业人员中得到广泛认可的术语。以下并不是术语的详尽列表，而是关于这些术语在本指南中的特定 Amazon Cognito 上下文中的解释。

**访问令牌**  <a name="terms-accesstoken"></a>
JSON Web 令牌（JWT），其中包含有关访问信息系统的实体[授权](#terms-authorization)的信息。

**应用程序**  
通常指的是移动应用程序。在本指南中，*应用*通常是连接到 Amazon Cognito 的 Web 应用程序或移动应用程序的简写。

**基于属性的访问控制 (ABAC)**  <a name="terms-abac"></a>
一种模型，在这种模型中，应用程序根据用户的属性（例如其职位或部门）来确定对资源的访问权限。实施 ABAC 的 Amazon Cognito 工具包括用户池中的 ID 令牌和身份池中的[主体标签](#term-afac)。

**身份验证**  <a name="terms-authentication"></a>
为访问信息系统而建立真实身份的过程。Amazon Cognito 接受来自第三方身份提供者的身份验证证明，同时也是软件应用程序的身份验证提供者。

**授权**  <a name="terms-authorization"></a>
向资源授予权限的过程。用户池[访问令牌](#terms-accesstoken)包含应用程序可用于允许用户和系统访问资源的信息。

**授权服务器**  <a name="term-authzserver"></a>
生成 [JSON Web 令牌](#terms-jwt)的 OAuth 或 OpenID Connect（OIDC）系统。Amazon Cognito 用户池[托管授权服务器](#terms-managedauthorizationserver)是用户池中两种身份验证和授权方法的授权服务器组件。用户池还支持 [SDK 身份验证](#terms-upapi)中的 API 质询-响应流程。

**机密应用程序、服务器端应用程序**  
用户远程连接的应用程序，其代码位于应用程序服务器上，并且可以访问密钥。这通常是 Web 应用程序。

**身份提供者（IdP）**  <a name="terms-idp"></a>
一个存储和验证用户身份的服务。Amazon Cognito 可以向[外部提供者](#terms-externalprovider)请求身份验证，并可以成为应用程序的 IdP。

**JSON Web 令牌（JWT）**  <a name="terms-jwt"></a>
一个 JSON 格式的文档，其中包含有关经过身份验证的用户的声明。ID 令牌对用户进行身份验证，访问令牌授权用户，刷新令牌更新凭证。Amazon Cognito 从[外部提供者](#terms-externalprovider)那里接收令牌，并向应用程序或 AWS STS 发放令牌。

**机器对机器（M2M）授权**  <a name="terms-m2m"></a>
授权向非用户交互式计算机实体（比如 Web 服务器应用程序层）的 API 端点发出请求的过程。用户池通过[访问令牌](#terms-accesstoken)中的 OAuth 2.0 范围，在客户端凭证授予中提供 M2M 授权。

**多重身份验证（MFA)**  <a name="terms-mfa"></a>
要求用户在提供用户名和密码后提供额外的身份验证。Amazon Cognito 用户池具有[本地用户](#terms-localuser)的 MFA 特征。

**OAuth 2.0（社交）提供者**  <a name="terms-oauth"></a>
用户池或身份池的 IdP，用于提供 [JWT](#terms-jwt) 访问令牌和刷新令牌。在用户进行身份验证后，Amazon Cognito 用户池自动与社交提供者进行交互。

**OpenID Connect（OIDC）提供者**  
用户池或身份池的 IdP，用于扩展 [OAuth](#terms-oauth) 规格以提供 ID 令牌。在用户进行身份验证后，Amazon Cognito 用户池自动与 OIDC 提供者进行交互。

**通行密钥、WebAuthn**  
一种身份验证形式，采用该形式时，用户设备上的加密密钥或通行密钥提供其身份验证证明。用户使用硬件或软件身份验证器中的生物识别或 PIN 码机制验证他们是否存在。通行密钥可以抵御网络钓鱼，并绑定到特定网站/应用程序，从而提供安全的无密码体验。Amazon Cognito 用户池支持使用通行密钥进行登录。

**无密码**  
一种用户无需输入密码的身份验证形式。无密码登录方法包括发送到电子邮件地址和电话号码的一次性密码（OTP）以及通行密钥。Amazon Cognito 用户池支持使用 OTP 和通行密钥进行登录。

**公共应用程序**  
设备上的一个独立应用程序，其代码存储在本地，并且无法访问密钥。这通常是移动应用程序。

**资源服务器**  
具有访问控制的 API。Amazon Cognito 用户池还使用*资源服务器*来描述组件，该组件定义了用于与 API 进行交互的配置。

**基于角色的访问控制 (RBAC)**  
一个根据用户的职能名称授予访问权限的模型。Amazon Cognito 身份池通过区分 IAM 角色来实施 RBAC。

**服务提供者（SP）、依赖方（RP）**  <a name="terms-relyingparty"></a>
依赖 IdP 来断言用户值得信赖的应用程序。Amazon Cognito 充当外部 IdP 的 SP，充当基于应用程序的 SP 的 IdP。

**SAML 提供商**  
用户池或身份池的 IdP，用于生成经过数字签名的断言文档，您的用户会将该文档传递给 Amazon Cognito。

**通用唯一标识符（UUID）**  <a name="terms-uuid"></a>
应用于对象的 128 位标签。Amazon Cognito UUID 在每个用户池或身份池中都是唯一的，但不遵循特定的 UUID 格式。

**用户目录**  <a name="terms-userdirectory"></a>
一组用户及其属性，可以向其他系统提供该信息。Amazon Cognito 用户池是用户目录，也是用于整合外部用户目录中用户的工具。

## 用户池
<a name="cognito-terms-user-pools"></a>

当您在本指南中看到以下列表中的术语时，它们指的是用户池的特定特征或配置。

**自适应身份验证**  <a name="terms-adaptiveauthentication"></a>
一项[高级安全](#term-advancedsecurity)特征，用于检测潜在的恶意活动并为[用户配置文件](#terms-userprofile)增加额外的安全保护。

**应用程序客户端**  <a name="term-appclient"></a>
一个组件，用于将用户池的设置定义为一个应用程序的 IdP。

**回调 URL、重定向 URI、返回 URL**  <a name="term-callbackurl"></a>
[应用程序客户端](#term-appclient)中的一种设置，以及向用户池的[授权服务器](#terms-managedauthorizationserver)所发出请求中的一个参数。回调 URL 是您的[应用程序](#term-app)中经过身份验证的用户的初始目的地。

**基于选择的身份验证**  <a name="terms-choicebasedauthentication"></a>
一种使用用户池的 API 身份验证形式，采用该形式时，每个用户都有一组可供他们选择的登录选项。他们的选择可能包括带或不带 MFA 的用户名和密码、通行密钥登录，或者使用电子邮件或短信一次性密码进行无密码登录。您的应用程序可以通过请求身份验证选项列表或声明首选项来决定用户的选择流程。  
请与[基于客户端的身份验证](#terms-declarativeauthentication)进行比较。

**基于客户端的身份验证**  <a name="terms-declarativeauthentication"></a>
一种使用用户池 API 和通过 AWS SDK 构建的应用程序后端进行身份验证的形式。在声明式身份验证中，您的应用程序独立确定用户应执行的登录类型，并预先请求该类型。  
请与[基于选择的身份验证](#terms-choicebasedauthentication)进行比较。

**已泄露的凭证**  
一项[高级安全](#term-advancedsecurity)特征，用于检测攻击者可能知道的用户密码，并为[用户配置文件](#terms-userprofile)增加额外的安全保护。

**确认**  <a name="terms-confirmation"></a>
一个过程，用于确定已满足先决条件，可允许新用户登录。通常通过电子邮件地址或电话号码[验证](#terms-verification)来完成确认。

**自定义身份验证**  
使用 [Lambda 触发器](#terms-triggers)的身份验证过程的一个扩展，定义了额外的用户质询和响应。

**设备身份验证**  
一个身份验证过程，将 [MFA](#terms-mfa) 替换为使用可信设备 ID 的登录。

**域、用户池域**  <a name="terms-domain"></a>
在 AWS 中托管您的[托管登录页面](#terms-managedlogin)的 Web 域。您可以在自己拥有的域中设置 DNS，也可以在 AWS 拥有的域中使用标识性子域前缀。

**基础版计划**  <a name="terms-essentialsplan"></a>
包含用户池中最新开发功能的[功能计划](#terms-featureplan)。基础版计划不包括[增值版计划](#terms-plusplan)中的自动学习安全功能。

**外部提供者、第三方提供者**  <a name="terms-externalprovider"></a>
与用户池存在信任关系的 IdP。用户池充当外部提供商和您的应用程序之间的中间实体，以便使用 SAML 2.0、OIDC 和社交提供商来管理身份验证流程。用户池将外部提供商的身份验证结果整合到单个 IdP 中，以便您的应用程序可以使用单个 OIDC 依赖方库处理多个用户。

**功能计划**  <a name="terms-featureplan"></a>
您可以为用户池选择的一组功能。功能计划的 AWS 账单费用各不相同。新用户池的默认功能计划为[基础版计划](#terms-essentialsplan)。  

**当前计划**
+ [精简版计划](#terms-liteplan)
+ [基础版计划](#terms-essentialsplan)
+ [增值版计划](#terms-plusplan)

**联合用户、外部用户**  <a name="terms-federateduser"></a>
用户池中由[外部提供者](#terms-externalprovider)进行身份验证的用户。

**托管 UI（经典）、托管 UI 页面**  <a name="terms-hostedui"></a>
您的用户池域上早期版本的身份验证前端、依赖方和身份提供者服务。托管 UI 具有一组基本功能和简化的外观。您可以通过上传徽标图像文件和带有预先确定的 CSS 样式集的文件来应用托管 UI 品牌。请与[托管登录](#terms-managedlogin)进行比较。

**Lambda 触发器**  <a name="terms-triggers"></a>
AWS Lambda 中的一个函数，用户池可以在用户身份验证过程的关键点自动调用该函数。您可以使用 Lambda 触发器自定义身份验证结果。

**本地用户**  <a name="terms-localuser"></a>
用户池[用户目录](#terms-userdirectory)中的[用户配置文件](#terms-userprofile)，它不是通过[外部提供者](#terms-externalprovider)进行身份验证而创建。

**关联用户**  <a name="terms-linkeduser"></a>
来自[外部提供者](#terms-externalprovider)的用户，其身份与[本地用户](#terms-localuser)合并。

**精简版计划**  <a name="terms-liteplan"></a>
包含最初向用户池推出的功能的[功能计划](#terms-featureplan)。精简版计划不包括[基础版计划](#terms-essentialsplan)中的新功能或[增值版计划](#terms-plusplan)中的自动学习安全功能。

**托管授权服务器、托管 UI 授权服务器、授权服务器**  <a name="terms-managedauthorizationserver"></a>
[托管登录](#terms-managedlogin)的一个组件，可托管用于与您的[用户池域](#terms-domain)上的 IdP 和应用程序进行交互的服务。[托管 UI](#terms-hostedui) 与托管登录的不同之处在于它提供的用户交互功能，但具有相同的授权服务器功能。

**托管登录、托管登录页面**  <a name="terms-managedlogin"></a>
您的[用户池域](#terms-domain)中的一组网页，用于托管进行用户身份验证的服务。这些服务包括作为 [IdP](#terms-idp)、第三方 IdP 的[依赖方](#terms-relyingparty)以及用户交互式身份验证 UI 服务器运行的功能。在为用户池设置域时，Amazon Cognito 会将所有托管登录页面联机。  
您的应用程序导入 OIDC 库，这些库调用用户的浏览器，并将他们引导至托管登录 UI 以进行注册、登录、密码管理以及执行其他身份验证操作。身份验证后，OIDC 库可以处理身份验证请求的结果。

**托管登录身份验证**  <a name="terms-managedloginauthentication"></a>
使用[用户池域](#terms-domain)上的服务登录，通过用户交互式浏览器页面或 HTTPS API 请求完成。应用程序使用 OpenID Connect（OIDC）库处理托管登录身份验证。此过程包括使用[外部提供商](#terms-externalprovider)进行登录、使用交互式托管登录页面进行本地用户登录以及 [M2M 授权](#terms-m2m)。使用经典[托管 UI](#terms-hostedui) 进行身份验证也属于该术语范畴。  
请与 [AWS SDK 身份验证](#terms-upapi)进行比较。

**增值版计划**  <a name="terms-plusplan"></a>
包含用户池中最新开发功能和高级安全功能的[功能计划](#terms-featureplan)。

**SDK 身份验证、AWS SDK 身份验证**  
一组身份验证和授权 API 操作，您可以使用 AWS SDK 将其添加到您的应用程序后端。此身份验证模型需要您自己的自定义构建登录机制。该 API 可以登录[本地用户](#terms-localuser)和[关联用户](#terms-linkeduser)。  
请与[托管登录身份验证](#terms-managedloginauthentication)进行比较。

**威胁防护、高级安全功能**  <a name="term-advancedsecurity"></a>
在用户池中，威胁防护是指旨在缓解对您的身份验证和授权机制造成威胁的技术。自适应身份验证、凭证泄露检测和 IP 地址阻止列表均属于威胁防护类别。

**令牌自定义**  
令牌生成前 [Lambda 触发器](#terms-triggers)的结果，该触发器在运行时修改用户的 ID 令牌或访问令牌。

**用户池、Amazon Cognito 身份提供者、`cognito-idp`、Amazon Cognito 用户池**  
一项 AWS 资源，为与 OIDC IdP 配合使用的应用程序提供身份验证和授权服务。

**验证**  <a name="terms-verification"></a>
确认用户拥有电子邮件地址或电话号码的过程。用户池向输入新电子邮件地址或电话号码的用户发送代码。当他们向 Amazon Cognito 提交代码时，他们会验证自己对消息目的地的所有权，并且可以从用户池中接收其他消息。另请参阅[确认](#terms-confirmation)。

**用户配置文件、用户账户**  <a name="terms-userprofile"></a>
[用户目录](#terms-userdirectory)中的用户条目。所有用户（包括来自第三方 IdP 的用户）在其用户池中都有配置文件。

## 身份池
<a name="cognito-terms-identity-pools"></a>

当您在本指南中看到以下列表中的术语时，它们指的是身份池的特定特征或配置。

**访问控制属性**  <a name="term-afac"></a>
身份池中[基于属性的访问控制](#terms-abac)的一种实施。身份池将用户属性作为标签应用于用户凭证。

**基本（经典）身份验证**  
一个身份验证过程，您可以在这个过程中自定义对[用户凭证](#terms-usercredentials)的请求。

**已经过开发人员验证的身份**  
一个身份验证过程，在这个过程中使用[开发人员凭证](#terms-developercredentials)授权身份池[用户凭证](#terms-usercredentials)。

**开发人员凭证**  <a name="terms-developercredentials"></a>
身份池管理员的 IAM API 密钥。

**增强型身份验证**  
一个身份验证流程，根据您在身份池中定义的逻辑选择 IAM 角色并应用主体标签。

**身份**  
一个 [UUID](#terms-uuid)，用于将应用程序用户及其[用户凭证](#terms-usercredentials)链接到与身份池存在信任关系的外部[用户目录](#terms-userdirectory)中的配置文件。

**身份池、Amazon Cognito 联合身份、Amazon Cognito 身份、`cognito-identity`**  
一项 AWS 资源，为使用[临时 AWS 凭证](#terms-usercredentials)的应用程序提供身份验证和授权服务。

**未经验证的 身份**  
尚未使用身份池 IdP 登录的用户。您可以允许用户在进行身份验证之前为单个 IAM 角色生成有限的用户凭证。

**用户凭证**  <a name="terms-usercredentials"></a>
用户在身份池身份验证后收到的临时 AWS API 密钥。

# 入门 AWS
<a name="cognito-getting-started-account-iam"></a>

在开始使用 Amazon Cognito 之前，请为自己设置一些必需 AWS 的资源。如果您已经可以登录 AWS 账户，则可以跳过此部分。如果您正在寻找有关注册和使用 AWS 凭据登录的信息，请继续阅读。获得具有足够 AWS Identity and Access Management (IAM) 权限的证书后，就可以开始使用[用户池](getting-started-user-pools.md)和[身份池](getting-started-with-identity-pools.md)了。

## 注册获取 AWS 账户
<a name="sign-up-for-aws"></a>

如果您没有 AWS 账户，请完成以下步骤来创建一个。

**报名参加 AWS 账户**

1. 打开[https://portal.aws.amazon.com/billing/注册。](https://portal.aws.amazon.com/billing/signup)

1. 按照屏幕上的说明操作。

   在注册时，将接到电话或收到短信，要求使用电话键盘输入一个验证码。

   当您注册时 AWS 账户，就会创建*AWS 账户根用户*一个。根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践，请为用户分配管理访问权限，并且只使用根用户来执行[需要根用户访问权限的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 注册过程完成后会向您发送一封确认电子邮件。您可以随时前往 [https://aws.amazon.com/](https://aws.amazon.com/)并选择 “**我的账户”，查看您当前的账户活动并管理您的账户**。

## 创建具有管理访问权限的用户
<a name="create-an-admin"></a>

注册后，请保护您的安全 AWS 账户 AWS 账户根用户 AWS IAM Identity Center，启用并创建管理用户，这样您就不会使用 root 用户执行日常任务。

**保护你的 AWS 账户根用户**

1.  选择 **Root 用户**并输入您的 AWS 账户 电子邮件地址，以账户所有者的身份登录。[AWS 管理控制台](https://console.aws.amazon.com/)在下一页上，输入您的密码。

   要获取使用根用户登录方面的帮助，请参阅《AWS 登录 用户指南》**中的 [Signing in as the root user](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 为您的根用户启用多重身份验证（MFA）。

   有关说明，请参阅 I [A *M* 用户指南中的为 AWS 账户 根用户启用虚拟 MFA 设备（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**创建具有管理访问权限的用户**

1. 启用 IAM Identity Center。

   有关说明，请参阅**《AWS IAM Identity Center 用户指南》中的[启用 AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，为用户授予管理访问权限。

   有关使用 IAM Identity Center 目录 作为身份源的教程，请参阅《[用户*指南》 IAM Identity Center 目录中的使用默认设置配置AWS IAM Identity Center 用户*访问权限](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理访问权限的用户身份登录**
+ 要使用您的 IAM Identity Center 用户身份登录，请使用您在创建 IAM Identity Center 用户时发送到您的电子邮件地址的登录 URL。

  有关使用 IAM Identity Center 用户[登录的帮助，请参阅*AWS 登录 用户指南*中的登录 AWS 访问门户](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**将访问权限分配给其他用户**

1. 在 IAM Identity Center 中，创建一个权限集，该权限集遵循应用最低权限的最佳做法。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 将用户分配到一个组，然后为该组分配单点登录访问权限。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Add groups](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。