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

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

Amazon Key Management Service 概念

了解 Amazon Key Management Service (Amazon KMS) 中的基本术语和概念,以及它们如何协同工作以帮助保护您的数据。

客户主密钥 (CMK)

A客户主键(CMK) 是Amazon KMS。您可以使用 CMK 对数据进行加密、解密和重新加密。它还可以生成数据密钥,您可以在Amazon KMS。通常,您将使用对称 CMK,但您可以创建和使用非对称 CMK 进行加密或签名。

对称 CMK 和非对称 CMK 的私有密钥永远不会让 Amazon KMS 处于未加密状态。要管理 CMK,您可以使用Amazon Web Services Management Console或Amazon KMSAPI。要在加密操作中使用 CMK,您必须使用 Amazon KMS API。此策略与数据密钥不同。Amazon KMS 不会存储、管理或跟踪您的数据密钥。您必须在 Amazon KMS 的外部使用它们。

默认情况下,Amazon KMS 为 CMK 创建密钥材料。您无法提取、导出、查看或管理此密钥材料。此外,您无法删除此密钥材料;您必须删除 CMK。不过,您可以导入自己的密钥材料或在 CMK 中创建 CMK 的密钥材料Amazon CloudHSM群集与Amazon KMS自定义密钥存储

Amazon KMS也支持多区域 CMK,它允许您将数据加密到一个 Amazon Web Services 区域 并将其解密在不同的 Amazon Web Services 区域 。

除了使 CMK 成为加密密钥或签名密钥的密钥材料以外,CMK 还包含元数据,如密钥 ID、创建日期、描述和密钥状态。

有关创建和管理 CMK 的信息,请参阅开始使用。有关使用 CMK 的信息,请参阅Amazon Key Management ServiceAPI 参考

Amazon KMS 支持三种类型的 CMK:客户托管 CMK、 Amazon 托管 CMK 和 Amazon 拥有的 CMK。

CMK 的类型 可以查看 CMK 元数据 可以管理 CMK 仅适用于我的 Amazon Web Services 账户 自动轮换
客户托管 CMK 可选。每 365 天(1 年)。
Amazon 托管 CMK 必填项。每 1095 天(3 年)。
Amazon 拥有的 CMK 变化

要将客户管理的 CMK 与Amazon托管 CMK,请使用KeyManager字段中的DescribeKey操作响应。对于客户托管 CMK,KeyManager 值为 Customer。对于 Amazon 托管 CMK,KeyManager 值为 AWS

与 Amazon KMS 集成的 Amazon 服务在其对 CMK 的支持方面有所不同。默认情况下,一些 Amazon 服务使用 Amazon 拥有的 CMK 或 Amazon 托管的 CMK 来加密您的数据。其他 Amazon 服务可以根据您选择的客户托管的 CMK 加密您的数据。还有一些其他 Amazon 服务支持所有类型的 CMK,从而使您能够轻松使用 Amazon 拥有的 CMK、实现 Amazon 托管 CMK 的可见性或控制客户托管 CMK。有关 Amazon 服务提供的加密选项的详细信息,请参阅服务的用户指南或开发人员指南中的静态加密 主题。

客户托管 CMK

客户托管 CMK是您的 Amazon Web Services 账户 您创建、拥有和管理的。您可以完全控制这些 CMK,包括建立和维护其关键策略、IAM 策略和授权启用和禁用它们,旋转他们的密码材料添加标签创建别名,指的是 CMK,调度要删除的 CMK

客户管理的 CMK 显示在客户托管密钥页面上的Amazon Web Services Management Console对于 来说为Amazon KMS。要明确地标识客户托管 CMK,请使用 DescribeKey 操作。对于客户托管 CMK,DescribeKey 响应的 KeyManager 字段的值为 CUSTOMER

您可以在加密操作中使用客户托管 CMK 并在 Amazon CloudTrail 日志中审核其使用情况。此外,许多与 Amazon KMS 集成的 Amazon 服务使您能够指定客户托管 CMK 以保护其为您存储和管理的数据。

客户托管 CMK 会产生月费以及超过免费套餐使用量的费用。这些费用将计入您的账户的 Amazon KMS 配额。有关详细信息,请参阅 Amazon Key Management Service 定价Quotas

