导入 Amazon KMS 密钥中的密钥材料 - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

导入 Amazon KMS 密钥中的密钥材料

您可以使用您提供的密钥材料创建 Amazon KMS keys(KMS 密钥)。

KMS 密钥是加密密钥的逻辑表示形式。KMS 密钥的元数据包括数据加密和解密所用密钥材料的 ID。默认情况下,当您创建 KMS 密钥时,Amazon KMS 会为该 KMS 密钥生成密钥材料。但是,您可以创建不带密钥材料的 KMS 密钥,然后将自己的密钥材料导入该 KMS 密钥中,这个功能通常被称为“自带密钥 (BYOK)”。

注意

Amazon KMS 不支持在 Amazon KMS 以外解密任何 Amazon KMS 密文,即使密文是使用带有导入密钥材料的 KMS 密钥加密的。Amazon KMS 不会发布此任务所需的密文格式,格式可能会在不通知的情况下更改。

只有 Amazon KMS 密钥存储中的对称加密 KMS 密钥才支持导入的密钥材料,例如多区域对称加密 KMS 密钥。它在非对称 KMS 密钥HMAC KMS 密钥或自定义密钥存储中的 KMS 密钥中不受支持。

在使用导入的密钥材料时,您仍然需要对密钥材料负责,并允许 Amazon KMS 使用其副本。出于以下一个或多个原因,您可以选择执行该操作:

  • 证明您使用符合您要求的熵源生成了密钥材料。

  • 将来自您自己的基础设施的密钥材料与 Amazon 服务配合使用,并使用 Amazon KMS 管理该密钥材料在 Amazon 内的生命周期。

  • 在 Amazon 中为密钥材料设置过期时间,并手动删除它,但也可以使其在未来再次可用。相比之下,计划密钥删除需要 7 到 30 天的等待期限,之后,您不能恢复已删除的 KMS 密钥。

  • 拥有密钥材料的原始备份,并将其保存在 Amazon 外部,以在密钥材料的整个生命周期内获得额外的持久性和灾难恢复能力。

只有 Amazon KMS 密钥存储中的对称加密 KMS 密钥才支持导入的密钥材料,例如多区域对称 KMS 密钥。它在非对称 KMS 密钥HMAC KMS 密钥或自定义密钥存储中的 KMS 密钥中不受支持。

您可以监控 KMS 密钥及导入的密钥材料的使用和管理。当您创建创建 KMS 密钥下载公共密钥和导入令牌以及导入密钥材料时,Amazon KMS 将在 Amazon CloudTrail 日志中记录一个条目。此外,当您手动删除导入的密钥材料或者在Amazon KMS删除已过期的密钥材料时,Amazon KMS 也会记录一个条目。

如需了解带有导入密钥材料的 KMS 密钥与带有 Amazon KMS 生成的密钥材料的 KMS 密钥之间的重要区别,请参阅 关于导入的密钥材料

区域

Amazon Web Services 区域 支持的所有 Amazon KMS 中都支持导入的密钥材料。中国区域对导入密钥材料的要求有所不同。有关详细信息,请参阅 导入密钥材料步骤 3:加密密钥材料

关于导入的密钥材料

在决定将密钥材料导入 Amazon KMS 之前,您应了解导入密钥材料的以下特征。

您可以生成密钥材料

您负责使用符合您的安全要求的随机源来生成密钥材料。您导入的密钥材料必须是 256 位对称加密密钥,但中国区域除外,在中国区域必须是 128 位对称加密密钥。

您可以删除密钥材料

您可以从 KMS 密钥中删除导入的密钥材料,以便立即使 KMS 密钥不可用。此外,当您将密钥材料导入 KMS 密钥中时,您可以确定密钥是否到期,并设置其到期日期。如果到期日期已到,则 Amazon KMS 将会删除密钥材料。如果没有密钥材料,则该 KMS 密钥无法用于任何加密操作。要还原密钥,必须将相同密钥材料重新导入到密钥中。

无法更改密钥材料

当您将密钥材料导入 KMS 密钥中时,该 KMS 密钥将与该密钥材料永久关联。您可以重新导入相同的密钥材料,但不能将不同的密钥材料导入该 KMS 密钥。而且,您不能为具有导入密钥材料的 KMS 密钥启用自动密钥轮换。但是,您可以手动轮换带有导入密钥材料的 KMS 密钥。

无法更改密钥材料源

专用于导入的密钥材料的 KMS 密钥拥有一个 EXTERNAL值,该值无法更改。您不能将 KMS 密钥中的导入的密钥材料转换为使用来自任何其他源(包括 Amazon KMS)的密钥材料。

