Comment résoudre les problèmes de refus d'accès ou d'opérations non autorisées liés à une politique IAM ?

Dernière mise à jour : 30/03/2022

J'essaie d'effectuer une action sur une ressource AWS et j'ai reçu un message d'erreur « access denied » (accès refusé) ou « unauthorized operation » (opération non autorisée). Comment résoudre ces problèmes d'autorisation ?

Brève description

Pour résoudre les problèmes liés aux politiques AWS Identity and Access Management (IAM) ?

Solution

Identifier l'appelant de l'API et comprendre les messages d'erreur

Important :

Vérifiez que les appels d'API sont effectués au nom de l'identité IAM correcte avant d'examiner les politiques IAM. Si le message d'erreur ne contient pas d'informations sur l'appelant, procédez comme suit pour identifier l'appelant de l'API :

  1. Ouvrez la console de gestion AWS.
  2. Dans l'angle supérieur droit de la page, choisissez la flèche en regard des informations sur le compte.
  3. Si vous êtes connecté en tant que rôle IAM, reportez-vous à « Currently active as » (Actuellement actif en tant que) pour le nom du rôle assumé et « Account ID » (ID de compte) pour l'ID de compte.
  4. Si vous êtes connecté en tant qu'utilisateur fédéré, reportez-vous à « Federated User » (Utilisateur fédéré) pour le nom du rôle de fédération et le nom de séance du rôle.

-ou-

Vous pouvez utiliser la commande AWS CLI get-caller-identity pour identifier l'appelant de l'API. Vous pouvez également utiliser la commande AWS CLI avec l'indicateur --debug pour identifier la source des informations d'identification à partir de la sortie comme dans l'exemple suivant :

2018-03-13 16:23:57,570 - MainThread - botocore.credentials - INFO - Found credentials in shared credentials file: ~/.aws/credentials

Vérifier les autorisations des politiques IAM

Assurez-vous que les autorisations appropriées sont accordées à l'appelant de l'API en vérifiant les politiques IAM attachées. Pour plus d'informations, consultez Vérifier qu'une demande est autorisée ou refusée dans un compte.

Évaluer les SCP AWS Organizations

Si le compte AWS fait partie d'une AWS Organization, les SCP peuvent être appliqués au niveau hiérarchique pour autoriser ou refuser des actions. Toutes les entités IAM du compte AWS héritent des autorisations SCP. Assurez-vous que l'appelant de l'API n'est pas explicitement refusé dans la SCP.

Assurez-vous que l'API appelée n'est pas explicitement refusée dans une politique SCP organisationnelle qui impacte l'appelant

Vérifier les politiques basées sur l'identité et les politiques basées sur les ressources

Assurez-vous qu'il existe une instruction d'autorisation explicite dans la stratégie basée sur l'identité des entités IAM pour l'appelant de l'API. Assurez-vous ensuite que l'API prend en charge les autorisations au niveau des ressources. Si l'appelant de l'API ne prend pas en charge les autorisations au niveau des ressources, assurez-vous que le caractère générique « *» est spécifié dans l'élément de ressource de l'instruction de la politique IAM.

Vous pouvez attacher des politiques basées sur les ressources à une ressource dans le service AWS pour fournir un accès. Pour plus d'informations, consultez Politiques basées sur l'identité et politiques basées sur les ressources.

Pour afficher le récapitulatif d'une politique IAM :

  1. Ouvrez la console IAM.
  2. Dans le panneau de navigation, choisissez Stratégies.
  3. Choisissez la flèche en regard du nom de la politique pour développer la vue de ses détails.

Dans l'exemple suivant, la politique ne fonctionne pas, car toutes les actions d'API Amazon Elastic Compute Cloud (Amazon EC2) ne prennent pas en charge les autorisations au niveau des ressources :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SorryThisIsNotGoingToWorkAsExpected",
            "Effect": "Allow",
            "Action": ["ec2:*"],
            "Resource": "arn:aws:ec2:us-east-1:accountid:instance/*"
        }
    ]
}

Les utilisateurs IAM qui tentent de lancer une instance Amazon EC2 dans la région us-east-1 à l'aide de la commande d'interface de ligne de commande AWS CLI run-instances reçoivent un message d'erreur similaire à celui-ci :

"An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation. Encoded authorization failure message:…"

Pour résoudre ce problème, remplacez la ressource par un caractère générique « * ». En effet, Amazon EC2 ne prend en charge que les autorisations partielles au niveau des ressources.