Amazon 托管 CMK

Amazon托管 CMK是由您在您的账户中创建、管理和使用的 CMK。Amazon服务集成到Amazon KMS。一段时间Amazon服务仅支持Amazon托管 CMK。其他人使用Amazon拥有 CMK 或为您提供 CMK 的选择。

您可以查看Amazon托管 CMK在账户中,查看他们的关键策略, 和审核其使用在Amazon CloudTrail日志。但是,您无法管理这些 CMK、对它们进行轮换或更改其密钥策略。此外,您无法在加密操作中直接使用 Amazon 托管 CMK;创建它们的服务将代表您使用它们。

Amazon托管 CMK 显示在Amazon托管密钥页面上的Amazon Web Services Management Console对于 来说为Amazon KMS。您也可以按别名标识大多数 Amazon 托管 CMK,别名的格式为 aws/service-name,如 aws/redshift。要明确地标识 Amazon 托管 CMK,请使用 DescribeKey 操作。对于 Amazon 托管 CMK,DescribeKey 响应的 KeyManager 字段的值为 Amazon

您无需支付 Amazon 托管 CMK 的月费。您需为超出免费套餐的使用量付费,但某些 Amazon 服务涵盖了这些费用。有关详细信息,请参阅服务的用户指南或开发人员指南中的静态加密 主题。Amazon 托管 CMK 不会计入对您账户的每个区域中 CMK 数量的资源配额。但是,当代表您账户中的委托人使用这些 CMK 时,它们将计入请求配额。有关详细信息,请参阅 Amazon Key Management Service 定价Quotas

Amazon 拥有的 CMK

Amazon拥有的 CMK是一个 CMK 的集合,Amazon服务拥有并管理在多个 Amazon Web Services 账户 。虽然Amazon拥有的 CMK 不在您的 Amazon Web Services 账户 ,一个Amazon服务可以使用Amazon拥有的 CMK 来保护您账户中的资源。

您无需创建或管理Amazon拥有的 CMK。但是,您无法查看、使用、跟踪或审核它们。您无需支付月费或对 Amazon 拥有的 CMK 的使用费,并且它们不会计入您账户的 Amazon KMS 配额

这些区域有:密钥轮换的策略Amazon拥有的 CMK 由Amazon服务,用于创建和管理 CMK。有关 CMK 的类型的信息,Amazon服务支持,包括Amazon拥有的 CMK,请参阅静态加密主题或服务的开发人员指南中。

数据密钥

数据密钥 是可用于加密数据的加密密钥,包括大量数据和其他数据加密密钥。

您可以使用对称Amazon KMS 客户主密钥(CMK) 来生成、加密和解密数据密钥。但是,Amazon KMS 不会存储、管理或跟踪您的数据密钥,也不会使用数据密钥执行加密操作。您必须在 Amazon KMS 之外使用和管理数据密钥。

创建数据密钥

要创建数据密钥,请调用GenerateDataKeyoperation.Amazon KMS使用您指定的对称 CMK 来生成数据密钥。此操作会返回数据密钥的明文副本以及由 CMK 加密的数据密钥的副本。下图展示了此操作。


          生成数据密钥

Amazon KMS 还支持 GenerateDataKeyWithoutPlaintext 操作,此操作仅返回加密的数据密钥。当您需要使用数据密钥时,请要求 Amazon KMS 解密它。

使用数据密钥加密数据

Amazon KMS 无法使用数据密钥来加密数据。但是,您可以在Amazon KMS,例如使用 OpenSSL 或像Amazon Encryption SDK

在使用明文数据密钥加密数据后,请尽快从内存中将其删除。您可以安全地存储加密数据密钥及加密数据,以便其可根据需要用于解密数据。


          在  之外加密用户数据Amazon KMS

使用数据密钥解密数据

要解密数据,请将加密数据密钥传递至 Decrypt 操作。Amazon KMS 使用您的 CMK 解密数据密钥,然后该函数返回纯文本数据密钥。使用明文数据密钥解密数据,并尽快从内存中删除该明文数据密钥。

下图显示了如何使用 Decrypt 操作解密加密的数据密钥。


          解密数据密钥

数据密钥对

