Passer au contenu

Comment puis-je résoudre les erreurs d'autorisation manquantes dans CloudFormation ?

Lecture de 5 minute(s)
0

Je souhaite résoudre les erreurs d'autorisation dans AWS CloudFormation.

Brève description

Lorsque vous lancez une pile, CloudFormation utilise les informations d'identification de l'utilisateur qui a lancé la pile pour effectuer les appels d'API. Si un rôle de service est défini pour la pile, CloudFormation endosse ce rôle. Le rôle d'utilisateur ou de service supposé peut avoir une liste limitée d'actions autorisées que CloudFormation peut effectuer. L'opération échoue lorsque le rôle n'est pas autorisé à créer, supprimer ou mettre à jour une ressource. L'échec génère le type de message d'erreur suivant :

User: [IAM Role] is not authorized to perform: ec2:RunInstances on resource: [Resource Id] because no identity-based policy allows the ec2:RunInstances action

Résolution

Les sections suivantes présentent les moyens de résoudre les erreurs de stratégie basées sur l'identité et les ressources.

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 les erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Erreur de stratégie basée sur l'identité

Identifier le rôle d'appelant

CloudFormation vous permet de spécifier un rôle de service pour passer des appels aux ressources d'une pile en votre nom. Si aucun rôle de service n'est spécifié, CloudFormation appelle à l'aide des informations d'identification AWS Identity and Access Management (IAM) de l'utilisateur qui a lancé l'opération de pile.

Trouvez le rôle de service dans la console AWS CloudFormation.

  1. Ouvrez la console AWS CloudFormation.
  2. Sélectionnez votre pile sur la page Piles. La section Aperçu de la page est alors ouvert.
  3. Vérifiez la valeur sous Rôle IAM. La valeur que vous voyez est le rôle de service configuré pour cette pile.

S'il n'y a aucune valeur, cela signifie que le rôle de service n'est pas configuré. À la place, toutes les opérations de pile ont été effectuées à l'aide des informations d'identification du rôle qui a initié les opérations de pile.

Pour trouver le rôle de service, utilisez la commande describe-stacks de l’AWS CLI et recherchez la valeur de RoleARN. Si ce champ est vide, le rôle de service n'est pas défini. CloudFormation utilise le rôle utilisé pour lancer la pile.

Ajouter l'autorisation manquante

Trouvez l'autorisation manquante exacte dans le message d'erreur renvoyé par CloudFormation. Vous pouvez également rechercher l'erreur d'autorisation sur AWS CloudTrail pour savoir quelle action d'API a été refusée. Il est recommandé de rechercher les événements qui se sont produits au moment où l'erreur a été générée. Puis, pour résoudre l'erreur, procédez comme suit :

  1. Ajoutez l'autorisation manquante à la stratégie IAM associée au rôle. Vous pouvez également passer à un rôle de service doté des autorisations nécessaires.
  2. Ajoutez l'action à une stratégie attachée au rôle IAM. Ou bien, créez une nouvelle stratégie.

Remarque : Utilisez le Stimulateur de stratégie IAM sur le rôle pour confirmer qu'il dispose des autorisations nécessaires pour lancer les ressources définies dans le modèle.

Erreur de stratégie basée sur les ressources

Parfois, le rôle dispose des autorisations basées sur l'identité, mais la ressource à laquelle vous accédez ne permet pas au rôle de la modifier dans sa stratégie basée sur les ressources. Les ressources telles que les clés AWS Key Management Service (AWS KMS) et les compartiments Amazon Simple Storage (Amazon S3) utilisent des stratégies basées sur les ressources. L'erreur qui en résulte peut se présenter comme suit :

User: [IAM Role] is not authorized to perform: ec2:RunInstances on resource: [Resource Id] because no resource-based policy allows the ec2:RunInstances action

Procédez comme suit pour résoudre l'erreur :

Identifier le rôle d'appelant

  1. Ouvrez la console AWS CloudFormation.
  2. Sélectionnez votre pile sur la page Piles.
  3. Vérifiez la valeur sous Rôle IAM dans la section Aperçu de la page. La valeur du rôle IAM est le rôle de service configuré pour cette pile.

S'il n'y a aucune valeur, cela signifie que le rôle de service n'est pas configuré. À la place, toutes les opérations de pile ont été effectuées à l'aide des informations d'identification de l'entité qui a initié les opérations de pile.

Pour trouver le rôle de service, utilisez la commande describe-stacks de l’AWS CLI et recherchez la valeur de RoleARN. Si ce champ est vide, aucun rôle de service n'est défini. CloudFormation utilise le rôle utilisé pour lancer la pile.

Mettre à jour la stratégie basée sur les ressources

  1. Vérifiez l'erreur pour récupérer l’Amazon Resource Name (ARN) de la ressource à laquelle vous ne pouvez pas accéder. Si l'erreur n'affiche pas l'ARN de la ressource, recherchez dans le journal des événements CloudTrail attaché les ressources qui ont été transmises avec la requête.
  2. Utilisez l'erreur d'autorisation pour déterminer l'autorisation requise pour modifier la ressource.
  3. Passez en revue la stratégie de ressources et ajoutez-y le rôle d'appelant. Vous pouvez également ajouter l'instruction nécessaire pour permettre au rôle IAM d'effectuer l'action sur la ressource.

Par exemple, l'erreur suivante peut s'afficher lorsque vous exécutez l'API Déchiffrer KMS :

"User: arn:aws:sts::12345678910:assumed-role/AWSServiceRoleForConfig/LambdaDescribeHandlerSession is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:eu-west-1:12345678910:key/********-****-****-****-************ because no resource-based policy allows the kms:Decrypt action"

Le message d'erreur indique que la stratégie de la clé AWS KMS n'autorise pas le rôle IAM AWSServiceRoleForConfig à accéder à l'action KMS:Decrypt. Mettez à jour la stratégie KMS pour accorder au rôle IAM l'accès à cette action.

Informations connexes

Contrôle de l'accès avec AWS Identity and Access Management

AWS OFFICIELA mis à jour il y a 2 ans