

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

# 向用户池添加组
<a name="cognito-user-pools-user-groups"></a>

借助对 Amazon Cognito 用户池中组的支持，您可以创建和管理组、将用户添加到组以及从组中删除用户。使用组可创建用户集合以管理其权限或表示不同类型的用户。您可以为群组分配 AWS Identity and Access Management (IAM) 角色来定义群组成员的权限。

您可以使用组以在用户池中创建用户集合，这通常用于为这些用户设置权限。例如，您可以为作为您网站和应用程序的读者、贡献者或编辑者的用户创建单独的组。通过使用与组关联的 IAM 角色，您还可以为那些不同的组设置不同的权限，从而只有贡献者可以将内容放置在 Amazon S3 中，并且只有编辑者可以通过 Amazon API Gateway 中的 API 发布内容。

Amazon Cognito 会为您添加到用户池中的每个 OIDC 和社交身份[提供商 (](cognito-user-pools-identity-federation.md#cognito-user-pools-identity-federation-how-it-works)IdP) 创建一个用户组。 SAMl该组的名称采用 `[user pool ID]_[IdP name]` 格式，例如 `us-east-1_EXAMPLE_MYSSO` 或 `us-east-1_EXAMPLE_Google`。每个自动生成的唯一 IdP 用户配置文件都会自动添加到该组。[关联用户](cognito-user-pools-identity-federation-consolidate-users.md)不会自动添加到该组，但您可以通过另外的流程将其配置文件添加到该组。

您可以通过、和 CLI 在用户池中 AWS 管理控制台创建和管理群组。 APIs作为开发者（使用 AWS 证书），您可以创建、读取、更新、删除和列出用户池的群组。您还可以将用户添加到组和从组中删除用户。

在用户池中使用组不会产生额外费用。有关更多信息，请参阅 [Amazon Cognito 定价](https://aws.amazon.com/cognito/pricing/)。

## 向组分配 IAM 角色
<a name="assigning-iam-roles-to-groups"></a>

您可以使用组通过 IAM 角色控制资源的权限。IAM 角色包含信任策略和权限策略。角色的[信任](https://docs.aws.amazon.com/cognito/latest/developerguide/role-trust-and-permissions.html)策略指定谁可使用该角色。[权限](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies)策略指定组成员可以访问的操作和资源。在您创建 IAM 角色时，请设置角色的信任策略以允许您的组用户担任该角色。请在角色的权限策略中，指定您希望组具有的权限。

在 Amazon Cognito 中创建组时，可以通过提供角色的 [ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns) 指定 IAM 角色。当组成员使用 Amazon Cognito 登录时，他们可以从身份池接收临时凭证。他们的权限由关联的 IAM 角色确定。

单个用户可处于多个组中。作为开发人员，当一个用户位于多个组中时，您可以使用以下选项自动选择 IAM 角色：
+ 您可以为每个组分配优先级值。将选择优先级较高（值较低）的组，并应用其关联的 IAM 角色。
+ 在通过身份池为用户请求 AWS 凭证时，您的应用程序还可以在参数中指定角色 ARN，从可用角色中[GetCredentialsForIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html)`CustomRoleARN`进行选择。指定的 IAM 角色必须与适用于用户的角色相匹配。

## 将优先级值分配到组
<a name="assigning-precedence-values-to-groups"></a>

一个用户可属于多个组。在用户的访问令牌和 ID 令牌中，`cognito:groups` 声明包含用户所属的所有组的列表。`cognito:roles` 断言包含与这些组对应的角色列表。

由于一个用户可以属于多个组，因此可为每个组分配一个优先级。这是一个非负数值，用于指定该组相对于用户池中用户所属其它组的优先级。零是代表最高优先级的值。具有较低优先级值的组优先于具有较高或空优先级值的组。如果一个用户属于两个或更多组，则具有最低优先级值的组的 IAM 角色将应用于用户 ID 令牌中的 `cognito:preferred_role` 声明。

两个组可以具有相同的优先级值。如果发生这种情况，则两个组之间不存在优先情况。如果具有相同优先级值的两个组还具有相同的角色 ARN，则该角色将用于每个组中用户的 ID 令牌的 `cognito:preferred_role` 陈述。如果两个群组的角色不同 ARNs，则不会在用户的 ID 令牌中设置`cognito:preferred_role`声明。

## 使用组控制使用 Amazon API Gateway 的权限
<a name="using-groups-to-control-permission-with-amazon-api-gateway"></a>

您可以使用用户池中的组控制使用 Amazon API Gateway 的权限。用户所属的组包含在 `cognito:groups` 声明中的用户池的 ID 令牌和访问令牌中。您可以通过请求向 Amazon API Gateway 提交 ID 或访问令牌，并使用 Amazon Cognito 用户池授权方获取 REST API。有关更多信息，请参阅[《API Gateway 开发人员指南》](https://docs.aws.amazon.com/apigateway/latest/developerguide/)中的[使用 Amazon Cognito 用户池作为授权方控制对 REST API 的访问](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html)。

您还可以使用自定义 JWT 授权方授权访问 Amazon API Gateway HTTP API。有关更多信息，请参阅《[API Gateway 开发](https://docs.aws.amazon.com/apigateway/latest/developerguide/)者指南》中的 “[ APIs 使用 JWT 授权者控制 HTTP 访问权限](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-jwt-authorizer.html)”。

## 组的限制
<a name="user-pool-user-groups-limitations"></a>

用户组受以下限制的约束：
+ 您可以创建的组的数量受 [Amazon Cognito 服务配额](quotas.md)的限制。
+ 不能对组进行嵌套。
+ 不能搜索组中的用户。
+ 不能按名称搜索组，但可以列出组。

## 在中创建新群组 AWS 管理控制台
<a name="creating-a-new-group-using-the-console"></a>

使用以下过程创建新组。

**创建新组。**

1. 转到 [Amazon Cognito 控制台](https://console.aws.amazon.com/cognito/home)。如果出现提示，请输入您的 AWS 凭据。

1. 选择 **User Pools**（用户池）。

1. 从列表中选择现有用户池。

1. 选择**组**菜单，然后选择**创建组**。

1. 在 **Create a group**（创建组）页面的 **Group name**（组名称）中，为您的新组输入一个易记名称。

1. 您可以选择使用以下任意字段提供有关此组的其它信息：
   + **Description**（说明）– 输入有关这个新组将用于什么的详细信息。
   + **Precedence**（优先顺序）– Amazon Cognito 根据给定用户所属群组具有的较低优先级值，评估并应用所有群组权限。将选择优先级较低的组，并应用其关联的 IAM 角色。有关更多信息，请参阅 [将优先级值分配到组](#assigning-precedence-values-to-groups)。
   + **IAM role**（IAM 角色）– 当您需要控制对资源的权限时，您可以为组分配 IAM 角色。如果您要将用户池与身份池集成，并且身份池配置为从令牌中选择角色，则 **IAM role (IAM 角色)** 设置将确定在用户的 ID 令牌中分配哪个角色。有关更多信息，请参阅 [向组分配 IAM 角色](#assigning-iam-roles-to-groups)。
   + **Add users to this group**（将用户添加到此组）– 创建后将现有用户添加为该组的成员。

1. 选择 **Create**（创建）以确认。