数据密钥对 是由数学上相关的公有密钥和私有密钥组成的非对称数据密钥。它们设计用于外部的客户端加密和解密或签名和验证。Amazon KMS。

与 OpenSSL 等工具生成的数据密钥对不同,Amazon KMS 会将每个数据密钥对中的私有密钥置于您指定的 Amazon KMS 中的对称 CMK 的保护之下。但是,Amazon KMS 不会存储、管理或跟踪数据密钥对,也不会使用数据密钥对执行加密操作。您必须在 Amazon KMS 之外使用和管理数据密钥对。

Amazon KMS 支持以下类型的数据密钥对:

  • RSA 密钥对:RSA_2048、RSA_3072 和 RSA_4096

  • 椭圆曲线密钥对:ECC_NIST_P256、ECC_NIST_P384、ECC_NIST_P521 和 ECC_SECG_P256K1

选择何种数据密钥对通常取决于使用案例或法规要求。大多数证书需要 RSA 密钥。椭圆曲线密钥通常用于数字签名。ECC_SECG_P256K1 密钥常用于加密货币。Amazon KMS建议您使用 ECC 密钥对进行签名,并将 RSA 密钥对用于加密或签名,但不能同时使用两者。然而,Amazon KMS无法强制对外部使用数据密钥对的任何限制Amazon KMS。

创建数据密钥对

要创建数据密钥对,请调用 GenerateDataKeyPairGenerateDataKeyPairWithoutPlaintext 操作。指定要用于加密私有密钥的对称 CMK。

GenerateDataKeyPair 返回一个明文公有密钥、一个明文私有密钥和一个加密的私有密钥。如果您即刻需要明文私有密钥,例如生成数字签名,则可使用此操作。

GenerateDataKeyPairWithoutPlaintext 返回一个明文公有密钥和一个加密的私有密钥,但不返回明文私有密钥。如果您并非即刻需要明文私有密钥,例如使用公有密钥进行加密,则可使用此操作。稍后,如果您需要明文私有密钥来解密数据,则可调用 Decrypt 操作。

下图显示了 GenerateDataKeyPair 操作。GenerateDataKeyWithoutPlaintext 操作省略了明文私有密钥。


          生成数据密钥对

使用数据密钥对加密数据

使用数据密钥对加密时,用该密钥对的公有密钥加密数据,然后用同一密钥对的私有密钥解密数据。通常,当多方需要加密数据,而只有持有私有密钥的一方才能解密该数据时,会使用数据密钥对。

持有公有密钥的多方使用该密钥加密数据,如下图所示。


          在  外部使用数据密钥对的公有密钥加密用户数据Amazon KMS

使用数据密钥对解密数据

要解密数据,请使用数据密钥对中的私有密钥。为使操作成功,公有密钥和私有密钥必须来自同一数据密钥对,并且必须使用相同的加密算法。

要对加密的私有密钥进行解密,请将其传递给 Decrypt 操作。使用明文私有密钥解密数据。然后尽快从内存中删除明文私有密钥。

下图显示了如何使用数据密钥对中的私有密钥解密密文。


          使用外部的数据 key pair 中的私有密钥解密数据Amazon KMS。

使用数据密钥对签署消息

要为消息生成加密签名,请使用数据密钥对中的私有密钥。持有公有密钥的任何人都可以使用该密钥来验证消息已使用私有密钥签名,并且自签名以后未曾更改。

如果私有密钥已加密,则可将加密的私有密钥传递给 Decrypt 操作。Amazon KMS 使用 CMK 对数据密钥进行解密,然后返回明文私有密钥。使用明文私有密钥生成签名。然后尽快从内存中删除明文私有密钥。

要签署消息,请使用加密哈希函数(如 OpenSSL 中的 dgst 命令)创建消息摘要。然后,将明文私有密钥传递给签名算法。结果是一个表示消息内容的签名。(您可能无需先创建摘要即可签署较短的邮件。 最大邮件大小因您使用的签名工具而异。)

下图显示了如何使用数据密钥对中的私有密钥签署消息。


          在外部使用数据 key pair 中的私有密钥生成加密签名。Amazon KMS。

使用数据密钥对验证签名

持有数据密钥对中公有密钥的任何人,都可以使用该密钥来验证使用私有密钥生成的签名。验证确认已授权用户使用指定的私有密钥和签名算法签署了消息,并且消息自签名以后未曾更改。

