本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
导入 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 KMS生成的 RSA key pair 的公钥对其进行加密,然后使用唯一标识 KMS 密钥的导入令牌将其发送,从而在传输过程中对其进行保护。在存储导入的密钥材料之前,在Amazon KMS硬件安全模块中的 AES 对称密钥下对其Amazon 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 外部加密的对称加密文字。
-
Amazon KMS 不支持在 Amazon KMS 外部解密任何 Amazon KMS 对称加密文字,即使加密文字是使用带有导入的密钥材料的 KMS 密钥加密的。
此外,您不能使用任何 Amazon 工具(例如 Amazon Encryption SDK 或者 Amazon S3 客户端加密)来解密 Amazon KMS 对称加密文字。
因此,您无法使用带有导入密钥材料的密钥来支持密钥托管安排,在这种情况下,对密钥材料具有条件访问权限的授权第三方可以在 Amazon KMS 以外解密某些密文。要支持密钥托管,请使用 Amazon Encryption SDK 来通过独立于 Amazon KMS 的密钥加密您的消息。
-
- 您需要对可用性和持久性负责
您需要对密钥材料的整体可用性和持久性负责。Amazon KMS 旨在确保导入密钥材料的高可用性。但 Amazon KMS 不会将导入密钥材料的持久性维持在与代表 Amazon KMS 生成的密钥材料相同的水平。要还原从 KMS 密钥中删除的导入密钥材料,您必须在您控制的系统中保留密钥材料的副本。我们建议您将导入的密钥材料的可导出副本存储在密钥管理系统中,例如硬件安全模块(HSM)。
在以下情况下,这种差异是有意义的:
-
如果您为导入的密钥材料设置了过期时间,那么 Amazon KMS 将在密钥材料过期后将其删除。Amazon KMS 不会删除该 KMS 密钥或其元数据。您可以创建 Amazon CloudWatch 警报,在导入密钥材料即将到期时通知您。
您无法删除 Amazon KMS 为 KMS 密钥生成的密钥材料,并且不能将 Amazon KMS 密钥材料设置为过期,尽管您可以轮换它。
-
如果您手动删除导入的密钥材料,Amazon KMS 将删除密钥材料,但不会删除该 KMS 密钥或其元数据。相比之下,计划密钥删除需要 7 到 30 天的等待期限,之后,Amazon KMS 将永久删除密钥材料、其元数据及其密钥材料。
-
万一出现某些影响 Amazon KMS 的区域级故障(如完全断电),Amazon KMS 无法自动还原导入的密钥材料。但是,Amazon KMS 可还原 KMS 密钥及其元数据。
-
导入密钥材料的权限
要使用导入的密钥材料创建和管理 KMS 密钥,用户需要在此过程中执行操作的权限。在您创建 KMS 密钥时,您可以在密钥策略中提供 kms:GetParametersForImport
、kms:ImportKeyMaterial
和 kms:DeleteImportedKeyMaterial
权限。在 Amazon KMS 控制台中,当您使用外部密钥材料来源创建密钥时,会自动为密钥管理员添加这些权限。
若要使用导入的密钥材料创建 KMS 密钥,委托人需要以下权限。
kms:CreateKey(IAM 政策)
-
要将此权限限制为具有导入密钥材料的 KMS 密钥,请使用值为的 kms:KeyOrigin 策略条件
EXTERNAL
。{ "Sid": "CreateKMSKeysWithoutKeyMaterial", "Effect": "Allow", "Resource": "*", "Action": "kms:CreateKey", "Condition": { "StringEquals": { "kms:KeyOrigin": "EXTERNAL" } } }
-
-
k@@ ms:GetParametersForImport(密钥策略或 IAM 策略)
-
若要将此权限限制到使用特定包装算法和包装密钥规范的请求,请使用 km s:WrappingAlgorithm 和 k ms:WrappingKeySpec 策略条件。
-
-
k@@ ms:ImportKeyMaterial(密钥策略或 IAM 策略)
-
要允许或禁止过期的密钥材料并控制过期日期,请使用 kms: 和 k ms:ExpirationModel 和 k ms:ValidTo 策略条件。
-
若要重新导入的密钥材料,委托人需要 k ms:GetParametersForImport 和 k ms:ImportKeyMaterial 权限。
要删除导入的密钥材料,委托人需要 k ms:DeleteImportedKeyMaterial 权限。
例如,要授予示例使用导入的密钥材料管理 KMS 密钥所有方面的 KMSAdminRole
权限,请在 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" ] }
设置过期时间(可选)
导入 KMS 密钥的密钥材料时,可以将密钥材料的可选过期日期和时间设置为自导入之日起 365 天中的任意一天。当导入的密钥材料过期后,Amazon KMS 会将其删除。此操作会将 KMS 密钥的密钥状态更改为 PendingImport
,这将阻止在任何加密操作中使用该密钥。要使用 KMS 密钥,您必须重新导入原始密钥材料的副本。重新导入密钥材料时,您可以开启和关闭过期时间,并设置新的到期时间。
确保导入的密钥材料经常过期,可帮助您满足监管要求,但这样做会给在 KMS 密钥下加密的数据带来额外的风险。在您重新导入原始密钥材料的副本之前,包含过期密钥材料的 KMS 密钥不可用,并且在 KMS 密钥下加密的任何数据都不可访问。如果您出于任何原因未能重新导入密钥材料(例如,丢失原始密钥材料的副本),则 KMS 密钥将永久不可用,在 KMS 密钥下加密的数据将无法恢复。
为了降低这种风险,请确保导入的密钥材料副本可访问,并设计一个系统,以在密钥材料过期并中断您的 Amazon 工作负载之前将其删除并重新导入。我们建议您针对导入的密钥材料的过期设置警报,这样您就有足够的时间在密钥材料过期之前重新导入密钥材料。您还可以使用 CloudTrail 日志来审计导入(和重新导入)密钥材料和删除导入的密钥材料的Amazon KMS操作,以及删除过期密钥材料的操作。
您无法将不同的密钥材料导入 KMS 密钥,Amazon KMS 也无法还原、恢复或重现已删除的密钥材料。您可以通过编程定期删除和重新导入已导入的密钥材料,而无需设置过期时间,但是保留原始密钥材料副本的要求相同。
在导入密钥材料时,确定导入的密钥材料是否以及何时过期。但是您可以开启和关闭过期时间,也可以通过删除和重新导入密钥材料来设置新的过期时间。使用ExpirationModel
参数开启过期时间 (KEY_MATERIAL_EXPIRES
) 和 off (KEY_MATERIAL_DOES_NOT_EXPIRE
),使用ValidTo
参数设置过期时间。ImportKeyMaterial自导入数据起的最大天数为 365 天;没有最短天数,但必须是未来时间。
如何导入密钥材料
以下概述说明了如何将密钥材料导入 Amazon KMS。如需了解该过程中每个步骤的更多详细信息,请参阅相应主题。
-
创建不带密钥材料的对称加密 KMS 密钥 – 密钥规范必须是
SYMMETRIC_DEFAULT
而且来源必须是EXTERNAL
。EXTERNAL
的密钥源表明该密钥专为导入的密钥材料而设计,并且阻止 Amazon KMS 为 KMS 密钥生成密钥材料。在后面的步骤中,您会将自己的密钥材料导入此 KMS 密钥中。 -
下载公有密钥和导入令牌 – 在完成步骤 1 后,请下载公有密钥和导入令牌。这些项目可以在密钥材料导入 Amazon KMS 的过程中保护您的密钥材料。
-
加密密钥材料 – 使用在步骤 2 中下载的公有密钥加密您在自己的系统上创建的密钥材料。
-
导入密钥材料 – 上传您在步骤 3 中创建的已加密的密钥材料以及您在步骤 2 中下载的导入令牌。
在此阶段,您可以设置可选的过期时间。当导入的密钥材料过期后,Amazon KMS 会将其删除,并且 KMS 密钥将变为不可用。要继续使用该 KMS 密钥,您必须重新导入
same
密钥材料。导入操作成功完成后,KMS 密钥的密钥状态将从
PendingImport
变为Enabled
。现在,您可以在加密操作中使用 KMS 密钥。
Amazon KMS 在您创建 KMS 密钥、下载公有密钥和导入令牌和导入密钥材料时将一个条目记录在您的 Amazon CloudTrail 日志。当您删除导入的密钥材料或 Amazon KMS 删除过期的密钥材料时,Amazon KMS 也会记录条目。
如何重新导入密钥材料
如果您管理带有导入的密钥材料的 KMS 密钥,则可能需要重新导入密钥材料。您可以通过重新导入密钥材料替换过期或删除的密钥材料,或者设置、删除或更改密钥材料的到期时间。您不能将专为导入密钥材料设计的 KMS 密钥转换为具有密钥材料的 KMSAmazon KMS 密钥。
您可以在可满足您的安全要求任何时间点重新导入密钥材料。您不必等到密钥材料达到或接近其过期时间。
要重新导入密钥材料,请使用您首次用来导入密钥材料的相同过程,但以下情况除外。
-
使用现有 KMS 密钥,而不是创建新的 KMS 密钥。您可以跳过导入过程的步骤 1。
-
您必须重新导入最初导入 KMS 密钥的相同的密钥材料。您不能将不同的密钥材料导入 KMS 密钥。
-
如果 KMS 密钥有导入的密钥材料,您必须首先删除现有已导入的密钥材料,然后才能重新导入密钥材料。
-
您的每个导入操作都必须下载新的公有密钥和导入令牌。您可以对 KMS 密钥的每个导入操作使用相同或不同的封装算法。
-
重新导入密钥材料时,您可以开启和关闭过期时间,也可以更改到期时间。
每次将密钥材料导入 KMS 密钥时,您需要为 KMS 密钥下载并使用新的包装密钥和导入令牌。包装过程不会影响密钥材料的内容,因此,您可以使用不同的包装密钥(和不同的导入令牌)来导入相同的密钥材料。
如何标识带导入的密钥材料的 KMS 密钥
在创建不带密钥材料的 KMS 密钥时,KMS 密钥的 Origin 属性的值为 EXTERNAL
,并且它不能更改。与密钥状态不同,Origin
值不依赖于是否存在密钥材料。
您可以使用 EXTERNAL
源值来标识专为导入的密钥材料而设计的 KMS 密钥。您可以在Amazon KMS控制台中或通过使用DescribeKey操作来查找密钥源。您还可以使用控制台或 API 查看密钥材料的属性,例如它是否以及何时过期。
要标识带导入的密钥材料的 KMS 密钥(控制台)
-
在 Amazon KMShttps://console.aws.amazon.com/kms 打开
控制台。 -
要更改 Amazon Web Services 区域,请使用页面右上角的 Region selector(区域选择器)。
-
使用以下任一方法可查看 KMS 密钥的
Origin
属性。-
要向 KMS 密钥表添加 Origin(源)列,请在右上角选择 Settings(设置)图标。选择 Origin (源),然后选择 Confirm (确认)。Origin(源)列可让您轻松标识带
EXTERNAL
源属性值的 KMS 密钥。 -
要查找特定 KMS 密钥的
Origin
属性的值,请选择该 KMS 密钥的密钥 ID 或别名。然后,选择 Cryptographic configuration(加密配置)选项卡。这些选项卡在 General configuration(常规配置)部分下。
-
要查看有关密钥材料的详细信息,请选择 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": 2023-03-08T12:00:00+00:00, "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "AWSAccountId": "111122223333", "CreationDate": 2018-06-09T00:06:50.831000+00:00, "Enabled": false, "MultiRegion": false, "Description": "", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "PendingImport", "KeyManager": "CUSTOMER", "KeySpec": "SYMMETRIC_DEFAULT", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] } }
针对导入密钥材料的到期创建 CloudWatch 警报
您可以创建 CloudWatch 警报,在 KMS 密钥中导入的密钥材料即将到期时通知您。例如,警报可以在距离到期时间少于 30 天时通知您。
当您将密钥材料导入 KMS 密钥中时,可以选择性地指定密钥材料的到期时间。当密钥材料过期后,Amazon KMS 将删除密钥材料,并且 KMS 密钥将变为不可用。要再次使用该 KMS 密钥,您必须重新导入密钥材料。但是,如果您在密钥材料到期之前将其重新导入,则可以避免中断使用该 KMS 密钥的进程。
此警报使用Amazon KMS发布到的 SecondsUntilKeyMaterialExpiresK MS 密钥,其中包含已到期的导入密钥材料的 KMS 密钥。 CloudWatch 每个警报都使用此指标来监控特定 KMS 密钥的导入密钥材料。您无法为所有具有到期密钥材料的 KMS 密钥创建单个警报,也无法为未来可能创建的 KMS 密钥创建警报。
要求
用于监控导入密钥材料的到期时间的 CloudWatch 警报需要以下资源。
-
带有已到期导入密钥材料的 KMS 密钥。有关帮助信息,请参阅 如何标识带导入的密钥材料的 KMS 密钥。
-
Amazon SNS 主题。有关详细信息,请参阅亚马逊 CloudWatch 用户指南中的创建 Amazon SNS 主题。
创建警报
使用以下必填值,按照基于静态阈值创建 CloudWatch 警报中的说明进行操作。对于其他字段,请接受默认值并按要求提供名称。
字段 | 值 |
---|---|
选择指标 |
选择 KMS,然后选择每密钥指标。 选择带有 KMS 密钥和 指标列表仅显示导入密钥材料已到期的 KMS 密钥的 |
统计数据 | 最低 |
周期 | 1 minute |
阈值类型 | 静态 |
当 ... | 当 metric-name 大于 1 时 |
删除导入的密钥材料
您可以随时从 KMS 密钥中删除导入的密钥材料。此外,当具有到期日期的导入密钥到期时,Amazon KMS 将会删除密钥材料。在这两种情况下,Amazon KMS 将会立即删除密钥材料,KMS 密钥的密钥状态将更改为待导入,且 KMS 密钥不能用于任何加密操作。
但是,这些操作不会删除 KMS 密钥。要再次使用 KMS 密钥,您必须将相同的密钥材料重新导入到 KMS 密钥中。相反,删除 KMS 密钥操作是不可逆的。如果您计划删除密钥而且所需等待期到期,Amazon KMS 会删除密钥材料及与该 KMS 密钥关联的所有元数据。
要删除密钥材料,您可以使用 Amazon Web Services Management Console或 Amazon KMS API。您也可以通过发出 HTTP 请求,或使用 Amazon 开发工具包
Amazon KMS 在您删除导入的密钥材料且 Amazon KMS 删除过期的密钥材料时将一个条目记录在您的 Amazon CloudTrail 日志中。
删除密钥材料对 Amazon 服务有何影响
当您删除密钥材料时,没有密钥材料的 KMS 密钥会立即变为不可用(视最终一致性而定)。不过,在再次使用 KMS 密钥(例如解密数据密钥)之前,使用受 KMS 密钥保护的数据密钥加密的资源不会受到影响。此问题会影响 Amazon Web Services,因为许多服务使用数据密钥来保护您的资源。有关详细信息,请参阅不可用的 KMS 密钥如何影响数据密钥。
删除密钥材料(控制台)
您可以使用 Amazon Web Services Management Console删除密钥材料。
-
登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon Key Management Service (Amazon KMS) 控制台:https://console.aws.amazon.com/kms
。 -
要更改 Amazon Web Services 区域,请使用页面右上角的区域选择器。
-
在导航窗格中,选择客户托管密钥。
-
请执行下列操作之一:
-
选中带导入密钥材料的 KMS 密钥对应的复选框。依次选择 Key actions、Delete key material。
-
选择带导入密钥材料的 KMS 密钥的别名或密钥 ID。选择 Key material(密钥材料)选项卡,然后选择 Delete key material(删除密钥材料)。
-
-
确认要删除该密钥材料,然后选择 Delete key material。KMS 密钥的状态(对应于其密钥状态)更改为 Pending import(等待导入)。
删除密钥材料 (Amazon KMS API)
要使用 Amazon KMSAPI 删除密钥材料,DeleteImportedKeyMaterial请发送请求。以下示例说明如何使用 Amazon CLI
将
替换为您要删除其密钥材料的 KMS 密钥的密钥 ID。在该操作中,您可以使用 KMS 密钥的密钥 ID 或 ARN,但不能使用别名。1234abcd-12ab-34cd-56ef-1234567890ab
$
aws kms delete-imported-key-material --key-id
1234abcd-12ab-34cd-56ef-1234567890ab