添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
AWS KMS 概念 - AWS Key Management Service

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

AWS KMS 概念

学习中使用的基本术语和概念 AWS Key Management Service (AWS KMS)以及它们如何协同工作以帮助保护您的数据。

AWS KMS keys

AWS KMS keys (KMS密钥)是中的主要资源 AWS KMS。 您可以使用KMS密钥对数据进行加密、解密和重新加密。它还可以生成数据密钥,供您在外部使用 AWS KMS。 通常,您将使用 对称加密KMS密钥 ,但您可以创建和使用 非对称KMS密钥 进行加密或签名,也可以创建和使用 HMAC KMS密钥来生成和验证HMAC标签。

注意

AWS KMS 正在将 “ 客户主密钥 (CMK) ” 一词替换为 AWS KMS key 还有 KMS钥匙 。这一概念并未改变。为防止重大更改, AWS KMS 保留了这个术语的一些变体。

一个 AWS KMS key 是加密密钥的逻辑表示形式。KMS密钥包含元数据,例如密钥 ID、密 钥规范 密钥用法 、创建日期、描述和 密钥状态 。最重要的是,它包含对使用 密钥执行加密操作时使用的KMS密钥材料 的引用。

您可以使用中生成的加密KMS密钥材料创建密钥 AWS KMS FIPS经过验证的硬件安全模块 。对称密钥的KMS密钥材料和非对称密钥的私钥永远不会离KMS开 AWS KMS 未加密。要使用或管理您的KMS密钥,必须使用 AWS KMS。 有关创建和管理KMS密钥的信息,请参阅 管理密钥 。有关使用KMS密钥的信息,请参阅 AWS Key Management Service API参考

默认情况下, AWS KMS 为密钥创建密KMS钥材料。您无法提取、导出、查看或管理此密钥材料。唯一的例外是非对称密钥对的公钥,您可以将其导出以供外部使用 AWS。 此外,您无法删除此密钥材料;必须 删除KMS密钥 。但是,您可以将 自己的密钥材料导 入到KMS密钥中,也可以使用 自定义密钥存储库 来创建使用KMS密钥材料的密钥 AWS CloudHSM 集群,或者您在外部拥有和管理的外部密钥管理器中的密钥材料 AWS.

AWS KMS 还支持 多区域密钥 ,允许您将数据加密为一体 AWS 区域 然后用不同的方式解密它 AWS 区域.

有关创建和管理KMS密钥的信息,请参阅 管理密钥 。有关使用KMS密钥的信息,请参阅 AWS Key Management Service API参考

客户密钥和 AWS 键

您创建的KMS密钥是 客户管理的密钥 。 AWS 服务 使用KMS密钥加密您的服务资源的用户通常会为您创建密钥。KMS那把钥匙 AWS 服务 在你的 AWS 账户是 AWS 托管式密钥 。 KMS那把钥匙 AWS 服务 在服务帐号中创建是 AWS 拥有的密钥 .

AWS 与之集成的服务 AWS KMS 他们对KMS密钥的支持有所不同。一段时间 AWS 默认情况下,服务使用加密您的数据 AWS 拥有的密钥 或者一个 AWS 托管式密钥。 一些 AWS 服务支持客户管理的密钥。其他 AWS 服务支持所有类型的KMS密钥,让您轻松使用 AWS 拥有的密钥,一个的可见性 AWS 托管式密钥,或者控制客户管理的密钥。有关加密选项的详细信息 AWS 服务优惠,请参阅用户指南中的 静态加密 主题或该服务的开发者指南。

客户管理密钥

您创建的KMS密钥是 客户管理的密钥 。客户管理的密KMS钥是您的密钥 AWS 账户 由您创建、拥有和管理的。您可以完全控制这些KMS密钥,包括建立和维护其密 钥IAM策略、策略和授 权、 启用和禁用 它们、 轮换其加密材料 添加标签 创建引用密钥的别名 以及 安排KMS密钥的KMS 删除时间。

