Comment résoudre les erreurs d'autorisation « Accès refusé » qui surviennent lorsque j'exécute une requête dans Amazon Athena ?
Lorsque j'exécute une requête Amazon Athena, le message d'erreur « Accès refusé » s'affiche.
Brève description
Les erreurs de requête Accès refusé sont généralement liées à des problèmes d'autorisation concernant d'autres services AWS ou comptes AWS avec lesquels Athena interagit. Parmi les services avec lesquels Athena interagit fréquemment, citons la Gestion des identités et des accès AWS (AWS IAM), Amazon Simple Storage Service (Amazon S3) et AWS Key Management Service (AWS KMS).
L’erreur Accès refusé peut être causée par les raisons suivantes :
- La politique du catalogue de données AWS Glue n'autorise pas l'accès à l'entité IAM (utilisateur ou rôle).
- L'entité IAM n'est pas autorisée à lire le compartiment des données source S3 ou à écrire les résultats dans le compartiment des résultats de requête.
- Les politiques relatives aux compartiments S3 n'accordent pas les autorisations requises à l'entité IAM lorsque la table Athena et les compartiments se trouvent dans des comptes différents.
- Le propriétaire de l'objet est différent du propriétaire du compartiment Amazon S3.
- Vous n'avez pas accès à la clé AWS KMS utilisée pour lire ou écrire les données chiffrées.
Résolution
Pour résoudre l'erreur Accès refusé, vous devez vérifier que vous disposez des autorisations suivantes pour votre cas d'utilisation. Pour en savoir plus, reportez-vous à la page Résolution des problèmes dans Athena.
Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la page Résoudre les erreurs liées à AWS CLI. Vérifiez également que vous utilisez la version la plus récente de l'interface AWS CLI.
Vérifiez que la politique du politique du catalogue de données Glue autorise l'accès à l'entité IAM
Si vous utilisez une politique du catalogue de données AWS Glue, assurez-vous que cette politique autorise l'accès à l'entité IAM. Par exemple, si votre catalogue de données applique la politique suivante, l'entité IAM athena_user se verra refuser l'accès au catalogue de données :
{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": [ "arn:aws:iam::1111222233334444:user/athena_user" ] }, "Effect": "Deny", "Action": [ "glue:*" ], "Resource": [ "arn:aws:glue:us-east-1:1111222233334444:*" ] } ] }
Pour consulter des exemples de politiques, consultez la page Exemples de politiques basées sur les ressources pour AWS Glue.
Si la politique présentée ci-dessus figure dans le catalogue de données, les requêtes Athena exécutées par l'utilisateur peuvent échouer et renvoyer l'erreur suivante :
« Insufficient permissions to execute the query. User: arn:aws:iam:: 1111222233334444:user/athena_user is not authorized to perform: glue:GetTable on resource: arn:aws:glue:us-east-1:1111222233334444:database/doc_example_database with an explicit deny Query Id: example_query_ID »
Vérifiez que l'entité IAM qui exécute les requêtes dispose bien des autorisations requises pour accéder aux ressources AWS Glue. Pour obtenir la liste complète des autorisations AWS Glue requises, consultez la page Politique gérée par AWS : AmazonAthenaFullAccess.
Vérifiez que la politique relative aux ressources du catalogue de données ne refuse pas les actions AWS Glue requises. Pour en savoir plus, consultez la page Accès détaillé aux bases de données et aux tables dans le catalogue de données AWS Glue.
Vérifiez que l'entité IAM dispose des autorisations requises pour accéder au compartiment des données source et au compartiment des résultats de requête
Si vous n'avez pas accès au compartiment des données source, vous obtiendrez une erreur de ce type :
« Your query has the following errors:com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 72VA5FB0ASWCQFPD; S3 Extended Request ID: cykX1CZ/KfxpL/h8/DOQoCBJ88qFGYqt6J52Jqh87qBfyN8c2P2azRiYjjJE1HL7i0Mg9xxxxxx=; Proxy: null), S3 Extended Request ID: cykX1CZ/KfxpL/h8/DOQoCBJ88qFGYqt6J52Jqh87qBfyN8c2P2azRiYjjJE1HL7i0Mg9xxxxxx= (Path: s3://my-athena-source-bucket/athena_data.csv) »
Si vous n'avez pas accès au compartiment des résultats de requête, vous obtiendrez une erreur de ce type :
« Your query has the following errors:Access denied when writing output to url: s3://my-athena-result-bucket/Unsaved/2021/05/07/example_query_ID.csv . Please ensure you are allowed to access the S3 bucket. If you are encrypting query results with KMS key, please ensure you are allowed to access your KMS key »
L'entité IAM qui exécute les requêtes doit avoir accès au compartiment des données source et au compartiment des résultats de requête. Pour accorder les autorisations requises à l'entité IAM, vous devez associer une politique IAM à l'entité IAM.
Exemple de politique IAM :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::my-athena-source-bucket" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::my-athena-source-bucket/data/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:AbortMultipartUpload", "s3:PutObject", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::my-athena-result-bucket", "arn:aws:s3:::my-athena-result-bucket/*" ] } ] }
Dans la politique présentée ci-dessus, remplacez les variables suivantes :
- my-athena-source-bucket par le nom de votre compartiment des données source
- my-athena-source-bucket/data/ par l'emplacement des données source
- my-athena-result-bucket par le nom de votre compartiment des résultats de requête
Pour obtenir la liste complète des politiques, consultez la page Politiques gérées par AWS pour Amazon Athena.
Attachez la politique relative aux compartiments d’Amazon S3 avec les autorisations requises pour les requêtes intercomptes
Si votre table Athena et votre compartiment S3 se trouvent dans le même compte, il n'est pas nécessaire d'attacher une politique de compartiment S3. Toutefois, si vous avez déjà attaché une politique de compartiment, vous devez vérifier qu'elle accorde des autorisations S3 à l'entité IAM qui interroge les données.
Si votre table Athena et vos compartiments S3 se trouvent dans des comptes différents, attachez les politiques de compartiment S3 qui accordent l'accès à l'entité IAM.
Dans le compte contenant le compartiment S3, attachez une politique de compartiment S3 qui autorise l'accès à l'utilisateur athena_user dans l'autre compte. L'exemple de politique suivant autorise explicitement un utilisateur IAM du compte A à accéder au compartiment S3 my-athena-source-bucket du compte B :
{ "Version": "2012-10-17", "Id": "Policy1620692934647", "Statement": [ { "Sid": "Stmt1620692932186", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1111222233334444:user/athena_user" }, "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::my-athena-source-bucket", "arn:aws:s3:::my-athena-source-bucket/data/*" ] } ] }
Dans l'exemple de politique présenté ci-dessus, remplacez les variables suivantes :
- my-athena-source-bucket par le nom de votre compartiment des données source
- my-athena-source-bucket/data/ par l'emplacement des données source
- 1111222233334444 par l'ID du compte de l’utilisateur IAM (compte A)
- athena_user par le nom de l'utilisateur IAM (compte A)
Pour accorder l'accès au compartiment à tous les utilisateurs de l'autre compte, remplacez la clé Principal par une clé avec la mention root (« arn:aws:iam::1111222233334444:root »).
Remarque : la politique présentée ci-dessus autorise toutes les actions S3 à accéder à my-athena-source-bucket. Vous devez mettre à jour les actions S3, selon que le compartiment S3 est le compartiment source ou le compartiment des résultats de requête. Pour en savoir plus, consultez la page Accès intercompte aux objets de compartiment.
Vérifiez que la politique du compartiment S3 n'inclut pas de déclarations qui interdisent explicitement l'accès au compte A ou à ses utilisateurs IAM. Assurez-vous également que votre politique n'inclut pas de conditions susceptibles de rejeter les demandes. Pour en savoir plus, consultez la page Comment résoudre les erreurs « 403 Accès refusé » provenant d'Amazon S3 ?
Mettez à jour votre stratégie de clé AWS KMS
Si vos données source sont chiffrées ou si votre requête Athena utilise une clé AWS KMS pour écrire des résultats chiffrés, vous devez confirmer les autorisations suivantes :
- La politique de l'utilisateur IAM autorise les actions AWS KMS nécessaires.
- La stratégie de clé AWS KMS autorise l'accès à l'utilisateur.
L'exemple de stratégie de clé AWS KMS suivant accorde toutes les actions AWS KMS à tous les utilisateurs du compte 1111222233334444 :
{ "Sid": "Enable IAM policies", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1111222233334444:root" }, "Action": "kms:*", "Resource": "*" }
Remarque : remplacez les exemples de variables de cette politique par vos variables.
Pour en savoir plus, consultez les pages Stratégies de clé dans AWS KMS et Autorisations pour les données chiffrées dans Amazon S3.
Assurez-vous que le propriétaire du compartiment S3 peut accéder aux objets
Par défaut, le compte qui charge un objet S3 vers un compartiment est propriétaire de l'objet. Cela est vrai même lorsqu'un autre compte est propriétaire du compartiment. Si les utilisateurs d’autres comptes peuvent charger des objets dans votre compartiment, identifiez le compte propriétaire des objets auxquels vos utilisateurs ne peuvent pas accéder. Exécutez la commande GetObjectAcl pour identifier le propriétaire de l'objet.
Si le propriétaire du compartiment S3 et le propriétaire de l'objet sont différents, le propriétaire de l'objet peut vous accorder le contrôle total de l'objet. Pour ce faire, le propriétaire de l'objet doit exécuter la commande PutObjectAcl avec le paramètre bucket-owner-full-control.
Pour que le compte propriétaire du compartiment S3 devienne le propriétaire de l'objet, exécutez la commande cp de l’AWS CLI. Veillez à exécuter la commande cp depuis le compte du compartiment pour copier l'objet sur lui-même.
Pour en savoir plus, consultez la page Pourquoi m'est-il impossible d'accéder à un objet qui a été chargé dans mon compartiment Amazon S3 par un autre compte AWS ?
Informations connexes
Vidéos associées
Contenus pertinents
- demandé il y a 7 moislg...
- demandé il y a 2 moislg...
- demandé il y a 2 anslg...
- demandé il y a 19 jourslg...
- AWS OFFICIELA mis à jour il y a un an
- AWS OFFICIELA mis à jour il y a 4 ans
- AWS OFFICIELA mis à jour il y a 3 mois