要使验证成功,验证签名的一方必须生成相同类型的摘要,使用相同的算法,并使用与用于签署消息的私有密钥相对应的公有密钥。

下图显示了如何使用数据密钥对中的公有密钥验证消息签名。


          在外部使用数据 key pair 中的公有密钥验证加密签名。Amazon KMS。

Aliases

一个alias是 CMK 的友好名称。例如,您可以将 CMK 称为测试密钥密钥而不是 1234 个 AB-124abcd 12ab-34abcd 124abcd-34abcd-34abcd-34abcd-34abcd-34abcd-34abcd

别名可以更轻松地识别Amazon Web Services Management Console。您可以使用别名在某些Amazon KMS操作,包括加密操作。在应用程序中,您可以使用单个别名来引用每个 Amazon Web Services 区域 。

您还可以根据 CMK 的别名允许和拒绝对其进行访问,而无需编辑策略或管理授权。此功能是Amazon KMS支持基于属性的访问控制 (ABAC)。有关详细信息,请参阅 使用 ABACAmazon KMS

InAmazon KMS,别名是独立的资源,而不是 CMK 的属性。因此,您可以添加、更改和删除别名,不会影响关联 CMK。

了解更多:

自定义密钥存储

A自定义密钥存储是一个Amazon KMS资源,其中与 FIPS 140-2 级 3 级硬件安全模块 (HSM) 关联。Amazon CloudHSM群集。

创建时,创建Amazon KMS客户主密钥 (CMK),Amazon KMS生成 256 位、持久且不可导出的高级加密标准 (AES) 对称密钥,在关联的Amazon CloudHSM集群。此密钥材料绝不会让您的 HSM 处于未加密状态。在自定义密钥存储中使用 CMK 时,会在集群中的 HSM 中执行加密操作。

有关更多信息,请参阅使用自定义密钥存储

加密操作

在 Amazon KMS 中,加密操作 是使用 CMK 保护数据的 API 操作。由于 CMK 保留在 Amazon KMS 中,因此,您必须调用 Amazon KMS 才能在加密操作中使用 CMK。

要使用 CMK 执行加密操作,请使用 Amazon 开发工具包、Amazon Command Line Interface (Amazon CLI) 或 Amazon Tools for PowerShell。无法在 Amazon KMS 控制台中执行加密操作。有关使用多种编程语言调用加密操作的示例,请参阅使用 Amazon KMS API 进行编程

下表列出了 Amazon KMS 加密操作。它还显示操作中使用的 CMK 的密钥类型和密钥使用要求。

操作 CMK 密钥类型 CMK 密钥用法
Decrypt 任何 ENCRYPT_DECRYPT
Encrypt 任何 ENCRYPT_DECRYPT
GenerateDataKey 对称 ENCRYPT_DECRYPT
GenerateDataKeyPair 对称 [1] ENCRYPT_DECRYPT
GenerateDataKeyPairWithoutPlaintext 对称 [1] ENCRYPT_DECRYPT
GenerateDataKeyWithoutPlaintext 对称 ENCRYPT_DECRYPT
GenerateRandom N/A。此操作不使用 CMK。 不适用
ReEncrypt 任何 ENCRYPT_DECRYPT
Sign 非对称 SIGN_VERIFY
验证 非对称 SIGN_VERIFY

[1]GenerateDataKeyPairGenerateDataKeyPairWithoutPlaintext会生成受对称 CMK 保护的非对称数据 key pair。

有关加密操作的权限的信息,请参阅 Amazon KMS 权限

为了使 Amazon KMS 对所有用户具有响应性和高性能,Amazon KMS 为每秒可以调用的加密操作数设置了配额。有关详细信息,请参阅 加密操作的共享配额

密钥标识符 (KeyId)

密钥标识符用作 Amazon KMS 客户主密钥 (CMK) 的名称。它们可帮助您在控制台中识别 CMK。您可以使用它们来指示要在Amazon KMSAPI 操作、IAM 策略和授权。

