Passer au contenu

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

Lecture de 5 minute(s)
0

Mon entité Gestion des identités et des accès AWS (AWS IAM) dispose d’autorisations relatives à une instance Amazon Elastic Compute Cloud (Amazon EC2). J'ai essayé de démarrer l'instance, mais elle est passée de l'état En attente à Arrêté.

Résolution

Déterminer la cause de l'état Arrêté de votre instance EC2

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.

Si vous avez attaché un volume Amazon Elastic Block Store (Amazon EBS) à votre instance EC2, vérifiez le chiffrement du volume. Si vous avez chiffré le volume EBS à l'aide d'une clé AWS Key Management Service (AWS KMS), un problème d'autorisation est peut-être survenu. Le principal IAM qui appelle l'action d'API StartInstances doit disposer d’autorisations kms:CreateGrant pour créer un octroi pour Amazon EC2. L’octroi permet à Amazon EC2 de déchiffrer la clé de données du volume avec votre clé AWS KMS.

Les volumes EBS envoient un appel d'API GenerateDataKeyWithoutPlaintext à AWS KMS qui crée une nouvelle clé de données et la chiffre dans la clé AWS KMS. AWS KMS envoie la clé de données chiffrée au volume EBS. Le volume attache ensuite la clé de données à l'instance. La clé de données est présente dans le même compte AWS que l'instance et la clé AWS KMS.

Pour déterminer pourquoi l'instance est à l'état Arrêté, exécutez la commande describe-instances de l'interface de ligne de commande AWS :

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

Remarque : Remplacez your-instance-id par votre ID d'instance.

Exemple de sortie :

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

L'erreur précédente peut signifier que vous avez chiffré le volume racine ou d'autres volumes attachés. Vous n'êtes pas autorisé à accéder à la clé AWS KMS pour le déchiffrement.

Vous pouvez également filtrer les événements AWS CloudTrail en fonction du 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"

L'erreur précédente signifie que le principal IAM ne dispose pas de l'autorisation CreateGrant permettant à Amazon EC2 de déchiffrer la clé de données. L'instance ne peut donc pas démarrer.

Remarque : Si vous utilisez une clé gérée par AWS, cette erreur ne se produit que s'il existe un refus explicite dans les politiques IAM ou la politique de contrôle des services (SCP) du principal. Les clés gérées par AWS ne requièrent pas d'autorisations IAM supplémentaires pour être utilisées.

Trouver le type de clé AWS KMS

Procédez comme suit :

  1. Ouvrez la console Amazon EC2.
  2. Dans le volet de navigation, sélectionnez Instances.
  3. Sélectionnez l'ID de l'instance, puis choisissez Stockage.
  4. Dans ID de volume, sélectionnez l'ID de volume du volume chiffré.
  5. Dans ID de clé KMS, copiez l'ID de clé AWS KMS.
  6. Ouvrez la console AWS KMS dans la même région AWS.
  7. Dans le volet de navigation, sélectionnez Clés gérées par le client. Puis, recherchez l'ID de clé AWS KMS à partir de l'étape 4.
  8. Sélectionnez l'ID de clé AWS KMS.
  9. Dans Configuration générale, sous Description, notez le type de clé AWS KMS.

Attacher une politique IAM

Attachez une politique IAM au principal IAM, comme dans l'exemple suivant :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:CreateGrant"
      ],
      "Resource": [
        "arn:aws:kms:region:123456789012:key/ExampleKey"
      ],
      "Condition": {
        "Bool": {
          "kms:GrantIsForAWSResource": true
        }
      }
    }
  ]
}

La clé de condition kms:GrantIsForAWSResource garantit que le principal IAM crée uniquement des octrois pour la clé AWS KMS avec les ressources AWS. Cette politique n'autorise pas le principal IAM à créer des octrois pour un autre principal IAM. Pour restreindre l'accès à Amazon EC2, utilisez la clé de condition kms:ViaService.

Vous devez activer les autorisations IAM que vous ajoutez au principal IAM via la politique de clé de votre compte, comme indiqué dans l'exemple suivant :

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

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

Si votre clé AWS KMS et votre principal IAM se trouvent dans le même compte, vous pouvez inclure explicitement votre principal dans votre stratégie de clé. Vous n'avez pas besoin d'autorisations IAM pour accéder à la clé AWS KMS.

Pour accorder des autorisations explicites par le biais de la stratégie de clé, ajoutez l'instruction suivante à votre stratégie de clé :

{
  "Principal": {
    "AWS": "arn:aws:iam::123456789012:role/Role_Name"
  },
  "Effect": "Allow",
  "Action": [
    "kms:CreateGrant"
  ],
  "Resource": [
    "*"
  ],
  "Condition": {
    "Bool": {
      "kms:GrantIsForAWSResource": true
    }
  }
}

Il est recommandé d'accorder un accès selon le principe du moindre privilège aux autorisations requises pour effectuer une tâche.

Si vous utilisez les groupes Amazon EC2 Auto Scaling pour créer vos instances, consultez la section Stratégie de clé AWS KMS requise à utiliser avec des volumes chiffrés.

Informations connexes

Chiffrement Amazon EBS

Mise hors service immédiate de l’instance

AWS OFFICIELA mis à jour il y a 7 mois