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

Pourquoi est-ce que je reçois un message d'erreur Accès refusé lorsque j'utilise la fonctionnalité de site Web statique Amazon S3 ?

Lecture de 7 minute(s)
0

Je souhaite savoir pourquoi le message d'erreur Accès refusé s'affiche lorsque j'utilise un compartiment Amazon Simple Storage Service (Amazon S3) pour héberger un site Web statique avec le point de terminaison du site Web statique S3.

Résolution

Si vous souhaitez héberger un site Web statique à l'aide d'Amazon S3, mais que vous recevez un message d’erreur Accès refusé, vérifiez les conditions suivantes :

Les objets du compartiment doivent être accessibles au public

Le point de terminaison de site Web statique S3 ne prend en charge que le contenu accessible au public. Pour vérifier si un objet de votre compartiment S3 est accessible au public, ouvrez son URL dans un navigateur Web. Vous pouvez également exécuter une commande cURL sur l'URL.

Voici un exemple d’URL d’un objet S3 :

http://doc-example-bucket.s3-website-us-east-1.amazonaws.com/index.html

Si une erreur Accès refusé est renvoyée par le navigateur Web ou la commande cURL, l’objet n’est pas accessible au public. Pour autoriser l'accès public en lecture à votre objet S3, créez une stratégie de compartiment qui autorise l'accès public en lecture à tous les objets du compartiment.

La stratégie de compartiment S3 doit autoriser l’accès à l’action s3:GetObject

Examinez votre stratégie de compartiment et assurez-vous qu'aucune instruction de refus ne bloque l'accès public en lecture à l'action s3:GetObject. Même si vous disposez d’une instruction d’autorisation explicite pour s3:GetObject dans votre stratégie de compartiment, vérifiez qu’il n’existe pas d’instruction de refus explicite contraire. Une instruction de refus explicite prévaut toujours sur une instruction d’autorisation explicite.

Pour examiner une stratégie de compartiment pour s3:GetObject, procédez comme suit :

  1. Ouvrez la console Amazon S3.
  2. Choisissez l’onglet Autorisations.
  3. Sélectionnez Stratégie de compartiment.
  4. Consultez la stratégie de compartiment pour les instructions contenant « Action » : « s3:GetObject » ou « Action » : « s3:\ » ».
  5. (Facultatif) Modifiez la stratégie de compartiment.Par exemple, vous pouvez supprimer ou modifier des instructions qui bloquent l'accès public en lecture à s3:GetObject.

Le compte AWS propriétaire du compartiment doit également être propriétaire de l'objet

Pour autoriser l’accès public en lecture aux objets, le compte AWS propriétaire du compartiment doit également être propriétaire des objets. Un compartiment ou un objet appartient au compte de l’identité AWS Identity and Access Management (IAM) qui a créé ce compartiment ou cet objet.

Remarque : L’exigence de propriété de l’objet s’applique à l’accès public en lecture accordé par une stratégie de compartiment. Elle ne s’applique pas à l’accès public en lecture accordé par la liste de contrôle d’accès (ACL) de l’objet.

Pour vérifier si votre compartiment et vos objets Amazon S3 appartiennent au même compte AWS, procédez comme suit :

  1. Pour récupérer l'ID canonique S3 du propriétaire du compartiment, utilisez la commande suivante :

    aws s3api list-buckets --query Owner.ID
  2. Pour récupérer l'ID canonique S3 du propriétaire de l'objet, utilisez la commande suivante :

    aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.html

    Remarque : Cet exemple montre un seul objet. Pour vérifier plusieurs objets, utilisez la commande list.

  3. Vérifiez si les ID canoniques du propriétaire du compartiment et du propriétaire de l'objet correspondent. S’ils ne correspondent pas, le compartiment et l’objet n’ont pas le même propriétaire.
    Remarque : Vous pouvez également utiliser la console Amazon S3 pour vérifier les propriétaires du compartiment et des objets. Les propriétaires se trouvent dans l’onglet Autorisations du compartiment ou de l’objet concerné.

  4. Si les ID canoniques du compartiment et du propriétaire de l'objet ne correspondent pas, remplacez le propriétaire de l'objet par le propriétaire du compartiment.
    À partir du compte du propriétaire de l'objet, exécutez la commande suivante pour récupérer les autorisations ACL attribuées à l'objet :

    aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name

    Si l’objet ne dispose pas des autorisations ACL bucket-owner-full-control, exécutez la commande suivante depuis le compte du propriétaire de l’objet :

    aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name --acl bucket-owner-full-control

    Si l'objet possède des autorisations ACL bucket-owner-full-control, exécutez la commande suivante à partir du compte du propriétaire du compartiment. Cette commande change le propriétaire de l'objet en le copiant sur lui-même :

    aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html --storage-class STANDARD

    Vous pouvez également utiliser Propriété d’objets S3 pour accorder au propriétaire du compartiment la propriété automatique de tous les objets chargés par des utilisateurs anonymes ou d'autres comptes AWS.

