Comment puis-je résoudre les erreurs 403 Access Denied (Accès refusé) à partir d'Amazon S3 ?

Date de la dernière mise à jour : 25/06/2021

Des utilisateurs essaient d'accéder aux objets du compartiment Amazon Simple Storage Service (Amazon S3), mais Amazon S3 leur renvoie l'erreur 403 Access Denied (Accès refusé). Comment puis-je résoudre cette erreur ?

Brève description

Pour résoudre les erreurs Accès refusé à partir d'Amazon S3, vérifiez les points suivants :

  • Propriété du compartiment et de l'objet
  • Stratégie de compartiment ou stratégies utilisateur AWS Identity and Access Management (IAM)
  • Limites d'autorisations IAM
  • Paramètres d'accès public au blocs d'Amazon S3
  • Informations d'identification pour accéder à Amazon S3
  • Informations d'identification de sécurité temporaires
  • Stratégie de point de terminaison Amazon Virtual Private Cloud (Amazon VPC)
  • Stratégie de points d'accès Amazon S3
  • Objet manquant ou objet avec un caractère spécial
  • Chiffrement AWS Key Management Service (AWS KMS)
  • Paiement par le demandeur activé sur le compartiment
  • Politique de contrôle du service AWS Organizations

Remarque : vous pouvez également utiliser le document d'automatisation AWSSupport-TroubleshootS3PublicRead sur AWS Systems Manager. Ce document d'automatisation vous aide à diagnostiquer les problèmes de lecture d'objets à partir d'un compartiment S3 public que vous spécifiez.

Résolution

Propriété du compartiment et de l'objet

Par défaut, un objet S3 appartient au compte AWS qui l'a chargé. même lorsque le compartiment est détenu par un autre compte. Si d'autres comptes peuvent charger des objets dans le compartiment, vérifiez alors à quel compte appartiennent les objets auxquels les utilisateurs ne peuvent pas accéder :

1.    Exécutez la commande list-buckets de l'Interface de ligne de commande AWS (AWS CLI) pour obtenir l'ID canonique d'Amazon S3 pour votre compte :

aws s3api list-buckets --query Owner.ID

Remarque : si vous recevez des erreurs lors de l'exécution de commandes AWS CLI, assurez-vous d'utiliser la version la plus récente de l'interface de ligne de commande AWS (AWS CLI).

2.    Exécutez la commande list-objects pour obtenir l'ID canonique d'Amazon S3 du compte propriétaire de l'objet auquel les utilisateurs ne peuvent pas accéder :

aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix exampleprefix

Astuce : vous pouvez utiliser la commande list-objects pour vérifier plusieurs objets.

3.    Si les ID canoniques ne correspondent pas, vous (le propriétaire du compartiment) ne possédez pas l'objet. Le propriétaire de l'objet peut vous accorder le contrôle total de l'objet en exécutant la commande put-object-acl :

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject.jpg --acl bucket-owner-full-control

4.    Une fois que le propriétaire de l'objet a changé la liste ACL de l'objet en contrôle complet, le propriétaire du compartiment peut accéder à l'objet. Cependant, la modification de la liste ACL seule ne modifie pas la propriété de l'objet. Pour changer le propriétaire de l'objet en compte du compartiment, exécutez la commande cp à partir du compte du compartiment pour copier l'objet sur lui-même.

Pour copier tous les nouveaux objets dans un compartiment d'un autre compte, définissez une stratégie de compartiment qui exige que les objets soient chargés avec la liste ACL de contrôle complet du propriétaire du compartiment. Ensuite, activez Propriétaire de l'objet S3. Cette opération change automatiquement le propriétaire de l'objet en propriétaire du compartiment lorsque l'objet est téléchargé avec la liste ACL de contrôle complet du propriétaire du compartiment.

Pour les autorisations intercomptes en cours, créez un rôle IAM dans votre compte avec des autorisations sur votre compartiment. Ensuite, accordez à un autre compte AWS l'autorisation d'assumer ce rôle IAM. Pour plus d'informations, consultez Tutoriel : déléguer l'accès entre les comptes AWS à l'aide de rôles IAM.

