Passer au contenu

Un utilisateur autorisé à ajouter des objets à mon compartiment Amazon S3 reçoit des erreurs Access Denied (Accès refusé). Pourquoi ?

Lecture de 6 minute(s)
0

Un utilisateur de Gestion des identités et des accès AWS (AWS IAM) est autorisé à effectuer l'action s3:PutObject sur mon compartiment Amazon Simple Storage Service (Amazon S3). Cependant, lorsqu'il essaie de charger un objet, il reçoit une erreur HTTP 403 : Access Denied (Accès refusé).

Brève description

Si l'utilisateur IAM dispose des autorisations nécessaires pour effectuer des chargements vers le compartiment, vérifiez les politiques suivantes pour les paramètres qui empêchent les chargements :

  • Autorisation utilisateur IAM sur s3:PutObjectAcl
  • Conditions de la politique du compartiment
  • Accès autorisé par une politique de point de terminaison Amazon Virtual Private Cloud (Amazon VPC)
  • Chiffrement AWS KMS

Résolution

Autorisation utilisateur IAM sur s3:PutObjectAcl

Si l'utilisateur IAM doit mettre à jour la liste de contrôle d'accès (ACL) de l'objet pendant le chargement, il doit également disposer des autorisations pour s3:PutObjectAcl dans sa politique IAM. Pour des instructions sur la procédure de mise à jour de la politique IAM d'un utilisateur, consultez la section Modification des autorisations pour un utilisateur IAM.

Conditions de la politique du compartiment

Examinez votre politique de compartiment pour prendre connaissance des exemples de conditions suivants qui limitent les chargements vers votre compartiment. Si la politique de compartiment comporte une condition et que celle-ci est valide, l'utilisateur IAM doit remplir la condition pour que le chargement fonctionne.

Important : Lorsque vous passez en revue les conditions, assurez-vous qu'elles sont associées à une instruction d’autorisation (« Effet » : « Autoriser ») ou une instruction de refus (« Effet » : « Refuser »). Pour que le téléchargement fonctionne, l'utilisateur doit respecter la condition d'une instruction d’autorisation ou éviter la condition d'une instruction de refus.

Vérifiez si une condition autorise les chargements uniquement à partir d'une adresse IP spécifique, comme suit :

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

Si votre politique de compartiment comporte cette condition, l'utilisateur IAM doit accéder à votre compartiment à partir des adresses IP autorisées.

Vérifiez si une condition autorise les chargements uniquement lorsque l'objet appartient à une classe de stockage spécifique, comme suit :

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

Si votre politique comporte cette condition, l'utilisateur doit charger des objets avec la classe de stockage autorisée. Par exemple, l'instruction de condition précédente nécessite la classe de stockage STANDARD_IA. Cela signifie que l'utilisateur doit charger l'objet à l'aide d'une commande d’interface de la ligne de commande AWS (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 messages d’erreurs lors de l’exécution des commandes de l’AWS CLI, vérifiez que vous utilisez bien la version la plus récente de l’AWS CLI.

Vérifiez si une condition autorise les chargements uniquement lorsque l'objet est associé à une liste de contrôle d'accès (ACL) spécifique, similaire à la suivante :

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

Si votre politique comporte cette condition, les utilisateurs doivent charger des objets avec l'ACL autorisé. Par exemple, la condition précédente requiert l'ACL public-read. L'utilisateur doit donc charger l'objet à l'aide d'une commande similaire à la suivante :

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

Recherchez une condition qui exige que les chargements accordent le 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 votre politique inclut cette condition, l'utilisateur doit charger des objets à l'aide d'une commande similaire à la suivante :

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

Vérifiez si une condition autorise les chargements uniquement lorsque les objets sont chiffrés par une clé AWS Key Management System (AWS KMS), comme suit :

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

Si votre politique inclut cette condition, l'utilisateur doit charger des objets à l'aide d'une commande similaire à la suivante :

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

Vérifiez si une condition autorise les chargements uniquement lorsque les objets utilisent un certain type de chiffrement côté serveur, similaire à ce qui suit :

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

Si votre politique comporte cette condition, l'utilisateur doit charger des objets à l'aide d'une commande similaire à la suivante :

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

Accès autorisé par une politique de point de terminaison de VPC

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

Par exemple, la stratégie de point de terminaison de VPC suivante autorise l’accès uniquement à DOC-EXAMPLE-BUCKET. Si votre compartiment n'est pas répertorié comme ressource autorisée, les utilisateurs ne peuvent pas le charger vers votre compartiment à l'aide de l'instance du 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 chargent des objets avec une ACL, la politique de point de terminaison de VPC doit également autoriser l'accès à l'action s3:PutObjectAcl, comme suit :

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

En fonction du message d'erreur reçu, mettez à jour les autorisations AWS KMS de votre utilisateur ou rôle IAM. Pour résoudre ces erreurs Access Denied (Accès refusé), consultez la section Pourquoi un message d'erreur Access Denied s’affiche-t-il lorsque je charge des fichiers vers mon compartiment Amazon S3 doté du chiffrement par défaut d'AWS KMS ?

Important : Si la clé AWS KMS et le rôle IAM appartiennent à des comptes AWS différents, la politique IAM et la stratégie clé KMS doivent être mises à jour. Assurez-vous d'ajouter les autorisations KMS à la politique IAM et à la stratégie 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 intercomptes chargent les objets. Tout chargement, copie ou compartiment d'objets configuré pour utiliser une clé de compartiment S3 pour SSE-KMS doit avoir accès à l'autorisation kms:Decrypt. Pour plus d'informations sur la gestion des clés et des politiques AWS KMS, consultez la section Utilisation du chiffrement côté serveur avec les clés AWS KMS (SSE-KMS).

Informations connexes

Exemples de politiques de compartiment utilisant des clés de condition

Définition du comportement de chiffrement côté serveur par défaut pour les compartiments Amazon S3

AWS OFFICIELA mis à jour il y a un an