什么是 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。它们根据用户的访问需求独立或协同运行。

用户池

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

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

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

身份池

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

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

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

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

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

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

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

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

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

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

Amazon Cognito 的功能

用户池

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

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

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

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

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

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

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

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

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

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

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

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

  • 在您的中接受访问令牌API,其OIDC范围用于授权用户的API呼叫。

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

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

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

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

身份池

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

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

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

基于角色的访问控制

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

访问控制属性

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

Amazon Cognito 身份池的功能
功能 描述
亚马逊 Cognito 用户池 SP 使用用户池中的 ID 令牌交换来自的 Web 身份凭证 Amazon STS
SAML2.0 SP 交换来自 Web 身份凭证的SAML断言 Amazon STS
OIDCSP 使用OIDC令牌兑换 Web 身份凭证 Amazon STS
OAuth2.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 用户池和身份池的比较

功能 描述 用户池 身份池
OIDCIdP 发放 OIDC ID 令牌以对应用程序用户进行身份验证
API授权服务器 发放访问令牌以授权用户访问接受 OAuth 2.0 授权范围的数据库和其他资源 APIs
IAMWeb 身份授权服务器 生成可用于交换临时 Amazon 凭证 Amazon STS 的令牌
SAML2.0 SP 和 OIDC IdP 根据 SAML 2.0 IdP的索赔发行定制OIDC代币
OIDCSP 和 OIDC IdP 根据I OIDC dP的索赔发行定制OIDC代币
OAuth2.0 SP 和 OIDC IdP 根据苹果和谷歌等 OAuth 2.0社交提供商的范围发行自定义OIDC代币
SAML2.0 SP 和凭证经纪人 根据来自 SAML 2.0 IdP 的声明颁发临时 Amazon 证书
OIDCSP 和凭证代理 根据 I OIDC dP 的声明颁发临时 Amazon 证书
OAuth2.0 SP 和凭证经纪人 根据来自 Apple 和 Google 等 OAuth 2.0 社交提供商的范围颁发临时 Amazon 凭证
亚马逊 Cognito 用户池 SP 和凭证代理 根据 Amazon Cognito 用户池中的OIDC声明颁发临时 Amazon 证书
自定义 SP 和凭证代理 根据开发者IAM授权颁发临时 Amazon 证书
认证前端服务 使用托管用户界面注册、管理和验证用户
API支持你自己的身份验证 UI 通过支持的API请求创建、管理和验证用户 Amazon SDKs ¹
MFA 使用SMS消息TOTPs、或用户的设备作为额外的身份验证因素¹
安全监控和响应 防范恶意活动和不安全的密码¹
自定义身份验证流程 构建自己的身份验证机制,或在现有流程中添加自定义步骤¹
在将令牌传递给身份池时,创建用户的逻辑分组和IAM角色声明的层次结构
自定义 ID 令牌 使用新的、修改过的和禁止的声明自定义您的 ID 令牌
Amazon WAF 网页 ACLs 通过以下方式监控和控制对身份验证环境的请求 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 定价