Authentification avec le connecteur Spark - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Authentification avec le connecteur Spark

Le schéma suivant décrit l'authentification entre Amazon S3, Amazon Redshift, le pilote Spark et les exécuteurs Spark.

Voici un schéma de l'authentification du connecteur Spark.

Authentification entre Redshift et Spark

Vous pouvez utiliser le pilote JDBC version 2 fourni par Amazon Redshift pour vous connecter à Amazon Redshift avec le connecteur Spark en spécifiant des informations d'identification. Pour utiliser IAM, configurez votre URL JDBC pour utiliser l'authentification IAM. Pour vous connecter à un cluster Redshift depuis Amazon EMR ou AWS Glue assurez-vous que votre rôle IAM dispose des autorisations nécessaires pour récupérer les informations d'identification IAM temporaires. La liste suivante décrit toutes les autorisations dont votre rôle IAM a besoin pour récupérer des informations d'identification et exécuter des opérations Amazon S3.

Pour plus d'informations sur GetClusterCredentials, consultez la section Politiques relatives aux ressources pour GetClusterCredentials.

Vous devez également vous assurer qu'Amazon Redshift peut assumer le rôle IAM pendant les opérations COPY et UNLOAD.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Si vous utilisez le pilote JDBC le plus récent, le pilote gérera automatiquement la transition d'un certificat auto-signé Amazon Redshift vers un certificat ACM. Vous devez toutefois spécifier les options SSL dans l'URL JDBC.

L'exemple suivant montre comment spécifier l'URL du pilote JDBC et le aws_iam_role pour se connecter à Amazon Redshift.

df.write \ .format("io.github.spark_redshift_community.spark.redshift ") \ .option("url", "jdbc:redshift:iam://<the-rest-of-the-connection-string>") \ .option("dbtable", "<your-table-name>") \ .option("tempdir", "s3a://<your-bucket>/<your-directory-path>") \ .option("aws_iam_role", "<your-aws-role-arn>") \ .mode("error") \ .save()

Authentification entre Amazon S3 et Spark

Si vous utilisez un rôle IAM pour vous authentifier entre Spark et Amazon S3, utilisez l'une des méthodes suivantes :

  • Le AWS SDK for Java tentera automatiquement de AWS trouver des informations d'identification en utilisant la chaîne de fournisseurs d'informations d'identification par défaut implémentée par la AWSCredentials ProviderChain classe Default. Pour plus d'informations, consultez Utilisation de la chaîne de fournisseur d'informations d'identification par défaut.

  • Vous pouvez spécifier des AWS clés via les propriétés de configuration de Hadoop. Par exemple, si votre configuration tempdir pointe vers un système de fichiers s3n://, définissez les propriétés fs.s3n.awsAccessKeyId et fs.s3n.awsSecretAccessKey dans un fichier de configuration XML Hadoop ou appelez sc.hadoopConfiguration.set() pour modifier la configuration Hadoop globale de Spark.

Par exemple, si vous utilisez le système de fichiers s3n, ajoutez :

sc.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "YOUR_KEY_ID") sc.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", "YOUR_SECRET_ACCESS_KEY")

Pour le système de fichiers s3a, ajoutez :

sc.hadoopConfiguration.set("fs.s3a.access.key", "YOUR_KEY_ID") sc.hadoopConfiguration.set("fs.s3a.secret.key", "YOUR_SECRET_ACCESS_KEY")

Si vous utilisez Python, effectuez les opérations suivantes :

sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", "YOUR_KEY_ID") sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", "YOUR_SECRET_ACCESS_KEY")
  • Encodez les clés d'authentification dans l'URL tempdir. Par exemple, l'URI s3n://ACCESSKEY:SECRETKEY@bucket/path/to/temp/dir encode la paire de clés (ACCESSKEY, SECRETKEY).

Authentification entre Redshift et Amazon S3

Si vous utilisez les commandes COPY et UNLOAD dans votre requête, vous devez également autoriser Amazon S3 à accéder à Amazon Redshift pour exécuter des requêtes en votre nom. Pour ce faire, autorisez d'abord Amazon Redshift à accéder à d'autres AWS services, puis autorisez les opérations COPY et UNLOAD à l'aide des rôles IAM.

Il est recommandé d’associer des politiques d’autorisation à un rôle IAM, puis de l’attribuer à des utilisateurs et à des groupes, le cas échéant. Pour plus d’informations, consultez Identity and Access Management dans Amazon Redshift.

Intégration à AWS Secrets Manager

Vous pouvez récupérer vos informations d'identification de nom d'utilisateur et de mot de passe Redshift à partir d'un secret stocké dans AWS Secrets Manager. Pour fournir automatiquement les informations d'identification Redshift, utilisez le paramètre secret.id. Pour plus d'informations sur la création d'un secret d'informations d'identification Redshift, consultez Création d'un secret de base de données AWS Secrets Manager.

GroupID ArtifactID Révision(s) prise(s) en charge Description
com.amazonaws.secretsmanager aws-secretsmanager-jdbc 1.0.12 La bibliothèque de connexions AWS Secrets Manager SQL pour Java permet aux développeurs Java de se connecter facilement aux bases de données SQL à l'aide des secrets stockés dans AWS Secrets Manager.
Note

Remerciement : cette documentation contient des exemples de code et de langage développés par l'Apache Software Foundation dans le cadre de la licence Apache 2.0.