¿Por qué mi usuario o rol de IAM con todos los permisos de Amazon EC2 no puede iniciar una instancia de EC2?

Última actualización: 18/05/2022

Mi entidad de AWS Identity and Access Management (IAM) (usuarios, grupos y roles) tiene todos los permisos para una instancia de Amazon Elastic Compute Cloud (Amazon EC2). Intenté iniciar la instancia de Amazon EC2, pero cambió del estado Pendiente a Detenido.

Descripción corta

Verifique si la instancia tiene una Amazon Elastic Block Store (Amazon EBS) adjunta. Si el volumen de Amazon EBS está cifrado mediante una clave de AWS Key Management Service (AWS KMS), es posible que haya un problema de permisos. La entidad de IAM que llama a la acción de la API StartInstances debe tener permisos para crear una concesión para el servicio de Amazon EC2. La concesión permite que Amazon EC2 descifre la clave de AWS KMS (clave de KMS).

Los volúmenes de Amazon EBS envían una solicitud de llamada a la API GenerateDataKeyWithoutPlaintext a AWS KMS que crea una nueva clave de datos y la cifra en la clave de KMS. La clave de datos cifrada se envía de nuevo al volumen de Amazon EBS y, luego, se adjunta a la instancia de Amazon EC2. Para este escenario, la clave de KMS está presente en la misma cuenta de AWS para la instancia de EC2 y la clave de KMS.

Nota: Si se producen errores al ejecutar los comandos de AWS Command Line Interface (AWS CLI), asegúrese de estar usando la versión más reciente de AWS CLI.

1. Para confirmar por qué la instancia de Amazon EC2 está en estado Detenido, ejecute el comando de AWS CLI similar al siguiente:

aws ec2 describe-instances --instance-id your-instance_ID --query "Reservations[*].Instances[*].StateReason"

Salida de ejemplo:

[
  [
    {
      "Message": "Client.InternalError: Client error on launch",
      "Code": "Client.InternalError"
    }
  ]
]

Este error significa que el volumen raíz o los volúmenes adicionales adjuntos están cifrados. No tiene permiso para acceder a la clave de AWS KMS para el descifrado.

2. (Opcional) Siga las instrucciones para filtrar los eventos de AWS CloudTrail para el nombre de evento CreateGrant.

Salida de ejemplo:

"errorMessage": "User: arn:aws:iam::123456789012:user/test is not authorized to perform: kms:CreateGrant on resource: arn:aws:kms:eu-west-1:123456789012:key/8e3426b8-87b4-434c-ae74-8e63dadf354a"

Este error significa que la entidad de IAM no tiene el permiso CreateGrant para que Amazon EC2 descifre la clave de datos y que la instancia no pueda iniciarse.

Resolución

Para encontrar el tipo de clave, siga estos pasos:

1.    Abra la consola de Amazon EC2 y, luego, elija Instances (Instancias).

2.    En Instance ID (ID de la instancia), elija el ID de la instancia de Amazon EC2 y, luego, elija la pestaña Storage (Almacenamiento).

3.    En Volume ID (ID de Volumen), elija el ID de volumen para el volumen cifrado.

4.    En KMS key ID (ID de clave de KMS), copie el ID de clave.

5.    Abra la consola de AWS KMS en la misma región de AWS.

6.    En AWS managed keys (Claves administradas por AWS) yCustomer managed keys (Claves administradas por el cliente), pegue el ID de clave de KMS del paso 4.

7.    Elija el ID de clave.

8.    En General configuration (Configuración general), enDescription (Descripción), anote el tipo de clave de KMS.

Adjunte una política de IAM a la entidad de IAM similar a la siguiente:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:CreateGrant"
      ],
      "Resource": [
        "arn:aws:kms:eu-west-1:123456789012:key/8e3426b8-87b4-434c-ae74-8e63dadf354a"
      ],
      "Condition": {
        "Bool": {
          "kms:GrantIsForAWSResource": true
        }
      }
    }
  ]
}

La clave de condición kms:GrantIsForAWSResource garantiza que la entidad de IAM solo pueda crear concesiones para la clave de KMS con recursos de AWS como las instancias de EC2. Esta política no permite que la entidad de IAM cree concesiones para otra entidad de IAM.

(Opcional) Permita que el usuario raíz de la cuenta de AWS tenga acceso completo a la clave de KMS de forma similar a la siguiente:

{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::123456789012:root"},
  "Action": "kms:*",
  "Resource": "*"
}

También puede agregar la entidad de IAM en la política de claves de KMS para permitir la acción de la API CreateGrant.

Nota:


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?