Autenticación con la integración de Amazon Redshift para Apache Spark - Amazon EMR

Autenticación con la integración de Amazon Redshift para Apache Spark

Uso de AWS Secrets Manager para recuperar credenciales y conectarse a Amazon Redshift

En el siguiente ejemplo de código se muestra cómo puede usar AWS Secrets Manager para recuperar credenciales a fin de conectarse a un clúster de Amazon Redshift con la interfaz de PySpark para Apache Spark en Python.

from pyspark.sql import SQLContext import boto3 sc = # existing SparkContext sql_context = SQLContext(sc) secretsmanager_client = boto3.client('secretsmanager') 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 # Read data from a table df = sql_context.read \ .format("io.github.spark_redshift_community.spark.redshift") \ .option("url", url) \ .option("dbtable", "my_table") \ .option("tempdir", "s3://path/for/temp/data") \ .load()

Uso de IAM para recuperar credenciales y conectarse a Amazon Redshift

Puede utilizar el controlador JDBC versión 2 proporcionado por Amazon Redshift para conectarse a Amazon Redshift con el conector de Spark. Para utilizar AWS Identity and Access Management (IAM), configure la URL de JDBC para utilizar la autenticación de IAM. Para conectarse a un clúster de Redshift desde Amazon EMR, debe conceder a su rol de IAM permiso para recuperar credenciales de IAM temporales. Asigne los siguientes permisos a su rol de IAM para que pueda recuperar credenciales y ejecutar operaciones de Amazon S3.

Para obtener más información sobre GetClusterCredentials, consulte Políticas de recursos de GetClusterCredentials.

También debe asegurarse de que Amazon Redshift puede asumir el rol de IAM durante las operaciones COPY y UNLOAD.

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

En el siguiente ejemplo, se utiliza la autenticación de IAM entre Spark y Amazon Redshift:

from pyspark.sql import SQLContext import boto3 sc = # existing SparkContext sql_context = SQLContext(sc) url = "jdbc:redshift:iam//redshift-host:redshift-port/db-name" iam_role_arn = "arn:aws:iam::account-id:role/role-name" # Read data from a table df = sql_context.read \ .format("io.github.spark_redshift_community.spark.redshift") \ .option("url", url) \ .option("aws_iam_role", iam_role_arn) \ .option("dbtable", "my_table") \ .option("tempdir", "s3a://path/for/temp/data") \ .mode("error") \ .load()