ASG无法再使用加密的EBS根卷启动实例

sih*_*hil 4 amazon-ec2 amazon-web-services autoscaling amazon-ami

我们最近部署了一个新应用程序,该应用程序使用ASG配置为启动具有加密EBS根卷的实例。我们有很多现有的应用程序都可以使用此设置正常工作,但是我们的新ASG拒绝启动实例。这些实例甚至都没有出现,我们在ASG活动历史记录中看到一个错误:Client.InternalError: Client error on launch

经过实验后,我们发现,如果将所使用的AMI交换为未加密的AMI,则所有AMI都将按预期开始工作。令人困惑的是,我们在不同的ASG上使用了完全相同的AMI,并且它们均按预期工作(由几乎相同的CloudFormation模板组成)。同样,我们可以使用相同的AMI和实例配置文件直接从控制台启动EC2实例。

有人见过这种行为吗?

我在其他地方找到了一些解决方案(这使我们证明了它与加密卷有关),例如来自AWS的解决方案,但它们似乎与我们的方案没有直接关系。

sih*_*hil 8

我们最终找到了一个AWS论坛帖子,其中详细介绍了服务链接角色(SLR)。似乎在最近几个月中的某个时候,它们改变了ASG的行为方式(仅适用于新创建的ASG)。以前,ASG可以使用任何KMS CMK,但是已对其进行了更改,以使其只能访问默认密钥。我们使用的是“客户管理的” CMK,因此默认情况下,我们新创建的ASG无法再访问它。

显然,现有的ASG将于6月底更改。

为了解决此问题,我们着手创建一个可以访问我们密钥的新SLR,但后来发现CloudFormation尚未允许您为ASG指定SLR。

同时,我们已决定通过更改CMK的策略以允许从默认SLR进行访问来实质上创建我们之前遇到的情况。

现在,我们用于创建CMK的CloudFormation如下所示:

KmsKey:
  Type: AWS::KMS::Key
  DeletionPolicy: Retain
  Properties:
    Description: Used to encrypt AMIs
    EnableKeyRotation: True
    KeyPolicy:
      Version: 2012-10-17
      Id: ami-kms-key
      Statement:
      - Sid: Enable IAM User Permissions
        Effect: Allow
        Principal:
          AWS: !Sub arn:aws:iam::${AWS::AccountId}:root
        Action: kms:*
        Resource: "*"
      - Sid: Allow use of the key by the default service linked role
        Effect: Allow
        Principal:
          AWS:
          - !Sub arn:aws:iam::${AWS::AccountId}: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:
          - !Sub arn:aws:iam::${AWS::AccountId}:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling
        Action:
        - kms:CreateGrant
        Resource: "*"
        Condition:
          Bool:
            kms:GrantIsForAWSResource: true
Run Code Online (Sandbox Code Playgroud)