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

上次更新时间:2021 年 10 月 12 日

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

简短描述

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

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

解决方法

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

注意:

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.    借助 Amazon EC2 Auto Scaling 组的 AWS 账户中存在的 IAM 实体的凭证使用 AWS CLI 命令 create-grant

注意: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"
}

这篇文章对您有帮助吗?


您是否需要账单或技术支持?