En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

Comment puis-je résoudre les erreurs 403 Accès refusé que renvoie Amazon S3 ?

Lecture de 11 minute(s)
0

Mes utilisateurs essaient d’accéder aux objets de mon compartiment Amazon Simple Storage Service (Amazon S3), mais Amazon S3 renvoie l’erreur 403 Accès refusé.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Veillez également que vous utilisez la version la plus récente de l'interface de l’AWS CLI.

Utiliser le document d’automatisation d’AWS Systems Manager

Pour vous aider à identifier les problèmes liés à la lecture d'objets depuis un compartiment S3 public spécifié, utilisez le document d'automatisation AWSSupport-TroubleshootS3PublicRead sur AWS Systems Manager.

Vérifier les paramètres de propriété de votre compartiment et de votre objet

Pour les erreurs AccessDenied provenant de requêtes GetObject ou HeadObject, vérifiez si l’objet et le compartiment ont le même propriétaire. Vérifiez également si le propriétaire du compartiment dispose des autorisations de lecture ou de contrôle total de la liste de contrôle d’accès (ACL).

Remarque : Lorsque vous créez un nouveau compartiment, les ACL sont désactivées par défaut. Il est recommandé d'utiliser les stratégies AWS Identity and Access Management (IAM) plutôt que les ACL pour contrôler l'accès à vos ressources S3.

Confirmer le compte propriétaire des objets

Par défaut, le compte AWS propriétaire du compartiment dans lequel l'objet est stocké est également propriétaire de l'objet. Si d’autres comptes peuvent charger des objets dans votre compartiment, vérifiez l’autorisation des objets auxquels vos utilisateurs ne peuvent pas accéder.

Pour vérifier si le compartiment et l'objet ont le même propriétaire, procédez comme suit :

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

    aws s3api list-buckets --query "Owner.ID"
  2. Exécutez la commande list-objects pour obtenir l’ID canonique Amazon S3 du compte propriétaire de l’objet auquel vous ne pouvez pas accéder :

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

    Remarque : Remplacez DOC-EXAMPLE-BUCKET par le nom de votre compartiment et exampleprefix par la valeur de votre préfixe. Vous pouvez utiliser la commande list-objects pour vérifier plusieurs objets en même temps.

  3. Si les ID canoniques ne correspondent pas, cela signifie que vous n’êtes pas propriétaire de l’objet. Le propriétaire de cet objet peut exécuter la commande put-object-acl pour vous accorder le contrôle total de l’objet :

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

    Remarque : Remplacez DOC-EXAMPLE-BUCKET par le nom du compartiment contenant les objets et exampleobject.jpg par le nom de la clé.

  4. Une fois que le propriétaire de l’objet a modifié l’ACL de l’objet en bucket-owner-full-control, le propriétaire du compartiment peut accéder à l’objet. Pour remplacer le propriétaire de l’objet par le compte du compartiment, exécutez la commande cp depuis le compte du compartiment pour copier l’objet sur lui-même.

Créer un rôle IAM avec des autorisations d’accès à votre compartiment

Si le rôle IAM et le propriétaire du compartiment appartiennent au même compte, le rôle IAM ou le compartiment doivent disposer d'autorisations. Vous n'avez pas besoin d'autorisations pour le rôle IAM ni pour le compartiment.

Pour ajouter des autorisations sur différents comptes, créez un rôle IAM dans votre compte avec des autorisations sur votre compartiment. Accordez ensuite à un autre compte AWS l’autorisation d’endosser ce rôle IAM. Pour plus d’informations, consultez le didacticiel IAM : Déléguer l’accès entre comptes AWS à l’aide de rôles IAM.

Consulter la stratégie de compartiment ou les stratégies d’utilisateur IAM

Consultez la stratégie de compartiment ou les stratégies utilisateur IAM associées pour détecter toute instruction susceptible de refuser l’accès. Vérifiez que les requêtes adressées à votre compartiment remplissent les conditions de la stratégie de compartiment ou des stratégies IAM. Vérifiez les instructions de rejet incorrectes, les actions manquantes ou les fautes de frappe dans une stratégie.

Conditions d’une instruction de rejet

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

  • Authentification multifactorielle (MFA)
  • Clés de chiffrement
  • Adresse IP spécifique
  • Clouds privés virtuels (VPC) ou points de terminaison de VPC spécifiques
  • Utilisateurs ou rôles IAM spécifiques

