Comment puis-je obtenir des données pour aider à résoudre les erreurs d'accès aux autorisations IAM refusées ou non autorisées ?

Dernière mise à jour : 11-05-2022

J'essaie d'accéder à une ressource AWS et j'ai reçu une erreur « accès refusé » ou « non autorisé ». Comment puis-je obtenir des données pour aider à résoudre ces erreurs d'échec d'appel d'API AWS Identity and Access Management (IAM) ?

Brève description

Vous pouvez utiliser les requêtes Amazon Athena ou AWS Command Line Interface (AWS CLI) afin d'obtenir des journaux d'erreurs des échecs des appels d'API IAM. Ensuite, suivez les instructions pour résoudre les messages d’erreurs d’accès refusé ou d'opération non autorisée avec une politique IAM.

Résolution

Remarque : Si vous recevez des erreurs lors de l'exécution de commandes AWS CLI, vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Option 1 : Servez-vous des requêtes Athena pour dépanner les échecs d'appels d'API IAM en recherchant dans les journaux CloudTrail.

Remarque : Avant de commencer, vous devez avoir créé un journal d'activité afin de vous connecter à un compartiment Amazon Simple Storage Service (Amazon S3). Cela est dû au fait que Athena utilise les événements enregistrés dans les fichiers journaux AWS CloudTrail qui sont livrés à un compartiment Simple Storage Service (Amazon S3) pour ce journal d’activité.

1.    Suivez les étapes de la section Création du tableau Athena de la section Comment créer automatiquement des tableaux dans Amazon Athena pour effectuer une recherche dans les journaux AWS CloudTrail ?

Remarque : les tableaux Athena créés automatiquement se trouvent dans la même région AWS que votre compartiment Simple Storage Service (Amazon S3).

2.    Ouvrez la console Athena, puis choisissez le signe plus « + » pour créer une nouvelle requête.

3.    Saisissez l'exemple de requête suivant, puis choississezExécuter.

Dans cet exemple de requête, le format d'heure utilise le format basic ISO 8601 avec la variable Z pour UTC.

Remarque : Remplacez your-arn par les Amazon Resource Names (ARN) IAM de vos ressources et votre-tableau par le nom de votre tableau.

SELECT from_iso8601_timestamp(eventTime) AS "Time", useridentity.arn AS "Identity ARN", eventID AS "Event ID",
         eventsource AS "Service", eventname AS "Action", errorCode AS "Error", errorMessage AS "Message"
FROM your-table
WHERE from_iso8601_timestamp(eventtime) >= from_iso8601_timestamp('2019-10-29T06:40:00Z')
        AND from_iso8601_timestamp(eventtime) < from_iso8601_timestamp('2019-10-29T06:55:00Z')
        AND userIdentity.arn = 'your-arn'
        AND eventType = 'AwsApiCall'
        AND errorCode is not null
        AND (lower(errorCode) LIKE '%accessdenied%' OR lower(errorCode) LIKE '%unauthorized%')
ORDER BY eventTime desc

4.    Cet exemple tableau d’édition répertorie les erreurs d’autorisations pour l’'identité ARN :

| Time                        | Event ID                             | Service                  | Action       | Error        | Message                                                                                                              |
|-----------------------------|--------------------------------------|--------------------------|--------------|--------------|----------------------------------------------------------------------------------------------------------------------|
| 2019-10-29 06:52:45.000 UTC | 0406f0c1-47a8-4f71-8a94-18267b84042a | cloudtrail.amazonaws.com | LookupEvents | AccessDenied | User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents with an explicit deny in an identity-based policy |
| 2019-10-29 06:41:48.000 UTC | 14e5e77c-f682-45e1-8c88-12d15af293dd | cloudtrail.amazonaws.com | LookupEvents | AccessDenied | User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents because no identity-based policy allows the cloudtrail:LookupEvents action |

Remarque : les sorties d’événements CloudTrail peuvent prendre jusqu’à 15 minutes pour obtenir des résultats.

5.    Le cas échéant, obtenez des erreurs pour tous les utilisateurs en supprimant cette ligne de l’exemple de requête :

AND userIdentity.arn = 'your-arn'

6.    Éventuellement, obtenez toutes les erreurs d’une période sélectionnée en supprimant cette ligne de l’exemple de requête :

