Un utilisateur autorisé à charger des objets vers mon compartiment Amazon S3 reçoit des erreurs Accès refusé. Pourquoi ?

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

Un utilisateur AWS Identity and Access Management (IAM) est autorisé à exécuter l'action s3:PutObject sur mon compartiment Amazon Simple Storage Service (Amazon S3). Toutefois, lorsqu'il essaie de charger un objet, l'erreur HTTP « 403 : Accès refusé » s'affiche. Comment corriger ce problème ?

Courte description

Si l'utilisateur IAM possède les autorisations nécessaires pour charger des objets dans le compartiment, vérifiez les stratégies suivantes afin de rechercher les paramètres qui empêchent les chargements :

  • Autorisation utilisateur IAM pour l'action s3:PutObjectAcl
  • Conditions dans la stratégie de compartiment
  • Accès autorisé par une stratégie de point de terminaison Amazon Virtual Private Cloud (Amazon VPC)
  • Chiffrement AWS KMS

Solution

Autorisation utilisateur IAM pour l'action s3:PutObjectAcl

Si l'utilisateur IAM doit charger la liste de contrôle d'accès (ACL) de l'objet lors du chargement, il a également besoin des autorisations pour l'action s3:PutObjectAcl dans sa stratégie IAM. Pour plus d'informations sur comment mettre à jour la stratégie IAM d'un utilisateur, consultez la section Modification des autorisations pour un utilisateur IAM.

Conditions dans la stratégie de compartiment

Passez en revue votre stratégie de compartiment à la recherche de conditions telles que dans les exemples suivants qui limitent les chargements dans votre compartiment. Si la stratégie de compartiment présente une condition et que celle-ci est valide, l'utilisateur IAM doit y répondre pour que le chargement fonctionne.

Important : lorsque vous passez en revue les conditions, assurez-vous de vérifier que la condition est associée à une déclaration Autoriser (« Effet » : « Autoriser ») ou à une déclaration Refuser (« Effet » : « Refuser »). Pour que le chargement fonctionne, l'utilisateur doit répondre à la condition d'une déclaration Autoriser ou éviter la condition d'une déclaration Refuser.

Recherchez une condition qui autorise les chargements uniquement à partir d'une adresse IP spécifique, comme suit :

"Condition": {
  "IpAddress": {
    "aws:SourceIp": "54.240.143.0/24"
  }
}

Si votre stratégie de compartiment présente cette condition, l'utilisateur IAM doit accéder à votre compartiment à partir des adresses IP autorisées.

Recherchez une condition qui autorise les chargements uniquement lorsque l'objet est une classe de stockage spécifique, comme suit :

"Condition": {
  "StringEquals": {
    "s3:x-amz-storage-class": [
      "STANDARD_IA"
    ]
  }

Si la stratégie présente cette condition, l'utilisateur doit charger des objets avec la classe de stockage autorisée. Par exemple, la déclaration de condition précédente nécessite la classe de stockage STANDARD_IA. Cela signifie que l'utilisateur doit télécharger l'objet avec une commande AWS Command Line Interface (AWS CLI) similaire à la suivante :

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key examplefile.jpg --body c:\examplefile.jpg --storage-class STANDARD_IA

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

Recherchez une condition qui autorise les chargements uniquement lorsque l'objet est attribué à une liste de contrôle d'accès (ACL) spécifique, comme suit :

"Condition": {
                "StringEquals": {
                    "s3:x-amz-acl":["public-read"]
                }
            }

Si la stratégie présente cette condition, l'utilisateur doit charger des objets avec la liste de contrôle d'accès autorisée. Par exemple, la condition précédente nécessite la liste de contrôle d'accès public-read, donc l'utilisateur doit charger l'objet avec une commande comme suit :

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key examplefile.jpg --body c:\examplefile.jpg --acl public-read

Recherchez une condition qui nécessite que les chargements accordent un contrôle total de l'objet au propriétaire du compartiment (ID d'utilisateur canonique), comme suit :