Remarque : Si vous nécessitez l’authentification multifactorielle et que les utilisateurs utilisent l’AWS CLI pour envoyer des requêtes, assurez-vous que les utilisateurs configurent l’AWS CLI pour utiliser l’authentification multifactorielle.

Par exemple, dans la stratégie de compartiment suivante, Statement1 autorise un accès public pour télécharger des objets (s3:GetObject) depuis DOC-EXAMPLE-BUCKET. Cependant, Statement2 refuse explicitement à tout le monde l’accès au téléchargement d’objets depuis DOC-EXAMPLE-BUCKET, sauf si la requête provient du point de terminaison de VPC vpce-1a2b3c4d. Les instructions de rejet étant prioritaires par rapport aux instructions d’autorisation, l'accès est refusé aux utilisateurs qui tentent de télécharger des objets depuis une interface extérieure à vpce-1a2b3c4d.

{  
  "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": "*"  
    }  
  ]  
}

Stratégie de compartiment ou stratégies IAM

Vérifiez que la stratégie de compartiment ou les stratégies IAM autorisent les actions Amazon S3 dont vos utilisateurs ont besoin. Par exemple, la stratégie de compartiment suivante n’inclut pas l’autorisation pour l’action s3:PutObjectAcl :

{  
  "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"  
        ]  
      }  
    }  
  ]  
}

Si l'utilisateur IAM essaie de modifier l'ACL d'un objet, il reçoit une erreur Accès refusé.

Autres erreurs de stratégie

Vérifiez la présence d'espaces supplémentaires, d'un ARN incorrect ou d'autres fautes de frappe dans la stratégie du compartiment ou les stratégies utilisateur IAM.

Si une stratégie IAM comporte un espace supplémentaire dans l'ARN, celui-ci est incorrectement évalué et l'utilisateur reçoit une erreur Accès refusé. Par exemple, une stratégie IAM qui comporte un espace supplémentaire dans l'ARN : arn:aws:s3::: DOC-EXAMPLE-BUCKET/* est évalué comme arn:aws:s3:::%20DOC-EXAMPLE-BUCKET/.

Confirmer que les limites des autorisations IAM permettent l’accès à Amazon S3

Vérifiez que les limites d'autorisations IAM définies pour les entités IAM autorisent l'accès à Amazon S3.

Vérifier les paramètres Blocage de l’accès public Amazon S3 de votre compartiment

Si des erreurs Accès refusé apparaissent sur les requêtes de lecture publiques autorisées, vérifiez les paramètres d’accès public au blocage Amazon S3 du compartiment sur le compte et le compartiment.Ces paramètres peuvent remplacer les autorisations qui permettent un accès public en lecture.

Vérifier les informations d’identification de l’utilisateur

Vérifiez les informations d’identification que vos utilisateurs ont configurées pour accéder à Amazon S3. Les utilisateurs doivent configurer les kits SDK AWS et l'interface de ligne de commande AWS pour utiliser les informations d'identification de l'identité IAM qui a accès à votre compartiment.

Pour l’AWS CLI, exécutez la commande configurer pour vérifier les informations d’identification :

aws configure list

Si les utilisateurs accèdent à votre 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 messages d’erreur d’accès refusé à partir d’informations d’identification de sécurité temporaires accordées via AWS Security Token Service (AWS STS), examinez la stratégie de session associée. Lorsqu’un administrateur crée des informations d’identification de sécurité temporaires à l’aide de l’appel d’API AssumeRole ou de la commande assume-role, il peut transmettre des stratégies spécifiques à la session.

Pour trouver les stratégies de session associées, recherchez les événements AssumeRole dans l'historique des événements AWS CloudTrail au cours de la même période que les demandes d'accès ayant échoué. Puis, vérifiez le champ requestParameters dans les journaux CloudTrail pour connaître tous les paramètres stratégie ou policyArns. Confirmez que la stratégie ou l’ARN de stratégie associé accorde les autorisations Amazon S3 nécessaires.