无法使用任何其他 KMS 密钥进行解密

如果您使用 KMS 密钥加密数据,则密文将与该 KMS 密钥及其密钥材料永久关联。它无法使用其他任何 KMS 密钥解密,包括采用相同密钥材料的其他 KMS 密钥。这是 KMS 密钥的一项安全功能。

唯一的例外是多区域密钥,按设计,它们可以互操作。有关详细信息,请参阅为什么不是所有带有导入密钥材料的 KMS 密钥都可互操作?

无可移植性或托管功能

Amazon KMS 生成的密文不可移植。Amazon KMS 不支持在 Amazon KMS 以外解密任何 Amazon KMS 密文,即使密文是使用带有导入密钥材料的 KMS 密钥加密的。Amazon KMS 不会发布此任务所需的密文格式,格式可能会在不通知的情况下更改。

此外,您不能使用任何 Amazon 工具(例如 Amazon Encryption SDK 或者 Amazon S3 客户端加密)来解密 Amazon KMS 密文。

因此,您无法使用带有导入密钥材料的密钥来支持密钥托管安排,在这种情况下,对密钥材料具有条件访问权限的授权第三方可以在 Amazon KMS 以外解密某些密文。要支持密钥托管,请使用 Amazon Encryption SDK 来通过独立于 Amazon KMS 的密钥加密您的消息。

您需要对可用性和持久性负责

您需要对密钥材料的整体可用性和持久性负责。Amazon KMS 旨在确保导入密钥材料的高可用性。但 Amazon KMS 不会将导入密钥材料的持久性维持在与代表 Amazon KMS 生成的密钥材料相同的水平。要还原从 KMS 密钥中删除的导入密钥材料,您必须在您控制的系统中保留密钥材料的副本。随后,您可以将其重新导入 KMS 密钥。

在以下情况下,这种差异是有意义的:

  • 如果您为导入的密钥材料设置了过期时间,那么 Amazon KMS 将在密钥材料过期后将其删除。Amazon KMS 不会删除该 KMS 密钥或其元数据。您无法从 KMS 密钥中删除 Amazon KMS 生成的密钥材料,并且不能将 Amazon KMS 密钥材料设置为过期,尽管您可以轮换它

  • 如果您手动删除导入的密钥材料,Amazon KMS 将删除密钥材料,但不会删除该 KMS 密钥或其元数据。相比之下,计划密钥删除需要 7 到 30 天的等待期限,之后,Amazon KMS 将永久删除密钥材料、其元数据及其密钥材料。

  • 万一出现某些影响 Amazon KMS 的区域级故障(如完全断电),Amazon KMS 无法自动还原导入的密钥材料。但是,Amazon KMS 可还原 KMS 密钥及其元数据。

导入密钥材料的权限

要使用导入的密钥材料创建和管理 KMS 密钥,用户需要在此过程中执行操作的权限。在您创建 KMS 密钥时,您可以在密钥策略中提供 kms:GetParametersForImportkms:ImportKeyMaterialkms:DeleteImportedKeyMaterial 权限。kms:ImportKeyMaterial 权限不包含在密钥管理员的默认权限中,因此您需要手动添加该权限。

