Autenticación con la integración de Amazon Redshift para Apache Spark
Utilice AWS Secrets Manager para recuperar credenciales y conectarse a Amazon Redshift
Puede autenticarse de forma segura en Amazon Redshift almacenando las credenciales en Secrets Manager y haciendo que el trabajo de Spark llame a la API de GetSecretValue
para obtenerlas:
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
Autenticarse en Amazon Redshift con un controlador de JDBC
Establecer el nombre de usuario y la contraseña dentro de la URL de JDBC
Puede autenticar un trabajo de Spark en un clúster de Amazon Redshift al 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
Utilizar la autenticación basada en IAM con el rol de ejecución de trabajos de Amazon EMR sin servidor
A partir de la versión 6.9.0 de Amazon EMR sin servidor, 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 EMR sin servidor 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. Un ejemplo de esta URL es:
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 |
Conexión a Amazon Redshift desde una VPC diferente
Al configurar un clúster de Amazon Redshift aprovisionado o un grupo de trabajo Amazon Redshift sin servidor en una VPC, debe configurar la conectividad de VPC para que su aplicación Amazon EMR sin servidor pueda acceder a los recursos. Para obtener más información sobre cómo configurar la conectividad de la VPC en una aplicación EMR sin servidor, consulte Configuración del acceso a la VPC para que las aplicaciones EMR sin servidor se conecten a los datos.
-
Si su clúster de Amazon Redshift o grupo de trabajo Amazon Redshift sin servidor aprovisionado es de acceso público, puede especificar una o más subredes privadas que tengan una puerta de enlace NAT conectada al crear aplicaciones EMR sin servidor.
-
Si el clúster de Amazon Redshift o el grupo de trabajo sin servidor de Amazon Redshift aprovisionados no son de acceso público, debe crear un punto de enlace de VPC gestionado por Amazon Redshift para su clúster de Amazon Redshift, tal y como se describe en Configuración del acceso a la VPC para que las aplicaciones EMR sin servidor se conecten a los datos. Como alternativa, puede crear su grupo de trabajo Amazon Redshift Serverless tal y como se describe en Conexión a Amazon Redshift sin servidor, en la Guía de administración de Amazon Redshift. Debe asociar el clúster o el subgrupo a las subredes privadas que especifique al crear la aplicación EMR sin servidor.
nota
Si utiliza la autenticación basada en IAM y las subredes privadas de la aplicación EMR sin servidor no tienen una puerta de enlace NAT adjunta, también debe crear un punto de enlace de VPC en esas subredes para Amazon Redshift o Amazon Redshift sin servidor. De esta forma, el controlador JDBC puede obtener las credenciales.