Comment résoudre les erreurs 403 Access Denied (Accès refusé) à partir d'Amazon S3 ?

Date de la dernière mise à jour : 10/05/2019

Des utilisateurs essaient d'accéder aux objets du compartiment Amazon Simple Storage Service (Amazon S3), mais Amazon S3 leur renvoie l'erreur 403 Access Denied (Accès refusé). Comment résoudre ce problème ? 

Brève description

Pour résoudre les erreurs Access Denied (Accès refusé) à partir d'Amazon S3, vérifiez les points suivants :

  • Les autorisations pour les propriétaires de compartiment et d'objet entre plusieurs comptes AWS
  • Les problèmes dans la stratégie de compartiment ou dans les stratégies utilisateur d'AWS Identity and Access Management (IAM)
  • Les identifiants d'accès à Amazon S3
  • La stratégie de point de terminaison d'un VPC
  • Les paramètres de Block Public Access
  • Les objets manquants
  • Le chiffrement d'objet par AWS Key Management Service (AWS KMS)
  • La désactivation du paiement par le demandeur sur le compartiment
  • La stratégie de contrôle du service AWS Organizations

Résolution

Les autorisations pour les propriétaires de compartiment et d'objet entre plusieurs comptes AWS

Par défaut, un objet S3 est détenu par le compte AWS qui l'a téléchargé, même lorsque le compartiment est détenu par un autre compte. Si d'autres comptes peuvent charger des objets dans le compartiment, vérifiez alors à quel compte appartiennent les objets auxquels les utilisateurs ne peuvent pas accéder :

1.    Exécutez l'interface de ligne de commande AWS (CLI AWS) pour obtenir l'ID canonique Amazon S3 pour le compte :

aws s3api list-buckets --query Owner.ID 

2.    Exécutez cette commande pour obtenir l'ID canonique Amazon S3 du compte qui détient l'objet auquel les utilisateurs ne peuvent pas accéder :

aws s3api list-objects --bucket awsexamplebucket --prefix exampleprefix 

Astuce : vous pouvez utiliser la commande list-objects pour vérifier plusieurs objets.

3.    Si les ID canoniques ne correspondent pas, vous (le propriétaire du compartiment) ne possédez pas l'objet. Le propriétaire de l'objet peut vous accorder le contrôle total de l'objet en exécutant la commande suivante :

aws s3api put-object-acl --bucket awsexamplebucket --key exampleobject.jpg --acl bucket-owner-full-control 

Pour les autorisations continues entre comptes, vous pouvez créer un rôle IAM dans le compte et lui autoriser l'accès au compartiment. Vous pouvez ensuite accorder à un autre compte AWS l'autorisation d'assumer ce rôle IAM. Pour plus d'informations, consultez la section Didacticiel : Déléguer l'accès entre des comptes AWS à l'aide de rôles IAM

Les problèmes dans la stratégie de compartiment ou les stratégies utilisateur IAM

Examinez la stratégie de compartiment ou les stratégies utilisateur IAM associées pour toutes les instructions susceptibles de refuser l'accès de manière incorrecte. Vérifiez la présence d'instructions de refus incorrectes, d'actions manquantes ou d'espacement incorrect dans une stratégie.

Vérifiez que les déclarations de refus ne sont pas dues à des conditions qui bloquent l'accès en raison de l'authentification Multi-Factor Authentication (MFA), des clés de chiffrement, d'une adresse IP spécifique ou d'un point de terminaison d'un VPC spécifique. Vérifiez que les demandes adressées au compartiment répondent aux conditions de la stratégie de compartiment ou des stratégies IAM. Sinon, l'accès devrait être refusé.

Remarque : si vous avez besoin de MFA et que les utilisateurs envoient des demandes par le biais de la CLI AWS, veillez à ce que les utilisateurs configurent l'interface de ligne de commande AWS pour l'utilisation de MFA.

