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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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

Amazon EC2 Auto Scaling 支持服务相关角色,这是一种新型的 IAM 角色,它为您提供了一种更安全、透明的方式来向 Amazon Web Services 委派权限。Amazon EC2 Auto Scaling 服务相关角色由 Amazon EC2 Auto Scaling 预定义,包括该服务代表您调用其他 Amazon Web Services 所需的一切权限。预定义权限还包括访问Amazon托管客户主密钥 (CMK)。但是,它们不包括对客户管理的 CMK 的访问,因此您可以保持对这些密钥的完全控制。

本主题介绍当您为 Amazon EBS 加密指定客户管理的 CMK 时,如何设置启动 Auto Scaling 实例所需的密钥策略。

注意

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

Overview

以下Amazon KMS密钥可用于 Amazon EC2 Auto Scaling 启动实例时,Amazon EC2 Auto Scaling 可用于 Amazon EBS 加密:

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

  • 客户托管 CMK— 您创建、拥有和管理的自定义加密密密钥。有关更多信息,请参阅 。创建密钥中的Amazon Key Management Service开发人员指南.

    注意:密钥必须是对称的。Amazon EBS 不支持非对称 CMK。

在创建加密的快照或指定加密卷的启动模板或者默认启用加密时,您可以指定 KMS 密钥。

配置密钥策略

您的 KMS 密钥必须具有密钥策略,允许 Amazon EC2 Auto Scaling 启动具有 Amazon EBS 卷使用客户管理的 CMK 加密的实例。

使用此页面上的示例配置密钥策略来向 Amazon EC2 Auto Scaling 授予对您的客户托管 CMK 的访问权限。您可以在创建 CMK 时或稍后修改密钥策略。

您必须向 CMK 的密钥策略中添加至少两个策略语句,以便此策略可与 Amazon EC2 Auto Scaling 一起使用。

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

  • 第二个语句允许在Principal元素使用授权将其自己权限的子集委派给 Amazon Web Services,这些权限与集成的Amazon KMS或其他委托人。这样,他们可以使用 CMK 代表您创建加密的资源。

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

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

有关更多信息,请参阅以下资源:

示例 1:允许访问 CMK 的关键策略部分

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

{ "Sid": "Allow service-linked role use of the CMK", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws: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:iam::123456789012:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling" ] }, "Action": [ "kms:CreateGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } }

示例 2:允许跨账户访问 CMK 的关键策略部分

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

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

{ "Sid": "Allow external account 111122223333 use of the CMK", "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": "*" }

然后,从外部账户,创建一个授权以将相关权限委派给相应的服务相关角色。该授权的 Grantee Principal 元素是相应的服务相关角色的 ARN。key-id 是 CMK 的 ARN。以下是示例创建赠款CLI 命令,该命令赋予名为的服务相关角色。用于自动扩展的 Amazon 服务在帐户中111122223333在账户中使用 CMK 的权限444455556666.

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

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

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCreationOfGrantForTheCMKinExternalAccount444455556666", "Effect": "Allow", "Action": "kms:CreateGrant", "Resource": "arn:aws:kms:us-west-2:444455556666:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d" } ] }

授予这些权限后,一切都应按预期工作。有关更多信息,请参阅此论坛博客

在Amazon KMS控制台

前面的部分中的示例仅显示如何向密钥策略添加语句,这只是更改密钥策略的一种方法。更改密钥策略的最简单方法是使用Amazon KMS控制台的密钥策略默认视图,并使 IAM 实体(用户或角色)成为关键用户了解相应的关键策略。有关更多信息,请参阅 。使用Amazon管理控制台默认视图中的Amazon Key Management Service开发人员指南.

重要

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