"Condition": {
  "StringEquals": {
    "s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
  }
}

Si la stratégie présente cette condition, l'utilisateur doit charger des objets avec une commande telle que :

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key examplefile.jpg --body c:\examplefile.jpg --grant-full-control id=CanonicalUserID

Recherchez une condition qui autorise les chargements uniquement lorsque les objets sont chiffrés par une clé de chiffrement AWS KMS (AWS Key Management System), comme suit :

"Condition": {<br>"StringEquals": {<br>"s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/abcdabcd-abcd-abcd-abcd-abcdabcdabcd"<br>}<br>}

Si la stratégie présente cette condition, l'utilisateur doit charger des objets avec une commande telle que :

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key examplefile.jpg --body c:\examplefile.jpg --server-side-encryption aws:kms --ssekms-key-id arn:aws:kms:us-east-1:111122223333:key/abcdabcd-abcd-abcd-abcd-abcdabcdabcd

Recherchez une condition qui autorise les chargements uniquement lorsque les objets utilisent un certain type de chiffrement côté serveur, comme suit :

"Condition": {
  "StringEquals": {
    "s3:x-amz-server-side-encryption": "AES256"
  }
}

Si la stratégie présente cette condition, l'utilisateur doit charger des objets avec une commande telle que :

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key examplefile.jpg --body c:\examplefile.jpg --server-side-encryption "AES256"

Accès autorisé par une stratégie de point de terminaison d'un VPC

Si l'utilisateur IAM charge des objets sur Amazon S3 à l'aide d'une instance Amazon Elastic Compute Cloud (Amazon EC2) et que cette instance est acheminée vers Amazon S3 à l'aide d'un point de terminaison VPC, vous devez vérifier la stratégie du point de terminaison VPC. Assurez-vous que la stratégie du point de terminaison autorise les chargements vers votre compartiment.

Par exemple, la stratégie de point de terminaison VPC suivante autorise l'accès uniquement à DOC-EXAMPLE-BUCKET. Si votre compartiment n'est pas répertorié comme une ressource autorisée, les utilisateurs ne peuvent pas charger d'objets dans votre compartiment à l'aide de l'instance dans le VPC.

{
  "Statement": [{
    "Sid": "Access-to-specific-bucket-only",
    "Principal": "*",
    "Action": [
      "s3:PutObject"
    ],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
  }]
}

En outre, si les utilisateurs téléchargent des objets avec une ACL, la stratégie de point de terminaison VPC doit également accorder l'accès à l'action S3:PutObjectAcl, comme ici :

{
  "Statement": [{
    "Sid": "Access-to-specific-bucket-only",
    "Principal": "*",
    "Action": [
      "s3:PutObject",
      "s3:PutObjectAcl",
    ],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
  }]
}

Chiffrement AWS KMS

Mettez à jour les autorisations AWS KMS de votre utilisateur ou de votre rôle IAM en fonction du message d'erreur que vous recevez. Pour résoudre ces erreurs Accès refusé, consultez Pourquoi le message d'erreur Accès refusé s'affiche-t-il lorsque je télécharge des fichiers vers mon compartiment Amazon S3 associé à un chiffrement par défaut AWS KMS ?

Important : Si la clé AWS KMS et le rôle IAM appartiennent à d'autres comptes AWS, alors la politique IAM et la stratégie de clé KMS doivent être mises à jour. Assurez-vous d'ajouter les autorisations KMS à la politique IAM et à celle de clé KMS. De plus, une clé AWS KMS avec un alias « aws/s3 » ne peut pas être utilisée pour le chiffrement du compartiment par défaut si des principaux IAM appartenant à différents comptes chargent les objets. Tout chargement d'objet, copie d'objet ou compartiment configuré pour utiliser une clé de compartiment S3 pour SSE-KMS doit avoir accès à l'autorisation kms:Decrypt. Pour plus d'informations sur les clés AWS KMS et la gestion des politiques, consultez Clés KMS gérées par AWS et clés gérées par le client.


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


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