客户管理的密钥显示在 客户管理的密钥 页面上 AWS Management Console for AWS KMS。 要明确识别客户管理的密钥,请使用 DescribeKey 操作。对于客户托管密钥, DescribeKey 响应的 KeyManager 字段的值为 CUSTOMER

您可以在加密操作中使用您的客户托管密钥,并在中审计使用情况 AWS CloudTrail 日志。此外,很多 AWS 与之集成的服务 AWS KMS 允许您指定客户托管的密钥来保护为您存储和管理的数据。

客户托管密钥会产生月费以及超过免费套餐使用量的费用。它们被计入 AWS KMS 您账户的@@ 配额 。有关详细信息,请参阅 AWS Key Management Service 定价 配额 .

AWS 托管式密钥

AWS 托管式密钥 是您账户中的KMS密钥,由某人代表您创建、管理和使用 AWS 服务与集成 AWS KMS .

一段时间 AWS 服务让你选择 AWS 托管式密钥 或客户管理的密钥,用于保护您在该服务中的资源。通常,除非要求您控制保护资源的加密密钥,否则 AWS 托管式密钥 是一个不错的选择。您无需创建或维护密钥或其密钥策略,也无需支付月费 AWS 托管式密钥.

您有权 查看 AWS 托管式密钥 在您的账户中, 查看他们的密钥政策 ,并 审核其在中的使用 情况 AWS CloudTrail 日志。但是,您不能更改的任何属性 AWS 托管式密钥、轮换它们、更改其密钥策略或安排将其删除。而且,你不能使用 AWS 托管式密钥 直接在加密操作中;创建它们的服务代表您使用它们。

AWS 托管式密钥 出现在 AWS 托管式密钥 的页面 AWS Management Console for AWS KMS。 你也可以识别 AWS 托管式密钥 由它们的别名组成,其格式为 aws/ service-name ,例如。 aws/redshift 为了明确识别一个 AWS 托管式密钥,使用 DescribeKey 操作。对于 AWS 托管式密钥,则 DescribeKey 响应 KeyManager 字段的值为 AWS

全部 AWS 托管式密钥 每年自动轮换。您不能更改此轮换计划。

注意

2022 年 5 月, AWS KMS 更改了的轮换时间表 AWS 托管式密钥 从每三年(大约 1,095 天)到每年(大约 365 天)。

New AWS 托管式密钥 将在创建一年后自动轮换,此后大约每年轮换一次。

现有 AWS 托管式密钥 在最近一次轮换一年后自动轮换,此后每年轮换。

不收取月费 AWS 托管式密钥。 超出免费套餐的使用量可能会收取费用,但有些 AWS 服务可以为您支付这些费用。有关详细信息,请参阅服务的用户指南或开发人员指南中的 静态加密 主题。有关详细信息,请参阅 AWS Key Management Service

AWS 托管式密钥 不要计入您账户中每个区域的KMS密钥数量的资源配额。但是,当代表您账户中的委托人使用时,KMS密钥将计入请求配额。有关详细信息,请参阅 配额

AWS 拥有的密钥

AWS 拥有的密钥 是KMS钥匙的集合 AWS 服务拥有并管理多个 AWS 账户。 虽然 AWS 拥有的密钥 不在你的 AWS 账户,一个 AWS 服务可以使用 AWS 拥有的密钥 以保护您账户中的资源。

一段时间 AWS 服务让你选择 AWS 拥有的密钥 或客户管理的密钥。一般而言,除非要求您审核或控制保护资源的加密密钥,否则 AWS 拥有的密钥 是一个不错的选择。 AWS 拥有的密钥 完全免费(没有月费或使用费),它们不计入 AWS KMS 为您的账户提供配额,而且它们易于使用。您不必创建或维护该密钥或其密钥策略。

