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

Lecture de 12 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

Utiliser le document d’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 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 des autorisations de lecture ou de contrôle total de la liste de contrôle d’accès (ACL).

Confirmer le compte propriétaire des objets

Par défaut, un objet S3 appartient au compte AWS qui l’a chargé. Cela est vrai même lorsque le compartiment appartient à un autre compte. Si d’autres comptes peuvent télé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 des erreurs surviennent lors de l’exécution des commandes AWS CLI, assurez-vous que vous utilisez bien la version la plus récente d’AWS CLI.

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

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

2.    Exécutez la commande list-objects pour obtenir l’identifiant canonique Amazon S3 du compte propriétaire de l’objet auquel vous ne pouvez pas accéder. Remplacez DOC-EXAMPLE-BUCKET par le nom de votre compartiment et exemplepréfixe par la valeur de votre préfixe.

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

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

3.    Si les identifiants canoniques ne correspondent pas, cela signifie que vous n’êtes pas propriétaire de l’objet. Le propriétaire de cet 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 contenant les objets. Remplacez exempleobjet.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 modifié l’ACL de l’objet en bucket-owner-full-control, le propriétaire du compartiment peut accéder à l’objet. Toutefois, la modification de l’ACL ne suffit pas à changer la propriété de 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.

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 de contrôle total du propriétaire du compartiment.

2.    Activez et définissez la propriété de l’objet 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 tant que propriétaire du compartiment lorsque l’objet est chargé avec l’ACL de contrôle total du propriétaire du compartiment.

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

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

Consulter la politique de compartiment ou les politiques d’utilisateur IAM

Consultez la politique de compartiment ou les politiques utilisateur IAM associées pour détecter toute instruction susceptible de refuser l’accès. Vérifiez que les demandes adressées à votre compartiment remplissent les conditions de la politique de compartiment ou des politiques IAM. Vérifiez qu’il n’y a pas d’instruction de rejet incorrectes, d’actions manquantes ou d’espacements incorrects dans une politique.

Conditions relatives au rejet d’une instruction

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
  • VPC ou points de terminaison d’un VPC spécifiques
  • utilisateurs ou rôles IAM spécifiques

Remarque : si vous avez besoin de l’authentification multifactorielle et que les utilisateurs envoient des demandes via AWS CLI, assurez-vous que les utilisateurs configurent l’AWS CLI pour utiliser l’authentification multifactorielle.

Par exemple, dans la politique 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 demande provient du point de terminaison d’un VPC vpce-1a2b3c4d. Dans ce cas, l’instruction de rejet est prioritaire. Cela signifie que les utilisateurs qui tentent de télécharger des objets depuis 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 Amazon S3 dont vos utilisateurs ont besoin. Par exemple, la politique de compartiment suivante n’inclut pas l’autorisation pour l’action s3:PutObjectAcl. Si l’utilisateur IAM tente de modifier la liste de contrôle d’accès (ACL) d’un objet, il reçoit une erreur d’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"
        ]
      }
    }
  ]
}

Autres erreurs de politique

Vérifiez qu’il n’y a pas d’espaces supplémentaires ou d’ARN incorrects dans la politique de compartiment ou dans les politiques d’utilisateur IAM.

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 sous la forme arn:aws:s3:::%20DOC-EXAMPLE-BUCKET/ et donne à l’utilisateur IAM une erreur d’accès refusé.

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

Passez en revue les limites d’autorisations IAM définies pour les identités IAM qui tentent d’accéder au compartiment. Confirmez que les limites des autorisations IAM permettent bien l’accès à Amazon S3.

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

Si des erreurs d’accès refusé apparaissent sur des demandes de lecture publiques autorisées, vérifiez les paramètres du compartiment Blocage de l’accès public Amazon S3.

Vérifiez les paramètres de blocage de l’accès public S3 au niveau du compte et du compartiment. Ces paramètres peuvent remplacer les autorisations qui permettent un accès public en lecture. Le blocage de l’accès public Amazon S3 peuvent s’appliquer à des compartiments individuels ou aux comptes AWS.

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 kits SDK AWS et le AWS CLI doivent être configurés pour utiliser les informations d’identification de l’utilisateur ou du rôle IAM ayant accès à votre compartiment.

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

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 bien le rôle adéquat. 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), passez en revue la politique 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 politiques spécifiques à la session.

Pour trouver les politiques de session associées aux erreurs d’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 au même moment que les demandes d’accès à Amazon S3 qui ont échoué. Passez ensuite en revue le champ requestParameters dans les journaux CloudTrail correspondants pour connaître tous les paramètres de politique ou de policyArns. Confirmez que la politique ou l’ARN de politique 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 politique 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érifiez 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 via une instance EC2 routée via un point de terminaison d’un VPC, vérifiez la politique relative au 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 par l’intermédiaire de 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": "*"
    }
  ]
}

Passer en revue la politique 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 politique IAM du point d’accès.

Les autorisations accordées dans une politique de point d’accès ne sont effectives 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 correctes.

Confirmer que l’objet n’est pas un objet manquant ou qu’il ne contient pas de caractères spéciaux

Vérifiez si l’objet demandé existe 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 des Erreurs 404 Page introuvable) si vous ne disposez pas des autorisations s3:ListBucket appropriées.

Un objet qui possède un caractère spécial (tel qu’un espace) nécessite une gestion spéciale pour récupérer l’objet.

Exécutez la commande head-object de l’AWS CLI 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, l’erreur d’accès refusé ne masque pas une Erreur 404 Page introuvable. Vérifiez les autres exigences de configuration pour résoudre l’erreur d’accès refusé.

Si l’objet n’est pas dans le compartiment, l’erreur d’accès refusé masque une Erreur 404 Page introuvable. Résolvez le problème lié à l’objet manquant.

Vérifier la configuration du chiffrement AWS KMS

Notez les points suivants à propos du chiffrement AWS KMS (SSE-KMS) :

  • Si un utilisateur IAM ne peut pas accéder à un objet pour lequel il dispose de toutes les autorisations, 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, qui incluent les informations de chiffrement côté serveur de l’objet.
  • Si l’objet est chiffré par SSE-KMS, assurez-vous que la stratégie 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, il doit disposer des autorisations kms:Decrypt. Pour en savoir plus, consultez la section Autorise l’accès au compte AWS et active les politiques IAM.
  • Si l’identité et la clé IAM se trouvent dans le même compte, les autorisations kms:Decrypt doivent être accordées à l’aide de la stratégie de clé. La stratégie de clé doit faire référence à la même identité IAM que la politique IAM.
  • Si l’utilisateur IAM appartient à un compte différent de celui associé à la clé AWS KMS, ces autorisations doivent également être accordées dans le cadre de 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 stratégie de clé et dans la politique 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.

Confirmer que le paramètre request-payer est spécifié par les utilisateurs (si vous utilisez Requester Pays)

Si votre compartiment a activé Requester Pays, les utilisateurs d’autres comptes doivent spécifier le paramètre request-payer lorsqu’ils envoient des demandes vers votre compartiment. Pour vérifier si Requester Pays est activé, 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 intercomptes avec Requester Pays :

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

Vérifier votre politique de contrôle des services dans AWS Organizations

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é. 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 à Amazon S3 et entraîne une erreur d’accès refusé :

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

Pour en savoir plus sur les fonctionnalités d’AWS Organizations, consultez la section Activation de toutes les fonctions de votre organisation.

Informations connexes

Résolution des problèmes liés à Amazon S3

Obtenir les identifiants de demande Amazon S3 pour AWS Support

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans