客户身份管理 - AWS 规范性指导

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

客户身份管理

客户身份和访问管理 (CIAM) 是一种允许组织管理客户身份的技术。它为注册、登录和访问组织提供的消费者应用程序、门户网站或数字服务提供了安全性和增强的用户体验。 CIAM帮助您识别客户,创建个性化体验,并确定他们对面向客户的应用程序和服务所需的正确访问权限。CIAM解决方案还可以帮助组织满足跨行业监管标准和框架的合规要求。有关更多信息,请参阅什么是CIAM? 在AWS网站上。

Amazon Cognito 是一项适用于网络和移动应用程序的身份服务,可为任何规模的企业提供CIAM功能。Amazon Cognito 包括用户目录、身份验证服务器和 OAuth 2.0 访问令牌的授权服务,还可以提供临时AWS证书。您可以使用 Amazon Cognito 对来自内置用户目录、联合身份提供商(例如您的企业目录)或社交身份提供商(例如 Google 和 Facebook)的用户进行身份验证和授权。

Amazon Cognito 的两个主要组件是用户池和身份池。用户池是用户目录,可为您的 Web 和移动应用程序用户提供注册和登录选项。身份池提供临时AWS证书,以授予您的用户访问其他AWS服务的权限。

何时使用 Amazon Cognito

当您需要为网络和移动应用程序提供安全且经济实惠的用户管理解决方案时,Amazon Cognito 是一个不错的选择。以下是您可能决定使用 Amazon Cognito 的一些场景:

  • 认证。如果您正在设计应用程序原型或想要快速实现用户登录功能,则可以使用 Amazon Cognito 的用户池和托管用户界面来加快开发速度。在 Amazon Cognito 处理用户注册、登录和安全的同时,您可以专注于核心应用程序功能。

    Amazon Cognito 支持各种身份验证方法,包括用户名和密码、社交身份提供商。以及通过和 OpenID SAML Connect () 提供的企业身份提供商。OIDC

  • 用户管理。Amazon Cognito 支持用户管理,包括用户注册、验证和账户恢复。用户可以通过其首选身份提供商注册和登录,并且您可以根据应用程序的要求自定义注册流程。

  • 安全访问AWS资源。Amazon Cognito 与集成IAM,可提供对资源的精细访问控制。AWS您可以定义IAM角色和策略,根据用户身份和群组成员资格来控制对AWS服务的访问权限。

  • 联邦身份。Amazon Cognito 支持联合身份,允许用户使用其现有的社交或企业身份登录。这样用户就不必为你的应用程序创建新的凭证,因此它可以增强用户体验并减少注册过程中的摩擦。

  • 移动和网络应用程序。Amazon Cognito 非常适合移动和网络应用程序。它SDKs提供了各种平台,并且可以轻松地将身份验证和访问控制集成到您的应用程序代码中。它支持移动应用程序的离线访问和同步,因此用户即使处于离线状态也可以访问其数据。

  • 可扩展性。Amazon Cognito 是一项高度可用且完全托管的服务,可以扩展到数百万用户。它每月处理超过 1000 亿次身份验证。

  • 安全性。Amazon Cognito 具有多项内置安全功能,例如敏感数据加密、多因素身份验证 (MFA) 以及防范常见网络攻击,例如跨站脚本 (XSS) 和跨站请求伪造 ()。CSRFAmazon Cognito 还提供高级安全功能,例如自适应身份验证、检查被盗凭证的使用情况以及访问令牌自定义。

  • 与现有AWS服务集成。亚马逊 Cognito 与AWS服务无缝集成。这可以简化开发并简化依赖AWS资源的功能的用户管理。

下图说明了其中的一些场景。

使用 Amazon Cognito 作为客户身份和访问管理 () CIAM
  1. 该应用程序使用 Amazon Cognito 用户池进行身份验证并获得令牌。

  2. 该应用程序使用 Amazon Cognito 身份池将令牌交换为证书。AWS

  3. 应用程序使用凭据访问AWS服务。

