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

默认密钥策略

以编程方式创建 KMS 密钥时采用的默认密钥策略

当您通过 Amazon KMS API(包括通过使用 Amazon SDKAmazon Command Line Interface 或者 Amazon Tools for PowerShell)以编程方式创建 KMS 密钥时,您可以为新 KMS 密钥提供密钥策略。如果您未提供密钥策略,则 Amazon KMS 将为您创建一个。此默认密钥策略包含一个策略语句,此语句为拥有 KMS 密钥的 Amazon Web Services 账户(根用户)提供对 KMS 密钥的完全访问权限,并在账户中启用 IAM 策略以允许访问 KMS 密钥。有关此策略语句的更多信息,请参阅允许访问 Amazon Web Services 账户 并启用 IAM 策略

通过 Amazon Web Services Management Console 创建 KMS 密钥时采用的默认密钥策略

当您使用 Amazon Web Services Management Console 创建 KMS 密钥时,您可以选择 IAM 用户、IAM 角色和被授予对 KMS 密钥的访问权限的 Amazon Web Services 账户。您选择的用户、角色和账户将添加到控制台为您创建的默认密钥策略中。借助控制台,您可以使用默认视图查看或修改此密钥策略,也可以直接使用密钥策略文档。控制台创建的默认密钥策略允许以下权限,其中每项权限都会在相应部分中进行说明。

权限

允许访问 Amazon Web Services 账户 并启用 IAM 策略

此默认密钥策略为拥有 KMS 密钥的 Amazon Web Services 账户(根用户)提供对 KMS 密钥的完全访问权限,从而达到以下两个目的。

1. 降低 KMS 密钥变得不可管理的风险。

您无法删除 Amazon Web Services 账户 根用户,因此向此用户授予访问权限可降低 KMS 密钥变得不可管理的风险。请考虑以下情况:

  1. 密钥策略允许一个 IAM 用户 (Alice) 管理 KMS 密钥。此密钥策略未向根用户授予访问权限。

  2. 有人删除了 IAM 用户 Alice。

在此情况下,KMS 密钥现在无法管理,您必须联系 Amazon Web Services Support 才能重新获得对 KMS 密钥的访问权限。根用户无权访问 KMS 密钥,因为根用户仅在密钥策略显式允许它访问 KMS 密钥时才能访问。这与 Amazon 中的其他大多数资源不同,这些资源可向根用户隐式授予访问权限。

2. 允许 IAM 策略控制对 KMS 密钥的访问。

每个 KMS 密钥都必须有一个密钥策略。您还可以使用 IAM 策略控制对 KMS 密钥的访问,但前提是在密钥策略允许的情况下。如果密钥策略不允许,则尝试控制对 KMS 密钥的访问的 IAM 策略将无效。

要允许 IAM 策略控制对 KMS 密钥的访问,密钥策略必须包含一个策略语句,该语句将授予 Amazon Web Services 账户 对 KMS 密钥的完全访问权限,如下所示。有关更多信息,请参阅 管理对 KMS 密钥的访问

以下示例显示的是为示例 Amazon Web Services 账户 授予对 KMS 密钥的完全访问权限的策略语句。此策略语句允许账户使用 IAM 策略以及密钥策略,以控制对 KMS 密钥的访问。

此类策略语句是默认密钥策略的一部分。

{ "Sid": "Enable IAM policies", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }

允许密钥管理员管理 KMS 密钥

控制台创建的默认密钥策略允许您选择账户中的 IAM 用户和角色,并使其成为密钥管理员。此语句称为密钥管理员语句。密钥管理员有权管理 KMS 密钥,但无权在加密操作中使用 KMS 密钥。在原定设置视图或策略视图中创建 KMS 密钥时,您可以将 IAM 用户和角色添加到密钥管理员列表。

警告

由于密钥管理员有权更改密钥策略和创建授权,因此他们可以向自己授予未在此策略中指定的 Amazon KMS 权限。

