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

Dernière mise à jour : 04/11/2020

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 ?

Brève 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)

Ré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 --acl bucket-owner-full-control

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": {
  "StringEquals": {
    "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/*"
  }
}

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 --ssekms-key-id arn:aws:kms:us-east-1:111122223333:key/*

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

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


Besoin d'aide pour une question technique ou de facturation ?