的旋转 AWS 拥有的密钥 因服务而异。有关特定旋转的信息 AWS 拥有的密钥,请参阅该服务的用户指南或开发人员指南中的 “ 静态加密 ” 主题。

对称加密密钥 KMS

当你创建 AWS KMS key,默认情况下,您将获得对称加密的KMS密钥。这是基本且最常用的KMS密钥类型。

In AWS KMS, 对称加密KMS密钥 代表一个 256 位AES的GCM加密密钥,但中国地区除外,它代表 12 SM4 8 位的加密密钥。对称密钥材料永远不会离开 AWS KMS 未加密。要使用对称加密KMS密钥,必须调用 AWS KMS。 对称加密密钥用于对称加密,其中相同的密钥用于加密和解密。除非您的任务明确要求非对称加密,否则对称加密KMS密钥永远不会离开 AWS KMS 未加密,是一个不错的选择。

AWS 与之集成的服务 AWS KMS 仅使用对称加密KMS密钥来加密您的数据。这些服务不支持使用非对称KMS密钥进行加密。有关确定KMS密钥是对称还是非对称的帮助,请参阅。 识别非对称 KMS 密钥

严格来说,对称密钥的密钥规格是 SYMMETRIC _DEFAULT,密钥用法是 ENCRYPT _DECRYPT,加密算法是 SYMMETRIC _ DEFAULT。有关详细信息,请参阅 SYMMETRIC_DEFAULT 密钥规范

您可以在中使用对称加密KMS密钥 AWS KMS 加密、解密和重新加密数据,并生成数据密钥和数据密钥对。 您可以创建多区域对称加密KMS密钥,将自己的密钥材料导入对称加密密钥,并在自定义KMS密钥存储中创建对称加密KMS密钥。 有关比较您可以对不同类型的KMS键执行的操作的表,请参见 密钥类型引用

非对称密钥 KMS

你可以在中创建非对称KMS密钥 AWS KMS。 非对称KMS密钥 表示数学上相关的公钥和私钥对。私钥永远不会离开 AWS KMS 未加密。要使用私钥,您必须致电 AWS KMS。 你可以在里面使用公钥 AWS KMS 通过致电 AWS KMS API操作,或者你可以 下载公钥 并在之外使用 AWS KMS。 您也可以创建 多区域 非对称密钥KMS。

您可以创建代表KMS密钥对、椭圆曲线密RSA钥对或密钥对的非对称SM2密钥(仅限中国区域)。KMS带有密RSA钥对的密钥可用于加密或解密数据或对消息进行签名和验证(但不能两者兼而有之)。KMS带有NIST推荐的椭圆曲线密钥对的密钥可用于签署和验证消息或派生共享密钥(但不能两者兼而有之)。KMS带有密 ECC_SECG_P256K1 钥对的密钥只能用于对消息进行签名和验证。KMS带有SM2(仅限中国区域)密钥对的密钥可用于加密和解密数据、签名和验证消息或派生共享密钥(您必须选择一种密钥使用类型)。

有关创建和使用非对称KMS密钥的更多信息,请参阅 中的非对称密钥 AWS KMS

HMACKMS钥匙

HMACKMS密钥 表示长度不一的对称密钥,用于生成和验证基于哈希的消息身份验证码 () HMAC。钥匙的密钥材料永远不会离开 HMAC AWS KMS 未加密。要使用密HMAC钥,请调用 GenerateMac VerifyMac API操作。

您也可以创建 多区域 HMACKMS密钥。

有关创建和使用HMACKMS密钥的更多信息,请参阅 AWS KMS 中的 HMAC 密钥

数据密钥 是可用于加密数据的对称密钥,包括大量数据和其他数据加密密钥。与无法下载的对称 KMS密钥 不同,数据密钥会返回给您,供您在之外使用 AWS KMS.

时间 AWS KMS 生成数据密钥,它会返回一个供立即使用的纯文本数据密钥(可选)和数据密钥的加密副本,您可以安全地将其与数据一起存储。当你准备好解密数据时,你首先要问 AWS KMS 解密加密的数据密钥。