Amazon KMS 定义了多个密钥标识符。创建 CMK 时,Amazon KMS 生成密钥 ARN 和密钥 ID,这些是 CMK 的属性。创建别名时,Amazon KMS 会根据您定义的别名生成别名 ARN。您可以在 Amazon Web Services Management Console 和 Amazon KMS API 中查看密钥及别名标识符。

在Amazon KMS控制台上,您可以查看和筛选器CMK 按密钥 ARN、密钥 ID 或别名排序,并按密钥 ID 和别名排序。有关详细信息,请参阅 查找密钥 ID 和 ARN查找别名和别名 ARN

在 Amazon KMS API 中,用于标识 CMK 的参数名为 KeyId 或其变体(例如 TargetKeyIdDestinationKeyId)。但是,这些参数的值不限于密钥 ID。一些参数可以使用任意有效的密钥标识符。有关每个参数值的信息,请参阅Amazon Key Management ServiceAPI 参考

注意

使用Amazon KMSAPI 中,请谨慎使用密钥标识符。不同的 API 需要不同的密钥标识符。通常,请在您的任务中使用尽可能完整的密钥标识符。

Amazon KMS 支持以下密钥标识符。

密钥 ARN

密钥 ARN 是 CMK 的 Amazon 资源名称 (ARN)。它是 CMK 唯一的完全限定标识符。关键 ARN 包括 Amazon Web Services 账户 、区域和密钥 ID。有关查找 CMK 的密钥 ARN 的帮助,请参阅查找密钥 ID 和 ARN

密钥 ARN 的格式如下:

arn:<partition>:kms:<region>:<account-id>:key/<key-id>

以下是单区域 CMK 的示例密钥 ARN。

arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

这些区域有:密钥 ID元素的密钥 ARN多区域密钥包装mrk-prefix. 以下是示例密钥 ARN 多区域 CMK。

arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab
密钥 ID

密钥 ID 唯一地标识账户和区域中的 CMK。有关查找 CMK 的密钥 ID 的帮助,请参阅查找密钥 ID 和 ARN

以下是单区域 CMK 的示例密钥 ID。

1234abcd-12ab-34cd-56ef-1234567890ab

的密钥 ID多区域密钥包装mrk-prefix. 以下是多区域 CMK 的示例密钥 ID。

mrk-1234abcd12ab34cd56ef1234567890ab
别名 ARN

别名 ARN 是 Amazon KMS 别名的 Amazon 资源名称 (ARN)。它是别名及所表示 CMK 的唯一的完全限定标识符。别名 ARN 包含 Amazon Web Services 账户 、区域和别名。

在任何给定时间,一个别名 ARN 标识一个特定的 CMK。但是,由于您可以更改与别名关联的 CMK,别名 ARN 在不同时间可以标识不同的 CMK。有关查找 CMK 的别名 ARN 的帮助,请参阅查找别名和别名 ARN

别名 ARN 的格式如下:

arn:<partition>:kms:<region>:<account-id>:alias/<alias-name>

以下是虚构的 ExampleAlias 的别名 ARN。

arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias
别名

别名名是长度最多为 256 个字符的字符串。它唯一地标识账户和区域内关联的相关 CMK。在 Amazon KMS API 中,别名始终以 alias/ 开头。有关查找 CMK 的别名的帮助,请参阅查找别名和别名 ARN

别名的格式如下:

alias/<alias-name>

例如:

alias/ExampleAlias

别名的 aws/ 前缀保留用于 Amazon 托管 CMK。您无法使用此前缀创建别名。例如,对于Amazon托管 CMK 如下。

alias/aws/s3

密钥材料

密钥材料是加密算法中使用的密码字符串。密钥材料必须保密,以保护使用它的加密操作。

InAmazon KMS,每个客户主密钥都包含密钥材料以及元数据,例如其密钥 ID密钥策略。这些区域有:密钥材料源可能不同。您可以使用Amazon KMS生成的关键材料,在Amazon CloudHSM集群自定义密钥存储,或者导入自己的密钥材料。如果您使用Amazon KMS键材质,您可以启用自动旋转的密钥材料。

默认情况下,每个 CMK 都有唯一的密钥材料。但是,您可以创建一组多区域密钥包装使用相同的密钥材料。

密钥材料源

