本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
默认密钥策略
创建KMS密钥时,您可以为新密钥指定KMS密钥策略。如果您不提供一个,请为您 AWS KMS 创建一个。 AWS KMS 使用的默认密钥策略会有所不同,具体取决于您是在 AWS KMS 控制台中创建密钥还是使用密钥 AWS KMS API。
以编程方式创建密钥时的默认密KMS钥策略
当您使用 AWS KMS
API(包括使用AWS SDKs
使用创建密钥时的默认密KMS钥策略 AWS Management Console
使用创建KMS密钥时 AWS Management Console,密钥策略以允许访问 AWS 账户 并启用IAM策略的策略声明开头。然后,控制台会添加密钥管理员声明、密钥用户语句以及(对于大多数密钥类型)允许委托人将该KMS密钥用于其他 AWS 服务的声明。您可以使用 AWS KMS 控制台的功能来指定IAM用户、IAMroles、 AWS 账户 谁是密钥管理员以及谁是关键用户(或两者兼而有之)。
权限
允许访问 AWS 账户 并启用IAM策略
以下默认密钥策略语句至关重要。
-
它为 AWS 账户 拥有密钥的人提供了对KMS密KMS钥的完全访问权限。
与其他 AWS 资源策略不同, AWS KMS 密钥策略不会自动向账户或其任何身份授予权限。若要授予账户管理员权限,密钥策略必须包含提供此权限的显式语句,如下所示。
-
除了KMS密钥IAM策略外,它还允许账户使用策略来允许访问密钥。
如果没有此权限,IAM则允许访问密钥的IAM策略将无效,尽管拒绝访问密钥的策略仍然有效。
-
此权限通过向账户管理员(包括账户根用户)授予无法删除的访问控制权限,来降低密钥变得无法管理的风险。
以下密钥策略声明是以编程方式创建的密KMS钥的完整默认密钥策略。这是 AWS KMS 控制台中创建的密钥的默认KMS密钥策略中的第一条策略声明。
{ "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
111122223333
:root" }, "Action": "kms:*", "Resource": "*" }
- 允许IAM策略允许访问KMS密钥。
-
上面显示的密钥策略声明为拥有密钥的人提供了使用IAM策略和密钥策略的权限,以允许对密KMS钥执行所有操作 (
kms:*
)。 AWS 账户本关键政策声明中的委托人是账户本金,用以下格式ARN的账户本金表示:
arn:aws:iam::
。账户委托人代表 AWS 账户及其管理员。account-id
:root当密钥政策声明中的委托人是账户委托人时,该政策声明不会授予任何IAM委托人使用该KMS密钥的权限。相反,它允许账户使用IAM策略来委托策略声明中指定的权限。此默认密钥策略声明允许账户使用IAM策略委派对KMS密钥执行所有操作 (
kms:*
) 的权限。 - 降低KMS密钥变得难以管理的风险。
-
与其他 AWS 资源策略不同, AWS KMS 密钥策略不会自动向账户或其任何委托人授予权限。若要授予任何主体(包括账户主体)权限,您必须使用明确提供权限的密钥策略语句。您无需向账户委托人或任何委托人提供KMS密钥访问权限。但是,授予账户主体访问权限有助于防止无法管理密钥。
例如,假设您创建的密钥策略仅允许一个用户访问该KMS密钥。如果您随后删除该用户,则密钥将变得无法管理,您必须联系 Su AWS pp
ort 才能重新获得对KMS密钥的访问权限。 上面显示的密钥策略声明向账户委托人授予控制密钥的权限,账户委托人代表 AWS 账户 及其管理员,包括账户根用户。除非您删除 AWS 账户,否则账户根用户是唯一无法删除的主体。IAM最佳做法不鼓励以账户根用户名义行事,紧急情况除外。但是,如果您删除所有其他有权访问KMS密钥的用户和角色,则可能需要充当账户 root 用户。
允许密钥管理员管理密KMS钥
控制台创建的默认密钥策略允许您选择账户中的IAM用户和角色,并使他们成为密钥管理员。此语句称为密钥管理员语句。密钥管理员有权管理KMS密钥,但无权在加密操作中使用KMS密钥。在默认视图或策略视图中创建密钥时,可以将IAM用户和角色添加到KMS密钥管理员列表中。
警告
由于密钥管理员有权更改密钥策略和创建授权,因此他们可以向自己和其他人 AWS KMS 授予此策略中未指定的权限。
有权管理标签和别名的委托人也可以控制对密钥的KMS访问权限。有关详细信息,请参阅AWS KMS 中的 ABAC。
注意
IAM最佳做法不鼓励使用具有长期凭证的IAM用户。尽可能使用提供临时证书的IAM角色。有关详细信息,请参阅《IAM用户指南》IAM中的安全最佳实践。
以下示例在 AWS KMS 控制台的原定设置视图中显示了密钥管理员语句。
以下示例是 AWS KMS 控制台的策略视图中的密钥管理员语句。此密钥管理员声明适用于单区域对称加密密钥KMS。
{ "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS":"arn:aws:iam::
111122223333
:role/ExampleAdminRole
"}, "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", "kms:RotateKeyOnDemand" ], "Resource": "*" }
最常用的密钥(单区域对称加密KMS密钥)的默认KMS密钥管理员语句允许以下权限。有关每个权限的详细信息,请参阅 AWS KMS 权限。
当您使用 AWS KMS 控制台创建KMS密钥时,控制台会将您指定的用户和角色添加到密钥管理员语句中的Principal
元素中。
这些权限中有很多都包含通配符 (*
),使用它可以允许以指定动词开头的所有权限。因此,在 AWS KMS 添加新API操作时,自动允许密钥管理员使用它们。您不必更新密钥策略即可包含新操作。如果您希望将密钥管理员限制为一组固定的API操作,则可以更改密钥策略。
kms:Create*
-
允许 kms:CreateAlias 和 kms:CreateGrant。(该
kms:CreateKey
权限仅在IAM策略中有效。) kms:Describe*
-
允许 kms:DescribeKey。需要该
kms:DescribeKey
权限才能查看中密钥的KMS密钥详细信息页面 AWS Management Console。 kms:Enable*
-
允许 kms:EnableKey。对于对称加密KMS密钥,它还允许kms:EnableKeyRotation。
kms:List*
-
允许 kms:ListGrants、
kms:ListKeyPolicies
和 kms:ListResourceTags。(查看中的KMS密钥所需的kms:ListAliases
和kms:ListKeys
权限仅在 AWS Management Console IAM策略中有效。) kms:Put*
-
允许
kms:PutKeyPolicy
。此权限允许密钥管理员更改此密钥的KMS密钥策略。 kms:Update*
-
允许 kms:UpdateAlias 和
kms:UpdateKeyDescription
。对于多区域密钥,它允许使用kms:UpdatePrimaryRegion此KMS密钥。 kms:Revoke*
-
允许 kms:RevokeGrant,其允许密钥管理员删除授权,即使管理员不是授权中的停用主体。
kms:Disable*
-
允许 kms:DisableKey。对于对称加密KMS密钥,它还允许kms:DisableKeyRotation。
kms:Get*
-
允许 kms:GetKeyPolicy 和 kms:GetKeyRotationStatus。对于带有导入KMS密钥材料的密钥,它允许
kms:GetParametersForImport
。对于非对称KMS密钥,它允许kms:GetPublicKey
。需要该kms:GetKeyPolicy
权限才能在中查看密钥的KMS密钥策略 AWS Management Console。 kms:Delete*
-
允许 kms:DeleteAlias。对于具有导入密钥材料的密钥,它允许 kms:DeleteImportedKeyMaterial。该
kms:Delete*
权限不允许密钥管理员删除KMS密钥 (ScheduleKeyDeletion
)。 kms:TagResource
-
允许 kms:TagResource,允许密钥管理员向KMS密钥添加标签。由于标签还可用于控制对KMS密钥的访问,因此管理员可以允许或拒绝对KMS密钥的访问。有关详细信息,请参阅AWS KMS 中的 ABAC。
kms:UntagResource
-
允许 kms:UntagResource,允许密钥管理员从密KMS钥中删除标签。由于标签可用于控制对密钥的访问,因此管理员可以允许或拒绝对KMS密钥的访问。有关详细信息,请参阅AWS KMS 中的 ABAC。
kms:ScheduleKeyDeletion
-
允许
kms:ScheduleKeyDeletion
,允许密钥管理员删除此KMS密钥。要删除此权限,请清除 Allow key administrators to delete this key(允许密钥管理员删除此密钥)选项。 kms:CancelKeyDeletion
-
允许
kms:CancelKeyDeletion
,允许密钥管理员取消对此KMS密钥的删除。要删除此权限,请清除 Allow key administrators to delete this key(允许密钥管理员删除此密钥)选项。 kms:RotateKeyOnDemand
-
允许
kms:RotateKeyOnDemand
,允许密钥管理员按需轮换此密钥中的KMS密钥材料。
AWS KMS 在创建特殊用途密钥时,将以下权限添加到默认密钥管理员语句中。
kms:ImportKeyMaterial
-
该
kms:ImportKeyMaterial
权限允许密钥管理员将密钥材料导入到KMS密钥中。只有当您创建不含密钥材料的密钥时,此权限才包含在密钥策略中。KMS kms:ReplicateKey
-
该
kms:ReplicateKey
权限允许密钥管理员在不同的 AWS 区域中创建多区域主密钥的副本。仅当您创建多区域主键或副本键时,此权限才会包含在密钥策略中。 kms:UpdatePrimaryRegion
-
kms:UpdatePrimaryRegion
权限允许密钥管理员将多区域副本密钥更改为多区域主键。仅当您创建多区域主键或副本键时,此权限才会包含在密钥策略中。
允许密钥用户使用密KMS钥
控制台为KMS密钥创建的默认密钥策略允许您选择账户中的IAM用户和IAM角色以及外部用户和角色 AWS 账户,并使其成为密钥用户。
控制台将两个策略语句添加到密钥用户的密钥策略中。
-
将KMS密钥用于 AWS 服务 — 第二项政策声明允许密钥用户允许与其集成的 AWS 服务代表他们使用KMS密钥 AWS KMS 来保护资源,例如 Amazon S3 存储桶和 Amazon DynamoDB 表。
创建密钥时,您可以将IAM用户、IAM角色和其他 AWS 账户 人添加到密钥用户列表中KMS。您也可以使用控制台的默认密钥策略视图来编辑该列表,如下图所示。默认密钥策略视图可从密钥详细信息页面获取。有关允许其他 AWS 账户 用户使用KMS密钥的更多信息,请参阅允许其他账户中的用户使用 KMS 密钥。
注意
IAM最佳做法不鼓励使用具有长期凭证的IAM用户。尽可能使用提供临时证书的IAM角色。有关详细信息,请参阅《IAM用户指南》IAM中的安全最佳实践。
单区域对称的原定设置密钥用户语句允许以下权限。有关每个权限的详细信息,请参阅 AWS KMS 权限。
当您使用 AWS KMS 控制台创建KMS密钥时,控制台会将您指定的用户和角色添加到每个密钥用户语句中的Principal
元素中。
{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": [ "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
:role/ExampleRole
", "arn:aws:iam::444455556666
:root" ]}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}} }
允许密钥用户使用密KMS钥进行加密操作
密钥用户有权在KMS密钥支持的所有加密操作中直接使用该KMS密钥。他们还可以使用该DescribeKey操作在 AWS KMS 控制台中或通过操作来获取有关KMS密钥的 AWS KMS API详细信息。
默认情况下, AWS KMS 控制台会将密钥用户语句添加到默认密钥策略中,如下例所示。由于它们支持不同的API操作,因此对称加密密钥、KMS密钥、用于公钥加密的非对称HMACKMSKMS密钥以及用于签名和验证的非对称KMS密钥的策略声明中的操作略有不同。
- 对称加密密钥 KMS
-
控制台将以下语句添加到对称加密密钥的KMS密钥策略中。
{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/
ExampleKeyUserRole
"}, "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:Encrypt", "kms:GenerateDataKey*", "kms:ReEncrypt*" ], "Resource": "*" } - HMACKMS钥匙
-
控制台将以下语句添加到密钥的HMACKMS密钥策略中。
{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/
ExampleKeyUserRole
"}, "Action": [ "kms:DescribeKey", "kms:GenerateMac", "kms:VerifyMac" ], "Resource": "*" } - 用于公KMS钥加密的非对称密钥
-
控制台将以下语句添加到非对称密钥的密钥策略中,KMS密钥用法为 Encry pt 和 dec rypt。
{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/
ExampleKeyUserRole
" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:DescribeKey", "kms:GetPublicKey" ], "Resource": "*" } - 用于签名和验证的非对称KMS密钥
-
控制台将以下语句添加到非对称密钥的密钥策略中,KMS密钥用法为 S ign and verify。
{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/
ExampleKeyUserRole
"}, "Action": [ "kms:DescribeKey", "kms:GetPublicKey", "kms:Sign", "kms:Verify" ], "Resource": "*" } - 用于派生共享KMS密钥的非对称密钥
-
控制台将以下语句添加到非对称密钥的密钥策略中,KMS密钥用法为密钥协议。
{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/
ExampleKeyUserRole
"}, "Action": [ "kms:DescribeKey", "kms:GetPublicKey", "kms:DeriveSharedSecret" ], "Resource": "*" }
这些语句中的操作赋予密钥用户以下权限。
kms:Encrypt
-
允许密钥用户使用此KMS密钥加密数据。
kms:Decrypt
-
允许密钥用户使用此KMS密钥解密数据。
kms:DeriveSharedSecret
-
允许密钥用户使用此密钥派生共享密KMS钥。
kms:DescribeKey
-
允许密钥用户获取有关此KMS密钥的详细信息,包括其标识符、创建日期和密钥状态。它还允许密钥用户在 AWS KMS 控制台中显示有关KMS密钥的详细信息。
kms:GenerateDataKey*
-
允许密钥用户请求对称数据密钥或非对称数据密钥对,以执行客户端加密操作。控制台使用* 通配符表示对以下API操作的权限:GenerateDataKey、GenerateDataKeyWithoutPlaintextGenerateDataKeyPair、和GenerateDataKeyPairWithoutPlaintext。这些权限仅对加密数据KMS密钥的对称密钥有效。
- kms: GenerateMac
-
允许密钥用户使用HMACKMS密钥生成HMAC标签。
- kms: GetPublicKey
-
允许密钥用户下载非对称密钥的公KMS钥。与您共享此公钥的各方可以对外部的数据进行加密 AWS KMS。但是,这些密文只能通过调用 AWS KMS中的 Decrypt 操作进行解密。
- kms: ReEncrypt *
-
允许密钥用户重新加密最初使用此KMS密钥加密的数据,或使用此KMS密钥重新加密以前加密的数据。该ReEncrypt操作需要同时访问源密钥和目标KMS密钥。为此,您可以允许对源KMS密钥的
kms:ReEncryptFrom
kms:ReEncryptTo
权限和对目标密KMS钥的权限。但是,为简单起见,控制台允许kms:ReEncrypt*
(使用*
通配符)使用两个按KMS键。 - kms:Sign
-
允许密钥用户使用此KMS密钥签署消息。
- kms:Verify
-
允许密钥用户使用此KMS密钥验证签名。
- kms: VerifyMac
-
允许密钥用户使用HMACKMS密钥验证HMAC标签。
允许密钥用户在 AWS 服务中使用KMS密钥
控制台中的默认密钥策略还为密钥用户提供了在使用授权的 AWS 服务中保护其数据所需的授予权限。 AWS 服务通常使用授权来获得使用KMS密钥的特定和有限权限。
此密钥策略声明允许密钥用户创建、查看和撤消对KMS密钥的授权,但前提是授权操作请求来自与 AWS KMS集成的AWS 服务
密钥用户需要这些授予权限才能将其KMS密钥用于集成服务,但这些权限还不够。密钥用户还必须具备使用集成服务的权限。有关向用户提供与集成的 AWS 服务的访问权限的详细信息 AWS KMS,请参阅集成服务的文档。
{ "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/
ExampleKeyUserRole
"}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}} }
例如,密钥用户可以通过以下方式对KMS密钥使用这些权限。
-
将此KMS密钥用于亚马逊弹性区块存储 (AmazonEBS) 和亚马逊弹性计算云 (AmazonEC2),将加密EBS卷附加到EC2实例。密钥用户隐式授予 Amazon 使用KMS密钥将加密卷附加到实例的EC2权限。有关更多信息,请参阅 亚马逊 Elastic Block Store(亚马逊EBS)的使用方式 AWS KMS。
-
在 Amazon Redshift 中使用此KMS密钥启动加密集群。密钥用户隐式授予 Amazon Redshift 使用KMS该密钥启动加密集群和创建加密快照的权限。有关更多信息,请参阅 亚马逊 Redshift 的使用方式 AWS KMS。
-
将此KMS密钥与与之集成的其他AWS 服务一起使用 AWS KMS,这些服务使用授权来创建、管理加密资源或使用这些服务的加密资源。
默认密钥策略允许密钥用户向所有使用授权的集成服务委托授权权限。但是,您可以创建自定义密钥策略,将权限限制为指定 AWS 服务。有关更多信息,请参阅 kms: ViaService 条件键。