AWS KMS 生成、加密和解密数据密钥。但是, AWS KMS 不会存储、管理或跟踪您的数据密钥,也不会使用数据密钥执行加密操作。您必须在外部使用和管理数据密钥 AWS KMS。 有关安全使用数据密钥的帮助,请参阅 AWS Encryption SDK .

创建数据密钥

要创建数据密钥,请调用该 GenerateDataKey 操作。 AWS KMS 生成数据密钥。然后,它使用您指定的对 称加密密钥对数据密钥的副本进行加密KMS 。该操作返回数据密钥的纯文本副本和在该密钥下加密的数据密钥的副本。KMS下图展示了此操作。

使用数据密钥加密数据

AWS KMS 无法使用数据密钥加密数据。但是你可以在外面使用数据密钥 AWS KMS,例如使用 Open SSL 或加密库,比如 AWS Encryption SDK .

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

使用数据密钥解密数据

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

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

不可用的KMS密钥如何影响数据密钥

当KMS密钥变得无法使用时,效果几乎是立竿见影的(视最终一致性而定)。 密钥的密钥状态 会KMS发生变化以反映其新状态,并且所有在 加密操作 中使用该KMS密钥的请求都将失败。

但是,对通过密钥加密的数据密钥以及由数据密钥加密的数据的影响会延迟到再次使用KMS密钥(例如解密数据密钥)。KMS

KMS密钥可能由于多种原因而变得不可用,包括您可能执行的以下操作。

从包含@@ 已导入密钥材料的KMS密钥中删除 密钥材料,或者允许导入的密钥材料过期。

断开连接 AWS CloudHSM 托管密钥 的KMS密钥库,或者从密钥库中 删除密钥 AWS CloudHSM 用作密钥材料的KMS集群

断开托管密钥的外部密KMS钥存储库的连接 ,或者任何其他干扰外部密钥存储代理的加密和解密请求的操作,包括从其外部密钥管理器中删除外部密钥。

这种效果对许多人来说尤其重要 AWS 服务 它们使用数据密钥来保护服务管理的资源。以下示例使用亚马逊弹性区块存储 (AmazonEBS) 和亚马逊弹性计算云 (AmazonEC2)。不同 AWS 服务 以不同的方式使用数据密钥。有关详细信息,请参阅 “安全” 一章的 “数据保护” 部分 AWS 服务.

例如,考虑以下情景:

您可以 创建加密EBS卷 并指定KMS密钥来保护它。亚马逊EBS问 AWS KMS 使用您的KMS密钥为该卷 生成加密的数据密钥 。Amazon 将加密的数据密钥与卷的元数据一起EBS存储。

当您将EBS卷连接到EC2实例时,Amazon 会EC2使用您的密KMS钥来解密该EBS卷的加密数据密钥。Amazon EC2 使用 Nitro 硬件中的数据密钥,该硬件负责加密该EBS卷的所有磁盘 I/O。当EBS卷连接到EC2实例时,数据密钥仍保留在 Nitro 硬件中。

您执行的操作使KMS密钥无法使用。这对EC2实例或EBS卷没有立竿见影的影响。当卷连接到实例时,Amazon EC2 使用数据KMS密钥(而不是密钥)来加密所有磁盘 I/O。

但是,当加密EBS卷与EC2实例分离时,Amazon EBS 会从 Nitro 硬件中删除数据密钥。下次将加密EBS卷连接到EC2实例时,连接会失败,因为 Amazon EBS 无法使用该密KMS钥来解密该卷的加密数据密钥。要再次使用EBS音量,必须使KMS密钥再次可用。

数据密钥对

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

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

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

RSA密钥对:RSA_2048、_ RSA 3072 和 _4096 RSA

椭圆曲线密钥对:ECC_ NIST _P256、_ _P NIST 384、ECC ECC _ _P521 和 _ _P256K1 NIST ECC SECG