Stratégie de compartiment ou stratégies utilisateur IAM

Examinez la stratégie de compartiment ou les stratégies utilisateur IAM associées pour toutes les instructions susceptibles de refuser l'accès de manière incorrecte. Recherchez des instructions de refus incorrectes, des actions manquantes ou un espacement incorrect dans une stratégie :

1.    Vérifiez les instructions de refus pour les conditions qui bloquent l'accès en fonction de Multi-Factor Authentication (MFA), des clés de chiffrement, une adresse IP spécifique ou un point de terminaison d'un VPC spécifique. Vérifiez que les demandes adressées au compartiment répondent aux conditions de la stratégie de compartiment ou des stratégies IAM. Sinon, l'accès devrait être refusé.

Remarque : si vous avez besoin de MFA et que les utilisateurs envoient des demandes via l'interface de ligne de commande AWS, assurez-vous que les utilisateurs configurent l'interface de ligne de commande AWS pour qu'elle utilise MFA.

Par exemple, dans la stratégie de compartiment suivante, Statement1 autorise l'accès public au téléchargement d'objets (S3:GetObject) à partir de DOC-EXAMPLE-BUCKET. Cependant, Statement2 refuse explicitement à tout le monde l'accès au téléchargement d'objets à partir de DOC-EXAMPLE-BUCKET sauf si la requête provient du point de terminaison d'un VPC vpce-1a2b3c4d. Dans ce cas, l'instruction de refus prévaut. Cela signifie que les utilisateurs qui tentent de télécharger des objets à partir de l'extérieur de vpce-1a2b3c4d se voient refuser l'accès.

{
  "Id": "Policy1234567890123",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Statement1",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Principal": "*"
    },
    {
      "Sid": "Statement2",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": "vpce-1a2b3c4d"
        }
      },
      "Principal": "*"
    }
  ]
}

2.    Vérifiez que la stratégie de compartiment ou les stratégies IAM autorisent les actions Amazon S3 dont les utilisateurs ont besoin. Par exemple, la stratégie de compartiment suivante n'inclut pas l'autorisation pour l'action S3:PutObjectAcl . Si l'utilisateur IAM essaie de modifier la liste de contrôle d'accès (ACL) d'un objet, il obtient une erreur Accès refusé.

{
  "Id": "Policy1234567890123",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234567890123",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/Dave"
        ]
      }
    }
  ]
}

