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

2 分钟阅读
0

Amazon Elastic Compute Cloud(Amazon EC2)自动扩缩无法启动带有加密亚马逊机器映像(AMI)或加密卷的实例。创建 Amazon EC2 Auto Scaling 的 AWS 身份和访问管理(IAM)身份拥有管理员权限。

简短描述

Amazon EC2 Auto Scaling 使用服务相关角色获得调用其他 AWS 服务所需的权限。SLR 的权限是硬编码的,因此无法更改。提供给 Amazon EC2 Auto Scaling SLR 的默认权限不包括访问 AWS Key Management Service(AWS KMS)密钥的权限。

若要使用 Amazon EC2 Auto Scaling 加密 Amazon Elastic Block Store(Amazon EBS)卷或 AMI,请使用 AWS 托管式密钥客户托管式密钥。Amazon EC2 Auto Scaling 不需要额外的权限即可使用 AWS 托管式密钥。但是,Amazon EC2 Auto Scaling SLR 必须拥有带有客户托管式密钥的额外权限。

解决方法

以下示例使用默认的 Amazon EC2 Auto Scaling SLR AWSServiceRoleForAutoScaling,但您可以创建一个唯一的角色名称。

您必须从拥有 Amazon EC2 自动扩缩组的账户中而不是从 AWS KMS 账户中创建 AWS KMS 授权。有关更多信息,请参阅 AWS KMS 中的授权

**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请确保您使用的是最新的 AWS CLI 版本

Amazon EC2 Auto Scaling 使用同一 AWS 账户中的客户托管式密钥

按照说明更改密钥策略,并添加以下示例语句:

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

{    "Sid": "Allow service-linked role use of the KMS",
    "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
        }
    }
}

Amazon EC2 Auto Scaling 使用位于外部 AWS 账户中的客户托管式密钥

  1. 按照说明更改密钥策略。修改密钥策略,使得外部 AWS 账户中的 IAM 实体可以执行 CreateGrant API 操作:

    {    "Sid": "Allow external account 111122223333 use of the KMS",
        "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. 使用 AWS CLI 命令 create-grant 以及拥有 Amazon EC2 Auto Scaling 组的 AWS 账户中的 IAM 实体的凭证:
    **注意:**将 444455556666 替换为存在 KMS 密钥的账户 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": "AllowCreationOfGrantForTheKMSinExternalAccount444455556666",
          "Effect": "Allow",
          "Action": "kms:CreateGrant",
          "Resource": "arn:aws:kms:us-west-2:444455556666:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d"
    }

相关信息

适用于 Amazon EC2 Auto Scaling 的服务相关角色

与加密卷一起使用的必需的 KMS 密钥策略

AWS 官方
AWS 官方已更新 6 个月前