密钥材料源 是标识 CMK 中密钥材料的来源的 CMK 属性。您在创建 CMK 时选择密钥材料源,并且无法更改。要查找 CMK 的关键材料来源,请使用DescribeKey操作,或参阅Origin上的值加密配置选项卡中的 CMKAmazon KMS控制台。有关帮助信息,请参阅查看密钥

CMK 可以具有以下密钥材料源值之一。

KMS(默认值)

API 值:AWS_KMS

Amazon KMS 在其自己的密钥存储中创建和管理 CMK 的密钥材料。这是大多数 CMK 的默认值和推荐值。

有关使用来自 Amazon KMS 的密钥材料创建密钥的帮助,请参阅创建密钥

外部

API 值:EXTERNAL

CMK 具有 已导入密钥材料。当您使用 External 密钥材料源创建 CMK 时,CMK 没有密钥材料。稍后,您可以将密钥材料导入 CMK。使用导入的密钥材料时,您需要保护和管理 Amazon KMS 外部的密钥材料,包括在密钥材料过期时进行替换。有关详细信息,请参阅 关于导入的密钥材料

有关为导入的密钥材料创建 CMK 的帮助,请参阅第 1 步:创建不带密钥材料的 CMK

自定义密钥存储 (CloudHSM)

API 值:AWS_CLOUDHSM

Amazon KMS 为您自定义密钥存储中的 CMK 创建了密钥材料。

有关在自定义密钥存储中创建 CMK 的帮助,请参阅在自定义密钥存储中创建 CMK

密钥规范

密钥规范 是一种 CMK 属性,用于表示 CMK 的加密配置。密钥规范决定了 CMK 是对称还是非对称、CMK 中的密钥材料类型,以及可以用于 CMK 的加密算法或签名算法。

通常来说,为 CMK 选择哪个密钥规范取决于使用案例和法规要求。密钥规范在创建 CMK 时选择,并且无法更改。如果选择了错误的密钥规范,可删除 CMK,然后创建一个新的密钥规范。

有关密钥规范的列表以及选择密钥规范的帮助信息,请参阅选择密钥规范。要查找 CMK 的密钥规范,请使用DescribeKey操作,或参阅加密配置选项卡上的 CMKAmazon KMS控制台。有关帮助信息,请参阅查看密钥

注意

InAmazon KMSAPI 操作时,CMK 的密钥规范称为CustomerMasterKeySpec。这将它与数据密钥的密钥规范(KeySpec)和数据密钥对(KeyPairSpec),以及包装要导入的密钥材料时使用的密钥规范(WrappingKeySpec)。每个键规范类型都有不同的值。

要对委托人在创建 CMK 时可使用的密钥规范做出限制,请使用 kms:CustomerMasterKeySpec 条件键。还可以使用 kms:CustomerMasterKeySpec 条件键,允许委托人根据 CMK 的密钥规范调用 Amazon KMS 操作。例如,可以拒绝删除具有 RSA_4096 密钥规范的 CMK 的调度权限。

密钥用法

密钥用法 是一种 CMK 属性,用于确定 CMK 是用于加密和解密还是签名和验证。不能同时选择二者。将 CMK 用于多种操作类型,会使两种操作的产物更容易受到攻击。

对称 CMK 的密钥用法始终是加密和解密。椭圆曲线 (ECC) CMK 的密钥用法始终是签名和验证。只需为 RSA CMK 选择密钥用法。密钥用法在创建 CMK 时选择,并且无法更改。如果选择了错误的密钥用法,可删除 CMK,然后创建一个新的密钥用法。

有关密钥用法的选择,请参阅选择密钥用法。要查找 CMK 的密钥用法,请使用DescribeKey操作,或选择加密配置选项卡上的 CMKAmazon KMS控制台。有关帮助信息,请参阅查看密钥

要允许委托人创建仅用于签名和验证或仅用于加密和解密的 CMK,请使用 kms:CustomerMasterKeyUsage 条件键。还可以使用 kms:CustomerMasterKeyUsage 条件键,允许委托人根据 CMK 的密钥用法调用 API 操作。例如,可以允许仅当 CMK 的密钥用法为 SIGN_VERIFY 时禁用 CMK 的权限。

信封加密

