Comment résoudre les erreurs d’accès refusé ou d’opération non autorisée à l’aide d’une politique IAM ?

Lecture de 10 minute(s)
0

J’essaie d’effectuer une action sur une ressource AWS et j’ai reçu un message d’erreur « Accès refusé » ou « Opération non autorisée ». Comment résoudre ces problèmes d’autorisation ?

Brève description

Voici comment résoudre les problèmes liés aux politiques de gestion des identités et des accès AWS (IAM) :

Résolution

Identifier l’appelant d’API et comprendre les messages d’erreur

Important :

Avant de consulter les politiques IAM, vérifiez que les appels d’API sont effectués au nom de l’entité IAM adéquate. Si le message d’erreur ne contient pas d’informations sur l’appelant, suivez les étapes suivantes pour identifier l’appelant d’API :

  1. Ouvrez la Console de gestion AWS.
  2. Dans le coin supérieur droit de la page, cliquez sur la flèche qui se situe à côté des informations du compte.
  3. Si vous êtes connecté en tant que rôle IAM, indiquez « Actuellement actif en tant que » comme rôle supposé et « ID de compte » pour l’identifiant de compte.
  4. Si vous êtes connecté en tant qu’utilisateur fédéré, indiquez « Utilisateur fédéré » comme rôle de fédération et nom de la session de rôle.

-ou-

Utilisez la commande get-caller-identity l’interface de la ligne de commande AWS pour identifier l’appelant d’API. Vous pouvez également utiliser la commande AWS CLI avec l’indicateur --debug pour identifier la source des informations d’identification des résultats, comme ceci :

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

Vérifiez les autorisations de politique IAM

Vérifiez si les autorisations nécessaires sont accordées à l’appelant d’API en consultant les politiques IAM jointes. Pour en savoir plus, consultez la section Identification d’une demande autorisée ou refusée dans un compte.

Évaluation des SCP d’AWS Organizations

Si le compte AWS fait partie d’une AWS Organization, les SCP peuvent être appliquées au niveau hiérarchique pour autoriser ou refuser des actions. Les autorisations SCP sont héritées par toutes les entités IAM du compte AWS. Vérifiez que l’appelant d’API n’est pas explicitement refusé dans la SCP.

Vérifiez que l’API appelée n’est pas explicitement refusée dans une SCP organisationnelle qui a un impact sur l’appelant

Consultez les politiques basées sur l’identité et les politiques basées sur les ressources

Vérifiez que la politique basée sur l’identité des entités IAM contient une instruction d’autorisation explicite pour l’appelant d’API. Vérifiez 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, vérifiez que le caractère générique « * » est spécifié dans l’élément ressource de la déclaration de politique IAM.

Vous pouvez associer des politiques basées sur les ressources à une ressource du service AWS pour fournir un accès. Pour en savoir plus, consultez la section Politiques basées sur l’identité et Politiques basées sur une ressource.

Voici comment consulter le résumé de la politique IAM :

  1. Ouvrez la console IAM.
  2. Dans le volet de navigation, sélectionnez Politiques.
  3. Pour développer la vue détaillée de la politique, sélectionnez la flèche qui se situe à côté du nom de la politique.

Dans l’exemple suivant, la politique ne fonctionne pas, car les actions d’API Amazon Elastic Compute Cloud (Amazon EC2) ne prennent pas toutes 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 run-instances de la CLI AWS reçoivent un message d’erreur similaire au suivant :

"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 « * ». Ce problème vient du fait qu’Amazon EC2 prend seulement en charge des autorisations partielles au niveau des ressources.

Pour décoder le message d’échec d’autorisation et obtenir plus de renseignements sur la raison de cet échec, utilisez l’action d’API DecodeAuthorizationMessage similaire à la suivante :

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

Vérification des limites d’autorisation

Si une limite d’autorisation est liée à l’entité IAM, celle-ci définit les autorisations maximales dont dispose l’entité.

Évaluation des politiques de session

Si l’appelant d’API est un rôle IAM ou un utilisateur fédéré, les politiques de session sont transmises pendant la durée de la session. Les autorisations d’une session correspondent à l’intersection entre les politiques basées sur l’identité de l’entité IAM utilisée pour créer la session, et les politiques de session. Vérifiez que l’appel d’API existe dans la politique et l’entité IAM.

Vérifiez que les clés d’état de la politique sont prises en charge par les API

Les clés d’état AWS peuvent servir à comparer les éléments d’une demande d’API adressée à AWS avec les valeurs clés spécifiées dans une politique IAM. Les clés d’état peuvent être soit une clé d’état globale, soit des clés définies par le service AWS. Les clés d’état spécifiques au service AWS peuvent uniquement être utilisées dans le cadre de ce service (par exemple, les conditions EC2 sur les actions d’API EC2). Pour en savoir plus, consultez Actions, ressources et clés de condition pour les AWS services.

Un élément de condition peut contenir plusieurs conditions, et chaque bloc de conditions peut contenir plusieurs paires clé-valeur. Pour en savoir plus, consultez la section Conditions avec plusieurs clés ou valeurs de contexte.