当您需要向 Web 或移动应用程序添加用户身份验证、授权和用户管理功能时,我们建议您使用 Amazon Cognito,尤其是在您有多个身份提供商、需要安全访问AWS资源并且有可扩展性要求的情况下。

设计注意事项
  • 根据您的要求创建 Amazon Cognito 用户池或身份池。

  • 不要过于频繁地更新用户个人资料(例如,每次登录请求)。如果需要更新,请将更新的属性存储在外部数据库(例如 Amazon DynamoDB)中。

  • 请勿使用 Amazon Cognito 员工身份管理。

  • 在信任JSON网络令牌 (JWTs) 之前,您的应用程序应始终通过验证其签名和有效性来对其进行验证。此验证应在客户端完成,无需向用户池发送API调用。验证令牌后,您可以信任令牌中的声明并使用它们,而不必进行其他 getUser API调用。有关更多信息,请参阅 Amazon C ognito 文档中的验证JSON网络令牌。 您还可以使用其他JWT库进行令牌验证。

  • 只有在您未使用CUSTOM_AUTH流程、用于自定义身份验证挑战的 Lamb AWS da 触发器或联合登录时,才启用 A mazon Cognito 的高级安全功能。有关高级安全功能的注意事项和限制,请参阅 Amazon Cognito 文档

  • 启用后 AWSWAF,使用基于速率的规则并组合多个请求参数来保护 Amazon Cognito 用户池。有关更多信息,请参阅AWS博客文章使用保护您的 Amazon Cognito 用户池。AWS WAF

  • 如果您想要额外的保护层,请使用亚马逊 CloudFront 代理对传入的请求进行额外处理和验证,如AWS博客文章使用亚马逊代理保护Amazon Cognito的公共客户端中所述。 CloudFront

  • 用户登录后的所有API呼叫都应通过后端服务发出。例如,使用拒绝AWSWAF对的调用UpdateUserAttribute,然后改为AdminUpdateUserAttribute从应用程序后端调用以更新用户属性。

  • 创建用户池时,您可以选择用户登录的方式,例如,使用用户名、电子邮件地址或电话号码。创建用户池后,无法更改此配置。同样,将自定义属性添加到用户池后,也无法对其进行更改或删除。

  • 我们建议您在用户池中启用多因素身份验证 (MFA)

  • Amazon Cognito 目前不提供内置的备份或导出功能。要备份或导出用户的数据,您可以使用 Amazon Cognito 配置文件导出参考架构

  • 使用IAM角色对AWS资源进行常规访问。如需详细的授权要求,请使用 Amazon 验证权限。此权限管理服务本机与 Amazon Cognito 集成。您还可以使用访问令牌自定义来丰富应用程序特定的声明,以确定用户可用的访问权限和内容级别。如果您的应用程序使用 Amazon API Gateway 作为入口点,请使用 Amazon Cognito 功能通过使用亚马逊验证API权限来保护亚马逊网关。该服务管理和评估引用用户属性和群组的精细安全策略。您可以确保只有获得授权的 Amazon Cognito 群组中的用户才能访问该应用程序。APIs有关更多信息,请参阅AWS社区网站上的 “使用 Amazon 验证权限保护API网关” 一文。

  • AWSSDKs用于通过调用和检索用户属性、状态和群组信息,从后端访问用户数据。您可以将自定义应用程序数据存储在 Amazon Cognito 的用户属性中,并在不同设备之间保持同步。

以下各节讨论了将 Amazon Cognito 与其他AWS服务集成的三种模式:应用程序负载均衡器、Amazon API Gateway 和亚马逊服务。 OpenSearch

与 Application Load Balancer 集成

您可以使用 Amazon Cognito 配置应用程序负载均衡器,以对应用程序用户进行身份验证,如下图所示。

使用 Amazon Cognito 配置应用程序负载均衡器以进行身份管理

