与加密卷结合使用时必需的 CMK 密钥策略 - Amazon EC2 Auto Scaling
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

与加密卷结合使用时必需的 CMK 密钥策略

在创建加密的 Amazon EBS 快照或指定加密卷的启动模板,或者默认启用加密时,您可以选择以下 AWS Key Management Service 客户主密钥 (CMK) 之一来加密您的数据:

  • AWS 托管 CMK — 您的帐户中 Amazon EBS 创建、拥有和管理的加密密钥。这是新账户的默认加密密钥。AWS 托管 CMK 用于加密,除非您指定客户托管 CMK。

  • 客户托管 CMK — 您创建、拥有和管理的自定义加密密钥。有关更多信息,请参阅 AWS Key Management Service Developer Guide 中的创建密钥

    注意:Amazon EBS 不支持非对称 CMK。

Amazon EC2 Auto Scaling 无需额外授权即可使用默认的 AWS 托管 CMK 来保护您 AWS 账户中的加密卷。

如果您指定客户托管 CMK 以实现 Amazon EBS 加密,则必须授予对 CMK 的相应服务相关角色访问权限,以便 Amazon EC2 Auto Scaling 可以代表您启动实例。为此,您必须在创建 CMK 时或稍后修改 CMK 的密钥策略。

配置密钥策略

使用此页面上的示例配置密钥策略来向 Amazon EC2 Auto Scaling 提供访问客户托管 CMK 的权限。您必须向 CMK 的密钥策略中添加至少两个策略语句,以便此策略可用于 Amazon EC2 Auto Scaling。

  • 第一条语句允许在 Principal 元素中指定的 IAM 身份直接使用 CMK。它包括对 CMK 执行 AWS KMS EncryptDecryptReEncrypt*GenerateDataKey*DescribeKey 操作的权限。

  • 第二条语句允许在 Principal 元素中指定的 IAM 身份使用授权将其自己权限的子集委派给与 AWS KMS 集成的 AWS 服务或其他委托人。这样,他们可以使用 CMK 代表您创建加密的资源。

当您向 CMK 策略添加新的策略语句时,不要更改策略中任何已存在的语句。

对于以下每个示例,必须替换的参数(如密钥 ID 或服务相关角色的名称)显示为斜体可替换文本。在大多数情况下,您可以使用 Amazon EC2 Auto Scaling 服务相关角色的名称替换此服务相关角色的名称。但是,当使用启动配置启动 Spot 实例时,请使用名为 AWSServiceRoleForEC2Spot 的角色。

请参阅以下资源:

在控制台中编辑密钥策略

以下部分中的示例仅显示如何向密钥策略添加语句,这只是更改密钥策略的一种方法。更改密钥策略的最简单方法是使用 IAM 控制台的默认密钥策略视图,并使 IAM 实体(用户或角色)成为适当密钥策略的关键用户 之一。有关更多信息,请参阅 AWS Key Management Service Developer Guide 中的使用 AWS 管理控制台默认视图

重要

请务必谨慎。控制台的默认视图策略语句包括对 CMK 执行 AWS KMS Revoke 操作的权限。如果您授予 AWS 账户访问您账户中的 CMK 的权限,而您意外撤销了授予其此权限的授权,则外部用户将无法再访问其加密的数据或用于加密其数据的密钥。

示例:允许访问 CMK 的 CMK 密钥策略部分

将以下两个策略语句添加到客户托管 CMK 的密钥策略中,同时将示例 ARN 替换为允许访问 CMK 的相应服务相关角色的 ARN。在本示例中,策略部分授予名为 AWSServiceRoleForAutoScaling 的服务相关角色使用客户托管 CMK 的权限。

{ "Sid": "Allow service-linked role use of the CMK", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws-cn:iam::123456789012:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }
{ "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws-cn:iam::123456789012:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling" ] }, "Action": [ "kms:CreateGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } }

示例:允许跨账户访问 CMK 的 CMK 密钥策略部分

如果您的客户托管 CMK 与 Auto Scaling 组位于不同的账户中,您必须组合使用授权和密钥策略以允许访问 CMK。有关更多信息,请参阅 AWS Key Management Service Developer Guide 中的使用授权

首先,将以下两个策略语句添加到 CMK 的密钥策略中,同时将示例 ARN 替换为外部账户的 ARN 并指定可在其中使用密钥的账户。这允许您使用 IAM 策略,向指定账户中的 IAM 用户或角色授予权限,以使用下面的 CLI 命令为 CMK 创建授权。授予 AWS 账户对 CMK 的完全访问权限,本身并不会向任何 IAM 用户或角色授予对 CMK 的访问权限。

{ "Sid": "Allow external account 111122223333 use of the CMK", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws-cn: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-cn:iam::111122223333:root" ] }, "Action": [ "kms:CreateGrant" ], "Resource": "*" }

然后,从外部账户,创建一个授权以将相关权限委派给相应的服务相关角色。该授权的 Grantee Principal 元素是相应的服务相关角色的 ARN。key-id 是 CMK 的 ARN。以下是一个示例 create-a-grant CLI 命令,它向 111122223333 账户中名为 AWSServiceRoleForAutoScaling 的服务相关角色授予在账户 444455556666 中使用 CMK 的权限。

aws kms create-grant \ --region us-west-2 \ --key-id arn:aws-cn:kms:us-west-2:444455556666:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d \ --grantee-principal arn:aws-cn:iam::111122223333:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling \ --operations "Encrypt" "Decrypt" "ReEncryptFrom" "ReEncryptTo" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "DescribeKey" "CreateGrant"

要使此命令成功,发出请求的用户必须具有执行 CreateGrant 操作的权限。以下示例 IAM 策略允许账户 111122223333 中的 IAM 用户或角色在账户 444455556666 中为 CMK 创建授权。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow creation of grant for the CMK in external account 444455556666", "Effect": "Allow", "Action": "kms:CreateGrant", "Resource": "arn:aws-cn:kms:us-west-2:444455556666:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d" } ] }

如果您在配置启动具有加密卷的实例所需的客户托管 CMK 的跨账户访问时遇到任何问题,请参阅故障排除部分

有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的 Amazon EBS EncryptionAWS Key Management Service Developer Guide