Autenticación con la integración de Amazon Redshift para Apache Spark
En las siguientes secciones se muestran las opciones de autenticación con Amazon Redshift al realizar la integración con Apache Spark. Las secciones muestran cómo recuperar las credenciales de inicio de sesión y también detalles sobre el uso del controlador JDBC con la autenticación de IAM.
Utilice AWS Secrets Manager para recuperar credenciales y conectarse a Amazon Redshift
Puede almacenar credenciales en Secrets Manager para autenticarse de forma segura en Amazon Redshift. Puede hacer que su trabajo de Spark llame a la API GetSecretValue
para obtener las credenciales:
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
Utilizar la autenticación basada en IAM con el rol de ejecución de trabajos de Amazon EMR en EKS
A partir de la versión 6.9.0 de Amazon EMR en EKS, la versión 2.1 o posterior del controlador de JDBC de Amazon Redshift se incluye en el entorno. Con el controlador JDBC 2.1 y versiones posteriores, puede especificar la URL de JDBC sin incluir el nombre de usuario y la contraseña sin encriptar. En su lugar, puede especificar un esquema jdbc:redshift:iam://
. Esto ordena al controlador de JDBC que utilice su rol de ejecución de trabajos de Amazon EMR en EKS para obtener las credenciales automáticamente.
Para obtener más información, consulte Configurar una conexión de JDBC u ODBC para usar credenciales de IAM en la Guía de administración de Amazon Redshift.
En el siguiente ejemplo de URL se utiliza un esquema jdbc:redshift:iam://
.
jdbc:redshift:iam://
examplecluster.abc123xyz789
.us-west-2
.redshift.amazonaws.com:5439/dev
Los siguientes permisos son necesarios para su rol de ejecución de trabajos si cumple con las condiciones proporcionadas.
Permiso | Condiciones en las que se requiere un rol de ejecución de trabajos |
---|---|
redshift:GetClusterCredentials
|
Obligatorio para que el controlador de JDBC obtenga las credenciales de Amazon Redshift |
redshift:DescribeCluster
|
Obligatorio si especifica el clúster de Amazon Redshift y la Región de AWS en la URL de JDBC en lugar del punto de conexión |
redshift-serverless:GetCredentials
|
Obligatorio para que el controlador de JDBC obtenga las credenciales de Amazon Redshift sin servidor |
redshift-serverless:GetWorkgroup
|
Obligatorio si utiliza Amazon Redshift sin servidor y especifica la URL en términos de nombre y región del grupo de trabajo |
Su política de roles de ejecución de trabajos debe tener los siguientes permisos.
{ "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
" ] }
Autenticarse en Amazon Redshift con un controlador de JDBC
Establecer el nombre de usuario y la contraseña dentro de la URL de JDBC
Para autenticar un trabajo de Spark en un clúster de Amazon Redshift, puede especificar el nombre y la contraseña de la base de datos de Amazon Redshift en la URL de JDBC.
nota
Si pasa las credenciales de la base de datos en la URL, cualquier persona que tenga acceso a la URL también podrá acceder a las credenciales. Por lo general, no se recomienda este método porque no es seguro.
Si la seguridad no es un problema para su aplicación, puede usar el siguiente formato para configurar el nombre de usuario y la contraseña en la URL de JDBC:
jdbc:redshift://redshifthost:5439/database?user=
username
&password=password