通过配置HTTPS侦听器默认规则,您可以将用户身份转移到 Application Load Balancer,并创建自动身份验证流程。有关详细信息,请参阅AWS知识中心如何设置 Application Load Balancer 以通过 Amazon Cognito 用户池对用户进行身份验证。如果您的应用程序托管在 Kubernetes 上,请参阅AWS博客文章如何使用应用程序负载均衡器和 Amazon Cognito 对 Kubernetes 网络应用程序的用户进行身份验证。 

与 Amazon API 网关集成

Amazon API Gateway 是一项完全托管的、基于云的API网关服务,可以轻松地大规模创建、发布和管理APIs。它是用户流量进入后端服务的入口点。您可以将 Amazon Cognito 与 API Gateway 集成,以实现身份验证和访问控制,以APIs防止滥用或用于任何其他安全或商业用例。您可以使用 Amazon Cognito 授权机构、亚马逊验证权限或 Lambda 授权机构对安全API网关APIs实施身份验证和访问控制。下表描述了这三种方法如何支持授权。

授权者类型 支持的授权

亚马逊 Cognito 授权者

访问令牌:范围

ID 令牌:有效性

已验证的权限 — Lambda 授权方

已验证权限对配置的令牌执行令牌验证(签名、到期)。

访问令牌:任何简单属性、复杂属性、范围或组。

ID 令牌:任何简单属性、复杂属性、范围或组。

策略还可以使用上下文数据进行零信任授权(例如,IP 地址、请求上下文或设备指纹)。

自定义 Lambda 授权器

您可以实现自定义令牌验证和授权方案。

亚马逊 Cognito 授权者

您可以将 Amazon Cognito 与 API Gateway 集成,以实现身份验证和访问控制,如下图所示。Amazon Cognito 授权机构验证 Amazon Cognito 生成的JSON网络令牌 (JWT),并根据访问令牌或有效 ID 令牌中的自定义范围对请求进行授权。要了解有关实现的更多信息,请参阅如何将 Amazon Cognito 用户池设置为网关上的授权者?APIRESTAPI 在AWS知识库中。

使用带有 Gate API way 的 Amazon Cognito 授权机构进行身份管理

已验证的权限 — Lambda 授权方

您可以使用亚马逊验证权限将 Amazon Cognito 或您自己的身份提供商与 G API ateway 集成,以进行身份验证和精细的访问控制。已验证权限支持来自 Amazon Cognito 或任何 OpenID Connect (OIDC) 提供商的 ID 和访问令牌验证,并且可以根据简单令牌属性、复杂令牌属性(例如数组或JSON结构)、范围和群组成员资格来授权访问。要开始使用经过验证的权限RESTAPIs来保护API网关,请查看AWS安全博客文章APIs使用 Amazon Cognito 的亚马逊验证权限授权API网关,或者带上自己的身份提供商和视频《亚马逊验证权限-快速入门概述和演示》。

使用经过验证的权限 Lambda 授权方和 API Gateway 进行身份管理

Lambda 授权方

您可以使用 AWS Lambda 授权机构来实现自定义授权方案。您的方案可以使用请求参数来确定调用者的身份,也可以使用不记名令牌身份验证策略,例如OAuth或SAML。此选项提供了最大的灵活性,但需要您对逻辑进行编码以保护您的安全APIs。有关更多信息,请参阅网关文档中的使用API网关 Lambda 授权方。API

与亚马逊 OpenSearch 服务集成

您可以使用 Amazon Cognito 来保护亚马逊 OpenSearch 服务域名。例如,如果用户可能需要从互联网访问 OpenSearch 仪表板,如下图所示。在这种情况下,Amazon Cognito 可以通过将 Amazon Cognito 群组和用户映射到内部服务权限来提供访问权限,包括精细权限。 OpenSearch 有关更多信息,请参阅 OpenSearch 服务文档中的为 OpenSearch 控制面板配置 Amazon Cognito 身份验证

使用亚马逊 Cognito 保护亚马逊 OpenSearch 服务域名