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.
-
Redshift:GetClusterCredentials (para clústeres de Amazon Redshift aprovisionados)
-
Redshift:DescribeClusters (para clústeres de Amazon Redshift aprovisionados)
-
Redshift:GetWorkgroup (para grupos de trabajo de Amazon Redshift sin servidor)
-
Redshift:GetCredentials (para grupos de trabajo de Amazon Redshift sin servidor)
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()