Par exemple, dans la stratégie de compartiment suivante, Statement1 autorise l'accès public aux objets de téléchargement (s3:GetObject) depuis awsexamplebucket. Toutefois, Statement2 refuse explicitement à tous l'accès au téléchargement des objets depuis awsexamplebucket, sauf si la requête est émise par le point de terminaison d'un VPC vpce vpn-1a2b3c4d. Dans ce cas, l'instruction de refus prévaut. Cela signifie que les utilisateurs qui essaient de télécharger des objets depuis l'extérieur de vpce vpn-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:::awsexamplebucket/*",
      "Principal": "*"
    },
    {
      "Sid": "Statement2",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::awsexamplebucket/*",
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": "vpce-1a2b3c4d"
        }
      },
      "Principal": "*"
    }
  ]
}

Vérifiez que la stratégie de compartiment ou les stratégies IAM autorisent les actions Amazon S3 dont les utilisateurs ont besoin. Par exemple, la stratégie de compartiment suivante n'inclut pas la permission de l'action s3:PutObjectAcl. Si l'utilisateur IAM essaie de modifier la liste de contrôle d'accès (ACL) d'un objet, il obtient une erreur Access Denied (Accès refusé). 

{
  "Id": "Policy1234567890123",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234567890123",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::awsexamplebucket/*",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/Dave"
        ]
      }
    }
  ]
}

Vérifiez que la stratégie de compartiment ou les stratégies d'utilisateur IAM ne contiennent pas d'espace supplémentaire. Par exemple, la stratégie IAM suivante contient un espace supplémentaire dans l'Amazon Resource Name (ARN) arn:aws:s3::: awsexamplebucket/*. En raison de l'espace, l'ARN est mal évalué, comme suit : arn:aws:s3:::%20awsexamplebucket/*. Cela signifie que l'utilisateur IAM ne dispose pas des autorisations pour les objets appropriés. 

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234567890123",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3::: awsexamplebucket/*"
    }
  ]
}

Les paramètres de Block Public Access

Si les utilisateurs obtiennent des erreurs Access Denied (Accès refusé) sur les demandes publiques qui devraient être autorisées, vérifiez les paramètres Block Public Access du compartiment. Ces paramètres peuvent remplacer les autorisations qui autorisent l'accès public. Block Public Access peut s'appliquer aux compartiments individuels ou aux comptes AWS.

Les identifiants d'accès à Amazon S3

Examinez les identifiants que les utilisateurs ont configurés pour accéder à Amazon S3. Les kits SDK AWS et la CLI AWS doivent être configurés pour utiliser les identifiants de l'utilisateur ou du rôle IAM avec accès au compartiment.

Pour la CLI AWS, exécutez la commande suivante pour vérifier les identifiants configurés : 

aws configure list

Si les utilisateurs accèdent au compartiment via une instance Amazon Elastic Compute Cloud (Amazon EC2), vérifiez que l'instance utilise le rôle approprié. Connectez-vous à l'instance, puis exécutez la commande suivante : 

aws sts get-caller-identity

La stratégie de point de terminaison d'un VPC

Si des utilisateurs accèdent au compartiment avec une instance EC2 acheminée via un point de terminaison d'un VPC, vérifiez la stratégie de point de terminaison d'un VPC. Assurez-vous que la stratégie de point de terminaison d'un VPC inclut les autorisations voulues pour accéder à vos compartiments et objets S3.

Par exemple, la stratégie de point de terminaison d'un VPC suivante autorise uniquement l'accès à awsexamplebucket. Les utilisateurs qui envoient des demandes via 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"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::awsexamplebucket",
        "arn:aws:s3:::awsexamplebucket/*"
      ],
      "Principal": "*"
    }
  ]
}

Les objets manquants

Vérifiez si l'objet demandé existe dans le compartiment. Si un utilisateur n'a pas d'autorisations s3:ListBucket, il obtient alors des erreurs Access Denied (Accès refusé) pour les objets manquants au lieu des erreurs 404 Not Found (Introuvable). Exécutez cette commande de CLI AWS pour vérifier si un objet existe dans le compartiment : 

aws s3api head-object --bucket awsexamplebucket --key exampleobject.jpg 

Si l'objet existe dans le compartiment, alors l'erreur Access Denied (Accès refusé) ne masque pas une erreur 404 Not Found (Introuvable). Vérifiez les autres exigences en matière de configuration pour résoudre l'erreur Access Denied (Accès refusé).

Si l'objet ne se trouve pas dans le compartiment, alors l'erreur Access Denied (Accès refusé) masque une erreur 404 Not Found (Introuvable). Résolvez le problème lié à l'objet manquant.

L'objet est chiffré par AWS KMS

Si un utilisateur IAM ne peut pas accéder à un objet pour lequel il dispose de toutes les autorisations nécessaires, vérifiez si l’objet est chiffré par AWS KMS. Vous pouvez utiliser la console Amazon S3 pour afficher les propriétés de l'objet, notamment les informations relatives à son chiffrement.

Si l'objet est chiffré par KMS, assurez-vous que la stratégie de clé KMS et la stratégie d'utilisateur IAM autorisent toutes deux les actions suivantes : 

"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
]

La désactivation du paiement par le demandeur sur le compartiment

Si le compartiment a le Paiement par le demandeur activé, les utilisateurs d'autres comptes doivent spécifier le paramètre request-payer lorsqu'ils envoient des requêtes au compartiment. Sinon, ces utilisateurs obtiennent une erreur Access Denied (Accès refusé). Pour vérifier si le Paiement par le demandeur est activé, vous pouvez utiliser la console Amazon S3 pour afficher les propriétés du compartiment.

L'exemple suivant de la CLI AWS inclut le bon paramètre pour accéder à un compartiment avec Paiement par le demandeur : 

aws s3 cp exampleobject.jpg s3://awsexamplebucket/exampleobject.jpg --request-payer requester

La stratégie de contrôle du service AWS Organizations

Si vous utilisez AWS Organizations, vérifiez les stratégies de contrôle de service pour vous assurer que l'accès à Amazon S3 est autorisé. Par exemple, la stratégie suivante refuse explicitement l'accès à Amazon S3 et entraîne une erreur Access Denied (Accès refusé). 

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

Pour plus d'informations sur les fonctionnalités d'AWS Organizations, consultez la section Activation de toutes les fonctions de votre organisation


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


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