

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

# 创建多区域副本密钥
<a name="multi-region-keys-replicate"></a>

您可以在 AWS KMS 控制台、使用[ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html)操作或使用[AWS::KMS::ReplicaKey CloudFormation 模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-replicakey.html)创建[多区域副本密钥](multi-region-keys-overview.md#mrk-primary-key)。您不能使用该[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)操作来创建副本密钥。

您可以使用这些步骤复制任何多区域主密钥，包括[对称加密 KMS 密钥](symm-asymm-choose-key-spec.md#symmetric-cmks)，[非对称 KMS 密钥](symmetric-asymmetric.md)，或者 [HMAC KMS 密钥](hmac.md)。

此操作完成后，新的副本密钥具有暂时性的[密钥状态](key-state.md) `Creating`。在创建新副本密钥的过程完成几秒后，此密钥状态将变为 `Enabled`（如果您使用[导入的密钥材料](importing-keys.md)创建多区域密钥，则变为 `PendingImport`）。当密钥状态为 `Creating` 时，您可以管理该密钥，但不能将其用于加密操作。如果您以编程方式创建和使用副本密钥，请在使用副本密钥之前重试`KMSInvalidStateException`或调[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)用检查其`KeyState`值。

如果误删了副本密钥，您可以使用此过程来重新创建副本密钥。如果您在同一区域中复制相同的主密钥，则您创建的新副本密钥将具有与原始副本密钥相同的[共享属性](multi-region-keys-overview.md#mrk-sync-properties)。

**重要**  
不要在别名、描述或标签中包含机密或敏感信息。这些字段可能以纯文本形式出现在 CloudTrail 日志和其他输出中。

要使用 AWS CloudFormation 模板创建副本密钥，请参阅*AWS CloudFormation 用户指南[AWS::KMS::ReplicaKey](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-replicakey.html)*中的。

## 步骤 1：选择副本区域
<a name="replica-region"></a>

您通常会 AWS 区域 根据自己的业务模式和监管要求选择将多区域密钥复制到中。例如，您可以将密钥复制到保留资源的区域中。或者，为了符合灾难恢复要求，您可以将密钥复制到地理位置偏远的区域中。

以下是副本区域的 AWS KMS 要求。如果您选择的区域不符合这些要求，则尝试复制密钥失败。
+ **每个区域一个相关的多区域密钥** — 您不能在与主密钥相同的区域中创建副本密钥，也不能在与主密钥的另一个副本相同的区域中创建副本密钥。

  如果您尝试在已具有该主密钥副本的区域中复制主密钥，则尝试会失败。如果区域中的当前副本密钥处于 [`PendingDeletion` 密钥状态](key-state.md)，您可以[取消副本密钥删除](deleting-keys-scheduling-key-deletion.md)或者等待副本密钥被删除。
+ **同一区域中的多个不相关的多区域密钥** — 您可以在同一个区域中拥有多个不相关的多区域密钥。例如，您可以在 `us-east-1` 区域中拥有两个多区域主密钥。每个主密钥在 `us-west-2` 区域中都可以有一个副本密钥。
+ **同一分区中的区域** — 副本密钥区域必须位于与主密钥区域相同的 [AWS 分区](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)中。
+ **必须启用区域** — 如果某个区域[默认已禁用](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html#rande-manage-enable)，则无法在该区域中创建任何资源，直到为您的 AWS 账户启用该区域为止。

## 步骤 2：创建副本密钥
<a name="create-replica-keys"></a>

**注意**  
创建副本密钥时，请谨慎考虑您选择用于管理和使用副本密钥的 IAM 用户和角色。IAM policy 可以向其他 IAM 用户和角色授予管理 KMS 密钥的权限。  
IAM 最佳实践不鼓励使用具有长期凭证的 IAM 用户。而应尽可能使用提供临时凭证的 IAM 角色。有关更多信息，请参阅《IAM 用户指南》中的 [IAM 安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)**。

### 使用控制 AWS KMS 台
<a name="replicate-console"></a>

在 AWS KMS 控制台中，您可以在同一个操作中创建多区域主密钥的一个或多个副本。

此过程类似于在控制台中创建标准的单区域 KMS 密钥。但是，由于副本密钥基于主密钥，因此您不能为[共享属性](multi-region-keys-overview.md#mrk-sync-properties)选择值，例如密钥规范（对称或非对称）、密钥用法或密钥来源。

您可以指定不共享的属性，包括别名、标签、描述和密钥策略。为方便起见，控制台会显示主密钥的当前属性值，但您可以更改它们。即使您保留了主键值，也 AWS KMS 不会使这些值保持同步。

**重要**  
不要在别名、描述或标签中包含机密或敏感信息。这些字段可能以纯文本形式出现在 CloudTrail 日志和其他输出中。

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

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

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

1. 选择[多区域主密钥](multi-region-keys-overview.md#mrk-primary-key)的密钥 ID 或别名。此操作将打开 KMS 密钥的密钥详细信息页面。

   要识别多区域主密钥，请使用右上角的工具图标将 **Regionality**（区域性）列添加到表中。

1. 选择 **Regionality**（区域性）选项卡。

1. 在 **Related multi-Region keys**（相关的多区域密钥）部分中，选择 **Create new replica keys**（创建新的副本密钥）。

   **Related multi-Region keys**（相关的多区域密钥）部分显示主密钥及其副本密钥的区域。您可以使用此显示来帮助您为新副本密钥选择区域。

1. 选择一个或多个 AWS 区域。此过程将在您选择的每个区域中创建一个副本密钥。

   该菜单仅包含与主键位于同一 AWS 分区中的区域。已具有相关多区域密钥的区域显示出来，但不可选。您可能没有权限将密钥复制到菜单上的所有区域。

   完成选择 Regions（区域）后，关闭菜单。将显示您选择的区域。要取消复制到某个区域，请选择 Region（区域）名称旁边的 **X**。

1. 为副本密钥键入[别名](kms-alias.md)。

   控制台将显示主密钥的当前别名之一，但您可以对其进行更改。您可以为多区域主密钥及其副本密钥指定相同的别名或不同的别名。别名不是多区域密[钥的共享属性](multi-region-keys-overview.md#mrk-sync-properties)。 AWS KMS 不会同步多区域密钥的别名。

   添加、删除或更新别名可以允许或拒绝对 KMS 密钥的权限。有关详细信息，请参阅 [ABAC for AWS KMS](abac.md) 和 [使用别名控制对 KMS 密钥的访问](alias-authorization.md)。

1. （可选）键入副本密钥的描述。

   控制台将显示主密钥的当前描述，但您可以对其进行更改。描述不是多区域密钥的共享属性。您可以为多区域主密钥及其副本提供相同的描述或不同的描述。 AWS KMS 不同步多区域密钥的密钥描述。

1. （可选）键入标签键和一个可选标签值。要为副本密钥分配多个标签，请选择 **Add tag**（添加标签）。

   控制台将显示当前附加到主密钥的标签，但您可以更改它们。标签不是多区域密钥的共享属性。您可以为多区域主密钥及其副本指定相同的标签或不同的标签。 AWS KMS 不会同步多区域密钥的标签。

   标记或取消标记 KMS 密钥可以允许或拒绝对 KMS 密钥的权限。有关详细信息，请参阅 [ABAC for AWS KMS](abac.md) 和 [使用标签控制对 KMS 密钥的访问](tag-authorization.md)。

1. 选择可管理副本密钥的 IAM 用户和角色。
**注意**  
 如果您在创建多区域主密钥时修改了默认密钥策略，则控制台将不会在创建副本密钥期间提示您选择密钥管理员或密钥用户（第 11-15 步）。在这种情况下，您需要通过在**编辑密钥策略**步骤（第 17 步）中选择**编辑**，手动将密钥管理员和用户所需的权限添加到密钥策略中。
此步骤将开始为副本密钥创建[密钥策略](key-policies.md)的过程。控制台将显示主密钥的当前密钥策略，但您可以对其进行更改。密钥策略不是多区域密钥的共享属性。您可以为多区域主密钥及其副本提供相同的密钥策略或不同的密钥策略。 AWS KMS 不同步密钥策略。您可以随时更改任何 KMS 密钥的密钥策略。
 AWS KMS 控制台在语句标识符下将密钥管理员添加到密钥策略中`"Allow access for Key Administrators"`。如果修改此语句标识符，则可能会影响控制台显示您对该语句所做修改的方式。

1. （可选）要阻止选定 IAM 用户和角色删除此 KMS 密钥，请在页面底部的**密钥删除**部分中，清除**允许密钥管理员删除此密钥**复选框。

1. 选择**下一步**。

1. 选择可将 KMS 密钥用于[加密操作](kms-cryptography.md#cryptographic-operations)的 IAM 用户和角色。
**备注**  
 AWS KMS 控制台在语句标识符`"Allow use of the key"`和下将密钥用户添加到密钥策略中`"Allow attachment of persistent resources"`。如果修改这些语句标识符，则可能会影响控制台显示您对该语句所做修改的方式。

1. （可选）您可以允许其他人使用 AWS 账户 此 KMS 密钥进行加密操作。为此，请在页面底部的**其他 AWS 账户**部分中选择**添加其他 AWS 账户**，然后输入外部账户的 AWS 账户 标识号。要添加多个外部账户，请重复此步骤。
**注意**  
要允许外部账户中的委托人使用 KMS 密钥，外部账户的管理员必须创建提供这些权限的 IAM policy。有关更多信息，请参阅 [允许其他账户中的用户使用 KMS 密钥](key-policy-modifying-external-accounts.md)。

1. 选择**下一步**。

1. 检查密钥的密钥策略语句。要对密钥策略进行更改，请选择**编辑**。

1. 选择**下一步**。

1. 检视您选择的密钥设置。您仍然可以返回并更改所有设置。

1. 选择**完成**以创建多区域副本密钥。

### 使用 AWS KMS API
<a name="replicate-api"></a>

要创建多区域副本密钥，请使用[ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html)操作。您不能使用该[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)操作来创建副本密钥。此操作一次创建一个副本密钥。您指定的区域必须符合副本密钥的[区域要求](#replica-region)。

当您使用 `ReplicateKey` 操作时，无需为多区域密钥的任何[共享属性](multi-region-keys-overview.md#mrk-sync-properties)指定值。共享属性值从主密钥复制并保持同步。但是，您可以为未共享的属性指定值。否则， AWS KMS 将应用 KMS 密钥的标准默认值，而不是主密钥的值。

**注意**  
如果您没有为、或`Tags`参数指定值 `Description``KeyPolicy`，则使用空字符串描述、[默认密钥策略且不使用标签 AWS KMS 创建副本密钥](key-policy-default.md)。  
不要在 `Description` 或 `Tags` 字段中包含机密或敏感信息。这些字段可能以纯文本形式出现在 CloudTrail 日志和其他输出中。

例如，以下命令在亚太地区（悉尼）区域 (ap-southeast-2) 中创建一个多区域副本密钥。此副本密钥基于美国东部（弗吉尼亚北部）区域 (us-east-1) 中的主密钥建模，它由 `KeyId` 参数的值进行标识。此示例接受所有其他属性的默认值，包括密钥策略。

响应描述了新的副本密钥。它包含共享属性的字段，例如 `KeyId`、`KeySpec`、`KeyUsage` 和密钥材料来源 (`Origin`)。它还包括独立于主密钥的属性，例如 `Description`、密钥策略 (`ReplicaKeyPolicy`) 和标签 (`ReplicaTags`)。

响应还包括主密钥的密钥 ARN 和区域及其所有副本密钥，包括刚刚在 ap-southeast-2 区域中创建的密钥。在此示例中，`ReplicaKey` 元素表明此主密钥已在欧洲（爱尔兰）区域 (eu-west-1) 复制。

```
$ aws kms replicate-key \
    --key-id arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab \
    --replica-region ap-southeast-2
{
    "ReplicaKeyMetadata": {
        "MultiRegion": true,
        "MultiRegionConfiguration": {
            "MultiRegionKeyType": "REPLICA",
            "PrimaryKey": {
                "Arn": "arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab",
                "Region": "us-east-1"
            },
            "ReplicaKeys": [
                {
                    "Arn": "arn:aws:kms:ap-southeast-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab",
                    "Region": "ap-southeast-2"
                },
                {
                    "Arn": "arn:aws:kms:eu-west-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab",
                    "Region": "eu-west-1"
                }
            ]
        },
        "AWSAccountId": "111122223333",
        "Arn": "arn:aws:kms:ap-southeast-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab",
        "CreationDate": 1607472987.918,
        "Description": "",
        "Enabled": true,
        "KeyId": "mrk-1234abcd12ab34cd56ef1234567890ab",
        "KeyManager": "CUSTOMER",
        "KeySpec": "SYMMETRIC_DEFAULT",
        "KeyState": "Enabled",
        "KeyUsage": "ENCRYPT_DECRYPT",
        "Origin": "AWS_KMS",
        "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
        "EncryptionAlgorithms": [
            "SYMMETRIC_DEFAULT"
        ]
    },
    "ReplicaKeyPolicy": "{\n  \"Version\" : \"2012-10-17\",\n  \"Id\" : \"key-default-1\",...,
    "ReplicaTags": []
}
```