¿Cómo escalar automáticamente instancias ec2 con un volumen raíz cifrado?

¿Cómo escalar automáticamente instancias ec2 con un volumen raíz cifrado?

Estoy intentando configurar una configuración de escalado automático en AWS donde la plantilla de inicio de nodo incluye el cifrado del volumen raíz (EBS). He configurado un rol vinculado al servicio y una CMK en Amazon KMS con una política de IAM según ladocumentación.

Sin embargo, recibo el siguiente error cuando el ASG busca crear las instancias:

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

Eldocumentación de solución de problemassimplemente señala la documentación original y sugiere que la política de IAM no está configurada correctamente; sin embargo, estoy luchando por descubrir qué no está bien.

El rol vinculado al servicio se configura en el ASG:SLR en ASGy la SLR tiene los permisos correctos en la política de IAM para la clave que se utilizó para cifrar el volumen:

{
        "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"
            }
        }
    }

Tenga en cuenta que ejecutar la misma AMI manualmente y especificar que el volumen raíz esté cifrado con la misma clave funciona. ¿Esto sugiere quizás un problema con la SLR?

¿O necesito crear una AMI donde el volumen raíz ya esté cifrado?

ACTUALIZACIÓN 05/11/2020:

Resulta que hubo un error de formato: hay un espacio después de cada dos puntos en la sección Acciones. Quitar eso lo solucionó y ahora funciona como se esperaba.

{
        "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"
            }
        }
    }

Respuesta1

Resulta que hubo un error de formato: hay un espacio después de cada dos puntos en la sección Acciones. Quitar eso lo solucionó y ahora funciona como se esperaba.

{
        "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"
            }
        }
    }

Respuesta2

Tuve el mismo problema y lo resolvíagregar el rol vinculado al servicio para Auto Scaling alPolítica clavede la clave pertinente(Consola de AWS -> KMS -> Claves administradas por el cliente -> YOUR_KEY -> 'editar' en la pestaña Política de claves) como sigue:

{
    "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": "*"
        }
    ]
}

información relacionada