

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

# 更改密钥的加密 Amazon Secrets Manager 密钥
<a name="manage_update-encryption-key"></a>

Secrets Manager 使用带有 Amazon KMS 密钥和数据密钥的[信封加密](security-encryption.md)来保护每个密钥值。对于每个秘密，您可以选择要使用的 KMS 密钥。您可以使用客户管理的密钥 Amazon 托管式密钥 **aws/secretsmanager**，也可以使用客户管理的密钥。大多数情况下，建议使用 **aws/secretsmanager**，并且使用它不产生任何成本。如果您需要从其他人访问密钥 Amazon Web Services 账户，或者您想使用自己的 KMS 密钥以便轮换密钥或对其应用密钥策略，请使用 客户自主管理型密钥。您必须具有 [KMS 密钥的权限](security-encryption.md#security-encryption-authz)。有关使用客户托管密钥的成本的信息，请参阅 [定价](intro.md#asm_pricing)。

您可以更改秘密的加密密钥。例如，如果您想[从其他账户访问密钥](auth-and-access_examples_cross.md)，并且该密钥当前已使用 Amazon 托管密钥进行加密`aws/secretsmanager`，则可以切换到 客户自主管理型密钥。

**提示**  
如果您想轮换 客户自主管理型密钥，我们建议您使用 Amazon KMS 自动密钥轮换。有关更多信息，请参阅[轮换 Amazon KMS 密钥](https://docs.amazonaws.cn/kms/latest/developerguide/rotate-keys.html)。

当您更改加密密钥时，Secrets Manager 会使用新密钥重新加密 `AWSCURRENT`、`AWSPENDING` 和 `AWSPREVIOUS` 版本。为了避免将您锁定在密钥之外，Secrets Manager 会使用以前的密钥加密所有现有版本。这意味着您可以使用以前的密钥或新密钥解密 `AWSCURRENT`、`AWSPENDING` 和 `AWSPREVIOUS` 版本。如果没有先前密钥的 `kms:Decrypt` 权限，则当您更改加密密钥时，Secrets Manager 无法解密密钥版本来重新加密它们。在这种情况下，现有版本不会被重新加密。

为了使只能通过新加密密钥解密 `AWSCURRENT`，请使用新密钥创建新版本的密钥。然后，为了能够解密 `AWSCURRENT` 密钥版本，您必须拥有新密钥的权限。

如果停用以前的加密密钥，则除了 `AWSCURRENT`、`AWSPENDING` 和 `AWSPREVIOUS` 之外，您将无法解密任何秘密版本。如果想要保留对其他标有标签的秘密版本的访问权限，则需要使用 [Amazon CLI](#manage_update-encryption-key_CLI) 通过新的加密密钥重新创建这些版本。

**更改秘密的加密密钥（控制台）**

1. 打开 Secrets Manager 控制台，网址为[https://console.aws.amazon.com/secretsmanager/](https://console.amazonaws.cn/secretsmanager/)。

1. 从密钥列表上，选择您的密钥。

1. 在秘密详细信息页面上的**秘密详细信息**部分中，选择**操作**，然后选择**编辑加密密钥**。

## Amazon CLI
<a name="manage_update-encryption-key_CLI"></a>

如果更改秘密的加密密钥，然后停用了以前的加密密钥，则除了 `AWSCURRENT`、`AWSPENDING` 和 `AWSPREVIOUS` 之外，您将无法解密任何秘密版本。如果想要保留对其他标有标签的秘密版本的访问权限，则需要使用 [Amazon CLI](#manage_update-encryption-key_CLI) 通过新的加密密钥重新创建这些版本。

**更改秘密的加密密钥 (Amazon CLI)**

1. 以下 [https://docs.amazonaws.cn//cli/latest/reference/secretsmanager/update-secret.html](https://docs.amazonaws.cn//cli/latest/reference/secretsmanager/update-secret.html) 示例将更新用于加密密钥值的 KMS 密钥。该 KMS 密钥必须与加密密钥位于同一区域中。

   ```
   aws secretsmanager update-secret \
         --secret-id MyTestSecret \
         --kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE
   ```

1. （可选）如果您的秘密版本带有自定义标签，则要使用新密钥对其重新加密，则必须重新创建这些版本。

   当您在命令 shell 中输入命令时，存在访问命令历史记录或实用程序可以访问您命令参数的风险。请参阅[降低使用存储 Amazon Secrets Manager 密钥 Amazon CLI 的风险](security_cli-exposure-risks.md)。

   1. 获取秘密版本的值。

      ```
      aws secretsmanager get-secret-value \
            --secret-id MyTestSecret \
            --version-stage MyCustomLabel
      ```

      记下秘密值。

   1. 创建具有该值的新版本。

      ```
      aws secretsmanager put-secret-value \
          --secret-id testDescriptionUpdate \
          --secret-string "SecretValue" \
          --version-stages "MyCustomLabel"
      ```