若要使用导入的密钥材料创建 KMS 密钥,委托人需要以下权限。

  • kms:CreateKey(IAM policy)

    • 要将此权限限制为具有导入密钥材料的 KMS 密钥,请使用值为 EXTERNALkms:KeyOrigin 策略条件。

      { "Version": "2012-10-17", "Statement": { "Sid": "IAM policy to create KMS keys with no key material" "Effect": "Allow", "Resource": "*", "Principal": { "AWS": "arn:aws:iam::111122223333:role/KMSAdminRole" }, "Action": "kms:CreateKey", "Condition": { "StringEquals": { "kms:KeyOrigin": "EXTERNAL" } } }
  • kms:GetParametersForImport(密钥策略或 IAM policy)

  • kms:ImportKeyMaterial(密钥策略或 IAM policy)

要重新导入导入的密钥材质,委托人需要 kms:GetParametersForImportkms:ImportKeyMaterial 权限。

要删除导入的关键材料,委托人需要 kms:DeleteImportedKeyMaterial 权限。

如何导入密钥材料

以下概述说明了如何将密钥材料导入 Amazon KMS。如需了解该过程中每个步骤的更多详细信息,请参阅相应主题。

  1. 创建不带密钥材料的对称加密 KMS 密钥 – 密钥规范必须是 SYMMETRIC_DEFAULT 而且来源必须是 EXTERNALEXTERNAL 的密钥源表明该密钥专为导入的密钥材料而设计,并且阻止 Amazon KMS 为 KMS 密钥生成密钥材料。在后面的步骤中,您会将自己的密钥材料导入此 KMS 密钥中。

  2. 下载公有密钥和导入令牌 – 在完成步骤 1 后,请下载公有密钥和导入令牌。这些项目可以在密钥材料导入 Amazon KMS 的过程中保护您的密钥材料。

  3. 加密密钥材料 – 使用在步骤 2 中下载的公有密钥加密您在自己的系统上创建的密钥材料。

  4. 导入密钥材料 – 上传您在步骤 3 中创建的已加密的密钥材料以及您在步骤 2 中下载的导入令牌。

    导入操作成功完成后,KMS 密钥的密钥状态将从 PendingImport 变为 Enabled。现在,您可以在加密操作中使用 KMS 密钥。

Amazon KMS 在您创建 KMS 密钥下载公有密钥和导入令牌导入密钥材料时将一个条目记录在您的 Amazon CloudTrail 日志。当您删除导入的密钥材料或 Amazon KMS 删除过期的密钥材料时,Amazon KMS 也会记录条目。

如何重新导入密钥材料

如果您管理带导入的密钥材料的 KMS 密钥,则可能需要重新导入密钥材料,原因是密钥材料已过期,或者密钥材料已被意外删除或丢失。

您必须重新导入最初导入 KMS 密钥的相同的密钥材料。您不能将不同的密钥材料导入 KMS 密钥。Amazon KMS 也无法为创建时未带密钥材料的 KMS 密钥创建密钥材料。

要重新导入密钥材料,请使用您首次用来导入密钥材料的相同过程,但以下情况除外。

  • 使用现有 KMS 密钥,而不是创建新的 KMS 密钥。您可以跳过导入过程的步骤 1

  • 如果 KMS 密钥与导入的密钥材料关联,则必须首先删除现有导入的密钥材料,然后才能重新导入密钥材料。

每次将密钥材料导入 KMS 密钥时,您需要为 KMS 密钥下载并使用新的包装密钥和导入令牌。包装过程不会影响密钥材料的内容,因此,您可以使用不同的包装密钥(和不同的导入令牌)来导入相同的密钥材料。

如何标识带导入的密钥材料的 KMS 密钥

在创建不带密钥材料的 KMS 密钥时,KMS 密钥的 Origin 属性的值为 EXTERNAL,并且它不能更改。与密钥状态不同,Origin 值不依赖于是否存在密钥材料。

您可以使用 EXTERNAL 源值来标识专为导入的密钥材料而设计的 KMS 密钥。您可以在 Amazon KMS 控制台中或通过使用 DescribeKey 操作来查找密钥源。您还可以使用控制台或 API 查看密钥材料的属性,例如它是否以及何时过期。

要标识带导入的密钥材料的 KMS 密钥(控制台)

  1. 在 Amazon KMShttps://console.aws.amazon.com/kms 打开 控制台。

  2. 要更改 Amazon Web Services 区域,请使用页面右上角的 Region selector(区域选择器)。

  3. 使用以下任一方法可查看 KMS 密钥的 Origin 属性。

    • 要向 KMS 密钥表添加 Origin(源)列,请在右上角选择 Settings(设置)图标。选择 Origin (源),然后选择 Confirm (确认)Origin(源)列可让您轻松标识带 EXTERNAL 源属性值的 KMS 密钥。

    • 要查找特定 KMS 密钥的 Origin 属性的值,请选择该 KMS 密钥的密钥 ID 或别名。然后,选择 Cryptographic configuration(加密配置)选项卡。这些选项卡在 General configuration(常规配置)部分下。

  4. 要查看有关密钥材料的详细信息,请选择 Key material(密钥材料)选项卡。此选项卡仅显示在具有导入密钥材料的 KMS 密钥的详细信息页面上。

要标识带导入的密钥材料的 KMS 密钥 (Amazon KMS API)

使用 DescribeKey 操作。此响应包含 KMS 密钥的 Origin 属性、过期模型和过期日期,如以下示例所示。

$ aws kms describe-key --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "KeyMetadata": { "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Origin": "EXTERNAL", "ExpirationModel": "KEY_MATERIAL_EXPIRES" "ValidTo": 1568894400.0, "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "AWSAccountId": "111122223333", "CreationDate": 1568289600.0, "Enabled": false, "MultiRegion": false, "Description": "", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "PendingImport", "KeyManager": "CUSTOMER", "KeySpec": "SYMMETRIC_DEFAULT", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] } }