

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

# 更新用户池和应用程序客户端配置
<a name="cognito-user-pool-updating"></a>

当您想要更改用户池或应用程序客户端中的设置时，只需点击几下即可在 Amazon Cognito 控制台中应用更新。浏览用户池设置中基于特征的选项卡，并按照本指南其他部分的说明更新字段。

许多组织通过编程方式管理其资源 AWS CloudFormation、基于 AWS SDKs 或 CDK 构建的应用程序以及其他自动化软件。如果这是您的资源管理模型，则在资源中逐步实施变更时必须格外小心。

API 操作[ UpdateUserPool[ UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)并更新现有用户池或应用程序客户端。每个操作在 API 参考中都有一个警告：*如果您没有为属性提供值，Amazon Cognito 会将其设置为默认值。*当您提交仅包含一个参数的更新请求时，Amazon Cognito 会将该参数设置为您选择的值，并将所有其他参数设置为默认值。这样可以重置配置，包括您的属性架构、Lambda 触发器以及电子邮件和短信消息配置。

此外，在创建用户池或应用程序客户端后，有些设置会锁定，除非创建新资源，否则无法更改这些设置。

**Topics**
+ [无法更改的设置](#cognito-user-pool-updating-fixed-settings)
+ [短信配置](#cognito-user-pool-updating-sms)
+ [使用 AWS SDK 或 REST API 更新用户池 AWS CDK](#cognito-user-pool-updating-api-cli)

## 无法更改的设置
<a name="cognito-user-pool-updating-fixed-settings"></a>

创建用户池后，您无法更改一些设置。如果您想要更改以下设置，您必须创建新的用户池或应用程序客户端。

**注意**  
以前，您无法更改用户池的名称。这一点已经改变。现在，您可以为用户池分配新的友好名称。

**用户池 ID**  
API 参数名称：[ID/ UserPoolId](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserPoolType.html#CognitoUserPools-Type-UserPoolType-ID)  
用户池 ID（例如 `us-east-1_EXAMPLE`）由 Amazon Cognito 自动生成，无法更改。

**Amazon Cognito 用户池登录选项**  
API 参数名称：[AliasAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-AliasAttributes)和 [UsernameAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-UsernameAttributes)  
用户登录时可以作为用户名传递的属性。创建用户池时，您可以选择允许使用用户名、电子邮件地址、电话号码或首选用户名进行登录。要更改用户池登录选项，请创建新的用户池。

**Make user name case sensitive（使用户名区分大小写）**  
API 参数名称：[UsernameConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-UsernameConfiguration)  
当您创建的用户名与其他用户名（字母大小写除外）匹配时，Amazon Cognito 可以将其视为同一用户或唯一用户。有关更多信息，请参阅 [用户池区分大小写](user-pool-case-sensitivity.md)。要更改区分大小写，请创建新的用户池。

**客户端密钥**  
API 参数名称：[GenerateSecret](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html#CognitoUserPools-CreateUserPoolClient-request-GenerateSecret)  
创建应用程序客户端时，可以生成客户端密钥，以便只有受信任的来源才能向用户池发出请求。有关更多信息，请参阅 [特定于应用程序的应用程序客户端设置](user-pool-settings-client-apps.md)。要更改客户端密钥，请在同一用户池中创建新的应用程序客户端。

**必需的属性**  
API 参数名称：[Schema](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Schema)  
当用户注册时或当您创建属性时，用户必须为这些属性提供值。有关更多信息，请参阅 [使用用户属性](user-pool-settings-attributes.md)。要更改必需的属性，请创建新的用户池。

**自定义属性（删除）**  
API 参数名称：[Schema](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Schema)  
具有自定义名称的属性。您可以更改用户自定义属性的值，但不能从用户池中删除自定义属性。有关更多信息，请参阅 [使用用户属性](user-pool-settings-attributes.md)。如果达到自定义属性的最大数量并且您想要修改列表，请创建新的用户池。

## 短信配置
<a name="cognito-user-pool-updating-sms"></a>

激活用户池中的短信后，您就无法停用它们。
+ 如果您选择在创建用户池时配置短信，则在完成设置后无法停用短信。
+ 您可以在自己创建的用户池中激活短信，但之后就无法停用短信。
+ Amazon Cognito 可以使用短信进行用户账户邀请和恢复、属性验证和多重身份验证（MFA）。激活短信后，您可以随时为这些功能开启或关闭短信。
+ 短信配置包括您委托给 Amazon Cognito 的 IAM 角色，以便使用 Amazon SNS 发送消息。您可以随时更改分配的角色。

## 使用 AWS SDK 或 REST API 更新用户池 AWS CDK
<a name="cognito-user-pool-updating-api-cli"></a>

在 Amazon Cognito 控制台中，您可以更改用户池设置，一次更改一个参数。例如，要添加 Lambda 触发器，您可以选择**添加 Lambda 触发器**，然后选择函数和触发器类型。Amazon Cognito 用户池 API 按以下方式进行构造，用户池和应用程序客户端的更新操作需要用户池的完整参数集。但是，控制台会使用您的其他用户池设置透明地自动执行此更新操作。

有时你可能会发现，当更新与你要更改的设置无关时，你 AWS 账户 可能会发现其他地方的更改可能会导致更新生成错误。例如，已删除的 Amazon SES 身份或 IAM 权限的 AWS WAF更改。如果其中一个当前参数不再有效，则在修复该参数之前，您无法更新设置。遇到此类错误时，请检查错误响应并验证响应中提及的设置。

[Amazon Cognito 用户池 REST API [AWS SDKs](https://aws.amazon.com/developer/tools/)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html)是用于自动化和编程配置 Amazon Cognito 资源的工具。[AWS Cloud Development Kit (AWS CDK)](https://aws.amazon.com/cdk)使用这些工具的请求也必须像 Amazon Cognito 控制台一样，在请求正文中使用完整的资源配置来更新设置。概括来说，您必须执行以下步骤。

1. 从描述现有资源配置的操作中捕获输出。

1. 设置更改后修改输出。

1. 在更新资源的操作中发送修改后的配置。

以下过程使用 [ UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API 操作更新您的配置。同样的方法适用于不同的输入字段[ UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)。

**重要**  
如果您未为现有参数提供值，Amazon Cognito 将它们设置为默认值。例如，如果您有现有的 `LambdaConfig`，然后提交具有空 `LambdaConfig` 的 `UpdateUserPool`，则会删除为用户池触发器分配的所有 Lambda 函数。当您想自动更改用户池配置时，请相应地进行规划。

1. 使用捕获用户池的现有状态[ DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html)。

1. 设置 `DescribeUserPool` 的输出的格式以与 `UpdateUserPool` 的[请求参数](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#API_UpdateUserPool_RequestSyntax)匹配。从输出 JSON 中删除以下顶级字段及其子对象。
   + `Arn`
   + `CreationDate`
   + `CustomDomain`
     + 使用 [UpdateUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolDomain.html)API 操作更新此字段。
   + `Domain`
     + 使用 [UpdateUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolDomain.html)API 操作更新此字段。
   + `EmailConfigurationFailure`
   + `EstimatedNumberOfUsers`
   + `Id`
   + `LastModifiedDate`
   + `Name`
   + `SchemaAttributes`
   + `SmsConfigurationFailure`
   + `Status`

1. 确认生成的 JSON 与 `UpdateUserPool` 的[请求参数](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#API_UpdateUserPool_RequestSyntax)匹配。

1. 修改任何您想要在生成的 JSON 中更改的参数。

1. 提交 `UpdateUserPool` API 请求，同时将您修改后的 JSON 作为请求输入。

您还可以在 AWS CLI中，在 `update-user-pool` 的 `--cli-input-json` 参数中使用这一修改后的 `DescribeUserPool` 输出。

或者，运行以下 AWS CLI 命令为接受的输入字段生成空值的 JSON。`update-user-pool`然后，您可以使用用户池中的现有值填充这些字段。

```
aws cognito-idp update-user-pool --generate-cli-skeleton --output json
```

运行以下命令以为应用程序客户端生成相同的 JSON 对象。

```
aws cognito-idp update-user-pool-client --generate-cli-skeleton --output json
```