有权管理标签和别名的委托人也可以控制对 KMS 密钥的访问。有关详细信息,请参阅Amazon KMS 中的 ABAC

以下示例在 Amazon KMS 控制台的原定设置视图中显示了密钥管理员语句。


          控制台默认密钥策略中的密钥管理员,默认视图

以下示例是 Amazon KMS 控制台的策略视图中的密钥管理员语句。此密钥管理员语句适用于单区域对称 KMS 密钥。

{ "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/KMSAdminUser", "arn:aws:iam::111122223333:role/KMSAdminRole" ]}, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }

单区域对称 KMS 密钥的原定设置密钥管理员语句允许以下权限。有关每个权限的详细信息,请参阅 Amazon KMS 权限

当您使用 Amazon KMS 控制台创建 KMS 密钥时,控制台会将您指定的用户和角色添加到密钥管理员语句中的 Principal 元素。

这些权限中有很多都包含通配符 (*),使用它可以允许以指定动词开头的所有权限。因此,在 Amazon KMS 添加新的 API 操作时,会自动允许密钥管理员使用它们。您不必更新密钥策略即可包含新操作。如果您希望将密钥管理员限制在一组固定的 API 操作中,则可以更改密钥策略

kms:Create*

允许 kms:CreateAliaskms:CreateGrant。(kms:CreateKey 权限仅在 IAM 策略中有效。)

kms:Describe*

允许 kms:DescribeKey。需要 kms:DescribeKey 权限才能查看 Amazon Web Services Management Console 中 KMS 密钥的密钥详细信息页面。

kms:Enable*

允许 kms:EnableKey。对于对称 KMS 密钥,它还允许 kms:EnableKeyRotation

kms:List*

允许 kms:ListGrantskms:ListKeyPolicieskms:ListResourceTags。(查看 Amazon Web Services Management Console 中的 KMS 密钥所需的 kms:ListAliaseskms:ListKeys 权限仅在 IAM 策略中有效。)

kms:Put*

允许 kms:PutKeyPolicy。此权限允许密钥管理员更改此 KMS 密钥的密钥策略。

kms:Update*

允许 kms:UpdateAliaskms:UpdateKeyDescription。对于多区域密钥,它允许此 KMS 密钥上的 kms:UpdatePrimaryRegion

kms:Revoke*

允许 kms:RevokeGrant,以此允许密钥管理员删除授权,即使他们不是授权中的停用主体

kms:Disable*

允许 kms:DisableKey。对于对称 KMS 密钥,它还允许 kms:DisableKeyRotation

kms:Get*

允许 kms:GetKeyPolicykms:GetKeyRotationStatus。对于具有导入密钥材料的 KMS 密钥,它允许 kms:GetParametersForImport。对于非对称 KMS 密钥,它允许 kms:GetPublicKey。需要 kms:GetKeyPolicy 权限才能查看 Amazon Web Services Management Console 中 KMS 密钥的密钥策略。

kms:Delete*

允许 kms:DeleteAlias。对于具有导入密钥材料的密钥,它允许 kms:DeleteImportedKeyMaterialkms:Delete* 权限不允许密钥管理员删除 KMS 密钥 (ScheduleKeyDeletion)。

kms:TagResource

允许 kms:TagResource,以此允许密钥管理员向 KMS 密钥添加标签。由于标签也可用于控制对 KMS 密钥的访问,因此管理员通过此权限可允许或拒绝对 KMS 密钥的访问。有关详细信息,请参阅Amazon KMS 中的 ABAC

kms:UntagResource

允许 kms:UntagResource,以此允许密钥管理员从 KMS 密钥删除标签。由于标签可用于控制对密钥的访问,因此管理员通过此权限可允许或拒绝对 KMS 密钥的访问。有关详细信息,请参阅Amazon KMS 中的 ABAC

kms:ScheduleKeyDeletion

允许 kms:ScheduleKeyDeletion,以此允许密钥管理员删除此 KMS 密钥。要删除此权限,请清除允许密钥管理员删除此密钥选项。

kms:CancelKeyDeletion