SM 密钥对(仅限中国区域):SM2

选择何种数据密钥对通常取决于使用案例或法规要求。大多数证书都需要RSA密钥。椭圆曲线密钥通常用于数字签名或派生共享密钥。ECC_ SECG _P256K1 密钥通常用于加密货币。 AWS KMS 建议您使用ECC密钥对进行签名,并使用RSA密钥对进行加密或签名,但不能同时使用两者。但是, AWS KMS 无法对在之外使用数据密钥对施加任何限制 AWS KMS.

创建数据密钥对

要创建数据 key pair,请调用 GenerateDataKeyPair GenerateDataKeyPairWithoutPlaintext 操作。指定要用于 加密私KMS钥的对称 加密密钥。

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

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

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

使用数据密钥对加密数据

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

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

使用数据密钥对解密数据

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

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

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

使用数据密钥对签署消息

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

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

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

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

使用数据密钥对验证签名

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

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

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

使用数据密钥对派生共享密钥

密钥协议使两个 Peer 节点能够通过不安全的通道建立共享密钥,每个节点都有一个椭圆曲线的公私密钥对。要 获得共享密 钥,两个对等体必须通过不安全的通信渠道(如互联网)交换其公钥。然后,各方使用其 私钥 和对等方的 公钥 ,使用密钥协议算法计算相同的共享密钥。您可以使用共享密钥值派生对称密钥,该密钥可以加密和解密在两个对等体之间发送的数据,或者可以生成和验证的数据。HMACs

注意

AWS KMS 强烈建议在使用公钥派生共享密钥之前,先验证您收到的公钥是否来自预期方。

使用 别名 作为KMS密钥的友好名称。例如,你可以将KMS密钥称为 测试密钥,而不是 1234abcd-12ab-34cd-56e f-1234567890ab。

别名可以更轻松地在中识别KMS密钥 AWS Management Console。 你可以使用别名来标识某些KMS密钥 AWS KMS 操作,包括 加密操作。 在应用程序中,您可以使用单个别名来引用每个别名中的不同KMS密钥 AWS 区域.

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

In AWS KMS,别名是独立的资源,而不是KMS密钥的属性。因此,您可以在不影响关联KMS密钥的情况下添加、更改和删除别名。

重要

不要在别名名称中包含机密或敏感信息。别名可能会以纯文本形式出现在 CloudTrail 日志和其他输出中。

了解更多:

自定义密钥存储

自定义密钥库 是 AWS KMS 由外部的密钥管理器支持的资源 AWS KMS 你拥有并管理的。当您使用自定义KMS密钥存储库中的密钥进行加密操作时,加密操作实际上是在密钥管理器中使用其加密密钥执行的。

AWS KMS 支持 AWS CloudHSM 由一个支持的密钥库 AWS CloudHSM 由外部密钥管理器支持的集群和外部密钥存储库 AWS.

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

In AWS KMS, 加密API操作 是使用KMS密钥保护数据的操作。因为KMS钥匙留在里面 AWS KMS,你必须打电话 AWS KMS 在加密操作中使用KMS密钥。

要使用KMS密钥执行加密操作,请使用 AWS SDKs, AWS Command Line Interface (AWS CLI),或者 AWS Tools for PowerShell。 您无法在中执行加密操作 AWS KMS console。有关使用多种编程语言调用加密操作的示例,请参阅 的代码示例 AWS KMS 使用 AWS SDKs

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

Decrypt 对称或非对称 ENCRYPT_DECRYPT DeriveSharedSecret KEY_AGREEMENT Encrypt 对称或非对称 ENCRYPT_DECRYPT GenerateDataKey ENCRYPT_DECRYPT GenerateDataKeyPair 对称 [1]

自定义KMS密钥存储库中的密钥不支持。

ENCRYPT_DECRYPT GenerateDataKeyPairWithoutPlaintext 对称 [1]

