Pourquoi mon utilisateur ou mon rôle IAM muni d'autorisations Amazon EC2 complètes ne peut-il pas démarrer une instance EC2 ?

Date de la dernière mise à jour : 18/05/2022

Mon entité AWS Identity and Access Management (IAM) (utilisateurs, groupes, rôles) dispose d'autorisations complètes sur une instance Amazon Elastic Compute Cloud (Amazon EC2). J'ai essayé de démarrer l'instance Amazon EC2, mais elle est passée de l'état En attente à Arrêté.

Brève description

Vérifiez si un Amazon Elastic Block Store (Amazon EBS) est attaché à l'instance. Si le volume Amazon EBS est chiffré à l'aide d'une clé AWS Key Management Service (AWS KMS), il se peut qu'il y ait un problème d'autorisation. L'entité IAM qui appelle l'action d'API StartInstances doit disposer des autorisations nécessaires en vue de créer un octroi pour le service Amazon EC2. Cet octroi permet à Amazon EC2 de déchiffrer la clé AWS KMS (clé KMS).

Les volumes Amazon EBS envoient une demande d'appel d'API GenerateDataKeyWithoutPlaintext à AWS KMS qui crée une clé de données et la chiffre dans la clé KMS. La clé de données chiffrée est renvoyée au volume Amazon EBS, puis attachée à l'instance Amazon EC2. Dans ce scénario, la clé KMS est présente dans le même compte AWS pour l'instance EC2 et la clé KMS.

Remarque : si vous recevez des erreurs lorsque vous exécutez des commandes de l'AWS Command Line Interface (AWS CLI), assurez-vous d'utiliser la version la plus récente de l'AWS CLI.

1. Pour vérifier pourquoi l'instance Amazon EC2 est dans un état Arrêté, exécutez une commande AWS CLI similaire à la suivante :

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

Exemple de sortie :

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

Cette erreur signifie que le volume racine ou les volumes attachés supplémentaires sont chiffrés. Vous n'êtes pas autorisé à accéder à la clé AWS KMS pour le déchiffrement.

2. (Facultatif) Suivez les instructions pour filtrer les événements AWS CloudTrail selon le nom d'événement CreateGrant.

Exemple de sortie :

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

Cette erreur signifie que l'entité IAM n'a pas l'autorisation CreateGrant nécessaire à Amazon EC2 pour décrypter la clé de données, de sorte que l'instance ne peut pas démarrer.

Résolution

Pour trouver le type de clé, procédez comme suit :

1.    Ouvrez la console Amazon EC2, puis choisissez Instances.

2.    Dans Instance ID (ID d'instance), choisissez l'ID d'instance Amazon EC2, puis choisissez l'onglet Storage (Stockage).

3.    Dans Volume ID (ID de volume), choisissez l'ID de volume pour le volume chiffré.

4.    Dans KMS key ID (ID de clé KMS), copiez l'ID de clé.

5.    Ouvrez la AWS KMS console (Console AWS KMS) dans la même Région AWS.

6.    Dans AWS managed keys (Clés gérées par AWS) et Customer managed keys (Clés gérées par le client), collez l'ID de la clé KMS que vous avez récupérée à l'étape 4.

7.    Choisissez l'ID de clé.

8.    Dans General configuration (Configuration générale), sous Description, notez le type de clé KMS.

Attachez à l'entité IAM une politique IAM similaire à la suivante :

{
  "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 clé de condition kms:GrantIsForAWSResource garantit que l'entité IAM n'est en mesure de créer des octrois pour la clé KMS qu'avec des ressources AWS telles que des instances EC2. Cette politique n'autorise pas l'entité IAM à créer des octrois pour une autre entité IAM.

(Facultatif) Autorisez le compte utilisateur racine du compte AWS à accéder pleinement à la clé KMS de la manière suivante :

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

Vous pouvez également ajouter l'entité IAM dans la politique de clé KMS pour autoriser l'action d'API CreateGrant.

Remarque :


Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?