允许 kms:CancelKeyDeletion,以此允许密钥管理员取消此 KMS 密钥的删除。要删除此权限,请清除允许密钥管理员删除此密钥选项。

 

在您创建特殊用途密钥时,Amazon KMS 将以下权限添加到原定设置密钥管理员语句中。

kms:ImportKeyMaterial

kms:ImportKeyMaterial 权限允许密钥管理员将密钥材料导入 KMS 密钥。仅当创建不含密钥材料的 KMS 密钥时,此权限才包含在密钥策略中。

kms:ReplicateKey

kms:ReplicateKey 权限允许密钥管理员在不同的 Amazon 区域中创建多区域主密钥的副本。仅当您创建多区域主键或副本键时,此权限才会包含在密钥策略中。

kms:UpdatePrimaryRegion

kms:UpdatePrimaryRegion 权限允许密钥管理员将多区域副本密钥更改为多区域主密钥。仅当您创建多区域主键或副本键时,此权限才会包含在密钥策略中。

允许密钥用户使用 KMS 密钥

控制台为对称 KMS 密钥创建的默认密钥策略允许您选择账户和外部 Amazon Web Services 账户 中的 IAM 用户和角色,并使其成为密钥用户

控制台将两个策略语句添加到密钥用户的密钥策略中。

创建 KMS 密钥时,您可以将 IAM 用户、IAM 角色和其他 Amazon Web Services 账户 添加到密钥用户列表。您也可以使用控制台的默认密钥策略视图来编辑该列表,如下图所示。默认密钥策略视图可从密钥详细信息页面获取。有关允许其他 Amazon Web Services 账户 中的用户使用 KMS 密钥的更多信息,请参阅 允许其他账户中的用户使用 KMS 密钥


          控制台默认密钥策略中的密钥用户,默认视图

单区域对称的原定设置密钥用户语句允许以下权限。有关每个权限的详细信息,请参阅 Amazon KMS 权限

当您使用 Amazon KMS 控制台创建 KMS 密钥时,控制台会将您指定的用户和角色添加到各个密钥用户语句中的 Principal 元素。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/ExampleUser", "arn:aws:iam::111122223333:role/ExampleRole", "arn:aws:iam::444455556666:root" ]}, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/ExampleUser", "arn:aws:iam::111122223333:role/ExampleRole", "arn:aws:iam::444455556666:root" ]}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}} }

允许密钥用户使用 KMS 密钥进行加密操作

密钥用户有权在 KMS 密钥支持的所有加密操作中直接使用 KMS 密钥。密钥用户还可以使用 DescribeKey 操作,在 Amazon KMS 控制台中或通过使用 Amazon KMS API 操作获得有关 KMS 密钥的详细信息。

默认情况下,Amazon KMS 控制台会将诸如以下示例的密钥用户语句添加到默认密钥策略中。由于支持的 API 操作不同,策略语句中针对对称 KMS 密钥、用于公有密钥加密的非对称 KMS 密钥以及用于签名和验证的非对称 KMS 密钥的操作略有不同。

对称 KMS 密钥

控制台将以下语句添加到对称 KMS 密钥的密钥策略中。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/ExampleUser"}, "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:Encrypt", "kms:GenerateDataKey*", "kms:ReEncrypt*" ], "Resource": "*" }
用于公有密钥加密的非对称 KMS 密钥

对于密钥用法为 Encrypt and decrypt(加密和解密)的非对称 KMS 密钥,控制台将以下语句添加到其密钥策略中。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:DescribeKey", "kms:GetPublicKey" ], "Resource": "*" }
用于签名和验证的非对称 KMS 密钥

对于密钥用法为 Sign and verify(签名和验证)的非对称 KMS 密钥,控制台将以下语句添加到其密钥策略中。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/ExampleUser"}, "Action": [ "kms:DescribeKey", "kms:GetPublicKey", "kms:Sign", "kms:Verify" ], "Resource": "*" }

这些语句中的操作赋予密钥用户以下权限。

kms:Encrypt