自定义KMS密钥存储库中的密钥不支持。

ENCRYPT_DECRYPT GenerateDataKeyWithoutPlaintext ENCRYPT_DECRYPT GenerateMac GENERATE_VERIFY_MAC GenerateRandom 不适用。此操作不使用密KMS钥。 ReEncrypt 对称或非对称 ENCRYPT_DECRYPT SIGN_VERIFY SIGN_VERIFY VerifyMac GENERATE_VERIFY_MAC

[1] 生成受对称加密KMS密钥保护的非对称数据密钥对。

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

要制作 AWS KMS 响应迅速,功能强大,适合所有用户, AWS KMS 为每秒调用的加密操作数量设定配额。有关详细信息,请参阅 加密操作的共享配额

密钥标识符 (KeyId)

密钥标识符就像KMS密钥的名称。它们可以帮助您在控制台中识别您的KMS密钥。你可以用它们来指示你想在哪些KMS按键中使用 AWS KMS API运营、关键政策、IAM政策和补助金。密钥标识符值与与密钥关联的密钥材料完全无关。KMS

AWS KMS 定义了几个密钥标识符。当你创建KMS密钥时, AWS KMS 生成密钥ARN和密钥 ID,它们是KMS密钥的属性。创建 名时, AWS KMS ARN根据您定义的别名生成别名。您可以在中查看密钥和别名标识符 AWS Management Console 而在 AWS KMS API.

在 AWS KMS 控制台,您可以按密钥ARN、KMS密钥 ID 或别名查看和筛选密钥,并按密钥 ID 和别名进行排序。有关在控制台中查找密钥标识符的帮助,请参阅 查找密钥 ID 和密钥 ARN

在 AWS KMS API,则用于标识KMS密钥的参数已命名 KeyId 或变体,例如 TargetKeyId DestinationKeyId 。但是,这些参数的值并不仅限于 key IDs。一些参数可以使用任意有效的密钥标识符。有关每个参数的值的信息,请参阅中的参数描述 AWS Key Management Service API参考。

注意

使用时 AWS KMS API,请注意您使用的密钥标识符。不同APIs需要不同的密钥标识符。通常,请在您的任务中使用最完整实用的密钥标识符。

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

钥匙 ARN

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

密钥的格式ARN如下:

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

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

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

这些区域有: key-id 多区域密钥ARNs的密钥 元素以 mrk- 前缀开头。以下是多区域密钥ARN的示例密钥。

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

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

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

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

多区域密钥IDs的密钥 mrk- 前缀开头。以下是多区域密钥的示例密钥 ID。

mrk-1234abcd12ab34cd56ef1234567890ab
别名 ARN

别名ARN是 Amazon 的资源名称 (ARN) AWS KMS 别名。它是别名及其所代表的KMS密钥的唯一且完全限定的标识符。别名ARN包括 AWS 账户、地区和别名。

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

别名的格式ARN如下:

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

以下是虚构ARN ExampleAlias 的别名。

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

别名是最多 256 个字符的字符串。它唯一标识账户和区域内的关联KMS密钥。在 AWS KMS API,别名总是以开头 alias/ 。有关查找KMS密钥别名的帮助,请参阅 查找别名和别名 ARN

别名的格式如下:

alias/<alias-name>
alias/ExampleAlias

别名的 aws/ 前缀保留给 AWS 托管式密钥 。 您不能使用此前缀创建别名。例如,的别名 AWS 托管式密钥 适用于亚马逊简单存储服务 (Amazon S3) 的 Simple Service 如下。

alias/aws/s3

密钥材料 是加密算法中使用的位串。秘密密钥材料必须保密,以保护使用它的加密操作。公有密钥材料旨在用于共享。

每个KMS密钥在其元数据中都包含对其密钥材料的引用。对称加密 密钥的KMS密钥材料来源 可能有所不同。你可以使用以下密钥材料 AWS KMS 生成,在中生成的密钥材料 AWS CloudHSM 自定义密钥库 的集群,或者 导入您自己的密钥材料 。如果你使用 AWS KMS 对称加密密钥的KMS密钥材料,您可以启用密钥材料的 自动轮换

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

