

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用匯入的金鑰材料建立 KMS 金鑰
<a name="importing-keys-conceptual"></a>

匯入的金鑰材料可讓您使用產生的密碼編譯金鑰來保護 AWS 資源。以下概觀說明如何將金鑰材料匯入 AWS KMS。如需程序中每個步驟的詳細資訊，請參閱對應的主題。

1. [建立不含金鑰資料的 KMS 金鑰](importing-keys-create-cmk.md) — 來源必須是 `EXTERNAL`。金鑰來源 `EXTERNAL`表示金鑰專為匯入的金鑰材料而設計，並 AWS KMS 防止 產生 KMS 金鑰的金鑰材料。在後續步驟中，您會將您自己的金鑰材料匯入到這個 KMS 金鑰中。

   您匯入的金鑰材料必須與相關聯金鑰的 AWS KMS 金鑰規格相容。如需相容性的詳細資訊，請參閱 [匯入金鑰資料需求](#importing-keys-material-requirements)。

1. [下載包裝公有金鑰及匯入字符](importing-keys-get-public-key-and-token.md) — 在完成步驟 1 之後，請下載包裝公有金鑰及匯入字符。這些項目會在匯入至 時保護您的金鑰材料 AWS KMS。

   您可在此步驟選擇 RSA 包裝金鑰的類型 (「金鑰規格」)，以及用來加密資料的包裝演算法，以便將其傳輸至 AWS KMS。每次匯入或重新匯入相同金鑰資料時，您都可選擇不同包裝金鑰規格與包裝金鑰演算法。

1. [加密金鑰資料](importing-keys-encrypt-key-material.md) — 利用您在步驟 2 下載的包裝公有金鑰來加密您在自己系統建立的金鑰資料。

1. [匯入金鑰材料](importing-keys-import-key-material.md) – 上傳您在步驟 3 建立的加密金鑰材料，以及您在步驟 2 下載的匯入字符。

   在此階段，您可以[設定選用的到期時間](importing-keys-import-key-material.md#importing-keys-expiration)。當匯入的金鑰材料過期時， 會將其 AWS KMS 刪除，KMS 金鑰會變成無法使用。若要繼續運用 KMS 金鑰，您必須重新匯入**相同**的金鑰資料。

   當匯入操作成功完成後，KMS 金鑰的金鑰狀態會從 `PendingImport` 變成 `Enabled`。您現在可以在密碼編譯操作中使用 KMS 金鑰。

AWS KMS 當您[建立 KMS 金鑰](ct-createkey.md)、[下載包裝公有金鑰和匯入字符](ct-getparametersforimport.md)，以及匯入金鑰材料時， 會在 AWS CloudTrail 日誌中記錄項目。當您刪除匯入的金鑰材料或 AWS KMS [刪除過期的金鑰材料](ct-deleteexpiredkeymaterial.md)時， AWS KMS 也會記錄項目。 [ImportKeyMaterial](ct-importkeymaterial.md)

## 匯入金鑰材料的許可
<a name="importing-keys-permissions"></a>

若要使用匯入的金鑰材料建立和管理 KMS 金鑰，使用者需要此程序中的操作許可。您可以在建立 KMS 金鑰時提供金鑰政策中的 `kms:GetParametersForImport`、`kms:ImportKeyMaterial` 和 `kms:DeleteImportedKeyMaterial` 許可。在 AWS KMS 主控台中，當您使用**外部**金鑰材料來源建立金鑰時，系統會自動為金鑰管理員新增這些許可。

若要建立具有匯入金鑰材料的 KMS 金鑰，主體需要下列許可。
+ [kms:CreateKey](customer-managed-policies.md#iam-policy-example-create-key) (IAM 政策)
  + 若要將此許可限制至具有匯入金鑰材料的 KMS 金鑰，請使用具有 `EXTERNAL` 值的 [kms:KeyOrigin](conditions-kms.md#conditions-kms-key-origin) 政策條件。

    ```
    {
      "Sid": "CreateKMSKeysWithoutKeyMaterial",
      "Effect": "Allow",
      "Resource": "*",
      "Action": "kms:CreateKey",
      "Condition": {
        "StringEquals": {
          "kms:KeyOrigin": "EXTERNAL"
        }
      }
    }
    ```
+ [kms:GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html) (金鑰政策或 IAM 政策)
  + 若要將此許可限制至使用特定包裝演算法和包裝金鑰規格的請求，請使用 [kms:WrappingAlgorithm](conditions-kms.md#conditions-kms-wrapping-algorithm) 和 [kms:WrappingKeySpec](conditions-kms.md#conditions-kms-wrapping-key-spec) 政策條件。
+ [kms:ImportKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) (金鑰政策或 IAM 政策)
  + 若要允許或禁止過期的金鑰材料並控制過期日期，請使用 [kms:ExpirationModel](conditions-kms.md#conditions-kms-expiration-model) 和 [kms:ValidTo](conditions-kms.md#conditions-kms-valid-to) 政策條件。

若要重新匯入匯入的金鑰材料，主體需要 [kms:GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html) 和 [kms:ImportKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) 許可。

若要刪除匯入的金鑰材料，主體需要 [kms:DeleteImportedKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteImportedKeyMaterial.html) 許可。

例如，若要准許範例 `KMSAdminRole` 管理具有匯入金鑰資料的 KMS 金鑰的所有方面，請在 KMS 金鑰的金鑰政策中包含如下所示的金鑰政策陳述式。

```
{
  "Sid": "Manage KMS keys with imported key material",
  "Effect": "Allow",
  "Resource": "*",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/KMSAdminRole"
  },
  "Action": [
    "kms:GetParametersForImport",
    "kms:ImportKeyMaterial",
    "kms:DeleteImportedKeyMaterial"
  ]  
}
```

## 匯入金鑰資料需求
<a name="importing-keys-material-requirements"></a>

您匯入的金鑰資料必須與關聯 KMS 金鑰的[金鑰規格](create-keys.md#key-spec)相容。對於非對稱金鑰對，請僅匯入配對的私有金鑰。 會從私有金鑰 AWS KMS 衍生公有金鑰。

AWS KMS 支援具有匯入金鑰材料的 KMS 金鑰的下列金鑰規格。
+ **對稱加密金鑰**
  + **金鑰規格：**
    + SYMMETRIC\$1DEFAULT。
  + **使用要求：**
    + 256 位元 (32 位元組） 的二進位資料。
    + 在中國區域，必須是 128 位元 (16 位元組) 的二進位資料。
+ **HMAC 金鑰**
  + **金鑰規格：**
    + HMAC\$1224
    + HMAC\$1256
    + HMAC\$1384
    + HMAC\$1512
  + **使用要求：**
    + HMAC 金鑰資料必須符合 [RFC 2104](https://datatracker.ietf.org/doc/html/rfc2104)。
    + 金鑰長度必須至少與金鑰規格指定的長度相同。金鑰長度上限為 1024 位元。
    + 如果您的金鑰材料超過 1024 位元，您可以雜湊金鑰材料並匯入雜湊輸出。雜湊演算法必須符合您正在建立之 HMAC KMS 金鑰的金鑰規格。
  + **範例**：
    + 若要將 2048 位元的金鑰材料匯入 HMAC\$1256 金鑰，請先計算 2048 位元金鑰材料的 SHA-256 雜湊，然後將產生的 256 位元雜湊輸出匯入 KMS 金鑰。
  + **有效的金鑰長度：**
    + HMAC\$1224：224–1024 位元
    + HMAC\$1256：256–1024 位元
    + HMAC\$1384：384–1024 位元
    + HMAC\$1512：512–1024 位元
+ **RSA 非對稱私有金鑰**
  + **金鑰規格：**
    + RSA\$12048
    + RSA\$13072
    + RSA\$14096
  + **使用要求：**
    + 您匯入的 RSA 非對稱私有金鑰必須是符合 [RFC 3447](https://datatracker.ietf.org/doc/html/rfc3447/) 金鑰對的一部分。
    + **模數**：2048 位元、3072 位元或 4096 位元
    + **素數**：2 (不支持多素 RSA 金鑰)
    + 非對稱金鑰材料必須使用符合 [RFC 520](https://datatracker.ietf.org/doc/html/rfc5208)8 的公有金鑰密碼編譯標準 (PKCS) \$18 格式的 BER 編碼或 DER 編碼。
+ **橢圓曲線非對稱私有金鑰**
  + **金鑰規格：**
    + ECC\$1NIST\$1P256 (secp256r1)
    + ECC\$1NIST\$1P384 (secp384r1)
    + ECC\$1NIST\$1P521 (secp521r1)
    + ECC\$1SECG\$1P256K1 (secp256k1)
    + ECC\$1NIST\$1EDWARDS25519 (ed25519)
  + **使用要求：**
    + 您匯入的 ECC 非對稱私有金鑰必須是符合 [RFC 5915](https://datatracker.ietf.org/doc/html/rfc5915/) 的一種金鑰對。
    + **曲線：**NIST P-256、NIST P-384、NIST P-521, Secp256k1、NIST Ed25519。
    + **參數：**僅限具名曲線 （具有明確參數的 ECC 金鑰會遭到拒絕）。
    + **公有點座標：**可壓縮、未壓縮或投影。
    + 非對稱金鑰材料必須以符合 [RFC 520](https://datatracker.ietf.org/doc/html/rfc5208)8 的公有金鑰密碼編譯標準 (PKCS) \$18 格式進行 BER 編碼或 DER 編碼。
+ **ML-DSA 金鑰**
  + **金鑰規格：**
    + ML\$1DSA\$144
    + ML\$1DSA\$165
    + ML\$1DSA\$187
**重要**  
不支援匯入 ML-DSA 金鑰。
+ **SM2 非對稱私有金鑰** （僅限中國區域）
  + **使用要求：**
    + 您匯入的 SM2 非對稱私有金鑰必須是符合 GM/T 0003 之金鑰對的一部分。
    + **曲線：**SM2。
    + **參數：**僅限具名曲線 （具有明確參數的 SM2 金鑰會遭到拒絕）。
    + **公有點座標：**可壓縮、未壓縮或投影。
    + 非對稱金鑰材料必須使用符合 [RFC 520](https://datatracker.ietf.org/doc/html/rfc5208)8 的公有金鑰密碼編譯標準 (PKCS) \$18 格式的 BER 編碼或 DER 編碼。