允许密钥用户使用此 KMS 密钥加密数据。

kms:Decrypt

允许密钥用户使用此 KMS 密钥解密数据。

kms:DescribeKey

允许密钥用户获取有关此 KMS 密钥的详细信息,包括其标识符、创建日期和密钥状态。还允许密钥用户在 Amazon KMS 控制台中显示有关 KMS 密钥的详细信息。

kms:GenerateDataKey*

允许密钥用户请求对称数据密钥或非对称数据密钥对,以执行客户端加密操作。控制台采用 * 通配符表示以下 API 操作的权限:GenerateDataKeyGenerateDataKeyWithoutPlaintextGenerateDataKeyPairGenerateDataKeyPairWithoutPlaintext。这些权限仅对加密数据密钥的对称 KMS 密钥有效。

kms:GetPublicKey

允许密钥用户下载非对称 KMS 密钥的公有密钥。与您共享此公有密钥的各方可以在 Amazon KMS 外部加密数据。但是,这些密文只能通过调用 Amazon KMS 中的 Decrypt 操作进行解密。

kms:ReEncrypt*

允许密钥用户重新加密最初使用此 KMS 密钥加密的数据,或使用此 KMS 密钥重新加密之前已加密的数据。ReEncrypt 操作需要访问源 KMS 密钥和目标 KMS 密钥。您可以允许对源 KMS 密钥仅具备 kms:ReEncryptFrom 权限,对目标 KMS 密钥仅具备 kms:ReEncryptTo 权限。但是,为简单起见,控制台允许对两个 KMS 密钥具备 kms:ReEncrypt* 权限(采用 * 通配符)。

kms:Sign

允许密钥用户使用此 KMS 密钥签署消息。

kms:Verify

允许密钥用户使用此 KMS 密钥验证签名。

允许密钥用户将 KMS 密钥与 Amazon 服务一起使用

控制台中的默认密钥策略还授予密钥用户允许与 Amazon KMS 集成的 Amazon 服务使用 KMS 密钥的权限,特别是使用授权的服务。

密钥用户可以向这些服务隐式授予以特定的受限方式使用 KMS 密钥的权限。这种隐式委派通过授权完成。这些授权允许集成的 Amazon 服务使用 KMS 密钥保护账户中的资源。

{ "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/ExampleUser"}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}} }

例如,密钥用户可以通过以下方式对 KMS 密钥使用这些权限。

  • 将此 KMS 密钥与 Amazon Elastic Block Store (Amazon EBS) 和 Amazon Elastic Compute Cloud (Amazon EC2) 结合使用,将加密的 EBS 卷附加到 EC2 实例。密钥用户向 Amazon EC2 隐式授予使用 KMS 密钥将加密卷挂载到实例的权限。有关更多信息,请参阅 Amazon Elastic Block Store (Amazon EBS) 如何使用 Amazon KMS

  • 将此 KMS 密钥用于 Amazon Redshift 以启动加密集群。密钥用户向 Amazon Redshift 隐式授予使用 KMS 密钥启动加密集群并创建加密快照的权限。有关更多信息,请参阅 Amazon Redshift 如何使用 Amazon KMS

  • 将此 KMS 密钥用于其他与 Amazon KMS 集成的 Amazon 服务,尤其是使用授权的服务,以为这些服务创建、管理或使用加密资源。

kms:GrantIsForAWSResource 条件键允许密钥用户创建和管理授权,但仅当被授权者为使用授权的 Amazon 服务才可如此。该权限允许密钥用户使用所有 使用授权的集成服务。不过,您可以创建自定义密钥策略,以允许特定 Amazon 服务代表密钥用户使用 KMS 密钥。有关更多信息,请参阅 kms:ViaService 条件键。

密钥用户必须具备这些授权权限,才能将其 KMS 密钥与集成服务一起使用,但这些权限还不够。密钥用户还必须具备使用集成服务的权限。有关授权用户访问与 Amazon 集成的 Amazon KMS 服务的详细信息,请查阅有关集成服务的文档。