密钥材料源

密钥材料来源 是一种KMS关键属性,用于标识密钥中密钥材料的KMS来源。您在创建密钥时选择密KMS钥材料来源,并且无法对其进行更改。密钥材料的来源会影响密钥的安全性、耐久性、可用性、延迟和吞吐量特性。KMS

要查找密钥的密钥材料来源,请使用 DescribeKey 操作,或者在详情页面的 “ 加密配置 ” 选项卡上查看KMS密钥的 O rigin 值 KMS AWS KMS console。有关帮助信息,请参阅 查看密钥

KMS密钥可以具有以下密钥材质原点值之一。

AWS KMS 在自己的密钥库中创建和管理KMS密钥的密钥材料。这是大多数KMS密钥的默认值和推荐值。

有关使用密钥材料创建密钥的帮助,请访问 AWS KMS,请参阅 创建密钥

EXTERNAL (Import key material)

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

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

AWS_CLOUDHSM

AWS KMS 在中创建密钥材料 AWS CloudHSM 为你集群 AWS CloudHSM 钥匙库

如需帮助,请在中创建KMS密钥 AWS CloudHSM 密钥库,请参阅 在中创建KMS密钥 AWS CloudHSM 钥匙库

EXTERNAL_KEY_STORE

密钥材料是外部密钥管理器中的加密密钥 AWS。 只有 外部密钥存储库 中的KMS密钥才支持此来源。

有关在外部KMS密钥存储库中创建密钥的帮助,请参阅 在外部密钥存储中创建 KMS 密钥

密钥规范 是一种属性,用于表示密钥的加密配置。密钥规范的含义因密钥类型而异。

AWS KMS keys 密钥规范 决定KMS密钥是对称的还是非对称的。它还可确定其密钥材料类型,及其支持的算法。您在 创建密钥时选择密KMS钥 规范,并且无法对其进行更改。默认密钥规范 SYMMETRIC_ DEFAULT 表示 256 位对称加密密钥。

注意

f KeySpec or a KMS key 被称为 a CustomerMasterKeySpec 。该 CreateKey 操作的 CustomerMasterKeySpec 参数已被弃用。请改用 KeySpec 参数,它的工作方式相同。为了防止重大更改, CreateKey DescribeKey 操作的响应现在包括两个 KeySpec 和具有相同值 CustomerMasterKeySpec 的成员。

有关密钥规范的列表以及选择密钥规范的帮助信息,请参阅 选择密钥规范 。要查找密钥的密KMS钥规格,请使用 DescribeKey 操作,或者在密钥详情页面上查看KMS密钥的 加密配置 选项卡 AWS KMS console。有关帮助信息,请参阅 查看密钥

要限制委托人在创建密钥时可以使用的KMS密钥规范,请使用 k ms: KeySpec 条件密钥。您也可以使用 kms:KeySpec 条件键允许委托人拨打电话 AWS KMS 仅对具有特定KMS密钥规格的密钥进行操作。例如,您可以拒绝允许计划删除任何带有KMS密钥规范的 RSA_4096 密钥。

数据密钥 ( GenerateDataKey )- 密钥规范 决定AES数据密钥的长度。

数据密钥对 ( GenerateDataKeyPair )- 密钥对规范 确定数据密钥对中密钥材料的类型。

密钥用法 属性决定密钥支持的加密操作。KMS密钥的密钥用法可以为 ENCRYPT_DECRYPT SIGN_VERIFY GENERATE_VERIFY_MAC 、或 KEY_AGREEMENT 。每个KMS密钥只能使用一个密钥。使用KMS密钥进行多种操作会使这两种操作的产物更容易受到攻击。

