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

7
我们最近部署了一个新应用程序,该应用程序使用配置为启动具有加密EBS根卷的实例的ASG。我们有很多现有应用程序都是使用完全相同的设置工作的,但是我们的新ASG拒绝启动实例。实例甚至不出现,我们在ASG活动历史记录中看到错误:Client.InternalError:启动时发生客户端错误
经过实验,我们发现,如果我们将正在使用的AMI替换为未加密的AMI,则一切都按预期工作。令人困惑的是,我们在不同的ASG上完全使用相同的AMI,并且一切都按预期工作(由几乎相同的CloudFormation模板形成)。同样,我们可以直接从控制台使用相同的AMI和实例配置文件启动EC2实例。
有人见过这种行为吗?
我在其他地方找到了一些解决方案(使我们证明它与加密卷有关),例如这个AWS的链接,但它们似乎与我们的情况没有直接关系。
1个回答

9
我们最终在AWS论坛帖子中找到了详细介绍服务链接角色(SLR)的内容。看起来,在过去几个月中,他们改变了ASG行为的方式(仅适用于新创建的ASG)。以前,ASG可以使用任何KMS CMK,但现在已更改为只能访问默认密钥。由于我们正在使用“客户管理”的CMK,因此我们的新创建的ASG无法默认访问它。
显然,这将在6月底之前更改现有的ASG。
为了解决这个问题,我们开始创建一个新的SLR并使其访问我们的密钥,但后来发现CloudFormation尚不允许您为ASG指定SLR。
与此同时,我们决定通过更改我们的CMK策略,允许默认SLR访问来实质上创建我们之前所拥有的情况。
我们现在使用的CloudFormation创建我们的CMK如下所示:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接