我无法使用 Amazon EC2 Auto Scaling 启动带加密 AMI 或加密卷的 EC2 实例

上次更新时间:2021 年 3 月 31 日

Amazon EC2 Auto Scaling 无法启动使用加密 AMI 或加密卷的实例。创建 Amazon EC2 Auto Scaling 时所用的 AWS Identity and Access Management (IAM) 身份(用户、角色)拥有管理员权限。

简短描述

Amazon EC2 Auto Scaling 使用服务相关角色 (SLR) 来获得调用其他 AWS 服务所需的权限。SLR 的权限由 AWS 进行硬编码,无法更改。默认情况下,提供给 Amazon EC2 Auto Scaling SLR 的权限不包括访问客户主密钥 (CMK) 的权限。

您可以使用 AWS 托管 CMK 或客户管理的 CMK 通过 Amazon EC2 Auto Scaling 对 Amazon Elastic Block Store (Amazon EBS) 卷或 AMI 进行加密。Amazon EC2 Auto Scaling 不需要额外的权限即可使用 AWS 托管 CMK。但是,Amazon EC2 Auto Scaling SLR 必须拥有对客户管理的 CMK 的额外权限。

解决方法

根据 Amazon EC2 Auto Scaling 所使用的客户管理的 CMK 在同一账户中还是在外部 AWS 账户中,请按照下面的相应说明操作。

注意:

下面的示例使用默认 Amazon EC2 Auto Scaling SLR AWSServiceRoleForAutoScaling,但是您也可以创建一个唯一角色名称。 如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI。 AWS KMS 授权必须从拥有 Amazon EC2 Auto Scaling 组的账户而非 AWS KMS 账户创建。有关更多信息,请参阅使用授权。 Amazon EC2 Auto Scaling 使用同一 AWS 账户中存在的客户保管的 CMK

遵循更改密钥策略的说明,并添加以下示例语句:

注意:123456789012 替换为部署了 Amazon EC2 Auto Scaling 组的账户 ID。

{
    "Sid": "Allow service-linked role use of the CMK",
    "Effect": "Allow",
    "Principal": {
        "AWS": 
    },
    "Action": ,
    "Resource": "*"
},
{
    "Sid": "Allow attachment of persistent resources",
    "Effect": "Allow",
    "Principal": {
        "AWS": 
    },
    "Action": ,
    "Resource": "*",
    "Condition": {
        "Bool": {
            "kms:GrantIsForAWSResource": true
        }
    }
}
Amazon EC2 Auto Scaling 使用外部 AWS 账户中存在的客户管理的 CMK

1.遵循更改密钥策略的说明。修改密钥策略以向外部 AWS 账户中存在的 IAM 实体授予执行 CreateGrant API 操作的权限:

{
   "Sid": "Allow external account 111122223333 use of the CMK",
   "Effect": "Allow",
   "Principal": {
       "AWS": 
   },
   "Action": ,
   "Resource": "*"
},
{
   "Sid": "Allow attachment of persistent resources in external account 111122223333",
   "Effect": "Allow",
   "Principal": {
       "AWS": 
   },
   "Action": ,
   "Resource": "*"
}

2.借助 Amazon EC2 Auto Scaling 组的 AWS 账户中存在的 IAM 实体的凭证使用 AWS CLI 命令 create-grant。

注意:444455556666 替换为 CMK 所在的账户 ID。

$ aws kms create-grant --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 Decrypt GenerateDataKeyWithoutPlaintext ReEncryptFrom ReEncryptTo CreateGrant

注意:请确保 IAM 实体拥有执行 CreateGrant API 操作的权限。如果 CreateGrant 权限缺失,则向 IAM 实体的附加策略中添加以下语句:

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