Comment puis-je obtenir des données pour faciliter la résolution des erreurs d’accès refusé ou non autorisées liées aux autorisations IAM ?

Lecture de 6 minute(s)
0

Je reçois un message d'erreur « accès refusé » ou « non autorisé » lorsque j'accède à une ressource AWS. Je souhaite obtenir des données qui m'aideront à résoudre ces erreurs d'échec d'appel d'API AWS Identity and Access Management (IAM).

Brève description

Utilisez les requêtes Amazon Athena ou l'interface de ligne de commande AWS (AWS CLI) pour obtenir les journaux d'erreurs relatifs aux échecs des appels d'API IAM. Puis, suivez les instructions pour résoudre les erreurs d'accès refusé ou de fonctionnement non autorisé à l'aide d'une stratégie IAM.

Résolution

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

Utiliser les requêtes Athena pour résoudre les échecs d'appels d'API IAM en effectuant des recherches dans les journaux CloudTrail

Remarque : Avant de commencer, vous devez avoir une piste créée pour vous connecter à un compartiment Amazon Simple Storage Service (Amazon S3). En effet, Athena utilise des événements enregistrés dans les fichiers journaux AWS CloudTrail qui sont transmis à un compartiment Amazon S3 pour cette piste.

1.    Suivez les étapes décrites dans la section Créer la table Athena de la rubrique Comment puis-je créer automatiquement des tables dans Athena pour effectuer des recherches dans les journaux AWS CloudTrail ?

Remarque : Les tables Athena créées automatiquement se trouvent dans la même région AWS que votre compartiment 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 sélectionnez Exécuter.

Dans cet exemple de requête, le format horaire utilise le format de base ISO 8601 avec la variable Z pour UTC.

Remarque : Remplacez your-arn par les noms de ressources Amazon (ARN) IAM pour vos ressources et your-table par le nom de votre table.

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 de sortie de table répertorie les erreurs d'autorisation pour l'ARN d'identité :

| 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énement CloudTrail peuvent prendre jusqu'à 15 minutes pour obtenir des résultats.

5.    Vous pouvez éventuellement obtenir les erreurs pour tous les utilisateurs en supprimant cette ligne de l'exemple de requête :

AND userIdentity.arn = 'your-arn'

6.    Vous pouvez éventuellement obtenir 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%')

Utiliser l'interface de ligne de commande AWS pour résoudre les problèmes d'échec des appels d'API d'autorisation IAM

Remarque : Ce script AWS CLI requiert le processeur JSON en ligne de commande jq. Pour le didacticiel et les instructions de téléchargement, consultez la section 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 AWS CLI suivante :

Remarque : Remplacez your-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 adressées à CloudTrail est limité à deux requêtes par seconde, par compte et par région. Si cette limite est dépassée, une erreur de limitation se produit.

2.    Cet exemple de sortie de table répertorie les erreurs d'autorisation pour l'ARN d'identité au cours de la période spécifiée.

Remarque : Vous pouvez consulter les événements survenus 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
  1.     (Facultatif) Obtenez les 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 non autorisées

Athena et les résultats des exemples de sortie de l'AWS CLI précédents concernent les appels d'API CloudTrail LookupEvents.

Les stratégies IAM qui refusent l'accès parce qu'elles contiennent une instruction de rejet incluent une phrase spécifique dans le message d'erreur pour les refus explicites et implicites. Les erreurs de refus explicite IAM contiennent la phrase « with an explicit deny in a <type> policy ». Les erreurs de refus implicites IAM contiennent la phrase « because no <type> policy allows the <action> action ».

La sortie cloudtrail:LookupEvents avec un refus explicite indique qu'une stratégie IAM associée est incorrecte.

Un refus explicite peut survenir à partir de n'importe lequel de ces types de stratégies. Par exemple, les stratégies basées sur l'identité, les stratégies basées sur les ressources, les limites d'autorisations, les SCP des organisations et les stratégies de session. Les instructions de refus explicite remplacent toujours les instructions d'autorisation. Le refus explicite existe dans la stratégie basée sur l'identité des utilisateurs IAM.

La sortie cloudtrail:LookupEvents car aucune stratégie basée sur l'identité n’autorise l’action 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 stratégie basée sur l'identité ne comporte pas d'instruction d'autorisation explicite pour l'action d'API cloudtrail:LookupEvents.

Les types de stratégies évalués par AWS pour établir l'accès sont les suivants :

Pour plus d'informations sur la manière dont les stratégies IAM sont évaluées et gérées, consultez la section Logique d'évaluation des stratégies et Gestion des stratégies IAM.

Informations connexes

Stratégies et autorisations dans IAM

Résoudre les problèmes liés aux stratégies IAM

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 5 mois