本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 PCS 中使用加密 EBS 卷所必需的 KMS 密钥策略 AWS
AWS PCS 使用与服务相关的角色将权限委托给其他 AWS 服务人。 AWS PCS 服务相关角色是预定义的,包括 AWS PCS 代表您呼叫他人所需的权限。 AWS 服务 预定义的权限还包括对您的客户托管密钥的访问权限 AWS 托管式密钥 ,但不包括对您的客户托管密钥的访问权限。
本主题介绍在您为 Amazon EBS 加密指定客户托管密钥时,如何设置启动实例所需的密钥策略。
注意
AWS PCS 不需要额外的授权即可使用默认权限 AWS 托管式密钥 来保护您账户中的加密卷。
概览
当 AWS PCS 启动实例时,您可以使用以下 AWS KMS keys 方法进行 Amazon EBS 加密:
在创建加密快照或指定加密卷的启动模板时,或者选择默认启用加密时,您可以配置客户托管密钥。
配置密钥策略
您的 KMS 密钥必须具有密钥策略,允许 AWS PCS 启动使用客户托管密钥加密的 Amazon EBS 卷的实例。
使用本页上的示例配置密钥策略,让 AWS PCS 可以访问您的客户托管密钥。您可以在创建密钥时或以后修改客户托管密钥的密钥策略。
密钥策略必须包含以下声明:
-
一种声明,允许
Principal
元素中指定的 IAM 身份直接使用客户托管密钥。它包括对密钥执行 AWS KMSEncrypt
Decrypt
、ReEncrypt*
、GenerateDataKey*
、和DescribeKey
操作的权限。 -
一种语句,允许
Principal
元素中指定的 IAM 身份使用该CreateGrant
操作生成授权,这些授权将自己的一部分权限委托给与另一委托人 AWS KMS 或其他委托人集成的权限。 AWS 服务 这样,他们可以使用密钥代表您创建加密的资源。
在向密钥策略中添加新的政策声明时,请勿更改策略中的任何现有声明。
有关更多信息,请参阅:
-
命令参考中的 create-keyAWS CLI
-
《AWS CLI Command Reference》中的 put-key-policy。
-
AWS Key Management Service在《AWS Key Management Service 开发者指南》中
示例 1:允许访问客户托管密钥的关键策略部分
将以下政策声明添加到客户托管密钥的密钥策略中。将示例 ARN 替换为服务相关角色的 ARN。AWSServiceRoleForPCS
此示例策略授予 AWS PCS 服务相关角色 (AWSServiceRoleForPCS
) 使用客户托管密钥的权限。
{ "Sid": "Allow service-linked role use of the customer managed key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::
account-id
:role/aws-service-role/pcs.amazonaws.com/AWSServiceRoleForPCS" ] }, "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::
account-id
:role/aws-service-role/pcs.amazonaws.com/AWSServiceRoleForPCS" ] }, "Action": [ "kms:CreateGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } }
示例 2:允许跨账户访问客户托管密钥的关键策略部分
如果您在与 AWS PCS 集群不同的账户中创建客户托管密钥,则必须将授权与密钥策略结合使用,以允许跨账户访问该密钥。
授予对密钥的访问权限
-
将以下政策声明添加到客户托管密钥的密钥策略中。将示例 ARN 替换为其他账户的 ARN。
111122223333
替换为要在中 AWS 账户 创建 AWS PCS 集群的的实际账户 ID。这将允许您向指定账户中的 IAM 用户或角色授予使用下面的 CLI 命令为密钥创建授权的权限。默认情况下,用户无权访问密钥。{. "Sid": "Allow external account
111122223333
use of the customer managed key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333
:root" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }{ "Sid": "Allow attachment of persistent resources in external account
111122223333
", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333
:root" ] }, "Action": [ "kms:CreateGrant" ], "Resource": "*" } -
使用您要在其中创建 AWS PCS 集群的账户创建授权,将相关权限委托给 AWS PCS 服务相关角色。的值
grantee-principal
是服务相关角色的 ARN。的值key-id
是密钥的 ARN。以下示例 create-grant CLI 命令为账户
AWSServiceRoleForPCS
中指定的服务相关角色提供了在账户中使用客户托管密钥的111122223333
权限。444455556666
aws kms create-grant \ --region
us-west-2
\ --key-idarn:aws:kms:us-west-2:444455556666:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d
\ --grantee-principal arn:aws:iam::111122223333
:role/aws-service-role/pcs.amazonaws.com/AWSServiceRoleForPCS \ --operations "Encrypt" "Decrypt" "ReEncryptFrom" "ReEncryptTo" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "DescribeKey" "CreateGrant"注意
发出请求的用户必须拥有使用该
kms:CreateGrant
操作的权限。以下示例 IAM 策略允许账户中的 IAM 身份(用户或角色)
111122223333
为账户中的客户托管密钥创建授权444455556666
。有关为不同 AWS 账户中的 KMS 密钥创建授权的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的 AWS KMS中的授权。
重要
指定为被授权者委托人的服务相关角色名称必须是现有角色的名称。创建授权后,为确保该授权允许 AWS PCS 使用指定的 KMS 密钥,请勿删除和重新创建服务相关角色。
在 AWS KMS 控制台中编辑密钥策略
之前部分中的示例仅显示如何向密钥策略添加语句,这只是更改密钥策略的一种方法。更改密钥策略的最简单方法是使用 AWS KMS 控制台的默认密钥策略视图,并将 IAM 身份(用户或角色)设为相应密钥策略的关键用户之一。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的使用 AWS Management Console 默认视图。
警告
控制台的默认视图策略声明包括对客户托管密钥执行 AWS KMS Revoke
操作的权限。如果您撤销授予您账户中客户托管密钥 AWS 账户 访问权限的授权,则该用户将 AWS 账户 失去对加密数据和密钥的访问权限。