Les objets du compartiment ne peuvent pas être chiffrés par AWS KMS

AWS KMS ne prend pas en charge les requêtes anonymes.Par conséquent, tout compartiment Amazon S3 autorisant un accès anonyme ou public ne s'appliquera pas aux objets chiffrés avec AWS KMS. Vous devez supprimer le chiffrement KMS des objets que vous souhaitez diffuser à l'aide du point de terminaison statique du site Web Amazon S3.

Remarque : À la place du chiffrement AWS KMS, utilisez AES-256 pour chiffrer vos objets.

Vous pouvez vérifier si un objet de votre compartiment est chiffré par KMS à l'aide des méthodes suivantes :

  • Utilisez la console Amazon S3 pour afficher les propriétés de l’objet. Consultez la boîte de dialogue Chiffrement. Si AWS KMS est sélectionné, l’objet est chiffré par KMS.
  • Exécutez la commande head-object à l’aide de l’interface de la ligne de commande AWS (AWS CLI). Si la commande renvoie ServerSideEncryption sous la forme aws:kms, l’objet est chiffré par KMS.

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.

Pour modifier les paramètres de chiffrement de l'objet à l'aide de la console Amazon S3, consultez la section Spécifier le chiffrement Amazon S3.

Pour modifier les paramètres de chiffrement de l’objet à l’aide de l’AWS CLI, vérifiez que le compartiment de l’objet ne dispose pas du chiffrement par défaut. Si le compartiment n'est pas doté du chiffrement par défaut, supprimez le chiffrement de l'objet en le copiant sur lui-même :

aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html --storage-class STANDARD

Avertissement : La copie de l'objet sur lui-même entraîne la suppression des paramètres de storage-class et website-redirect-location. Pour conserver ces paramètres dans le nouvel objet, veillez à spécifier explicitement les valeurs de storage-class ou website-redirect-location dans la requête de copie.

Les objets demandés doivent exister dans le compartiment S3

Si un utilisateur effectuant la requête ne dispose pas des autorisations s3:ListBucket, il reçoit une erreur Accès refusé pour les objets manquants.

Vous pouvez exécuter la commande head-object de l’AWS CLI pour vérifier si un objet existe dans le compartiment.

Remarque : Les noms d’objets S3 sont sensibles à la casse. Si le nom de l'objet de la requête n'est pas valide, Amazon S3 signalera que l'objet est manquant.

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

Si l’objet n’existe pas dans le compartiment, l’erreur Accès refusé masque une erreur 404 Introuvable. Résolution du problème lié à l’objet manquant.

Remarque : Pour des raisons de sécurité, il n’est pas recommandé d’autoriser l’accès public à s3:ListBucket. L’autorisation de l’accès public à s3:ListBucket permet aux utilisateurs de voir et de répertorier tous les objets d’un compartiment. Cet accès expose les détails des métadonnées de l’objet (par exemple, clé et taille) aux utilisateurs, même si ces derniers ne sont pas autorisés à télécharger l’objet.

Le blocage de l’accès public Amazon S3 doit être désactivé sur le compartiment

Les paramètres de blocage de l’accès public Amazon S3 peuvent s’appliquer à des compartiments individuels ou à des comptes AWS. Vérifiez qu'aucun paramètre de blocage de l’accès public Amazon S3 n’est appliqué à votre compartiment S3 ou à votre compte AWS. Ces paramètres peuvent remplacer les autorisations qui permettent un accès public en lecture.

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