Cuando inicio mi instancia con volúmenes cifrados adjuntos, la instancia se detiene inmediatamente y aparece el error «client error on launch».

5 minutos de lectura
0

He lanzado una instancia de Amazon Elastic Compute Cloud (Amazon EC2) que tiene volúmenes cifrados adjuntos, pero la instancia no se inicia. La instancia pasa inmediatamente de un estado pendiente a cerrarse y, finalmente, a un estado de finalizada. Ejecuté el comando describe-instances de AWS Command Line Interface (AWS CLI) en la instancia finalizada y aparece el siguiente error:... "StateReason": { "Code": "Client.InternalError" "Message": "Client.InternalError: Client error on launch" }, .... ¿Cómo puedo solucionar este problema?

Descripción breve

Este problema se produce con las instancias de EC2 con volúmenes cifrados adjuntos si:

  • El usuario de AWS Key Management Service (AWS KMS) o AWS Identity and Access Management (IAM) que lanza las instancias no tiene los permisos necesarios.
  • El uso de la clave de KMS está restringido por la clave de condición SourceIp.

El usuario de IAM debe tener permiso de AWS KMS para descifrar la clave de AWS KMS.

Para permitir el acceso y descifrar una clave de KMS, debe utilizar la política de claves junto con las políticas o subvenciones de IAM. Las políticas de IAM por sí solas no son suficientes para permitir el acceso a una clave de KMS, pero puede usarlas en combinación con la política de una clave de KMS.

De forma predeterminada, las claves de KMS solo otorgan acceso a la cuenta raíz. Cuando se proporciona el privilegio completo de EC2 a un rol o usuario de IAM, los permisos de AWS KMS deben conceder explícitamente el acceso a la política de claves de KMS.

Resolución

Creación de una política de IAM que permita a la entidad principal de IAM llamar a las API de AWS KMS

Nota: Si recibe errores al ejecutar los comandos de la AWS CLI, asegúrese de utilizar la versión más reciente.

1.    Abra la consola de IAM, seleccione Políticas, y, a continuación, elija Crear política.

2.    Elija la pestaña JSON y, a continuación, copie y pegue esta política con su clave ARN para Recurso:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:Encrypt",
        "kms:GenerateDataKey*",
        "kms:DescribeKey",
        "kms:CreateGrant"
      ],
      "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    }
  ]
}

3.    Elija Política de revisión.

4.    En Nombre, introduzca un nombre que sea significativo para usted y, a continuación, elija Crear política.

5.    Elija la política que creó en el paso 4.

6.    Elija la pestaña Utilización de la política y, a continuación, elija Asociar.

7.    En Nombre, elija la entidad de IAM a la que desea conceder permiso a la clave de KMS y, a continuación, elija Asociar política.

Concesión a la entidad principal de IAM acceso explícito a una clave de KMS

1.    Abra la consola de KMS y seleccione Claves administradas por el cliente.

2.    En ID de clave, seleccione su ID de clave.

3.    En Usuarios de claves, seleccione Agregar.

4.    En Nombre, elija el usuario o rol de IAM y, a continuación, elija Agregar.

Nota: Si utiliza una política de claves personalizada en lugar de la política de claves predeterminada, la clave de KMS debe conceder de forma explícita los siguientes permisos:

{
      "Sid": "Allow use of the key",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
        "arn:aws:iam::123456789012:role/MyRoleName",
          "arn:aws:iam::123456789012:user/MyUserName"
        ]
      },
      "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/MyRoleName",
          "arn:aws:iam::123456789012:user/MyUserName"
        ]
      },
      "Action": [
        "kms:CreateGrant",
        "kms:ListGrants",
        "kms:RevokeGrant"
      ],
      "Resource": "*",
      "Condition": {
        "Bool": {
          "kms:GrantIsForAWSResource": "true"
        }
      }
    }

Condición de uso de dirección IP

Si utiliza AWS KMS para proteger sus datos en un servicio integrado, tenga cuidado al especificar los operadores de condición de la dirección IP o la clave de condición aws:SourceIp en la misma declaración de política de acceso. Al adjuntar un volumen cifrado de Amazon Elastic Block Store (Amazon EBS) a una instancia de Amazon EC2, Amazon EC2 envía una solicitud a AWS KMS. La solicitud descifra la clave de datos cifrados del volumen. Esta solicitud proviene de una dirección IP asociada a la instancia de EC2 y no de la dirección IP del usuario. Esto significa que la solicitud de descifrado se rechaza si se ha establecido una condición de SourceIp y se produce un error en la instancia.

Utilice la clave de condición kms:ViaService. AWS KMS permite las interacciones desde ese servicio en su nombre. Asegúrese de que los directores tengan permiso para usar la clave KMS y el servicio integrado. Para obtener más información, consulte los límites de las claves de condiciones de kms:ViaService.

Nota: Las instancias de EC2 con usuarios que hayan iniciado sesión no pueden interactuar con esta condición; solo el servicio en su nombre puede hacerlo. Esta interacción se registra en los registros de AWS CloudTrail para que pueda revisarla.

En el siguiente ejemplo, la entrada de CloudTrail para una llamada a la API se realiza a AWS KMS. La infraestructura de Amazon EC2 lo invoca, no desde una dirección IP específica. Al añadir una política a un usuario que permita a AWS KMS interactuar con Amazon EC2, la llamada a la API puede completarse.

"userIdentity": {
  "sessionContext": {
  "sessionIssuer": {
    "accountId": "450822418798",
    "principalId": "450822418798:aws:ec2-infrastructure",
    "userName": "aws:ec2-infrastructure",
    "arn": "arn:aws:iam::450822418798:role/aws:ec2-infrastructure",
    "type": "Role"
   },
...
  "eventType": "AwsApiCall",
  "@log_group": "CloudTrail/AllRegionLogGroup",
  "awsRegion": "eu-west-1",
  "requestParameters": {
    "encryptionContext": {
    "aws:ebs:id": "vol-0ca158925aa9c1883"
    }
}

Información relacionada

Using policy conditions with AWS KMS (Uso de condiciones de políticas con AWS KMS)

How can I be sure that authenticated encryption with associated data encryption is used when I'm calling the AWS KMS APIs? (¿Cómo puedo asegurarme de que se utiliza el cifrado autenticado con el cifrado de datos asociado cuando llamo a las API de AWS KMS?)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años