Dans cet exemple de politique, l’élément de condition est respecté si une demande d’API IAM est appelée par l’administrateur utilisateur IAM et que l’adresse IP source provient de 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 et de résolutions concernant la politique IAM

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

Exemple de message d’erreurAppelant d’APIAPIRessourcesQuand
A : « Une erreur (UnauthorizedOperation) s’est produite lors de l’appel de l’opération DescribeInstances : Vous n’êtes pas autorisé à effectuer cette opération ».inconnuDescribeInstancesinconnuheure à laquelle l’erreur s’est produite
B : « Une erreur (AccessDenied) s’est produite 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/testAssumeRolearn:aws:iam::123456789012:role/EC2-FullAccessheure à laquelle l’erreur s’est produite
C : « Une erreur (AccessDenied) s’est produite lors de l’appel de l’opération GetSessionToken : Impossible d’appeler GetSessionToken avec les informations d’identification de session »inconnuGetSessionTokeninconnuheure à laquelle l’erreur s’est produite
D : « Une erreur (UnauthorizedOperation) s’est produite lors de l’appel de l’opération AssociateIamInstanceProfile : Vous n’êtes pas autorisé à effectuer cette opération. Message d’échec d’autorisation codé : .... »inconnuAssociateIamInstanceProfileinconnuheure à laquelle l’erreur s’est produite

Cette méthode d’évaluation vous permet d’identifier la cause des messages d’erreur que vous pouvez recevoir en cas de problèmes d’autorisation pour différents services AWS. Pour plus de renseignements, consultez les messages d’erreur et les étapes de résolution suivants :

Exemple de message d’erreur A :

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

Voici comment résoudre cette erreur :

  1. Identifiez l’appelant d’API.
  2. Vérifiez que l’action d’API ec2:DescribeInstances ne figure dans aucune instruction de refus.
  3. Vérifiez que l’action d’API ec2:DescribeInstances figure dans les instructions d’autorisation.
  4. Vérifiez 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. Confirmez 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 sont respectées.

Pour en savoir plus, consultez DescribeInstanceStatus.

Exemple de message d’erreur B :

Ce message d’erreur inclut le nom de l’API, l’appelant d’API et la ressource cible. Vérifiez que l’identité IAM qui a appelé l’API dispose de l’accès adéquat aux ressources. Consultez les politiques IAM en suivant la méthode d’évaluation précédente.

Pour résoudre cette erreur, effectuez les étapes suivantes pour confirmer la politique de confiance du rôle IAM : EC2-FullAccess :

  1. Vérifiez que arn:aws:iam::123456789012:user/test ou arn:aws:iam::123456789012:root ne figure dans aucune instruction de refus de la politique de confiance.
  2. Vérifiez que arn:aws:iam::123456789012:user/test ou arn:aws:iam::123456789012:root figure dans l’instruction d’autorisation de la politique de confiance.
  3. Confirmez 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 qu’elles sont respectées.

Suivez ces étapes pour confirmer les politiques IAM associées à l’appelant d’API (arn:aws:iam::123456789012:user/test) :

  1. Confirmez que arn:aws:iam::123456789012:role/EC2-FullAccess ne figure dans aucune instruction de refus avec l’action d’API sts:AssumeRole.
  2. Si arn:aws:iam::123456789012:root figure dans l’instruction d’autorisation de la politique de confiance, confirmez 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. Confirmez 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 qu’elles sont respectées.

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 en savoir plus, consultez la section Comparaison des opérations d’API AWS STS.

Exemple de message d’erreur D :

Ce message d’erreur renvoie un message encodé contenant des détails sur l’échec de l’autorisation. Pour décoder le message d’erreur et obtenir les renseignements sur l’échec de l’autorisation, consultez DecodeAuthorizationMessage. Après avoir décodé le message d’erreur, identifiez l’appelant d’API et examinez les autorisations et conditions au niveau des ressources.

Pour résoudre cette erreur, suivez ces étapes pour vérifier les autorisations de la 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. Confirmez que ec2:AssociateIamInstanceProfile et iam:PassRole figurent dans l’instruction d’autorisation avec des cibles de ressources adéquates et prises en charge. Par exemple, confirmez que les cibles de ressources de l’action 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 ec2:AssociateIamInstanceProfile et iam:PassRole API figurent dans la même instruction d’autorisation, confirmez que toutes les conditions sont prises en charge par les actions ec2:AssociateIamInstanceProfile et iam:PassRole API et qu’elles sont respectées.
  4. Si les actions ec2:AssociateIamInstanceProfile et iam:PassRole API figurent dans des instructions d’autorisation séparées, confirmez que toutes les conditions de chaque instruction d’autorisation sont prises en charge par une action et qu’elles sont respectées.

Pour en savoir plus, consultez les sections Logique d’évaluation de politiques et Identification d’une demande autorisée ou refusée dans un compte.


Informations complémentaires

Résoudre les problèmes liés aux politiques IAM

Pourquoi je reçois l’erreur « Accès refusé » ou « Informations non valides » lorsque j’essaie d’endosser un rôle IAM entre comptes ?

Référence des éléments de politique JSON IAM