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

Dernière mise à jour : 28/07/2022

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

Résolution

Utilise un document AWS Systems Manager Automation

Utilisez 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.

Vérifier la propriété des compartiments et des objets

Pour les erreurs AccessDenied (Accès refusé) provenant de requêtes GetObject ou HeadObject, vérifiez si l'objet appartient également au propriétaire du compartiment. Vérifiez également si le propriétaire du compartiment dispose d'autorisations de lecture ou de contrôle total de la liste de contrôle d'accès (ACL).

Confirmez le compte propriétaire des objets

Par défaut, un objet S3 appartient au compte AWS qui l'a chargé. Ceci est vrai même lorsque le compartiment appartient à un autre compte. Si d'autres comptes peuvent charger des objets dans votre compartiment, vérifiez le compte qui possède les objets auxquels vos utilisateurs ne peuvent pas accéder.

Remarque : si vous recevez des erreurs lors de l'exécution des commandes depuis AWS CLI, assurez-vous que vous utilisez la version a plus récente d'AWS CLI.

1.    Exécutez la commande list-buckets de l'interface de ligne de commande AWS (AWS CLI) pour obtenir l'ID canonique Amazon S3 de votre compte en interrogeant l'ID du propriétaire.

aws s3api list-buckets --query "Owner.ID"

2.    Exécutez la commande list-objects pour obtenir l'ID canonique de Simple Storage Service (Amazon S3) du compte propriétaire de l'objet auquel les utilisateurs ne peuvent pas accéder. Remplacez DOC-EXAMPLE-BUCKET par le nom de votre compartiment et exampleprefix par votre valeur de préfixe.

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

Astuce : utilisez la commande list-objects pour vérifier plusieurs objets.

3.    Si les ID canoniques ne correspondent pas, alors vous n'êtes pas propriétaire de 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. Remplacez DOC-EXAMPLE-BUCKET par le nom du compartiment qui contient les objets. Remplacez exampleobject.jpg par le nom de votre clé.

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.

Copier tous les nouveaux objets dans un compartiment d'un autre compte

1.    Définissez une politique de compartiment qui exige que les objets soient chargés avec l'ACL bucket-owner-full-control.

2.    Activez et définissez la propriété des objets S3 sur le propriétaire du compartiment préféré dans la Console de gestion AWS.

Le propriétaire de l'objet est ensuite automatiquement mis à jour en propriétaire du compartiment lorsque l'objet est chargé avec l'ACL bucket-owner-full-control.

Créez un rôle IAM avec des autorisations sur votre compartiment

Pour les autorisations croisées entre comptes actuelles, 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 en savoir plus, consultez le Tutoriel : déléguer l'accès entre les comptes AWS à l'aide de rôles IAM.

Vérifiez la politique de compartiment ou les politiques d'utilisateur IAM

Examinez la politique de compartiment ou les politiques utilisateur IAM associées pour toutes les instructions susceptibles de refuser l'accès. Vérifiez que les demandes adressées à votre compartiment répondent aux conditions de la politique de compartiment ou des politiques IAM. Vérifiez si les instructions de rejet sont incorrectes, les actions manquantes ou l'espacement incorrect dans une instruction.

Conditions de l'instruction de rejet

Vérifiez les instructions de rejet pour rechercher les conditions qui bloquent l'accès en fonction des éléments suivants :

  • authentification multi-facteur (MFA)
  • clés de chiffrement
  • adresse IP spécifique
  • VPC ou points de terminaison d'un VPC spécifiques
  • utilisateurs ou rôles IAM spécifiques

Remarque : si vous avez besoin d'une authentification MFA et que les utilisateurs envoient les demandes via AWS CLI, veillez à ce qu'ils configurent l'outil AWS CLI pour qu'il utilise l'authentification MFA.

Par exemple, dans la politique 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 de VPC vpce-1a2b3c4d. Dans ce cas, l'instruction de rejet 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": "*"
    }
  ]
}

Politiques de compartiment ou politiques IAM

Vérifiez que la politique de compartiment ou les politiques IAM autorisent les actions Simple Storage Service (Amazon S3) dont les utilisateurs ont besoin. Par exemple, la stratégie de compartiment suivante n'inclut pas la permission de l'action s3:PutObjectAcl. Si l'utilisateur IAM essaie de modifier la liste de contrôle d'accès (ACL) d'un objet, l'accès lui est 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"
        ]
      }
    }
  ]
}

Autres erreurs de politique

Vérifiez que la politique de compartiment ou les politiques d'utilisateurs IAM ne contiennent pas d'espaces supplémentaires ou d'ARN incorrects.

Par exemple, si une politique IAM comporte un espace supplémentaire dans l'Amazon Resource Name (ARN) comme suit : arn:aws:s3::: DOC-EXAMPLE-BUCKET/*. Dans ce cas, l'ARN est alors évalué de manière incorrecte en tant que arn:aws:s3:::%20DOC-EXAMPLE-BUCKET/ et génère une erreur d'accès refusé à l'utilisateur IAM.

Confirmez que les limites d'autorisations IAM permettent l'accès à Simple Storage Service (Amazon S3)

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 à Simple Storage Service (Amazon S3).

Vérifiez les paramètres d'accès public par bloc Simple Storage Service (Amazon S3) du compartiment

