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

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

Amazon EC2 Auto Scaling 支持服务相关角色,这是一种新的 IAM 角色类型,让您能够以更安全、透明的方式将权限委托给 Amazon 服务。Amazon EC2 Auto Scaling 服务相关角色由 Amazon EC2 Auto Scaling 预定义,并包含服务代表您调用其他 Amazon 服务所需的权限。预定义的权限还包括对 Amazon 托管式密钥 的访问权限。但是,它们不包括对客户管理密钥的访问权限,因此您可以保持对这些密钥的完全控制。

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

注意

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

概览

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

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

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

    注意:密钥必须是对称的。Amazon EBS 不支持非对称客户托管密钥。

在创建加密的快照或指定加密卷的启动模板,或者默认启用加密时,您可以配置客户托管密钥。

配置密钥策略

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

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

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

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

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

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

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

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

示例 1:允许访问客户托管密钥的关键策略部分

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

{ "Sid": "Allow service-linked role use of the customer managed key", "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:允许跨账户访问客户托管密钥的关键策略部分

如果您在与自动扩缩组不同的账户中创建了客户管理型密钥,则必须组合使用授权和密钥策略以允许对该密钥的跨账户存取。

必须按以下顺序完成两个步骤:

  1. 首先,将以下两个策略语句添加到客户管理型密钥的密钥策略中。将示例 ARN 替换为另一个账户的 ARN,务必要将 111122223333 替换为您要在其中创建自动扩缩组的 Amazon Web Services 账户的实际账户 ID。这将允许您向指定账户中的 IAM 用户或角色授予使用下面的 CLI 命令为密钥创建授权的权限。但这本身并不会向任何 IAM 用户或角色授予对密钥的访问权限。

    { "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": "*" }
  2. 然后从您要在其中创建自动扩缩组的账户中,创建一个授权以将相关权限委托给相应的服务相关角色。该授权的 Grantee Principal 元素是相应的服务相关角色的 ARN。key-id 是密钥的 ARN。

    以下是一个示例 create-grant CLI 命令,它向账户 111122223333 中名为 AWSServiceRoleForAutoScaling 的服务相关角色授予在账户 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 示例允许账户 111122223333 中的 IAM 用户或角色为账户 444455556666 中的客户托管密钥创建授权。

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

    有关为不同 Amazon Web Services 账户中的 KMS 密钥创建授权的更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的 Amazon KMS 中的授权

    重要

    指定为被授权者委托人的服务相关角色名称必须是现有角色的名称。创建授权后,为确保该授权允许 Amazon EC2 Auto Scaling 使用指定的 KMS 密钥,请勿删除并重新创建服务相关角色。

在 Amazon KMS 控制台中编辑密钥策略

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

重要

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