Par exemple, l’extrait suivant d’un journal CloudTrail montre que les informations d’identification temporaires incluent une stratégie de session en ligne qui accorde les 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/*"]  
    }]  
    }"  
}

Vérifier que la stratégie de point de terminaison de VPC Amazon dispose des autorisations appropriées pour accéder à vos ressources S3

Si vos utilisateurs utilisent une instance EC2 routée via un point de terminaison Amazon Virtual Private Cloud (Amazon VPC) pour accéder à votre compartiment, vérifiez la stratégie de point de terminaison de VPC.

Par exemple, la stratégie de point de terminaison de VPC suivante autorise l’accès uniquement à DOC-EXAMPLE-BUCKET. Les utilisateurs qui utilisent le point de terminaison de VPC pour envoyer des requêtes 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": "*"  
    }  
  ]  
}

Examiner la stratégie IAM de votre point d’accès Amazon S3

Si vous utilisez un point d’accès Amazon S3 pour gérer l’accès à votre compartiment, consultez la stratégie IAM du point d’accès.

Les autorisations que vous accordez dans le cadre d'une stratégie de point d'accès ne sont effectives que lorsque la stratégie de compartiment associée autorise également le même accès. Confirmez que la stratégie de compartiment et la stratégie de point d’accès accordent les autorisations correctes.

Vérifiez que l'objet se trouve dans le compartiment et que son nom ne contient pas de caractères spéciaux

Vérifiez que l’objet demandé se trouve dans le compartiment. Sinon, la requête ne trouve pas l’objet et Amazon S3 suppose que l’objet n’existe pas. Vous recevez le message d’erreur Accès refusé (au lieu de l’erreur 404 Introuvable) si vous ne disposez pas des autorisations s3:ListBucket appropriées.

Remarque : Il existe une procédure différente pour récupérer des objets dont le nom comporte des caractères spéciaux.

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

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

Remarque : Remplacez DOC-EXAMPLE-BUCKET par le nom de votre compartiment.

Si l'objet se trouve dans le compartiment, l'erreur Accès refusé ne masque pas l'erreur 404 Introuvable. Vérifiez les autres exigences de configuration pour résoudre l’erreur Accès refusé.

Si l’objet ne se trouve pas dans le compartiment, l’erreur Accès refusé masque l’erreur 404 Introuvable. Remédiez au problème lié à l’objet manquant.

Vérifier la configuration du chiffrement AWS KMS

Si un utilisateur IAM dispose des autorisations complètes sur un objet mais ne peut toujours pas y accéder, vérifiez si l'objet utilise le chiffrement AWS Key Management Service (AWS KMS) (SSE-KMS). Vous pouvez utiliser la console Amazon S3 pour afficher les propriétés de l'objet et vérifier les informations SSE-KMS de l'objet.

Si l'objet est chiffré à l'aide d'une clé gérée par le client, la stratégie de clé KMS doit vous permettre d'exécuter l'action kms:GenerateDataKey ou kms:Decrypt. Pour en savoir plus, consultez la section Autorise l’accès au compte AWS et active les stratégies IAM.

Si l'utilisateur IAM appartient à un compte différent de celui associé à la clé AWS KMS, modifiez la stratégie IAM pour accorder l’autorisation Kms:Decrypt, Par exemple, pour télécharger les objets SSE-KMS, vous devez spécifier l'autorisation kms:Decrypt à la fois dans la stratégie de clé et dans la stratégie IAM. Pour en savoir plus sur l’accès intercompte entre l’utilisateur IAM et la clé KMS, consultez la section Autoriser les utilisateurs d’autres comptes à utiliser une clé KMS.

Pour les compartiments pour lesquels le paiement par le demandeur est activé, vérifiez que les utilisateurs ont spécifié le paramètre request-payer

Si vous avez activé Paiement par le demandeur, les utilisateurs d’autres comptes doivent spécifier le paramètre request-payer lorsqu’ils envoient des requêtes vers votre compartiment. Pour vérifier si vous avez activé Paiement par le demandeur, utilisez la console Amazon S3 pour consulter 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 pour lequel Paiement par le demandeur est activé :

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

Vérifiez les SCP d’AWS Organizations

Si vous utilisez AWS Organizations, vérifiez les stratégies de contrôle des services pour vous assurer que l’accès à Amazon S3 est autorisé. Les SCP spécifient les autorisations maximales pour les comptes concernés. 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 fonctionnalités pour une organisation avec AWS Organizations.

Informations connexes

Résoudre les erreurs d'accès refusé (403 Interdit) dans Amazon S3

Obtenir les ID de requête Amazon S3 pour AWS Support

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