Si vous recevez des erreurs Accès refusé sur des demandes de lecture publique qui sont autorisées, vérifiez les paramètres Amazon S3 Block Public Access (Accès public par bloc Simple Storage Service (Amazon S3)) du compartiment.

Vérifiez les paramètres S3 Block Public Access au niveau du compte et du compartiment. Ces paramètres peuvent remplacer les autorisations d'accès public en lecture. L'accès public par bloc Simple Storage Service (Amazon S3) peut s'appliquer à des compartiments individuels ou à des comptes AWS.

Vérifier les informations d'identification

Examinez les informations d'identification que les utilisateurs ont configurées pour accéder à Simple Storage Service (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 l’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

Vérifier les informations d'identification de sécurité temporaires

Si les utilisateurs reçoivent des erreurs Access Denied (Accès refusé) provenant des informations d'identification de sécurité temporaires accordées à l'aide du Service de jetons de sécurité AWS (AWS STS), vérifiez la politique de session associée. Lorsqu'un administrateur crée des informations d'identification de sécurité temporaires à l'aide d'un appel d'API AssumeRole ou de la commande assume-role, il peut éventuellement transmettre des politiques spécifiques à une session.

Pour rechercher les politiques de session associées aux erreurs Accès refusé provenant 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 à Simple Storage Service (Amazon S3) ayant échoué. Ensuite, consultez le champ requestParameters dans les journaux CloudTrail pertinents pour connaître les paramètres de politiqueou policyArns. Confirmez que la politique ou l'ARN de politique 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 comprennent une politique de session en ligne qui accorde des autorisations s3:GetObject à DOC-EXAMPLE-BUCKET :

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

Confirmez que la politique de point de terminaison d'un VPC Amazon inclut les autorisations appropriées pour accéder à vos compartiments et objets S3

Si les utilisateurs accèdent à votre compartiment avec une instance EC2 acheminée via un point de terminaison d'un VPC, vérifiez la politique de point de terminaison d'un VPC.

Par exemple, la politique 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": "*"
    }
  ]
}

Vérifiez la politique IAM de votre point d'accès Simple Storage Service (Amazon S3)

Si vous utilisez un point d'accès Simple Storage Service (Amazon S3) pour gérer l'accès à votre compartiment, vérifiez la politique IAM du point d'accès.

Les autorisations accordées dans une politique de point d'accès ne sont efficaces que si la politique de compartiment sous-jacente autorise également le même accès. Confirmez que la politique de compartiment et la politique de point d'accès accordent les autorisations appropriées.

Confirmez que l'objet ne manque pas d'objet ou qu'il contient des caractères spéciaux

Vérifiez que l'objet demandé existe dans le compartiment. Sinon, la requête ne trouve pas l'objet, et Simple Storage Service (Amazon S3) suppose que l'objet n'existe pas. Par conséquent, vous recevez un message d'erreur Accès refusé (au lieu de l'erreur 404 Not Found (404 Introuvable)) si vous ne disposez pas des autorisations s3:ListBucket appropriées.

Notez également qu'un objet qui a un caractère spécial (tel qu'un espace) nécessite un traitement spéciale pour récupérer l'objet.

Exécutez la commande de CLI AWS head-object pour vérifier si un objet existe dans le compartiment. Remplacez DOC-EXAMPLE-BUCKET par le nom du compartiment que vous souhaitez vérifier.

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

Si l'objet existe dans le compartiment, alors l'erreur Access Denied (Accès refusé) ne masque pas une erreur 404 Not Found (404 Introuvable). Vérifiez les autres exigences en matière de configuration pour résoudre l'erreur 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 (404 Introuvable). Résolvez le problème lié à l'objet manquant.

Vérifiez la configuration du chiffrement AWS KMS

Notez les points suivants concernant le chiffrement AWS KMS (SSE-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 SSE-KMS. Vous pouvez utiliser la console Amazon S3 pour afficher les propriétés de l'objet, notamment les informations relatives à son chiffrement côté serveur.
  • Si l'objet est chiffré par SSE-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 se sert de la clé uniquement pour télécharger un objet S3, il doit disposer des autorisations kms:Decrypt. Pour en savoir plus, 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, pour télécharger les objets chiffrés par SSE-KMS, les autorisations 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 intercompte entre l'utilisateur IAM et la clé KMS, consultez Autoriser les utilisateurs d'autres comptes à utiliser une clé KMS.

Vérifiez que le paramètre request-payer est spécifié par les utilisateurs (si vous utilisez Paiement par le demandeur)

Si Paiement par le demandeur est activé sur le compartiment, les utilisateurs d'autres comptes doivent spécifier le paramètre request-payer lorsqu'ils envoient des requêtes au compartiment. Pour vérifier que l'option Paiement par le demandeur est activée, utilisez la console Simple Storage Service (Amazon S3) pour afficher les propriétés de votre compartiment.

L'exemple suivant de commande AWS CLI inclut le paramètre correct pour accéder à un compartiment intercompte avec Paiement par le demandeur :

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

Vérifiez votre politique de contrôle du service AWS Organizations

Si vous utilisez AWS Organizations, vérifiez les politiques de contrôle des services pour vous assurer que l'accès à Simple Storage Service (Amazon S3) est autorisé. Les politiques de contrôle des services spécifient les autorisations maximales pour les comptes concernés. Par exemple, la politique suivante refuse explicitement l'accès à Simple Storage Service (Amazon S3) et entraîne une erreur Access Denied (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 ?


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