Como dimensionar automaticamente instâncias EC2 com um volume raiz criptografado?

Como dimensionar automaticamente instâncias EC2 com um volume raiz criptografado?

Estou tentando configurar uma configuração de escalonamento automático na AWS, onde o modelo de inicialização do nó inclui a criptografia do volume raiz (EBS). Configurei uma função vinculada ao serviço e uma CMK no Amazon KMS com uma política do IAM de acordo com odocumentação.

No entanto, estou recebendo o seguinte erro quando o ASG procura criar as instâncias:

Launching a new EC2 instance: i-0123456789xxx. Status Reason: Instance became unhealthy while waiting for instance to be in InService state. Termination Reason: Client.InternalError: Client error on launch

Odocumentação de solução de problemassimplesmente aponta para a documentação original e sugere que a política do IAM não está configurada corretamente - estou lutando para descobrir o que não está certo.

A função vinculada ao serviço está configurada no ASG:SLR em ASG, e o SLR tem as permissões corretas na política do IAM para a chave usada para criptografar o volume:

{
        "Sid": "Allow use of the key",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::0123456789: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::0123456789:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"
        },
        "Action": [
            "kms: CreateGrant",
            "kms: ListGrants",
            "kms: RevokeGrant"
        ],
        "Resource": "*",
        "Condition": {
            "Bool": {
                "kms:GrantIsForAWSResource": "true"
            }
        }
    }

Observe que iniciar a mesma AMI manualmente, especificando que o volume raiz é criptografado com a mesma chave, funciona. Isso sugere um problema com a SLR, talvez?

Ou preciso criar uma AMI onde o volume raiz já esteja criptografado?

ATUALIZAÇÃO 05/11/2020:

Acontece que houve um erro de formatação - há um espaço após cada dois pontos na seção Ações. A remoção disso corrigiu o problema e funciona como esperado agora.

{
        "Sid": "Allow use of the key",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::0123456789: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::0123456789:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"
        },
        "Action": [
            "kms:CreateGrant",
            "kms:ListGrants",
            "kms:RevokeGrant"
        ],
        "Resource": "*",
        "Condition": {
            "Bool": {
                "kms:GrantIsForAWSResource": "true"
            }
        }
    }

Responder1

Acontece que houve um erro de formatação - há um espaço após cada dois pontos na seção Ações. A remoção disso corrigiu o problema e funciona como esperado agora.

{
        "Sid": "Allow use of the key",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::0123456789: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::0123456789:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"
        },
        "Action": [
            "kms:CreateGrant",
            "kms:ListGrants",
            "kms:RevokeGrant"
        ],
        "Resource": "*",
        "Condition": {
            "Bool": {
                "kms:GrantIsForAWSResource": "true"
            }
        }
    }

Responder2

Eu tive o mesmo problema e resolviadicionando a função vinculada ao serviço para Auto Scaling aoPolítica principalda chave pertinente(Console AWS -> KMS -> Chaves gerenciadas pelo cliente -> YOUR_KEY -> 'editar' na guia Política de chaves) do seguinte modo:

{
    "Version": "2012-10-17",
    "Id": "key-default-1",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::READCTED:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling",
                    "arn:aws:iam::REDACTED:root"
                ]
            },
            "Action": "kms:*",
            "Resource": "*"
        }
    ]
}

informação relacionada