在您加密数据后,数据将受到保护,但您必须保护加密密钥。一种策略是对其进行加密。信封加密 是一种加密方法,它使用数据密钥对明文数据进行加密,然后使用其他密钥对数据密钥进行加密。

您甚至可以使用其他加密密钥对数据加密密钥进行加密,并且在另一个加密密钥下加密该加密密钥。但是,最后,一个密钥必须以明文形式保留,以便您可以解密密钥和数据。此顶层明文密钥加密密钥称为主密钥


        信封加密

Amazon KMS 可通过安全地存储和管理主密钥来帮助您保护它们。存储在 Amazon KMS 中的主密钥(称为客户主密钥 (CMK))绝不会让 Amazon KMS 经 FIPS 验证的硬件安全模块处于不加密状态。要使用 Amazon KMS CMK,您必须调用 Amazon KMS。


        使用多个密钥加密密钥的信封加密

信封加密可提供以下多种优势:

  • 保护数据密钥

    加密数据密钥时,您无需担心存储加密数据密钥,因为数据密钥本身就受到加密的保护。您可以安全地将加密数据与加密数据密钥一起存储。

  • 使用多个主密钥加密相同数据

    加密操作可能非常耗时,特别是要加密的数据是大型对象时。您可以只重新加密保护原始数据的数据密钥,而无需使用不同的密钥多次重新加密原始数据。

  • 结合多种算法的优势

    通常,与公有密钥算法相比,对称密钥算法速度更快,生成的密文更小。但公有密钥算法可提供固有的角色分离和更轻松的密钥管理。信封加密让您可以每种策略的优势结合起来。

加密上下文

全部Amazon KMS 加密操作与对称 CMK 接受加密上下文,即一组可选的键值对,其中包含有关数据的其他上下文信息。Amazon KMS将加密上下文用作其他已经过身份验证的数据(AAD) 支持经过身份验证的加密

您无法在使用非对称 CMK。标准的非对称加密算法Amazon KMS使用不支持加密上下文。

在加密请求中包含加密上下文时,它以加密方式绑定到密文,这样就需要相同的加密上下文来解密(或解密并重新加密)数据。如果解密请求中提供的加密上下文不是区分大小写的完全匹配,解密请求将失败。只有加密上下文中键/值对的顺序可以改变。

加密上下文是公开的。它以明文显示在 Amazon CloudTrail 日志中,以便您可以使用它来标识和分类加密操作。

加密上下文可以包含任何键和值。但是,由于它不是密文且未加密,因此,加密上下文不应包含敏感信息。我们建议您的加密上下文描述正在加密或解密的数据。例如,在加密文件时,您可以将文件路径的一部分用作加密上下文。

加密上下文对中的键和值必须是简单的文本字符串。它们不能是整数或对象,也不能是任何未完全解析的类型。如果您使用其他类型(例如整数或浮点),则 Amazon KMS 会将它解释为字符串。

"encryptionContext": { "department": "10103.0" }

加密上下文键和值可以包含特殊字符,如下划线 (_)、短划线 (-)、斜杠(/、\)和冒号 (:)。

例如,当加密使用Amazon Elastic Block Store(Amazon EBS 卷)CreateSnapshot操作时,Amazon EBS 会使用卷 ID 作为加密上下文值。

"encryptionContext": { "aws:ebs:id": "vol-abcde12345abc1234" }

您还可以使用加密上下文来细化或限制对您账户中客户主密钥 (CMK) 的访问。您可以使用加密上下文作为授权中的约束,以及作为策略语句中的条件

要了解如何使用加密上下文来保护加密数据的完整性,请参阅 安全博客上的博文 Amazon Key Management ServiceHow to Protect the Integrity of Your Encrypted Data by Using and EncryptionContextAmazon。

有关加密上下文的更多信息。

加密上下文主要用于验证完整性和真实性。不过,您也可以使用加密上下文来控制对密钥策略和 IAM 策略中对称客户主密钥 (CMK) 的访问。

这些区域有:kms:EncryptionContext:上下文键kms:EncryptionContextKeys条件键仅在请求包含特定加密上下文密钥或密钥-值对时才允许(或拒绝)权限。

例如,以下键策略语句允许承担者在RoleForExampleApp角色使用 CMKDecrypt操作。它使用kms:EncryptionContext:context-key条件键以仅在请求中加密上下文包含此权限时允许此权限。AppName:ExampleApp加密上下文对。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" } } }

