

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

# 步骤 4：导入密钥材料
<a name="importing-keys-import-key-material"></a>

在[加密密钥材料](importing-keys-encrypt-key-material.md)之后，您可以导入密钥材料，以将其与 Amazon KMS key配合使用。要导入密钥材料，请上传在[步骤 3：加密密钥材料](importing-keys-encrypt-key-material.md)中加密的密钥材料以及在[步骤 2：下载包装公有密钥和导入令牌](importing-keys-get-public-key-and-token.md)中下载的导入令牌。您必须将密钥材料导入您在[下载公有密钥和导入令牌](importing-keys-get-public-key-and-token.md)时指定的同一 KMS 密钥中。成功导入密钥材料时，KMS 密钥的[密钥状态](key-state.md)会更改为 `Enabled`，您可以在加密操作中使用 KMS 密钥。

当您导入密钥材料时，您可以为密钥材料[设置可选的过期日期](#importing-keys-expiration)。当密钥材料过期后， Amazon KMS 将删除密钥材料，并且 KMS 密钥将变为不可用。导入密钥材料后，无法设置、更改或取消当前导入的到期日期。要更改这些值，您必须[重新导入](#reimport-key-material)相同的密钥材料。

对于所有来源为 `EXTERNAL` 的 KMS 密钥，导入的第一个密钥材料将变为当前密钥材料并与之永久关联。带`EXTERNAL`来源的对称加密密钥支持按需轮换。您可以将多个密钥材料关联到支持按需轮换的导入的密钥。单区域和多区域密钥的导入新密钥材料的过程有所不同，如[导入新](#import-new-key-material)密钥材料一节中所述。要将新密钥材料`NEW_KEY_MATERIAL`与 KMS 密钥关联的[ImportKeyMaterial](https://docs.amazonaws.cn/kms/latest/APIReference/API_ImportKeyMaterial.html)操作，必须将`importType`参数设置为。可选 `ImportType` 参数的默认值为 `EXISTING_KEY_MATERIAL`。省略 `ImportType` 参数或将其指定为 `EXISTING_KEY_MATERIAL` 时，必须导入先前与 KMS 密钥关联的密钥材料。

对于非对称密钥或带有`EXTERNAL`来源的 HMAC KMS 密钥，只能将一种密钥材料与密钥相关联。 Amazon KMS 将拒绝带`ImportType`参数[ ImportKeyMaterial](https://docs.amazonaws.cn/kms/latest/APIReference/API_ImportKeyMaterial.html)的 API 请求。

导入与 KMS 密钥永久关联的所有密钥材料后，KMS 密钥才可用于密码操作。如果删除其中任何一个密钥材料或放任其过期，则 KMS 密钥状态将变为 `PendingImport`，并且该密钥将不再能够用于密码操作。

要导入密钥材料，您可以使用[Amazon KMS 控制台](#importing-keys-import-key-material-console)或 [ImportKeyMaterial](https://docs.amazonaws.cn/kms/latest/APIReference/API_ImportKeyMaterial.html)API。您可以直接使用 API，方法是发出 HTTP 请求，也可以使用[Amazon SDKs](https://www.amazonaws.cn/tools/#sdk)、[Amazon Command Line Interface](https://docs.amazonaws.cn/cli/latest/userguide/)或[Amazon Tools for PowerShell](https://docs.amazonaws.cn/powershell/latest/userguide/)。

导入密钥材料时，会在 Amazon CloudTrail 日志中添加一个记录`ImportKeyMaterial`操作的[ImportKeyMaterial条](ct-importkeymaterial.md)目。无论您使用 Amazon KMS 控制台还是 Amazon KMS API， CloudTrail 条目都是一样的。

## 设置过期时间（可选）
<a name="importing-keys-expiration"></a>

导入 KMS 密钥的密钥材料时，可以将密钥材料的可选过期日期和时间设置为自导入之日起 365 天中的任意一天。导入的密钥材料过期后，将其 Amazon KMS 删除。此操作会将 KMS 密钥的[密钥状态](key-state.md#key-state-table)更改为 `PendingImport`，这将阻止在任何加密操作中使用该密钥。要使用 KMS 密钥，您必须[重新导入原始密钥材料的副本](#reimport-key-material)。

确保导入的密钥材料经常过期，可帮助您满足监管要求，但这样做会给在 KMS 密钥下加密的数据带来额外的风险。在您重新导入原始密钥材料的副本之前，包含过期密钥材料的 KMS 密钥不可用，并且在 KMS 密钥下加密的任何数据都不可访问。如果您出于任何原因未能重新导入密钥材料（例如，丢失原始密钥材料的副本），则 KMS 密钥将永久不可用，在 KMS 密钥下加密的数据将无法恢复。

为了降低这种风险，请确保导入的密钥材料的副本可以访问，并设计一个系统，以便在密钥材料过期并中断工作量之前将其删除并重新导入。 Amazon 我们建议您针对导入的密钥材料的过期[设置警报](imported-key-material-expiration-alarm.md)，这样您就有足够的时间在密钥材料过期之前重新导入密钥材料。您还可以使用 CloudTrail 日志来审核[导入（和重新导入）密钥材料和删除导入](ct-importkeymaterial.md)[的密钥材料](ct-deleteimportedkeymaterial.md)的 Amazon KMS 操作，以及[删除过期密钥材料](ct-deleteexpiredkeymaterial.md)的操作。

Amazon KMS 无法恢复、恢复或重现已删除的密钥材料。您可以通过编程定期[删除](importing-keys-delete-key-material.md)和[重新导入](#reimport-key-material)已导入的密钥材料，而无需设置过期时间，但是保留原始密钥材料副本的要求相同。

在导入密钥材料时，确定导入的密钥材料是否以及何时过期。不过，您可以开启和关闭过期时间，也可以通过重新导入密钥材料来设置新的过期时间。使用`ExpirationModel`参数开启[ImportKeyMaterial](https://docs.amazonaws.cn/kms/latest/APIReference/API_ImportKeyMaterial.html)到期时间 (`KEY_MATERIAL_EXPIRES`) 和关闭 (`KEY_MATERIAL_DOES_NOT_EXPIRE`)，使用`ValidTo`参数设置到期时间。自导入数据起的最大天数为 365 天；没有最短天数，但必须是未来时间。

## 设置密钥材料描述
<a name="set-key-material-description"></a>

具有`EXTERNAL`来源的对称加密密钥可以有多个与之关联的密钥材料。在将密钥材料导入此类密钥时，您可以指定可选的密钥材料描述。该描述可用于跟踪相应的密钥材料在 Amazon KMS之外持久保存的位置。

对于多区域密钥，您只能在主区域密钥上设置或更改密钥材料描述。 Amazon KMS 自动将密钥材料描述传播到副本区域密钥。

## 导入新密钥材料
<a name="import-new-key-material"></a>

要具有导入的密钥材料的对称加密 KMS 密钥执行按需轮换，您首先需要导入以前未与该密钥关联的新密钥材料。
+ **单一区域密钥**
  + 使用`ImportType`参数设置为的[ImportKeyMaterial](https://docs.amazonaws.cn/kms/latest/APIReference/API_ImportKeyMaterial.html)操作`NEW_KEY_MATERIAL`来完成此任务。在您执行[RotateKeyOnDemand](https://docs.amazonaws.cn/kms/latest/APIReference/API_RotateKeyOnDemand.html)操作或在中轮换密钥之前，此密钥材料不会与密钥永久关联 Amazon Web Services 管理控制台。在此之前，此密钥材料将处于 `PENDING_ROTATION` 状态。一个 KMS 密钥在任何时候最多只能有一个密钥材料处于 `PENDING_ROTATION` 状态。可以删除处于`PENDING_ROTATION`状态的密钥材料，而不会影响密钥在加密操作中的可用性。
+ **多区域密钥**
  + 要将密钥材料导入多区域密钥，必须先将新的密钥材料导入主区域密钥。您不能直接将新的密钥材料导入副本区域密钥。将新的密钥材料导入主区域密钥后，您可以将相同的密钥材料导入到副本区域密钥中。
  + 使用将主区域键的`ImportType`参数设置**NEW\$1KEY\$1MATERIAL**为的[https://docs.amazonaws.cn/kms/latest/APIReference/API_ImportKeyMaterial.html](https://docs.amazonaws.cn/kms/latest/APIReference/API_ImportKeyMaterial.html)操作来完成此任务。对于副本区域密钥，请使用`ImportKeyMaterial`操作`ImportType`的**EXISTING\$1KEY\$1MATERIAL**参数。
  + 在密钥材料状态更改为状态之前，必须将对称加密多区域密钥的密钥材料导入到所有副本区域密钥和主区域密钥中。`PENDING_ROTATION`在此之前，新密钥材料的状态为`PENDING_MULTI_REGION_IMPORT_AND_ROTATION`。一个 KMS 密钥在任何时候最多可以有一个密钥材料`PENDING_MULTI_REGION_IMPORT_AND_ROTATION`处于`PENDING_ROTATION`或状态（参见中的`KeyMaterialState`描述 [RotationsListEntry](https://docs.amazonaws.cn/kms/latest/APIReference/API_RotationsListEntry.html)）。处于`PENDING_MULTI_REGION_IMPORT_AND_ROTATION`或`PENDING_ROTATION`状态的密钥材料不会与密钥永久关联，可以在不影响密钥在加密操作中的可用性的情况下将其删除。

## 重新导入密钥材料
<a name="reimport-key-material"></a>

如果您管理带有导入的密钥材料的 KMS 密钥，则可能需要重新导入密钥材料。您可以通过重新导入密钥材料替换过期或删除的密钥材料，或者更改密钥材料的到期模型或到期日期。

您可以在可满足您的安全要求任何时间点重新导入密钥材料。您不必等到密钥材料达到或接近其过期时间。

重新导入密钥材料的过程与首次导入密钥材料的过程相同，但以下情况例外。
+ 使用现有 KMS 密钥，而不是创建新的 KMS 密钥。您可以跳过导入过程的[步骤 1](importing-keys-create-cmk.md)。
+ 重新导入密钥材料时，您可以更改到期模型和到期日期。对于对称加密密钥，您还可以更改密钥材料描述。

  对于多区域密钥，您只能在主区域密钥上设置或更改密钥材料描述。 Amazon KMS 自动将密钥材料描述传播到副本区域密钥。

每次将密钥材料导入 KMS 密钥时，您需要为 KMS 密钥[下载并使用新的包装密钥和导入令牌](importing-keys-get-public-key-and-token.md)。包装过程不会影响密钥材料的内容，因此，您可以使用不同的包装公有密钥和不同的包装算法来导入相同的密钥材料。

## 导入密钥材料（控制台）
<a name="importing-keys-import-key-material-console"></a>

您可以使用 Amazon Web Services 管理控制台 来导入密钥材料。

1. 如果您在**上传已包装的密钥材料**页面上，请跳至 [Step 10](#id-key-materials-step)。

1. 登录 Amazon Web Services 管理控制台 并在 [https://console.aws.amazon.com/km](https://console.amazonaws.cn/kms) s 处打开 Amazon Key Management Service (Amazon KMS) 控制台。

1. 要更改 Amazon Web Services 区域，请使用页面右上角的区域选择器。

1. 在导航窗格中，选择**客户托管密钥**。

1. 选择已为其下载公有密钥和导入令牌的 KMS 密钥的密钥 ID 或别名。

1. 选择 **Cryptographic configuration**（加密配置）选项卡并查看其值。这些选项卡位于 **General configuration**（常规配置）部分下 KMS 密钥的详细信息页面上。

   您只能将密钥材料导入**源**为**外部（导入密钥材料）**的 KMS 密钥。有关创建带已导入密钥材料的 KMS 密钥的信息，请参阅 [导入密钥的 Amazon KMS 密钥材料](importing-keys.md)。

1. 根据您的密钥类型选择相应的选项卡。
   + 对于非对称密钥和 HMAC 密钥，请选择密**钥材料**选项卡。
   + 对于对称加密密钥，请选择密**钥材料和轮换**选项卡。

1. 选择导入操作。
   + 对于非对称密钥和 HMAC 密钥，请选择**导入密钥材料**。
   + 对于对称加密密钥，请选择以下选项之一：
     + **导入初始密钥材料**（如果尚未导入任何密钥材料）
     + **导入新的密钥材料**（添加用于轮换的新材料）
     + **重新导入密钥材料**（可在密钥材料表的 “**操作**” 菜单中找到）
**注意**  
对于多区域密钥，您必须先将新的密钥材料导入主区域密钥中。然后，将相同的密钥材料导入每个副本区域密钥。  
对于主多区域密钥，密**钥材料**表包括一个**副本导入状态**列，该列显示所有副本区域的导入状态（例如，“3 个已导入的 0 个”）。选择副本导入状态值以打开一个显示每个副本区域导入状态的模式。该模态为尚未**导入新密钥材料**的副本区域提供导入密钥材料链接。

1. 如果您下载了密钥材料、导入令牌并加密了密钥材料，请选择**下一步**。
**注意**  
对于多区域密钥，您必须先将新的密钥材料导入主区域密钥中。然后，您可以将相同的密钥材料导入到副本区域密钥中。

1. <a name="id-key-materials-step"></a>在**加密的密钥材料和导入令牌**部分，执行以下操作。

   1. 在**包装的密钥材料**下，选择**选择文件**。然后上传包含您的已包装（已加密）密钥材料的文件。

   1. 在**导入令牌**下，选择**选择文件**。上传包含您[已下载](importing-keys-get-public-key-and-token.md#importing-keys-get-public-key-and-token-console)的导入令牌的文件。

1. 在 **Expiration option (过期选项)** 部分中，确定密钥材料是否过期。要设置到期日期和时间，请选择 **Key material expires (密钥材料过期)**，并使用日历选择日期和时间。您可以指定的日期距当前日期和时间最多 365 天。

1. 对于对称加密密钥，您可以选择为要导入的密钥材料指定描述。

1. 选择**导入密钥材料**。

## 导入密钥材料 (Amazon KMS API)
<a name="importing-keys-import-key-material-api"></a>

要导入密钥材料，请使用[ImportKeyMaterial](https://docs.amazonaws.cn/kms/latest/APIReference/API_ImportKeyMaterial.html)操作。以下示例使用 [Amazon CLI](https://www.amazonaws.cn/cli/)，但您可以使用受支持的任何编程语言。

要使用此示例，请执行以下操作：

1. 将 `1234abcd-12ab-34cd-56ef-1234567890ab` 替换为您在下载公有密钥和导入令牌时指定的 KMS 密钥的密钥 ID。要标识 KMS 密钥，请使用其[密钥 ID](concepts.md#key-id-key-id) 或[密钥 ARN](concepts.md#key-id-key-ARN)。该操作不能使用[别名](concepts.md#key-id-alias-name)或[别名 ARN](concepts.md#key-id-alias-ARN)。

1. 将 `EncryptedKeyMaterial.bin` 替换为包含加密的密钥材料的文件的名称。

1. 将 `ImportToken.bin` 替换为包含导入令牌的文件的名称。

1. 如果希望导入的密钥材料过期，请将 `expiration-model` 参数的值设置为其默认值 `KEY_MATERIAL_EXPIRES`，或省略 `expiration-model` 参数。然后，将 `valid-to` 参数的值替换为您希望密钥材料过期的日期和时间。日期和时间最长为请求时间起 365 天。

   ```
   $ aws kms import-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
       --encrypted-key-material fileb://EncryptedKeyMaterial.bin \
       --import-token fileb://ImportToken.bin \
       --expiration-model KEY_MATERIAL_EXPIRES \
       --valid-to 2023-06-17T12:00:00-08:00
   ```

   如果不希望导入的密钥材料过期，请将 `expiration-model` 参数的值设置为 `KEY_MATERIAL_DOES_NOT_EXPIRE`，并从命令中省略 `valid-to` 参数。

   ```
   $ aws kms import-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
       --encrypted-key-material fileb://EncryptedKeyMaterial.bin \
       --import-token fileb://ImportToken.bin \
       --expiration-model KEY_MATERIAL_DOES_NOT_EXPIRE
   ```

1. 如果要导入以前未与 KMS 密钥关联的新密钥材料，请将 `ImportType` 参数设置为 `NEW_KEY_MATERIAL`。此选项只能与对称加密密钥一起使用。对于此类密钥，您还可以在以下命令行示例中使用可选 `KeyMaterialDescription` 参数为导入的密钥材料设置描述：

   ```
   $ aws kms import-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
       --encrypted-key-material fileb://EncryptedKeyMaterial.bin \
       --import-token fileb://ImportToken.bin \
       --expiration-model KEY_MATERIAL_EXPIRES \
       --valid-to 2023-06-17T12:00:00-08:00 \
       --import-type NEW_KEY_MATERIAL \
       --key-material-description "Q2 2025 Rotation"
   ```

1. 对于多区域密钥，您只能在主区域密钥上设置或更改密钥材料描述。 Amazon KMS 自动将密钥材料描述传播到副本区域密钥。

**提示**  
如果命令不成功，则可能会看到 `KMSInvalidStateException` 或 `NotFoundException`。您可以重试请求。