Pourquoi ma tâche AWS Glue renvoie-t-elle l'erreur 403 Accès refusé ?

Date de la dernière mise à jour : 21/07/2021

Ma tâche AWS Glue renvoie l'erreur 403 Accès refusé lorsqu'elle tente une opération de lecture/d'écriture dans un compartiment Amazon Simple Storage Service (Amazon S3).

Brève description

Une erreur Accès refusé s'affiche généralement pour l'une des raisons suivantes :

  • Il manque au rôle AWS Identity and Access Management (IAM) les autorisations requises pour accéder au compartiment.
  • Les politiques de compartiment Amazon S3 n'autorisent pas les autorisations requises sur le rôle IAM.
  • Le propriétaire du compartiment S3 est différent du propriétaire de l'objet.
  • La politique de point de terminaison Amazon Virtual Private Cloud (Amazon VPC) n'inclut pas les autorisations requises pour accéder au compartiment S3.
  • L'objet est chiffré par AWS Key Management Service (AWS KMS), et la politique AWS KMS n'accorde pas les autorisations minimales requises au rôle IAM pour utiliser la clé.
  • Paiement par le demandeur est activé sur le compartiment S3.
  • L'accès au compartiment S3 est limité par les politiques de contrôle des services d'AWS Organizations.

Remarque : si vous recevez des messages d'erreur lors de l'exécution de commandes AWS CLI, assurez-vous que vous utilisez la version la plus récente d'AWS CLI.

Résolution

S'assurer que le rôle IAM dispose des autorisations requises pour accéder au compartiment S3

Le rôle IAM qui exécute la tâche AWS Glue doit avoir accès au compartiment S3. Vous pouvez accorder les autorisations requises au rôle IAM en attachant une politique IAM au rôle IAM.

Procédez comme suit pour mettre à jour les autorisations du rôle IAM afin d'accéder au compartiment :

1.    Ouvrez la console IAM.

2.    Ouvrez le rôle IAM associé à la tâche AWS Glue et qui nécessite un accès au compartiment.

3.    Dans l'onglet Autorisations de l'utilisateur/rôle IAM, développez chaque politique pour afficher son document de politique JSON.

4.    Dans les documents de politique JSON, recherchez des politiques portant le nom du compartiment. Vérifiez ensuite que ces politiques autorisent les bonnes actions S3 sur le compartiment.

5.    Si le rôle IAM n'accorde pas l'accès requis au compartiment, ajoutez une politique qui accorde les bonnes autorisations. Par exemple, la politique IAM suivante accorde au rôle IAM, l'accès aux objets put (s3:PutObject) dans le compartiment S3 DOC-EXEMLE-BUCKET :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ExampleStmt",
            "Action": "s3:PutObject",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
            ]
        }
    ]
}

Assurez-vous de remplacer DOC-EXEMPLE-COMPARTIMENT dans la politique par le nom de votre compartiment S3.

Assurez-vous que la politique de compartiment accorde les autorisations requises au rôle IAM.

Vérifiez les éléments suivants dans la politique de compartiment :

  • Toutes les instructions qui refusent explicitement l'accès du rôle IAM au compartiment
  • Toutes les autorisations et conditions manquantes susceptibles de restreindre l'accès du rôle IAM

Pour vérifier et modifier la politique de compartiment, procédez comme suit pour accorder l'accès requis au rôle IAM :

  1. Ouvrez la console Amazon S3.
  2. Choisissez Compartiments dans le panneau de navigation.
  3. Dans la liste des compartiments, ouvrez le compartiment que vous souhaitez vérifier.
  4. Choisissez Autorisations, puis faites défiler vers le bas jusqu'à la section Politique de compartiment.
  5. Lisez la politique de compartiment pour connaître toutes les instructions qui refusent au rôle l'accès au compartiment.
  6. Modifiez la politique de compartiment pour modifier ou supprimer toutes les instructions qui refusent au rôle IAM l'accès au compartiment.

Pour obtenir des exemples de politiques de compartiment, reportez-vous à Exemples de politique de compartiment

S'assurer que le propriétaire du compartiment S3 a accès aux objets

Par défaut, un objet S3 appartient au compte AWS qui l'a chargé. Ceci est valable même lorsque le compartiment appartient à un autre compte. Si d'autres comptes peuvent télécharger des objets dans le compartiment, vérifiez le compte propriétaire des objets auxquels vos utilisateurs/rôles ne peuvent pas accéder. Vous pouvez vérifier le propriétaire de l'objet en exécutant la commande GetObjectAcl.