有关这些加密上下文条件键的更多信息,请参阅 针对 Amazon KMS 使用策略条件

当您 时创建授予,您可以包含授权约束,为授予权限建立条件。Amazon KMS支持两个赠款限制,EncryptionContextEqualsEncryptionContextSubset,这两个都涉及加密上下文在加密操作的请求中。当您使用这些授权约束时,授权中的权限仅在加密操作请求中的加密上下文满足授权约束要求时有效。

例如,您可以将EncryptionContextEquals授予约束,该授权允许GenerateDataKeyoperation. 使用此约束,授权仅在请求中加密上下文与授权约束中加密上下文区分大小写的完全匹配时,才允许该操作。

$ aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:user/exampleUser \ --retiring-principal arn:aws:iam::111122223333:role/adminRole \ --operations GenerateDataKey \ --constraints EncryptionContextEquals={Purpose=Test}

来自被授予者委托人的以下请求将满足EncryptionContextEquals约束。

$ aws kms generate-data-key \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --key-spec AES_256 \ --encryption-context Purpose=Test

有关授权约束的详细信息,请参阅使用授权约束。有关授权的详细信息,请参阅使用授权

Amazon KMS 使用 Amazon CloudTrail 记录加密上下文,以便您可以确定访问了哪些 CMK 和数据。日志条目会准确显示哪个 CMK 被用来加密或解密了由加密上下文引用的特定数据。

重要

由于加密上下文会被记录,它不得包含敏感信息。

为了简化在调用 DecryptReEncrypt 操作时任何加密上下文的使用,可以将加密上下文与加密数据存储在一起。我们建议您仅存储足够的加密上下文,以帮助您在需要用于加密或解密时创建完整的加密上下文。

例如,如果加密上下文是文件的完全限定路径,仅将该路径部分与加密文件内容存储在一起。然后,当您需要完整的加密上下文时,可以从存储的片段重建它。如果有人擅自改动文件,例如重命名或将其移动到其他位置,加密上下文值更改,解密请求将失败。

密钥策略

创建 CMK 时,您可以确定使用和管理该 CMK 的人员。这些权限包含在名为密钥策略的文档中。您可以使用键策略随时为客户托管 CMK 添加、删除或更改权限。但是,您无法编辑 Amazon 托管 CMK 的键策略。有关更多信息,请参阅使用 Amazon KMS 中的密钥策略

Grant

A授予是一个政策工具,允许Amazon使用的委托人Amazon KMS客户主密钥 (CMK)加密操作。它也可以让他们查看 CMK(DescribeKey) 并创建和管理授权。在授予对 CMK 的访问权限时,授权与密钥策略IAM 策略。授予通常用于临时权限,因为您可以在不更改密钥策略或 IAM 策略的情况下创建、使用其权限并将其删除。由于授权可能非常具体,并且易于创建和撤销,因此它们通常用于提供临时权限或更精细的权限。

有关授权(包括授权术语)的详细信息,请参阅使用授权

审计 CMK 使用情况

您可以使用 Amazon CloudTrail 审核密钥使用情况。CloudTrail 会创建日志文件,其中包含AmazonAPI 调用和您账户的相关事件。这些日志文件包含通过 Amazon 管理控制台、Amazon 软件开发工具包和命令行工具发出的所有 Amazon KMS API 请求。日志文件还包含 Amazon 服务代表您向 Amazon KMS 发出的请求。您可以使用这些日志文件来查找重要信息,包括使用 CMK 的时间、所请求的操作、请求者的身份以及源 IP 地址。有关更多信息,请参阅 。使用 Amazon CloudTrail 进行日志记录Amazon CloudTrail用户指南

密钥管理基础设施

加密术的常见做法是使用公开可用且经过同行评审的算法进行加密和解密,例如使用 AES (高级加密标准) 和私有密钥。加密术的主要问题之一是很难保持密钥的私密性。这通常是密钥管理基础设施 (KMI) 的工作。Amazon KMS可为您操作 KMI。Amazon KMS会创建并安全地存储称为客户主密钥。有关如何Amazon KMS操作,请参阅Amazon Key Management Service加密详细信息