Connecter Amazon Athena
Datarelix se connecte à AWS Athena via un service de requêtes en lecture seule. Athena parle le SQL Trino/Presto et lit les métadonnées de table depuis l’AWS Glue Data Catalog — voir Getting started with Athena.
Prérequis
- Un compte AWS avec Athena activé dans votre région cible.
- Un bucket S3 pour la mise en attente des résultats de requête, dans la même région qu’Athena (Athena y écrit les résultats intermédiaires avant que Datarelix ne les télécharge).
- Un Glue Data Catalog contenant les bases et les tables que vous voulez analyser. Les tables doivent être cataloguées — Athena ne découvre pas automatiquement le schéma à partir d’objets S3 bruts.
- Des autorisations IAM sur le principal utilisé pour l’authentification. Au minimum :
athena:StartQueryExecution,athena:GetQueryExecution,athena:GetQueryResults,glue:GetDatabase(s),glue:GetTable(s),s3:GetObjectsur les chemins S3 des données, ets3:GetObject/s3:PutObjectsur le préfixe S3 de mise en attente.
Formulaire de connexion
AWS region: us-east-1S3 output location: s3://your-bucket/athena-staging/Workgroup: primary (default)Catalog: AwsDataCatalog (default)Auth mode: one of the two belowLe champ Allowed schema (schéma autorisé), défini par connexion, limite l’introspection et les requêtes à une seule base Glue.
Modes d’authentification
IAM access keys
Clé d’accès AWS et secret à longue durée de vie. Les identifiants sont stockés chiffrés. La voie la plus simple pour se connecter depuis l’extérieur d’AWS, quand aucun rôle IAM ambiant n’est disponible.
Configuration — créer un utilisateur IAM dédié
-
Dans la console AWS, créez un utilisateur IAM (IAM → Users → Create user). Donnez-lui un nom explicite (par exemple
datarelix-athena-reader). -
Choisissez Attach policies directly et attachez une stratégie avec les autorisations minimales suivantes (ou créez une stratégie personnalisée — voir Athena IAM policies) :
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": ["athena:StartQueryExecution","athena:GetQueryExecution","athena:GetQueryResults","athena:StopQueryExecution","athena:GetWorkGroup"],"Resource": "arn:aws:athena:<region>:<account-id>:workgroup/primary"},{"Effect": "Allow","Action": ["glue:GetDatabase", "glue:GetDatabases", "glue:GetTable", "glue:GetTables", "glue:GetPartitions"],"Resource": "*"},{"Effect": "Allow","Action": ["s3:GetBucketLocation"],"Resource": "arn:aws:s3:::your-data-bucket"},{"Effect": "Allow","Action": ["s3:GetObject"],"Resource": "arn:aws:s3:::your-data-bucket/*"},{"Effect": "Allow","Action": ["s3:GetObject", "s3:PutObject"],"Resource": "arn:aws:s3:::your-bucket/athena-staging/*"},{"Effect": "Allow","Action": ["s3:ListBucket"],"Resource": "arn:aws:s3:::your-bucket"}]} -
Une fois l’utilisateur créé, créez une clé d’accès (utilisateur → Security credentials → Access keys → Create access key). Choisissez Application running outside AWS. Copiez l’Access key ID (identifiant de clé d’accès) et la Secret access key (clé d’accès secrète) — le secret n’est affiché qu’une seule fois.
Où trouver vos identifiants
- Access key ID et Secret access key : IAM → Users → [votre utilisateur] → Security credentials → Access keys (vous devez créer une nouvelle clé si vous n’avez pas copié le secret au moment de la création).
Ce qu’il faut saisir
AWS region: us-east-1S3 output location: s3://your-bucket/athena-staging/Auth mode: IAM access keysAccess Key ID: AKIAIOSFODNN7EXAMPLESecret Access Key: ••••••••Assume Role
L’identité appelante endosse un rôle IAM cible via AWS STS avant d’interroger Athena. Adapté aux accès inter-comptes : vos identifiants vivent dans un compte, les données Athena et les autorisations vivent dans le rôle IAM d’un autre compte.
Configuration — créer le rôle endossable dans le compte de données
- Dans le compte AWS propriétaire des données, allez dans IAM → Roles → Create role.
- Choisissez Another AWS account comme entité de confiance et saisissez l’ID de votre compte appelant.
- Attachez la même stratégie Athena + Glue + S3 que dans le mode IAM access keys ci-dessus.
- Si vous voulez utiliser un External ID (identifiant externe, recommandé pour prévenir les attaques de type « confused deputy »), ajoutez une condition à la stratégie de confiance :
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": { "AWS": "arn:aws:iam::<your-calling-account>:root" },"Action": "sts:AssumeRole","Condition": {"StringEquals": { "sts:ExternalId": "your-external-id" }}}]}
- Copiez le Role ARN (ARN du rôle) depuis la page de résumé du rôle.
L’identité appelante (résolue depuis votre connexion IAM access keys ou depuis des identifiants ambiants) doit disposer de l’autorisation sts:AssumeRole sur l’ARN du rôle cible.
Où trouver vos identifiants
| Champ | Où le trouver |
|---|---|
| Role ARN | IAM (compte de données) → Roles → [votre rôle] → ARN dans le résumé (par exemple arn:aws:iam::123456789012:role/AthenaReaderRole) |
| External ID | La valeur définie dans la condition de la stratégie de confiance, le cas échéant |
Ce qu’il faut saisir
AWS region: us-east-1S3 output location: s3://your-bucket/athena-staging/Auth mode: Assume RoleRole ARN: arn:aws:iam::123456789012:role/AthenaReaderRoleExternal ID: your-external-id (leave blank if not required by the trust policy)Glue Data Catalog
Athena lit les métadonnées de schéma et de table depuis le Glue Data Catalog. Une table n’existe pas dans Athena tant qu’elle n’est pas cataloguée dans Glue.
- Vérifiez que vos tables sont visibles : console AWS → Glue → Data Catalog → Databases → cliquez sur votre base → regardez Tables.
- Si vos données sont dans S3 mais qu’aucune table Glue n’existe, exécutez une fois un crawler AWS Glue pour remplir le catalogue.
- Le champ Allowed schema de la connexion correspond à une base Glue.
- Les catalogues personnalisés (catalogues Glue fédérés, Hive Metastore via Lake Formation) fonctionnent via le champ
Catalog— la valeur par défaut estAwsDataCatalog.
IAM seul ou Lake Formation
La façon d’accorder l’accès en lecture dépend de la gouvernance de la base par AWS Lake Formation :
- Catalogue géré par IAM — les autorisations
glue:Get*+s3:GetObjectde la stratégie IAM ci-dessus suffisent. - Catalogue gouverné par Lake Formation — les autorisations IAM ne suffisent pas. Vous devez aussi accorder au principal
SELECT(etDESCRIBE) sur la base et les tables dans Lake Formation, et accorderDESCRIBEsur la basedefault. Sans cela, les requêtes échouent avecInsufficient Lake Formation permissions, même quand IAM est correct.
En cas de doute, console AWS → Lake Formation → Data lake locations : si vos chemins S3 y sont enregistrés, le catalogue est gouverné par Lake Formation.
Répertoire de mise en attente S3
Athena écrit les résultats de requête dans S3 avant qu’ils puissent être téléchargés. L’emplacement peut aussi être défini sur le workgroup.
- La région doit correspondre à celle d’Athena. Un bucket
us-west-2avec une requête Athena enus-east-1échoue avecQuery result location is invalid. - Athena ne supprime pas automatiquement les fichiers de résultats. Ajoutez une règle de cycle de vie S3 sur le préfixe de mise en attente (expiration après 7 jours, par exemple) pour contenir les coûts.
Sémantique de la portée
Le champ Allowed schema limite l’introspection et les requêtes à une seule base Glue. Une portée vide n’est pas prise en charge : vous devez indiquer une base explicitement. Pour analyser plusieurs bases, créez plusieurs connexions.
Découverte
Le module d’introspection interroge INFORMATION_SCHEMA via Athena (ce sont de petites requêtes Athena, comptabilisées sur votre workgroup). Glue ne suit pas les clés étrangères — la passe d’enrichissement par le modèle déduit les relations à partir des conventions de noms de colonnes, si vous l’activez.
Limites
- Lecture seule — le validateur rejette les instructions d’écriture et les instructions DDL.
- Une seule base Glue par connexion.
- Latence de téléchargement des résultats — Athena passe toujours par S3, puis Datarelix récupère les fichiers. Cela ajoute environ 100 à 500 ms par requête, en plus du temps de calcul.
Dépannage
| Symptôme | Cause probable | Solution |
|---|---|---|
AccessDenied sur glue:GetDatabase/GetTables | Autorisations Glue manquantes | Ajoutez les actions IAM de l’extrait de stratégie ci-dessus. |
Insufficient permissions to execute the query | s3:GetObject manquant sur les données sources | Vérifiez que le principal IAM peut lire les chemins S3 enregistrés dans Glue. |
Query result location not set / is invalid | Répertoire de mise en attente vide ou région incohérente | Réglez S3 output location (emplacement de sortie S3) sur un s3://bucket/prefix/ situé dans la même région qu’Athena. |
AccessDenied: ... is not authorized to perform sts:AssumeRole | Identité appelante non autorisée par la stratégie de confiance du rôle cible | Mettez à jour la stratégie de confiance du rôle pour autoriser le principal appelant. |
AccessDenied avec ExternalId | External ID absent ou incorrect | Renseignez le champ External ID avec la valeur attendue par la stratégie de confiance (sensible à la casse). |
Insufficient Lake Formation permissions | Lake Formation activé sur le catalogue | Accordez SELECT au principal via la console Lake Formation, en plus d’IAM. |
Table not found alors que Glue la liste | Mauvais catalogue | Vérifiez que le champ Catalog correspond au nom du catalogue dans Glue (généralement AwsDataCatalog). |