有关选择密钥用法的帮助KMS,请参阅 选择密钥用法 。要查找密钥的密KMS钥用法,请使用 DescribeKey 操作,或者在密KMS钥的详细信息页面上选择 加密配置 选项卡 AWS KMS console。有关帮助信息,请参阅 查看密钥

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

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

加密上下文

全部 AWS KMS 使用 对称加密KMS密钥的加密 操作 接受 加密上下文 ,这是一组可选的非秘密密钥-值对,可以包含有关数据的其他上下文信息。 AWS KMS 使用加密上下文作为 其他经过身份验证的数据 (AAD) 来支持 经过身份验证的加密

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

加密上下文不是密钥,且没有加密。它以纯文本形式出现在 AWS CloudTrail 记录您的加密操作, 以便您可以使用它来识别和分类您的加密操作。您的加密上下文不应包含敏感信息。我们建议您的加密上下文描述正在加密或解密的数据。例如,在加密文件时,您可以将文件路径的一部分用作加密上下文。

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

例如,在加密使用亚马逊弹性区块存储 (AmazonEBS) CreateSnapshot操作创建的卷和快照时,亚马逊EBS使用卷 ID 作为加密上下文值。

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

您还可以使用加密上下文来细化或限制访问权限 AWS KMS keys 在你的账户中。您可以使用加密上下文作为授权中的约束,以及作为策略语句中的条件

要了解如何使用加密上下文来保护加密数据的完整性,请参阅文章如何使用来保护加密数据的完整性 AWS Key Management Service 然后 EncryptionContext在 AWS 安全博客。

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

AWS KMS 对加密上下文密钥和值强制执行以下规则。

加密上下文对中的键和值必须是简单的文本字符串。如果您使用其他类型,例如整数或浮点数, AWS KMS 将其解释为字符串。

加密上下文中的密钥和值可以包括 Unicode 字符。如果加密上下文包含密钥策略或IAM策略中不允许的字符,则您将无法在策略条件密钥(例如kms:EncryptionContext:context-key和)中指定加密上下文kms:EncryptionContextKeys。有关密钥策略文档规则的详细信息,请参阅 密钥策略格式。有关IAM策略文档规则的详细信息,请参阅《IAM用户指南》中的IAM名称要求

加密上下文主要用于验证完整性和真实性。但是您也可以使用加密上下文来控制对称加密的访问权限 AWS KMS keys 在关键政策和IAM政策中。

仅当请求包含特定的加密上下文密或密钥值对时,k ms:: 和 kms: EncryptionContextKeys 条件密钥才允许(或拒绝)权限。EncryptionContext

例如,以下密钥策略声明允许RoleForExampleApp角色在Decrypt操作中使用该KMS密钥。它使用 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" }

有关这些加密上下文条件键的更多信息,请参阅 的条件键 AWS KMS

创建授权时,可以包括为授予权限设定条件的授予约束。 AWS KMS 支持两个授予限制EncryptionContextSubsetEncryptionContextEquals和,这两个限制都涉及加密操作请求中的加密上下文。在使用这些授权约束时,授权中的权限仅在加密操作请求中的加密上下文满足授权约束的要求时有效。

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

$ 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

有关授权约束的详细信息,请参阅 使用授权约束。有关授权的详细信息,请参阅 补助金 AWS KMS

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

重要

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

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

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

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

补助金是一种政策工具,它允许 AWS 要使用的校长 AWS KMS keys 在加密操作中。它还可以让他们查看KMS密钥 (DescribeKey) 以及创建和管理授权。在授权访问KMS密钥时,会将授权与关键策略和IAM策略一起考虑。授予通常用于临时权限,因为您可以在不更改密钥策略或IAM策略的情况下创建临时权限、使用其权限并删除它。由于授权可能非常具体,并且易于创建和撤销,因此它们通常用于提供临时权限或更精细的权限。

有关授权(包括授权术语)的详细信息,请参阅 补助金 AWS KMS

审核KMS密钥使用情况