AWS KMS keys
您为在自己的加密应用程序中使用而创建和管理的 KMS 密钥属于客户托管密钥类型。客户托管密钥也可以与使用 KMS 密钥的 AWS 结合使用,用于加密服务代表您存储的数据。对于想要完全控制密钥生命周期和使用情况的客户,建议使用客户托管密钥。账户中拥有客户托管密钥将按月收费。此外,使用和/或管理密钥的请求也会产生使用成本。有关更多详细信息,请参阅 AWS Key Management Service 定价
在某些情况下,客户可能想要使用 AWS 服务来加密其数据,但他们不想承担管理密钥的开销,也不想为密钥付费。AWS 托管式密钥是您账户中存在的 KMS 密钥,但只能在某些情况下使用。具体而言,它只能在您运行的 AWS 服务环境中使用,并且只能由密钥存在的账户中的主体使用。您无法对这些密钥的生命周期或权限进行任何管理。在 AWS 服务中使用加密功能时,您可能会看到 AWS 托管式密钥;它们使用的是“aws<service code>”形式的别名。例如,aws/ebs 密钥只能用于加密 EBS 卷,并且只能用于与密钥位于同一账户中的 IAM 主体使用的卷。假设有一个 AWS 托管式密钥范围缩小到只有您账户中的用户才能使用您账户中的资源。您不能与其他账户共享在 AWS 托管式密钥 下加密的资源。虽然 AWS 托管式密钥 可以免费存在于您的账户中,但分配给该密钥的 AWS 服务会如果使用此密钥类型,则会向您收取费用。
AWS 托管式密钥是一种传统密钥类型,自 2021 年起不再为新 AWS 服务创建。取而代之的是,新(和旧)AWS 服务默认使用 AWS 拥有的密钥加密客户数据。AWS 拥有的密钥 是 KMS 密钥,位于 AWS 服务管理的账户中,因此服务运营商可以管理其生命周期和使用权限。通过使用 AWS 拥有的密钥,AWS 服务可以透明地加密您的数据,并允许轻松跨账户或跨区域共享数据,无需担心密钥权限。AWS 拥有的密钥 用于默认加密的工作负载,可提供更轻松、更自动化的数据保护。由于这些密钥由 AWS 所有并进行管理,因此您无需为其存在或使用付费,也无法更改其策略,无法审计这些密钥上的活动,也无法删除这些密钥。在重视控制时使用客户托管密钥,在最重视便利性时使用 AWS 拥有的密钥。
| 客户托管密钥 | AWS 托管式密钥 | AWS 拥有的密钥 | |
| 密钥策略 | 完全由客户控制 | 由服务控制;客户可以查看 | 只能由加密您数据的 AWS 服务控制和查看 |
| 日志记录 | CloudTrail 客户跟踪或事件数据存储 | CloudTrail 客户跟踪或事件数据存储 | 客户无法查看 |
| 生命周期管理 | 客户管理轮换、删除和区域位置 | AWS KMS 管理轮换(每年)、删除和区域位置 | AWS 服务 管理轮换、删除和区域位置 |
| 定价 |
针对密钥存在收取的月度费用(按小时按比例计收)。此外还需收取密钥使用费 |
不收取月度费用;但调用者需要支付使用这些密钥的 API 费用 | 不向客户收费 |
您创建的 KMS 密钥是客户托管式密钥。使用 KMS 密钥加密服务资源的 AWS 服务 通常会为您创建密钥。AWS 服务 在您的 AWS 账户中创建的 KMS 密钥是 AWS 托管式密钥。AWS 服务 在服务账户中创建的 KMS 密钥是 AWS 拥有的密钥。
与 AWS KMS 集成的 AWS 服务在其对 KMS 密钥的支持方面有所不同。默认情况下,一些 AWS 服务使用 AWS 拥有的密钥 或 AWS 托管式密钥 来加密您的数据。一些 AWS 服务支持客户托管式密钥。还有一些其他 AWS 服务支持所有类型的 KMS 密钥,从而使您能够轻松使用 AWS 拥有的密钥、实现 AWS 托管式密钥 的可见性或控制客户托管式密钥。有关 AWS 服务提供的加密选项的详细信息,请参阅服务的用户指南或开发人员指南中的静态加密 主题。
客户托管密钥
您创建的 KMS 密钥是客户托管式密钥。客户托管密钥是在您的 AWS 账户 中创建、拥有和管理的 KMS 密钥。您可以完全控制这些 KMS 密钥,包括建立和维护其密钥策略、IAM policy 和授权、启用和禁用它们、轮换其加密材料、添加标签、创建别名(引用了 KMS 密钥)以及计划删除 KMS 密钥。
客户托管密钥显示在 AWS KMS 的 AWS 管理控制台 的 Customer managed keys(客户托管密钥)页面上。要明确地标识客户托管密钥,请使用 DescribeKey 操作。对于客户托管密钥,DescribeKey 响应的 KeyManager 字段的值为 CUSTOMER。
您可以在加密操作中使用客户托管密钥并在 AWS CloudTrail 日志中审核其使用情况。此外,许多与 AWS KMS 集成的 AWS 服务使您能够指定客户托管密钥以保护为您存储和管理的数据。
客户托管密钥会产生月费以及超过免费套餐使用量的费用。这些费用将计入您的账户的 AWS KMS 配额。有关详细信息,请参阅 AWS Key Management Service 定价
AWS 托管式密钥
AWS 托管式密钥 是由与 AWS KMS 集成的 AWS 服务
某些 AWS 服务可让您选择 AWS 托管式密钥或客户托管的密钥,从而保护您在该服务中的资源。通常,除非您需要控制保护资源的加密密钥,否则 AWS 托管式密钥是不错的选择。您不必创建或维护密钥或密钥策略,并且永远不会产生 AWS 托管式密钥月度费用。
您有权查看账户中的 AWS 托管式密钥、查看其密钥策略以及在 AWS CloudTrail 日志中审计其使用情况。但是,您无法更改 AWS 托管式密钥的任何属性、对它们进行轮换、更改其密钥策略或安排删除它们。此外,您无法在加密操作中直接使用 AWS 托管式密钥;创建它们的服务将代表您使用它们。
组织中的资源控制策略不适用于 AWS 托管式密钥。
AWS 托管式密钥显示在 AWS KMS 的 AWS 管理控制台 的 AWS 托管式密钥 页面上。您也可以按别名标识大多数 AWS 托管式密钥,别名的格式为 aws/,如 service-nameaws/redshift。要明确地标识 AWS 托管式密钥,请使用 DescribeKey 操作。对于 AWS 托管式密钥,DescribeKey 响应的 KeyManager 字段的值为 AWS。
所有的 AWS 托管式密钥 均每年自动轮换一次。您不能更改此轮换计划。
注意
2022 年 5 月,AWS KMS 将 AWS 托管式密钥 的轮换时间表从每三年(约 1095 天)更改为每年(约 365 天)。
AWS 托管式密钥没有月度费用。您需为超出免费套餐的使用量付费,但某些 AWS 服务涵盖了这些费用。有关详细信息,请参阅服务的用户指南或开发人员指南中的静态加密主题。有关详细信息,请参阅 AWS Key Management Service 定价
AWS 托管式密钥 不会计入您的账户各个区域中 KMS 密钥数量的资源配额。但是,当代表您账户中的委托人使用这些 KMS 密钥时,它们将计入请求配额。有关更多信息,请参阅 限额。
AWS 拥有的密钥
AWS 拥有的密钥 是 AWS 服务拥有并管理以用于多个 AWS 账户 中的 KMS 密钥的集合。虽然 AWS 拥有的密钥 不在您的 AWS 账户 中,但 AWS 服务可以使用 AWS 拥有的密钥 来保护您账户中的资源。
某些 AWS 服务可让您选择 AWS 拥有的密钥或客户托管的密钥。通常,除非您需要审核或控制保护资源的加密密钥,否则 AWS 拥有的密钥是不错的选择。AWS 拥有的密钥完全免费(没有月度费用或使用费用),它们不计入您账户的 AWS KMS 配额,而且简单易用。您不必创建或维护该密钥或其密钥策略。
AWS 拥有的密钥 的轮换因服务而异。有关特定 AWS 拥有的密钥 转换的信息,请参阅服务的用户指南或开发人员指南中的静态加密主题。
AWS KMS key 层次结构
您的密钥层次结构从顶级逻辑密钥(AWS KMS key)开始。KMS 密钥表示顶级密钥材料的容器,在 AWS 服务命名空间中使用 Amazon Resource Name (ARN) 进行唯一定义。ARN 包含唯一生成的密钥标识符,即密钥 ID。KMS 密钥根据用户通过 AWS KMS 发起的请求创建。收到后,AWS KMS 会请求创建初始 HSM 备用密钥 (HBK),并将其放入 KMS 密钥容器中。HBK 在域中的 HSM 上生成,并且设计为永远不会以明文形式从 HSM 导出。相反地,HBK 在 HSM 管理的域密钥下以加密形式导出。这些导出的 HBK 称为导出的密钥令牌 (EKT)。
EKT 将导出到高持久性、低延迟的存储中。例如,假设您收到逻辑 KMS 密钥的 ARN。这表示您的密钥层次结构或加密上下文的顶部。您可以在账户中创建多个 KMS 密钥,并设置 KMS 密钥的策略,如同任何其他 AWS 命名资源一样。
在特定 KMS 密钥的层次结构中,可以将 HBK 视为 KMS 密钥的一个版本。当您想要通过 AWS KMS 轮换 KMS 密钥时,将创建新的 HBK 并将其与 KMS 密钥关联,作为 KMS 密钥的活动 HBK。旧的 HBK 将被保留,并可用于解密和验证以前受保护的数据,但只有活动的加密密钥才能用于保护新信息。
您可以通过 AWS KMS 请求使用 KMS 密钥直接保护信息,也可以请求在 KMS 密钥下受保护的其他 HSM 生成的密钥。这些密钥称为客户数据密钥或 CDK。CDK 可以加密为密文 (CT) 返回、以明文形式返回,或两者兼有。在 KMS 密钥(客户提供的数据或 HSM 生成的密钥)下加密的所有对象只能在 HSM 上经由通过 AWS KMS 的调用进行解密。
返回的密文或解密的负载永远不会存储在 AWS KMS 中。该信息通过与 AWS KMS 的 TLS 连接返回给您。这也适用于 AWS 服务代表您进行的调用。
密钥层次结构和特定密钥属性如下表中所示。
| 键 | 描述 | 生命周期 |
|---|---|---|
|
域密钥 |
仅在 HSM 内存中的 256 位 AES-GCM 密钥,用于包装 KMS 密钥(HSM 备用密钥)的版本。 |
每天轮换1 |
|
HSM 备用密钥 |
256 位对称密钥或者 RSA 或椭圆曲线私有密钥,用于保护客户数据和密钥,在域密钥下加密存储。。一个或多个 HSM 备用密钥组成 KMS 密钥(通过 keyId 表示)。 |
每年轮换2(可选配置) |
|
派生加密密钥 |
仅在 HSM 内存中的 256 位 AES-GCM 密钥,用于加密客户数据和密钥。从每个加密的 HBK 派生。 |
每次加密时使用一次,并在解密时重新生成 |
|
客户数据密钥 |
以明文和密文形式从 HSM 导出的、用户定义的对称或非对称密钥。 在 HSM 备用密钥下加密,然后通过 TLS 通道返回给授权用户。 |
轮换和使用由应用程序控制 |
1 AWS KMS 可能会不时将域密钥轮换放宽到最多每周一次,以满足域管理和配置任务的需要。
2 由 AWS KMS 代表您创建和管理的原定设置 AWS 托管式密钥 每年自动轮换。
密钥标识符 (KeyId)
密钥标识符用作 KMS 密钥的名称。它们可帮助您在控制台中识别 KMS 密钥。您可以使用它们来指示要在 AWS KMS API 操作、密钥策略、IAM policy 和授权中使用的 KMS 密钥。密钥标识符值跟与 KMS 密钥关联的密钥材料完全无关。
AWS KMS 定义了多个密钥标识符。创建 KMS 密钥时,AWS KMS 生成密钥 ARN 和密钥 ID,这些是 KMS 密钥的属性。创建别名时,AWS KMS 会根据您定义的别名生成别名 ARN。您可以在 AWS 管理控制台 和 AWS KMS API 中查看密钥及别名标识符。
在 AWS KMS 控制台中,您可以按密钥 ARN、密钥 ID 或别名名称查看和筛选 KMS 密钥,并可按密钥 ID 和别名排序。有关在控制台中查找密钥标识符的帮助,请参阅查找密钥 ID 和密钥 ARN。
在 AWS KMS API 中,用于标识 KMS 密钥的参数名为 KeyId 或其变体(例如 TargetKeyId 或 DestinationKeyId)。但是,这些参数的值不限于密钥 ID。一些参数可以使用任意有效的密钥标识符。有关每个参数值的信息,请参阅 AWS Key Management Service API 参考中的参数描述。
注意
使用 AWS KMS API 时,请谨慎使用密钥标识符。不同的 API 需要不同的密钥标识符。通常,请在您的任务中使用最完整实用的密钥标识符。
AWS KMS 支持以下密钥标识符。
- 密钥 ARN
-
密钥 ARN 是 KMS 密钥的 Amazon Resource Name (ARN)。它是 KMS 密钥唯一的完全限定标识符。密钥 ARN 包括 AWS 账户、区域和密钥 ID。有关查找 KMS 密钥的密钥 ARN 的帮助,请参阅 查找密钥 ID 和密钥 ARN。
密钥 ARN 的格式如下:
arn:<partition>:kms:<region>:<account-id>:key/<key-id>以下是单区域 KMS 密钥的示例密钥 ARN。
arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab多区域密钥的密钥 ARN 的
key-id元素以mrk-前缀开头。以下是多区域密钥的示例密钥 ARN。arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab
- 密钥 ID
-
密钥 ID 唯一地标识账户和区域中的 KMS 密钥。有关查找 KMS 密钥的密钥 ID 的帮助,请参阅 查找密钥 ID 和密钥 ARN。
以下是单区域 KMS 密钥的示例密钥 ID。
1234abcd-12ab-34cd-56ef-1234567890ab多区域密钥的密钥 ID 以
mrk-前缀开头。以下是多区域密钥的示例密钥 ID。mrk-1234abcd12ab34cd56ef1234567890ab - 别名 ARN
-
别名 ARN 是 AWS KMS 别名的 Amazon Resource Name (ARN)。它是别名及所表示 KMS 密钥的唯一的完全限定标识符。别名 ARN 包括 AWS 账户、区域和别名。
在任何给定时间,一个别名 ARN 标识一个特定的 KMS 密钥。但是,由于您可以更改与别名关联的 KMS 密钥,别名 ARN 在不同时间可以标识不同的 KMS 密钥。有关查找 KMS 密钥的别名 ARN 的帮助,请参阅 查找 KMS 密钥的别名和别名 ARN。
别名 ARN 的格式如下:
arn:<partition>:kms:<region>:<account-id>:alias/<alias-name>以下是虚构的
ExampleAlias的别名 ARN。arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias - 别名
-
别名是最多 256 个字符的字符串。它唯一地标识某个账户和区域内关联的一个 KMS 密钥。在 AWS KMS API 中,别名始终以
alias/开头。有关查找 KMS 密钥的别名的帮助,请参阅 查找 KMS 密钥的别名和别名 ARN。别名的格式如下:
alias/<alias-name>例如:
alias/ExampleAlias别名的
aws/前缀保留用于 AWS 托管式密钥。您无法使用此前缀创建别名。例如,Amazon Simple Storage Service (Amazon S3) 的 AWS 托管式密钥 的别名如下。alias/aws/s3