AND (lower(errorCode) LIKE '%accessdenied%' OR lower(errorCode) LIKE '%unauthorized%')

Option 2 : Utiliser l’interface de ligne de commande AWS pour résoudre les échecs d’appel d’API d’autorisation IAM

Remarque : ce script d’interface de ligne de commande AWS nécessite le processeur JSON de ligne de commande jq. Pour obtenir le didacticiel et télécharger les instructions de, consultez Format de sortie JSON. Pour les distributions qui utilisent le package yum, exécutez la commande suivante :

$ sudo yum install jq

1.    Exécutez la commande de CLI AWS suivante :

Remarque : Remplacez votre-arn par les ARN IAM de vos ressources.

( echo "Time,Identity ARN,Event ID,Service,Action,Error,Message";
  aws cloudtrail lookup-events --start-time "2019-10-29T06:40:00Z" --end-time "2019-10-29T06:55:00Z" --query "Events[*].CloudTrailEvent" --output text \
    | jq -r ". | select(.userIdentity.arn == \"your-arn\" and .eventType == \"AwsApiCall\" and .errorCode != null
    and (.errorCode | ascii_downcase | (contains(\"accessdenied\") or contains(\"unauthorized\"))))
    | [.eventTime, .userIdentity.arn, .eventID, .eventSource, .eventName, .errorCode, .errorMessage] | @csv"
) | column -t -s'",'

Remarque : Le taux de requêtes de recherche vers CloudTrail est limité à une requête par seconde et par région. Au delà de cette limite, une erreur de limitation se produit.

2.    Cet exemple de tableau d’édition répertorie les erreurs d'autorisation pour l''identité ARN à partir de la période spécifiée.

Remarque : Vous pouvez consulter les événements qui se sont produits dans une région au cours des 90 derniers jours.

Time                  Event ID                              Service                   Action        Error         Message
2019-10-29T06:52:45Z  0406f0c1-47a8-4f71-8a94-18267b84042a  cloudtrail.amazonaws.com  LookupEvents  AccessDenied  User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents with an explicit deny in an identity-based policy
2019-10-29T06:41:48Z  14e5e77c-f682-45e1-8c88-12d15af293dd  cloudtrail.amazonaws.com  LookupEvents  AccessDenied  User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents because no identity-based policy allows the cloudtrail:LookupEvents action

3.    (Facultatif) obtenez les messages d’erreurs pour tous les utilisateurs en supprimant cette ligne :

.userIdentity.arn == \"your-arn\" and

4.    (Facultatif) obtenez toutes les erreurs de la période sélectionnée en supprimant cette ligne :

and (.errorCode | ascii_downcase | (contains(\"accessdenied\") or contains(\"unauthorized\")))

Résoudre les erreurs d'accès non autorisé

Athena et les sorties d'exemple AWS CLI précédentes sont pertinentes pour les appels d'API LookupEvents de CloudTrail.

Les politiques IAM qui refusent l'accès parce qu'elles contiennent une instruction Rejet incluent une phrase spécifique dans le message d'erreur pour lesrefus explicites et implicites. Les messages d’erreurs de refus explicite de IAM contiennent la phrase « avec un refus explicite dans une politique <type> ». Les messages d’erreurs de refus implicites IAM contiennent la phrase « car aucune politique<type>n'autorise l'<action>action ».

Le cloudtrail : LookupEvents avec une sortie de refus explicite indique que la politique IAM est incorrecte.

L'une de ces types de politique peut entraîner un refus explicite. Par exemple, les politiques basées sur l'identité, les politiques basées sur les ressources, les limites d'autorisations, les SCP des organisations et les politiques de session. Les instructions de refus explicites remplacent toujours les instructions d’autorisation. Le refus explicite existe dans la politique basée sur l'identité des utilisateurs IAM.

La sortie cloudtrail : LookupEvents, car aucune stratégie basée sur l'identité n'autorise la sortie, indique que la stratégie basée sur l'identité n'autorise pas cette action d'API, ce qui entraîne un refus implicite. La politique basée sur l'identité ne contient pas d'instruction d'autorisation explicite pour l'action d'API CloudTrail : LookupEvents.

Les types de politique testés par AWS pour établir l’accès sont les suivants :

Pour plus d'informations sur la façon dont les politiques IAM sont évaluées et gérées, consultez la Logique d'évaluation de politique et Gestion des politiques IAM.


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


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