Driver JDBC Athena
Êtes-vous un développeur Java cherchant à se connecter à Amazon Athena depuis vos applications ? Le driver JDBC Athena permet de facilement interroger les données dans Amazon S3 en utilisant le SQL standard.
Cet article expliquera le driver JDBC Athena. Il montrera comment l’utiliser avec du code exemple. Il parlera également des fonctionnalités de sécurité qu’il possède. À la fin, vous aurez une base solide pour utiliser Athena avec Java.
Qu’est-ce que le driver JDBC Athena ?
Le driver JDBC Athena est un driver de type 4. Les applications Java l’utilisent pour se connecter à la source de données Athena. L’API JDBC permet cette connexion. Elle convertit les appels de méthodes JDBC en requêtes HTTP que Athena peut comprendre.
Utiliser l’API JDBC pour interroger Athena a plusieurs avantages :
- Il abstrait les détails de la communication HTTP sous-jacente
- Il permet d’utiliser du code JDBC et du SQL familiers pour travailler avec Athena
- Il permet d’intégrer Athena dans n’importe quelle application ou outil Java supportant JDBC
AWS fournit le driver comme un fichier JAR autonome. Pour l’utiliser, il suffit d’inclure le JAR dans le classpath de votre application.
Connexion à Athena
Pour se connecter à Athena en utilisant le driver JDBC, vous devez construire une chaîne de connexion JDBC avec le format suivant :
jdbc:awsathena://AwsRegion=[Region];S3OutputLocation=[Output];[Property1]=[Value1];[Property2]=[Value2];...
Les composants clés sont :
- La région AWS hébergeant votre instance Athena.
- S3OutputLocation – L’emplacement S3 où Athena doit stocker les résultats des requêtes
- Propriétés supplémentaires optionnelles pour la configuration
Voici un exemple d’URL JDBC se connectant à Athena dans la région us-west-2. Le système enregistre les résultats dans un bucket S3 désigné :
jdbc:awsathena://AwsRegion=us-west-2;S3OutputLocation=s3://my-athena-results/output;
Pour établir la connexion dans le code Java, utilisez la classe DriverManager :
String url = "jdbc:awsathena://AwsRegion=us-west-2;S3OutputLocation=s3://my-athena-results/output"; Connection conn = DriverManager.getConnection(url);
Cela crée un objet Connection que vous pouvez ensuite utiliser pour exécuter des requêtes.
Authentification Athena
Pour se connecter, le driver JDBC a besoin des identifiants AWS pour s’authentifier auprès de Athena. Il y a plusieurs façons de fournir les identifiants :
- Variables d’environnement – Définissez les variables d’environnement AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY.
- Propriétés du système Java – Définissez les propriétés du système aws.accessKeyId et aws.secretKey.
- Fichier d’identifiants AWS – Placez la clé d’accès et le secret dans le fichier ~/.aws/credentials.
- Profil d’instance AWS – Si vous exécutez sur EC2, assignez un rôle IAM à l’instance. Le driver récupérera automatiquement des identifiants temporaires.
Le driver JDBC recherche les identifiants dans cet ordre. Vous devriez utiliser un profil d’instance ou le fichier d’identifiants pour éviter d’inclure des clés sensibles en dur.
Requêtes de base
Une fois que vous avez une connexion, vous pouvez exécuter des requêtes SQL dessus. Utilisez la méthode createStatement pour créer un objet Statement, puis appelez executeQuery avec votre SQL :
Statement stmt = conn.createStatement(); String sql = "SELECT * FROM my_table LIMIT 10"; ResultSet rs = stmt.executeQuery(sql);
Cela envoie la requête à Athena, attend qu’elle se termine et renvoie les résultats sous forme d’un ResultSet. Vous pouvez ensuite itérer sur les lignes et accéder aux valeurs des colonnes :
while (rs.next()) { String col1 = rs.getString(1); int col2 = rs.getInt(2); // ... }
Rappelez-vous que Athena interroge les données stockées dans S3. Avant de pouvoir interroger, vous devez créer une table externe qui mappe les données S3 :
CREATE EXTERNAL TABLE my_table ( col1 STRING, col2 INT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://my-data-bucket/input/';
Cela crée une table my_table avec deux colonnes soutenues par un fichier CSV dans S3. Avec la table en place, vous pouvez la requêter via JDBC comme montré ci-dessus.
Requêtes paramétrées
Pour les requêtes acceptant des paramètres, utilisez un PreparedStatement au lieu d’un Statement régulier. Construisez le SQL avec des espaces réservés ?, puis liez des valeurs à ceux-ci :
String sql = "SELECT * FROM my_table WHERE col1 = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "foo"); ResultSet rs = pstmt.executeQuery();
Cela lie la valeur “foo” au premier espace réservé ?. Utiliser un PreparedStatement présente quelques avantages :
- Il évite l’injection SQL en envoyant les paramètres séparément de la requête.
- Athena peut mettre en cache et réutiliser le plan de requête
- Vous pouvez exécuter la même requête plusieurs fois avec des valeurs de paramètres différentes
Fonctionnalités de sécurité
Le driver JDBC Athena supporte plusieurs fonctionnalités et configurations liées à la sécurité :
Chiffrement
Par défaut, le driver se connecte à Athena en utilisant HTTPS pour le chiffrement en transit. Toutes les données envoyées entre l’application et Athena sont chiffrées en utilisant TLS.
Contrôle d’accès
Athena respecte les permissions IAM attachées aux identifiants AWS utilisés par le driver JDBC. Vous pouvez restreindre les données qu’un utilisateur peut accéder en accordant des permissions SELECT sur des bases de données et des tables spécifiques.
Par exemple, cette politique permet de requêter uniquement les tables de la base de données ‘my_database’ :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:StartQueryExecution", "athena:GetQueryExecution", "athena:GetQueryResults", "athena:StopQueryExecution" ], "Resource": [ "arn:aws:athena:us-west-2:123456789012:workgroup/primary" ] }, { "Effect": "Allow", "Action": [ "glue:GetTable", "glue:GetPartitions", "glue:GetPartition" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/my_database", "arn:aws:glue:us-west-2:123456789012:table/my_database/*" ] } ] }
Attachez cette politique à l’utilisateur IAM ou au rôle utilisé par la connexion JDBC pour appliquer le contrôle d’accès.
Chiffrement S3
Le système stocke les résultats des requêtes dans l’emplacement S3 spécifié dans l’URL JDBC. Pour protéger ces données au repos, vous pouvez configurer le bucket S3 pour utiliser le chiffrement.
- Utilisez le chiffrement par défaut du bucket pour chiffrer automatiquement tous les objets
- Utilisez le chiffrement côté client dans votre application pour chiffrer les données avant de les stocker dans S3
Le driver JDBC Athena supporte de manière transparente la lecture et l’écriture dans les buckets S3 chiffrés.
Conclusion
Le driver JDBC Athena aide les applications Java à exécuter des requêtes SQL sur les données dans Amazon S3. Il supporte une variété de méthodes d’authentification et de fonctionnalités de sécurité pour protéger les données.
Pour en savoir plus, consultez la documentation officielle du driver JDBC Athena.
À propos de DataSunrise
Si vous avez besoin de fonctionnalités supplémentaires de sécurité, de surveillance, d’audit et de conformité pour Athena, envisagez DataSunrise Database Security. DataSunrise offre des outils pour contrôler le masquage des données, auditer les requêtes en temps réel, surveiller et assurer la conformité aux réglementations.
Pour découvrir DataSunrise en direct et obtenir une licence d’essai gratuite, contactez notre équipe pour planifier une démonstration en ligne. Nous vous montrerons comment DataSunrise peut améliorer la sécurité d’Athena.