Pour décoder le message d'échec d'autorisation, afin d'obtenir plus de détails sur la raison de cet échec, utilisez l'action d'API DecodeAuthorizationMessage comme dans l'exemple suivant :

$ aws sts decode-authorization-message --encoded-message <encoded-message-from-the-error>

Vérifier les limites des autorisations

Si une limite d'autorisation est attachée à l'entité IAM, la limite définit les autorisations maximales de l'entité. Pour plus d'informations, consultez Comment puis-je utiliser les limites d'autorisations pour limiter la portée des utilisateurs et rôles IAM tout en empêchant l'élévation de privilèges ?

Évaluer les politiques de séance

Si l'appelant de l'API est un rôle IAM ou un utilisateur fédéré, les politiques de séance sont transmises pendant la durée de la séance. Les autorisations d'une séance sont l'intersection des politiques basées sur l'identité de l'entité IAM utilisée pour créer la séance et les politiques de séance. Assurez-vous que l'appel d'API existe dans la politique et l'entité IAM.

Vérifier que les clés de condition de la politique sont prises en charge par les API

Les clés de condition AWS peuvent être utilisées pour comparer les éléments d'une demande d'API adressée à AWS avec les valeurs de clé spécifiées dans une politique IAM. Les clés de condition peuvent être une clé de condition globale ou définies par le service AWS. Les clés de condition spécifiques au service AWS ne peuvent être utilisées que dans ce service (par exemple, les conditions EC2 sur les actions d'API EC2) .Pour plus d'informations, consultez Actions, ressources et clés de contexte de condition pour les services AWS.

Un élément de condition peut contenir plusieurs conditions, et chaque bloc de condition peut contenir plusieurs paires clé-valeur. Pour plus d'informations, consultez Création d'une condition avec plusieurs clés ou valeurs.

Dans cet exemple de politique, l'élément de condition est mise en correspondance si une demande d'API IAM est appelée par l'utilisateur IAM admin et que l'adresse IP source est 1.1.1.0/24 ou 2.2.2.0/24.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iam:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:username": "admin"
        },
        "IpAddress": {
          "aws:SourceIp": [
            "1.1.1.0/24",
            "2.2.2.0/24"
          ]
        }
      }
    }
  ]
}

Exemples d'erreurs de politique IAM et de résolution des problèmes

Consultez les exemples suivants pour identifier le message d'erreur, l'appelant de l'API, l'API et les ressources appelées :

Exemple de message d'erreur Appelant API API Ressources Quand
A : « An error occurred (UnauthorizedOperation) when calling the DescribeInstances operation: You are not authorized to perform this operation » (Une erreur s'est produite (UnauthorizedOperation) lors de l'appel de l'opération DescribeInstances : vous n'êtes pas autorisé à effectuer cette opération). inconnu DescribeInstances inconnu heure de l'erreur
B : « Une erreur est survenue (AccessDenied) lors de l'appel de l'opération AssumeRole : Utilisateur : arn:aws:iam::123456789012:user/test n'est pas autorisé à effectuer : sts:AssumeRole sur la ressource : arn:aws:iam::123456789012:role/EC2-FullAccess » arn:aws:iam::123456789012:user/test AssumeRole arn:aws:iam::123456789012:role/EC2-FullAccess heure de l'erreur
C : « Une erreur est survenue (AccessDenied) lors de l'appel de l'opération GetSessionToken : Impossible d'appeler GetSessionToken avec les informations d'identification de session » inconnu GetSessionToken inconnu heure de l'erreur
D : « An error occurred (UnauthorizedOperation) when calling the AssociateIamInstanceProfile operation: You are not authorized to perform this operation (Une erreur s'est produite (UnauthorizedOperation) lors de l'appel de l'opération AssociateIamInstanceProfile : Vous n'êtes pas autorisé à effectuer cette opération). Message d'échec d'autorisation chiffré : .... » inconnu AssociateIamInstanceProfile inconnu heure de l'erreur

À l'aide de cette méthode d'évaluation, vous pouvez identifier la cause des messages d'erreur que vous pouvez recevoir pour des problèmes d'autorisation pour différents services AWS. Pour plus de détails, consultez les messages d'erreur et les étapes de résolution des problèmes ci-dessous :

Exemple de message d'erreur A :

Ce message d'erreur indique que vous n'êtes pas autorisé à appeler l'API DescribeInstances.

