Uso de una identidad federada para administrar el acceso de Amazon Redshift a los recursos locales y a las tablas externas de Amazon Redshift Spectrum
El uso de la federación de identidades en AWS con las credenciales proporcionadas por GetDatabaseCredentials
puede simplificar la autorización y el acceso a los datos locales y externos. En este tutorial, mostramos cómo proporcionar acceso a los recursos con la federación de identidades de AWS, en lugar de utilizar un rol de IAM específico.
Actualmente, para conceder a los usuarios acceso a datos externos que residen en Amazon S3, se crea un rol de IAM con los permisos definidos en una política de permisos. A continuación, los usuarios con el rol asociado pueden acceder a los datos externos. Esto funciona, pero si desea proporcionar reglas detalladas, como hacer que determinadas columnas no estén disponibles para un usuario concreto, puede que tenga que realizar una configuración adicional en el esquema externo.
La federación de identidades, con las credenciales proporcionadas por GetDatabaseCredentials
, puede proporcionar acceso a AWS Glue y a los recursos de Redshift Spectrum con reglas de IAM precisas que son más fáciles de especificar y cambiar. Esto facilita aplicar un acceso que se ajuste a las reglas de la empresa.
Los beneficios de usar credenciales federadas son los siguientes:
-
No es necesario que administre los roles de IAM asociados al clúster para Redshift Spectrum.
-
Los administradores de clústeres pueden crear un esquema externo al que puedan acceder los consumidores con diferentes contextos de IAM. Esto resulta útil, por ejemplo, para filtrar columnas en una tabla, donde diferentes consumidores consultan el mismo esquema externo y obtienen diferentes campos en los registros devueltos.
-
Puede consultar Amazon Redshift mediante un usuario con permisos de IAM, en lugar de solo con un rol.
Preparación de una identidad para iniciar sesión con una identidad federada
Antes de iniciar sesión con una identidad federada, debe realizar varios pasos preliminares. En estas instrucciones se asume que tiene un esquema externo de Redshift Spectrum existente que hace referencia a un archivo de datos almacenado en un bucket de Amazon S3 y que el bucket está en la misma cuenta que el clúster de Amazon Redshift o el almacenamiento de datos sin servidor de Amazon Redshift.
-
Cree una identidad de IAM. Puede ser un usuario o un rol de IAM. Utilice cualquier nombre que admita IAM.
-
Adjunte políticas de permisos a la identidad. Especifique cualquiera de las siguientes:
-
redshift:GetClusterCredentialsWithIAM
(para un clúster aprovisionado de Amazon Redshift) -
redshift-serverless:GetCredentials
(para Amazon Redshift Serverless)
Puede agregar permisos con el editor de políticas, mediante la consola de IAM.
La identidad de IAM también necesita permisos para acceder a los datos externos. Conceda acceso a Amazon S3 agregando directamente las siguientes políticas administradas de AWS:
-
AmazonS3ReadOnlyAccess
-
AWSGlueConsoleFullAccess
La política administrada más reciente es obligatoria si usa AWS Glue para preparar los datos externos. Para obtener más información sobre los pasos para conceder acceso a Amazon Redshift Spectrum, consulte Crear un rol de IAM para Amazon Redshift, que forma parte de la guía de introducción de Amazon Redshift y Redshift Spectrum. Muestra los pasos para agregar políticas de IAM para acceder a Redshift Spectrum.
-
-
Configure el cliente SQL para conectarse a Amazon Redshift. Utilice el controlador JDBC de Amazon Redshift y agregue las credenciales del usuario a las propiedades de credenciales de la herramienta. Un cliente como SQL Workbench/J funciona bien para esto. Defina las siguientes propiedades ampliadas de conexión de cliente:
-
AccessKeyID: el identificador de la clave de acceso.
-
SecretAccessKey: la clave de acceso secreta. (Tenga en cuenta el riesgo de seguridad de transmitir la clave secreta si no utiliza cifrado).
-
SessionToken: un conjunto de credenciales temporales para un rol de IAM.
-
groupFederation: se establece en
true
si está configurando la identidad federada para un clúster aprovisionado. No defina este parámetro si utiliza Amazon Redshift Serverless. -
LogLevel: valor de nivel de registro entero. Es opcional.
-
-
Configure la URL en el punto de conexión de JDBC que se encuentra en la consola de Amazon Redshift o Amazon Redshift Serverless. Sustituya el esquema de URL por jdbc:redshift:iam: y use este formato:
-
Formato para un clúster aprovisionado de Amazon Redshift:
jdbc:redshift:iam://<cluster_id>.<unique_suffix>.<region>.redshift.amazonaws.com:<port>/<database_name>
Ejemplo:
jdbc:redshift:iam://test1.12345abcdefg.us-east-1.redshift.amazonaws.com:5439/dev
-
Formato para Amazon Redshift Serverless:
jdbc:redshift:iam://<workgroup-name>.<account-number>.<aws-region>.redshift-serverless.amazonaws.com:5439:<port>/<database_name>
Ejemplo:
jdbc:redshift:iam://default.123456789012.us-east-1.redshift-serverless.amazonaws.com:5439/dev
Tras conectarse a la base de datos por primera vez mediante una identidad de IAM, Amazon Redshift crea automáticamente una identidad de Amazon Redshift con el mismo nombre, con el prefijo
IAM:
para un usuario oIAMR:
para un rol de IAM. Los pasos restantes de este tema muestran ejemplos para un usuario.Si un usuario de Redshift no se crea automáticamente, puede crear uno ejecutando una instrucción
CREATE USER
, mediante una cuenta de administrador y especificando el nombre de usuario en el formatoIAM:<user name>
. -
-
Como administrador del clúster de Amazon Redshift, conceda al usuario de Redshift los permisos necesarios para acceder al esquema externo.
GRANT ALL ON SCHEMA my_schema to "IAM:my_user";
Para conceder la capacidad al usuario de Redshift de crear tablas en el esquema externo, debe ser el propietario del esquema. Por ejemplo:
ALTER SCHEMA my_schema owner to "IAM:my_user";
-
Para comprobar la configuración, ejecute una consulta como usuario, mediante el cliente SQL, una vez concedidos los permisos. Este ejemplo de consulta recupera datos de una tabla externa.
SELECT * FROM my_schema.my_table;
Introducción a la propagación de identidades y autorizaciones a Redshift Spectrum
Para pasar una identidad federada a las tablas externas de consulta, debe establecer SESSION
como valor del parámetro de consulta IAM_ROLE
de CREATE EXTERNAL SCHEMA
. Los siguientes pasos muestran cómo configurar y aprovechar SESSION
para autorizar consultas en el esquema externo.
-
Cree tablas locales y tablas externas. Las tablas externas catalogadas con AWS Glue funcionan para esto.
-
Conéctese a Amazon Redshift con la identidad de IAM. Como se mencionó en la sección anterior, cuando la identidad se conecta a Amazon Redshift, se crea un usuario de base de datos de Redshift. El usuario se crea si no existía anteriormente. Si el usuario es nuevo, el administrador debe concederle permisos para realizar tareas en Amazon Redshift, como consultar y crear tablas.
-
Conéctese a Redshift con la cuenta de administrador. Ejecute el comando para crear un esquema externo con el valor
SESSION
.create external schema spectrum_schema from data catalog database '<my_external_database>' region '<my_region>' iam_role 'SESSION' catalog_id '<my_catalog_id>';
Tenga en cuenta que
catalog_id
está configurado en este caso. Se trata de una nueva configuración que se agrega con la característica, ya queSESSION
sustituye a un rol específico.En este ejemplo, los valores de la consulta imitan la forma en que aparecen los valores reales.
create external schema spectrum_schema from data catalog database 'spectrum_db' region 'us-east-1' iam_role 'SESSION' catalog_id '123456789012'
El valor
catalog_id
en este caso es el ID de la cuenta de AWS. -
Ejecute consultas para acceder a los datos externos mediante la identidad de IAM con la que se conectó en el paso 2. Por ejemplo:
select * from spectrum_schema.table1;
En este caso,
table1
puede ser, por ejemplo, datos con formato JSON en un archivo, en un bucket de Amazon S3. -
Si ya tiene un esquema externo que usa un rol de IAM adjunto a un clúster y apunta a la base de datos o esquema externo, puede sustituir el esquema existente y usar una identidad federada como se detalla en estos pasos o crear uno nuevo.
SESSION
indica que las credenciales de identidad federadas se utilizan para consultar el esquema externo. Cuando utilice el parámetro de consulta SESSION
, asegúrese de configurar el catalog_id
. Es obligatorio porque apunta al catálogo de datos utilizado para el esquema. Anteriormente, catalog_id
se recuperaba del valor asignado a iam_role
. Al configurar la propagación de identidades y autorizaciones de esta manera, por ejemplo, a Redshift Spectrum, mediante el uso de credenciales federadas para consultar un esquema externo, no se requiere la autorización mediante un rol de IAM.
Notas de uso
Un error de conexión común es el siguiente: Error de IAM al recuperar las credenciales temporales: no se puede desmarcar la respuesta de excepción con los descifradores proporcionados. Este error es resultado de tener un controlador JDBC antiguo. La versión mínima del controlador requerida para la identidad federada es la 2.1.0.9. Puede obtener el controlador JDBC desde Descargar el controlador JDBC de Amazon Redshift, versión 2.1.
Recursos adicionales
Estos enlaces proporcionan información adicional para administrar el acceso a datos externos.
-
Puede seguir accediendo a los datos de Redshift Spectrum mediante un rol de IAM. Para obtener más información, consulte Autorización a Amazon Redshift para obtener acceso a los servicios de AWS en su nombre.
-
Cuando administra el acceso a tablas externas con AWS Lake Formation, puede consultarlas mediante Redshift Spectrum con identidades de IAM federadas. Ya no es necesario que administre los roles de IAM asociados al clúster para que Redshift Spectrum consulte los datos asociados a AWS Lake Formation. Para obtener más información, consulte Uso de AWS Lake Formation con Amazon Redshift Spectrum.