3.    Vérifiez que la stratégie de compartiment ou les stratégies d'utilisateur IAM ne contiennent pas d'espace supplémentaire. Par exemple, la stratégie IAM suivante dispose d'un espace supplémentaire dans l'Amazon Resource Name (ARN) arn:aws:s3::: DOC-EXAMPLE-BUCKET/*. En raison de l'espace, l'ARN n'est pas correctement évalué comme arn:aws:s3:::%20DOC-EXAMPLE-BUCKET/*. Cela signifie que l'utilisateur IAM n'a pas les autorisations sur les objets appropriés.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234567890123",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3::: DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

Limites d'autorisations IAM

Passez en revue les limites des autorisations IAM qui sont définies sur les identités IAM qui tentent d'accéder au compartiment. Vérifiez que les limites des autorisations IAM autorisent l'accès à Amazon S3.

Paramètres d'accès public au blocs d'Amazon S3

Si vos utilisateurs reçoivent des erreurs Accès refusé sur les demandes de lecture publique qui doivent être autorisées, vérifiez les paramètres d'accès public au blocs d'Amazon S3 du compartiment. Ces paramètres peuvent remplacer les autorisations qui autorisent l'accès public en lecture. Amazon S3 Block Public Access peut s'appliquer à des compartiments individuels ou à des comptes AWS.

Informations d'identification pour accéder à Amazon S3

Examinez les identifiants que les utilisateurs ont configurés pour accéder à Amazon S3. Les kits AWS SDK et AWS CLI doivent être configurés pour utiliser les identifiants de l'utilisateur ou du rôle IAM avec accès au compartiment.

Pour AWS CLI, exécutez la commande configure pour vérifier les informations d'identification configurées :

aws configure list

Si les utilisateurs accèdent au compartiment via une instance Amazon Elastic Compute Cloud (Amazon EC2), vérifiez que l'instance utilise le rôle approprié. Connectez-vous à l'instance, puis exécutez la commande get-caller-identity :

aws sts get-caller-identity

Informations d'identification de sécurité temporaires

Si les utilisateurs reçoivent des erreurs d'accès refusé à partir des informations d'identification de sécurité temporaires accordées à l'aide d'AWS Security Token Service (AWS STS), vérifiez la stratégie associée.

Lorsqu'un administrateur crée des informations d'identification de sécurité temporaires à l'aide de l'appel API AssumeRole ou de la commande assume-role il peut éventuellement transmettre des stratégies spécifiques à une séance.

Pour rechercher les stratégies de séance associées aux erreurs Accès refusé d'Amazon S3, recherchez les événements AssumeRole dans l'historique des événements AWS CloudTrail. Assurez-vous de rechercher les événements AssumeRole dans le même délai que les demandes d'accès à Amazon S3 ayant échoué. Ensuite, consultez le champ requestParameters dans les journaux CloudTrail pertinents pour connaître les paramètres de stratégie ou policyArns. Vérifiez que l'ARN associé ou que la stratégie ARN associée accorde les autorisations Amazon S3 nécessaires.

Par exemple, l'extrait suivant d'un journal CloudTrail indique que les informations d'identification temporaires incluent une stratégie de séance en ligne qui accorde des autorisations s3:GetObject à DOC-EXAMPLE-BUCKET :

"requestParameters": {
        "roleArn": "arn:aws:iam::123412341234:role/S3AdminAccess",
        "roleSessionName": "s3rolesession",
        "policy": "{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n  {\n  \"Effect\": \"Allow\",\n           
         \"Action\": [\n   \"s3:GetObject\"\n ],\n    \"Resource\": [\n \"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*\"\n  ]\n   }  }\n    ]\n}\n"
    }

Stratégie de point de terminaison d'un VPC d'Amazon VPC

Si les utilisateurs accèdent à votre compartiment avec une instance EC2 acheminée via un point de terminaison d'un VPC, vérifiez la stratégie de point de terminaison d'un VPC. Assurez-vous que la stratégie de point de terminaison d'un VPC inclut les autorisations appropriées pour accéder à vos compartiments et objets S3.

Par exemple, la stratégie de point de terminaison d'un VPC suivante autorise l'accès uniquement à DOC-EXAMPLE-BUCKET. Les utilisateurs qui envoient des demandes via ce point de terminaison d'un VPC ne peuvent accéder à aucun autre compartiment.

{
  "Id": "Policy1234567890123",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234567890123",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
      "Principal": "*"
    }
  ]
}

Stratégie de points d'accès Amazon S3

Si vous utilisez un point d'accès Amazon S3 pour gérer l'accès à votre compartiment, vérifiez la stratégie IAM du point d'accès. Confirmez que la stratégie accorde les autorisations appropriées.

Objet manquant ou objet avec un caractère spécial

Vérifiez si l'objet demandé existe dans le compartiment. Notez également qu'un objet qui a un caractère spécial (tel qu'un espace) nécessite une manipulation spéciale pour récupérer l'objet. Sinon, la requête ne trouve pas l'objet et Amazon S3 suppose que l'objet n'existe pas. Par conséquent, vous recevrez une erreur Access Denied (Accès refusé) (au lieu des erreurs 404 Not Found [Introuvable]) si vous ne disposez pas des autorisations S3:ListBucket appropriées.

Exécutez la commande Head-object AWS CLI pour vérifier si un objet existe dans le compartiment :

aws s3api head-object --bucket DOC-EXAMPLE-BUCKET --key exampleobject.jpg

Si l'objet existe dans le compartiment, alors l'erreur Accès refusé ne masque pas une erreur 404 Not Found (Introuvable). Vérifiez les autres exigences en matière de configuration pour résoudre l'erreur Access Denied (Accès refusé).

Si l'objet ne se trouve pas dans le compartiment, alors l'erreur Access Denied (Accès refusé) masque une erreur 404 Not Found (Introuvable). Résolvez le problème lié à l'objet manquant.

Chiffrement AWS KMS

Notez les points suivants concernant le chiffrement AWS KMS :

  • Si un utilisateur IAM ne peut pas accéder à un objet pour lequel il dispose des autorisations complètes, vérifiez si l'objet est chiffré par AWS KMS. Vous pouvez utiliser la console Amazon S3 pour afficher les propriétés de l'objet, notamment les informations relatives à son chiffrement.
  • Si l'objet est chiffré par KMS, assurez-vous que la politique de clé KMS accorde à l'utilisateur IAM les autorisations minimales requises pour utiliser la clé. Par exemple, si l'utilisateur IAM utilise la clé uniquement pour télécharger un objet S3, l'utilisateur IAM doit disposer des autorisations pour l'action kms:Decrypt (au minimum). Pour plus d'informations, consultez Autoriser l'accès au compte AWS et activer les politiques IAM.
  • Si l'identité et la clé IAM se trouvent dans le même compte, les autorisations pour kms:Decrypt doivent être accordées à l'aide de la politique de clé. La politique de clé doit référencer la même identité IAM que la politique IAM.
  • Si l'utilisateur IAM appartient à un compte différent de la clé AWS KMS, ces autorisations doivent également être accordées sur la politique IAM. Par exemple, les autorisations pour kms:Decrypt doivent être spécifiées à la fois dans la politique de clé et dans la politique IAM. Pour plus d'informations sur l'accès inter-compte entre l'utilisateur IAM et la clé KMS, consultez Autoriser les utilisateurs d'autres comptes à utiliser un CMK.
  • Si vous obtenez une réponse 403 après avoir activé les clés de compartiment S3, vérifiez la politique de clé CMK qui inclut les autorisations pour kms:Decrypt pour le principal appelant. Si le principal appelant se trouve dans un compte différent de celui du CMK, vous devez également inclure l'autorisation pour kms:Decrypt dans votre politique IAM. Pour isoler le problème et vérifier si l'erreur Access Denied (Accès refusé) est liée aux clés de compartiment S3, désactivez temporairement la fonctionnalité Clés de compartiment S3.

Paiement par le demandeur activé sur le compartiment

Si Paiement par le demandeur est activé sur votre compartiment, les utilisateurs d'autres comptes doivent spécifier le paramètre paiement par le demandeur lorsqu'ils envoient des requêtes à ce compartiment. Sinon, ces utilisateurs obtiennent une erreur Access Denied (Accès refusé). Pour vérifier si le Paiement par le demandeur est activé, vous pouvez utiliser la console Amazon S3 pour afficher les propriétés de votre compartiment.

L'exemple suivant d'AWS CLI inclut le bon paramètre pour accéder à un compartiment avec Paiement par le demandeur :

aws s3 cp exampleobject.jpg s3://DOC-EXAMPLE-BUCKET/exampleobject.jpg --request-payer requester

Stratégie de contrôle des services AWS Organizations AWS

Si vous utilisez AWS Organizations, vérifiez les politiques de contrôle des services pour vous assurer que l'accès à Amazon S3 est autorisé. Par exemple, la stratégie suivante refuse explicitement l'accès à Amazon S3 et entraîne une erreur Accès refusé.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

Pour plus d'informations sur les fonctionnalités d'AWS Organizations, consultez la section Activation de toutes les fonctions dans votre organisation.


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


Besoin d'aide pour une question technique ou de facturation ?