Pour résoudre ce problème, procédez comme suit :

  1. Identifiez l'appelant de l'API.
  2. Assurez-vous que l'action d'API ec2:DescribeInstances n'est pas incluse dans des instructions de refus.
  3. Assurez-vous que l'action d'API ec2:DescribeInstances est incluse dans les instructions d'autorisation.
  4. Assurez-vous qu'aucune ressource n'est spécifiée pour cette action d'API. Remarque : cette action d'API ne prend pas en charge les autorisations au niveau des ressources.
  5. Vérifiez que toutes les conditions IAM spécifiées dans l'instruction d'autorisation sont prises en charge par l'action DescribeInstances et que les conditions correspondent.

Pour plus d'informations, consultez DescribeInstanceStatus.

Exemple de message d'erreur B :

Ce message d'erreur contient le nom de l'API, l'appelant de l'API et la ressource cible. Assurez-vous que l'identité IAM qui a appelé l'API dispose de l'accès correct aux ressources. Vérifiez les politiques IAM à l'aide de la méthode d'évaluation précédente.

Pour résoudre cette erreur, procédez comme suit pour vérifier la politique d'approbation du rôle IAM : EC2-FullAccess :

  1. Assurez-vous que arn:aws:iam::123456789012:user/test ou arn:aws:iam::123456789012:root n'est pas inclus dans les instructions de refus de la politique d'approbation.
  2. Assurez-vous que arn:aws:iam::123456789012:user/test ou arn:aws:iam::123456789012:root est inclus dans une déclaration Allow de la politique de confiance.
  3. Assurez-vous que toutes les conditions IAM spécifiées dans cette instruction d'autorisation sont prises en charge par l'action d'API sts:AssumeRole et correspondent.

Suivez ces étapes pour vérifier les politiques IAM attachées à l'appelant de l'API (arn:aws:iam::123456789012:user/test) :

  1. Assurez-vous que arn:aws:iam::123456789012:role/EC2-FullAccess n'est pas inclus dans une instruction de refus avec l'action d'API sts:AssumeRole.
  2. Si arn:aws:iam::123456789012:root se trouve dans l'instruction d'autorisation de la politique d'approbation, assurez-vous que arn:aws:iam::123456789012:role/EC2-FullAccess figure dans l'instruction d'autorisation des politiques IAM avec l'action d'API sts:AssumeRole.
  3. Assurez-vous que toutes les conditions IAM spécifiées dans cette instruction d'autorisation sont prises en charge par l'action d'API sts:AssumeRole et correspondent.

Exemple de message d'erreur C :

Ce message d'erreur indique que get-session-token n'est pas pris en charge par les informations d'identification temporaires. Pour plus d'informations, consulte Comparaison des opérations d'API AWS STS.

Exemple de message d'erreur D :

Ce message d'erreur renvoie un message codé qui peut fournir des détails sur l'échec de l'autorisation. Pour décoder le message d'erreur et obtenir les détails de l'échec d'autorisation, consulte DecodeAuthorizationMessage. Après avoir décodé le message d'erreur, identifiez l'appelant de l'API et examinez les autorisations et les conditions au niveau des ressources.

Pour résoudre cette erreur, procédez comme suit pour vérifier les autorisations de politique IAM :

  1. Si le message d'erreur indique que l'API est explicitement refusée, supprimez les actions d'API ec2:AssociateIamInstanceProfile ou iam:PassRole de l'instruction correspondante.
  2. Assurez-vous que ec2:AssociateIamInstanceProfile et iam:PassRole sont dans l'instruction d'autorisation avec des ressources cibles prises en charge et correctes. Par exemple, assurez-vous que les cibles de ressource de l'action d'API ec2:AssociateIamInstanceProfile sont des instances EC2 et que les cibles de ressources de iam:PassRole sont des rôles IAM.
  3. Si les actions d'API ec2:AssociateIamInstanceProfile et iam:PassRole sont dans la même instruction Allow, vérifiez que toutes les conditions sont prises en charge par les actions d'API ec2:AssociateIamInstanceProfile et iam:PassRole et que les conditions correspondent.
  4. Si les actions d'API ec2:AssociateIamInstanceProfile et iam:PassRole se trouvent dans des instructions d'autorisation distinctes, vérifiez que toutes les conditions de chaque instruction d'autorisation sont prises en charge par une action et que les conditions correspondent.

Pous plus d'informations, consultez Logique d'évaluation des politiques et Vérification qu'une demande est autorisée ou refusée dans un compte.