Je peux accéder à Amazon S3 lorsque j'utilise l'interface de ligne de commande AWS (CLI AWS), mais j'obtiens une erreur Accès refusé lorsque j'utilise un kit AWS SDK. Pourquoi ?

Dernière mise à jour : 27/01/2021

Je suis en mesure d'accéder à mes ressources Amazon Simple Storage Service (Amazon S3) lorsque j'utilise l'interface de ligne de commande AWS (CLI AWS). Cependant, j'obtiens une erreur Access Denied (Accès refusé) lorsque j'utilise un kit SDK AWS. Comment puis-je corriger ce problème ?

Brève description

Suivez ces étapes de dépannage lorsque vous pouvez accéder à Amazon S3 à l'aide de l'interface de ligne de commande AWS (CLI AWS), mais pas d'un kit SDK AWS :

1.    Vérifiez que l'interface de ligne de commande AWS (CLI AWS) et le kit SDK AWS que vous utilisez sont configurés avec les mêmes informations d'identification.

2.    Vérifiez que les demandes envoyées par le kit SDK AWS à Amazon S3 sont autorisées par un pare-feu, un proxy HTTP ou un point de terminaison Amazon Virtual Private Cloud (Amazon VPC).

Résolution

Vérifiez que l'interface de ligne de commande AWS (CLI AWS) et le kit AWS SDK que vous utilisez sont configurés avec les mêmes informations d'identification

Pour obtenir les informations d'identification configurées sur l'interface de ligne de commande AWS (CLI AWS), exécutez cette commande :

aws iam list-access-keys

Remarque : si vous recevez des erreurs lors de l'exécution des commandes de l'interface de ligne de commande AWS (CLI AWS), assurez-vous que vous utilisez la version la plus récente de l'interface de ligne de commande AWS (CLI AWS).

Si vous utilisez un rôle AWS Identity and Access Management (IAM) associé à l'interface de ligne de commande AWS (CLI AWS), exécutez cette commande pour obtenir le rôle :

aws sts get-caller-identity

Pour obtenir les informations d'identification configurées sur le kit SDK AWS que vous utilisez, exécutez un appel GetCallerIdentity à l'aide de votre client AWS Security Token Service (AWS STS). Par exemple, si vous utilisez AWS SDK for Python (Boto3), exécutez get_caller_identity.

Si la CLI AWS et le kit SDK AWS utilisent des informations d'identification différentes, essayez d'utiliser le kit SDK AWS avec les informations d'identification stockées sur la CLI AWS.

Vérifiez que les demandes envoyées par la CLI ou le kit SDK AWS à Amazon S3 sont autorisées par un pare-feu, un proxy HTTP ou un point de terminaison d'un VPC Amazon.

Si les informations d'identification configurées sont les mêmes, vérifiez que les demandes envoyées par la CLI ou le kit SDK à S3 proviennent également de la même source. Par exemple, vérifiez que les demandes proviennent de la même instance Amazon Elastic Compute Cloud (Amazon EC2).

Si les demandes proviennent de la même source avec les mêmes informations d'identification, assurez-vous que le kit SDK utilise les informations d'identification prévues. Par exemple, si vous utilisez le kit SDK AWS pour Python (Boto3), il vous permet de configurer les informations d'identification à l'aide de plusieurs méthodes. Boto3 recherche alors les informations d'identification dans plusieurs emplacements, dans un ordre spécifique.

Remarque : étant donné que Boto3 recherche les informations d'identification dans un ordre spécifique, si des informations d'identification incorrectes ont été spécifiées plus tôt, des informations d'identification incorrectes seront utilisées. Par conséquent, assurez-vous de spécifier les informations d'identification correctes dans les emplacements que Boto3 vérifie en premier. Pour en savoir plus sur l'ordre dans lequel Boto3 recherche les informations d'identification, consultez la sectionCredentials du site Web du kit SDK Boto3.

Si vous avez vérifié que les informations d'identification et les autorisations utilisées sont correctes, mais que vous recevez toujours l'erreur Access Denied (Accès refusé), résolvez l'erreur. Pour en savoir plus sur la résolution des différentes causes racines de l'erreur, consultez la section Comment puis-je résoudre les erreurs 403 Access Denied (Accès refusé) à partir d'Amazon S3 ?

Si les demandes sont envoyées par des sources différentes, vérifiez que la source utilisant le kit SDK envoie des demandes via un pare-feu, un proxy HTTP ou un point de terminaison d'un VPC. Ensuite, vérifiez que le pare-feu, le proxy HTTP ou le point de terminaison d'un VPC autorise la demande que vous tentez d'envoyer à Amazon S3.

Par exemple, la stratégie de point de terminaison d'un VPC suivante autorise les autorisations de téléchargement et de chargement pour DOC-EXAMPLE-BUCKET. Si vous utilisez ce point de terminaison d'un VPC, l'accès à tout autre compartiment vous est refusé.

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

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


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