Si des utilisateurs/rôles IAM provenant d'autres comptes téléchargent des objets dans votre compartiment S3, configurez la propriété des objets S3. Ensuite, ajoutez une politique de compartiment qui nécessite le téléchargement des objets avec la liste de contrôle d'accès (ACL) du propriétaire du compartiment. L'ajout de la politique de compartiment modifie automatiquement le propriétaire de l'objet en propriétaire du compartiment lorsque l'objet est téléchargé avec l'ACL de contrôle complet du propriétaire du compartiment. Pour plus d'informations, consultez Lorsque d'autres comptes AWS téléchargent des objets dans mon compartiment Amazon S3, comment puis-je exiger qu'ils me donnent le contrôle total des objets ?

Assurez-vous que la politique de point de terminaison d'un Amazon VPC autorise les actions requises sur le compartiment S3.

Assurez-vous que la politique de point de terminaison d'un VPC inclut les autorisations requises pour accéder aux compartiments et aux objets S3 lorsque les deux conditions suivantes sont remplies :

  • Votre tâche AWS Glue lit ou écrit des objets dans S3.
  • La connexion est acheminée vers S3 à l'aide d'un point de terminaison d'un VPC.

Par exemple, la politique de point de terminaison d'un VPC suivante permet d'accéder uniquement au compartiment DOC-EXEMPLE-COMPARTIMENT. Si votre compartiment n'est pas répertorié comme ressource autorisée dans la politique, les utilisateurs/rôles ne peuvent pas y accéder via le point de terminaison d'un VPC.

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

Assurez-vous de remplacer DOC-EXAMPLE-BUCKET dans la politique par le nom de votre compartiment S3.

Si les utilisateurs/rôles téléchargent des objets avec une ACL, vous devez mettre à jour la politique de point de terminaison d'un VPC pour accorder l'accès à l'action PutObjectAcl. Par exemple :

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

S'assurer que la stratégie de clé AWS KMS autorise l'accès au rôle IAM

Si votre tâche Extract-transform-load (ETL) lit ou écrit des données chiffrées dans Amazon S3, vérifiez les points suivants :

  • La politique du rôle IAM inclut les autorisations requises pour les actions AWS KMS.
  • La politique de la clé AWS KMS inclut les autorisations requises pour le rôle IAM.

Incluez les autorisations suivantes dans la politique du rôle IAM pour autoriser les actions AWS KMS nécessaires :

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": [
            "kms:Decrypt",
            "kms:Encrypt",
            "kms:GenerateDataKey"
        ],
        "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    }
}

Assurez-vous de remplacer l'ARN de la politique par l'ARN de votre choix.

Pour plus d'informations, consultez Configuration du chiffrement dans AWS Glue.

Consultez la politique de clé KMS pour vérifier si la politique autorise l'accès au rôle de la tâche AWS Glue. Pour plus d'informations sur les politiques clés, consultez Utilisation de politiques clés dans AWS KMS.

Veillez à inclure l'en-tête Paiement par le demandeur si le compartiment Paiement par le demandeur est activé.

Si Paiement par le demandeur est activé sur le compartiment S3, toutes les demandes adressées au compartiment à partir de la tâche AWS Glue doivent inclure l'en-tête Paiement par le demandeur. Les demandes AWS Glue adressées à Amazon S3 n'incluent pas, par défaut, l'en-tête Paiement par le demandeur. Sans cet en-tête, un appel d'API vers un compartiment Paiement par le demandeur échoue avec une exception Accès refusé. Pour ajouter l'en-tête Paiement par le demandeur à un script ETL, utilisez hadoopConfiguration().set() pour inclure fs.s3.useRequesterPaysHeader sur la variable GlueContext ou la variable de session Apache Spark.

Pour plus d'informations, consultez Comment puis-je accéder aux compartiments Amazon S3 de type Paiement par le demandeur à partir d'AWS Glue, d'Amazon EMR ou d'Amazon Athena ?

Assurez-vous que les politiques de contrôle des services AWS Organizations autorisent l'accès à S3

Si vous utilisez AWS Organizations, consultez les politiques de contrôle des services pour vous assurer que l'accès à Amazon S3 est autorisé. Par exemple, la politique suivante refuse explicitement l'accès à Amazon S3 et entraîne une erreur Accès refusé.

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

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


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