Authentification avec l'intégration Amazon Redshift pour Apache Spark - Amazon EMR

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 l'intégration Amazon Redshift pour Apache Spark

Les sections suivantes présentent les options d'authentification avec Amazon Redshift lors de l'intégration à Apache Spark. Les sections montrent comment récupérer les informations de connexion ainsi que les détails concernant l'utilisation du pilote JDBC avec l'authentification IAM.

AWS Secrets Manager À utiliser pour récupérer les informations d'identification et se connecter à Amazon Redshift

Vous pouvez stocker les informations d'identification dans Secrets Manager pour vous authentifier en toute sécurité dans Amazon Redshift. Vous pouvez demander à votre tâche Spark d'appeler l'API GetSecretValue pour récupérer les informations d'identification :

from pyspark.sql import SQLContextimport boto3 sc = # existing SparkContext sql_context = SQLContext(sc) secretsmanager_client = boto3.client('secretsmanager', region_name=os.getenv('AWS_REGION')) secret_manager_response = secretsmanager_client.get_secret_value( SecretId='string', VersionId='string', VersionStage='string' ) username = # get username from secret_manager_response password = # get password from secret_manager_response url = "jdbc:redshift://redshifthost:5439/database?user=" + username + "&password=" + password # Access to Redshift cluster using Spark

Utilisation de l'authentification basée sur IAM avec le rôle d'exécution des tâches Amazon EMR on EKS

À partir de la version 6.9.0 d'Amazon EMR on EKS, le pilote JDBC Amazon Redshift en version 2.1 ou supérieure est intégré à l'environnement. Avec le pilote JDBC en version 2.1 et supérieure, vous pouvez spécifier l'URL JDBC et ne pas inclure le nom d'utilisateur et le mot de passe bruts. Au lieu de cela, vous pouvez indiquer un schéma jdbc:redshift:iam://. Cela commande au pilote JDBC d'utiliser votre rôle d'exécution de tâche Amazon EMR on EKS pour récupérer automatiquement les informations d'identification.

Pour plus d'informations, consultez la rubrique Configuration d'une connexion JDBC ou ODBC pour utiliser les informations d'identification IAM dans le Guide de gestion Amazon Redshift.

L'exemple d'URL suivant utilise un schéma jdbc:redshift:iam://.

jdbc:redshift:iam://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439/dev

Les autorisations suivantes sont requises pour votre rôle d'exécution des tâches lorsqu'il remplit les conditions prévues.

Autorisations Conditions requises pour le rôle d'exécution des tâches
redshift:GetClusterCredentials Requis pour que le pilote JDBC récupère les informations d'identification à partir d'Amazon Redshift
redshift:DescribeCluster Requis si vous indiquez le cluster Amazon Redshift et la Région AWS dans l'URL JDBC au lieu du point de terminaison
redshift-serverless:GetCredentials Requis pour que le pilote JDBC récupère les informations d'identification à partir d'Amazon Redshift sans serveur
redshift-serverless:GetWorkgroup Requis si vous utilisez Amazon Redshift sans serveur et que vous indiquez l'URL pour le nom et la région du groupe de travail

Votre politique de rôle d'exécution des tâches doit disposer des autorisations ci-dessous.

{ "Effect": "Allow", "Action": [ "redshift:GetClusterCredentials", "redshift:DescribeCluster", "redshift-serverless:GetCredentials", "redshift-serverless:GetWorkgroup" ], "Resource": [ "arn:aws:redshift:AWS_REGION:ACCOUNT_ID:dbname:CLUSTER_NAME/DATABASE_NAME", "arn:aws:redshift:AWS_REGION:ACCOUNT_ID:dbuser:DATABASE_NAME/USER_NAME" ] }

Authentification dans Amazon Redshift à l'aide d'un pilote JDBC

Définition du nom d'utilisateur et du mot de passe dans l'URL JDBC

Pour authentifier une tâche Spark dans un cluster Amazon Redshift, vous pouvez indiquer le nom et le mot de passe de la base de données Amazon Redshift dans l'URL JDBC.

Note

Si vous transmettez les informations d'identification de la base de données dans l'URL, toute personne ayant accès à l'URL peut également accéder aux informations d'identification. Cette méthode n'est généralement pas recommandée, car elle n'est pas une option sécurisée.

Si la sécurité n'est pas une préoccupation pour votre application, vous pouvez utiliser le format suivant pour définir le nom d'utilisateur et le mot de passe dans l'URL JDBC :

jdbc:redshift://redshifthost:5439/database?user=username&password=password