Acceso entre cuentas a los catálogos de datos de AWS Glue - Amazon Athena

Acceso entre cuentas a los catálogos de datos de AWS Glue

Puede utilizar la función de catálogo de AWS Glue de cuentas cruzadas de Athena para registrar un catálogo AWS Glue desde una cuenta que no sea la suya. Una vez configurados los permisos de IAM necesarios para AWS Glue y registrar el catálogo como un recurso de Athena DataCatalog, puede utilizar Athena para ejecutar consultas entre cuentas. Para obtener información sobre cómo utilizar la consola de Athena para registrar un catálogo de otra cuenta, consulte Registro de un AWS Glue Data Catalog de otra cuenta.

Para obtener más información sobre el acceso entre cuentas en AWS Glue,consulte Concesión de acceso entre cuentas en la Guía para desarrolladores de AWS Glue.

Antes de comenzar

Debido a que esta característica utiliza API y funciones de recursos DataCatalog de Athena existentes para habilitar el acceso entre cuentas, le recomendamos que lea los siguientes recursos antes de comenzar:

Consideraciones y limitaciones

Actualmente, el acceso al catálogo AWS Glue entre cuentas de Athena tiene las siguientes limitaciones:

  • La característica está disponible únicamente en las Regiones de AWS en las que se admite la versión 2 o una versión posterior del motor Athena. Para obtener más información acerca de las versiones de motor Athena, consulte Control de versiones del motor Athena. Para actualizar la versión del motor de un grupo de trabajo, consulte Cambio de las versiones del motor Athena.

  • Cuando registra en su cuenta el AWS Glue Data Catalog de otra cuenta, crea un recurso DataCatalog regional que está vinculado a los datos de la otra cuenta en esa región en particular solamente.

  • En la actualidad, las instrucciones CREATE VIEW que incluyen un catálogo AWS Glue entre cuentas no son compatibles.

  • Los catálogos cifrados con claves administradas por AWS no se pueden consultar en todas las cuentas. Si desea consultar catálogos en todas las cuentas, utilice claves administradas por el cliente (KMS_CMK). Para obtener más información sobre las diferencias entre las claves administradas por el cliente y las claves administradas por AWS, consulte Claves del cliente y claves de AWS en la Guía para desarrolladores de AWS Key Management Service.

Introducción

En el siguiente escenario, la cuenta “Prestatario” (666666666666) quiere ejecutar una consulta SELECT que hace referencia al catálogo AWS Glue que pertenece a la cuenta “Propietario” (999999999999), como en el siguiente ejemplo:

SELECT * FROM ownerCatalog.tpch1000.customer

En el siguiente procedimiento, los pasos 1a y 1b muestran cómo concederle acceso de la cuenta del prestatario a los recursos de AWS Glue de la cuenta del propietario, tanto desde la perspectiva del propietario como desde la perspectiva del prestatario. El ejemplo concede acceso a la base de datos tpch1000 y la tabla customer. Cambie estos nombres de ejemplo para adaptarlos a sus necesidades.

Paso 1a: creación un rol de prestatario con una política para acceder a los recursos de AWS Glue del propietario

Para crear un rol de cuenta del prestatario con una política para acceder a los recursos de AWS Glue de la cuenta del propietario, puede utilizar la consola de AWS Identity and Access Management (IAM) o la API de IAM. El siguiente procedimiento utiliza la consola de IAM.

Cómo crear un rol de prestatario y una política para acceder a los recursos de AWS Glue de la cuenta del propietario
  1. Inicie sesión en la consola de IAM en https://console.aws.amazon.com/iam/ desde la cuenta del prestatario.

  2. En el panel de navegación, amplíe Administración de acceso y, a continuación, seleccione Políticas.

  3. Elija Crear política.

  4. En el editor de políticas, seleccione JSON.

  5. En el editor de políticas, ingrese la siguiente política y, a continuación, modifíquela de acuerdo con sus requisitos:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:*", "Resource": [ "arn:aws:glue:us-east-1:999999999999:catalog", "arn:aws:glue:us-east-1:999999999999:database/tpch1000", "arn:aws:glue:us-east-1:999999999999:table/tpch1000/customer" ] } ] }
  6. Elija Siguiente.

  7. En la página Revisar y crear, en Nombre de la política, ingrese un nombre para la política, (por ejemplo, CrossGluePolicyForBorrowerRole).

  8. Elija Crear política.

  9. Seleccione Roles en el panel de navegación.

  10. Elija Crear rol.

  11. En la página Seleccionar entidad de confianza elija Cuenta de AWS, y luego Siguiente.

  12. En la página Añadir permisos, escriba el nombre de la política que creó en el cuadro de búsqueda (por ejemplo, CrossGluePolicyForBorrowerRole).

  13. Elija la casilla de verificación situada junto al nombre de la política y, a continuación, elija Siguiente.

  14. En la página Name, review, and create (Nombrar, revisar y crear), en Role name (Nombre del rol), ingrese un nombre para el rol (por ejemplo, CrossGlueBorrowerRole).

  15. Seleccione Crear rol.

Paso 1b: creación de una política de propietario para concederle acceso a AWS Glue al prestatario

Para conceder acceso a AWS Glue desde la cuenta del propietario (999999999999) al rol de prestatario, puede utilizar la consola de AWS Glue o la operación de la API PutResourcePolicy de AWS Glue. El siguiente procedimiento utiliza la consola de AWS Glue.

Para conceder acceso a AWS Glue a la cuenta de prestatario desde el propietario
  1. Inicie sesión en la consola de AWS Glue en https://console.aws.amazon.com/glue/ desde la cuenta del propietario.

  2. En el panel de navegación, amplíe Catálogo de datos y, a continuación, elija Configuración del catálogo.

  3. En el navegador Permissions (Permisos), ingrese una política como la siguiente. Para rolename, introduzca el rol que el prestatario creó en el paso 1a (por ejemplo, CrossGlueBorrowerRole). Si desea aumentar el alcance de los permisos, puede utilizar el carácter comodín * para los tipos de recursos de base de datos y tabla.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::666666666666:user/username", "arn:aws:iam::666666666666:role/rolename" ] }, "Action": "glue:*", "Resource": [ "arn:aws:glue:us-east-1:999999999999:catalog", "arn:aws:glue:us-east-1:999999999999:database/tpch1000", "arn:aws:glue:us-east-1:999999999999:table/tpch1000/customer" ] } ] }

Después de terminar, se recomienda que utilice la API de AWS Glue para realizar algunas llamadas de prueba entre cuentas y confirmar que los permisos están configurados de la manera esperada.

Paso 2: El prestatario registra la AWS Glue Data Catalog que pertenece a la cuenta de propietario

El procedimiento siguiente muestra cómo utilizar la consola de Athena para configurar la AWS Glue Data Catalog en la cuenta de Amazon Web Services del propietario como origen de datos. Para obtener información sobre el uso de operaciones de API en lugar de la consola para registrar el catálogo, consulte Uso de la API para registrar un catálogo de datos de Athena que pertenece a la cuenta del propietario.

Para registrar una AWS Glue Data Catalog que pertenece a otra cuenta
  1. Abra la consola de Athena en https://console.aws.amazon.com/athena/.

  2. Si el panel de navegación de la consola no está visible, elija el menú de expansión de la izquierda.

    
                            Elija el menú de expansión.
  3. Amplíe Administración y, a continuación, elija Orígenes de datos.

  4. En la parte superior derecha de la consola, seleccione Create data source (Crear origen de datos).

  5. En la página Elegir un origen de datos, para Orígenes de datos, seleccione S3: AWS Glue Data Catalog y, a continuación, elija Siguiente.

  6. En la página Introducir detalles del origen de datos, en la sección AWS Glue Data Catalog, para Elegir un AWS Glue Data Catalog, elija AWS Glue Data Catalog en otra cuenta.

  7. En Dataset details (Detalles del origen de datos), ingrese la siguiente información:

    • Data source name (Nombre del origen de datos): ingrese el nombre que desea utilizar en las consultas SQL para hacer referencia al catálogo de datos de la otra cuenta.

    • Descripción: (opcional) ingrese una descripción del catálogo de datos en la otra cuenta.

    • ID del catálogo: ingrese el ID de cuenta de Amazon Web Services de 12 dígitos de la cuenta a la que pertenece el catálogo de datos. El ID de cuenta de Amazon Web Services es el ID del catálogo.

  8. (Opcional) Amplíe Etiquetas y luego ingrese los pares clave-valor que quiera asociar con el origen de datos. Para obtener más información acerca de las etiquetas, consulte Etiquetado de recursos de Athena.

  9. Elija Siguiente.

  10. En la página Review and create (Revisar y crear), revise la información que ha proporcionado y, a continuación, elija Create data source (Crear un origen de datos). En la página Data source details (Detalles de origen de datos) se enumeran las bases de datos y etiquetas del catálogo de datos que ha registrado.

  11. Elija Edit Data Source (Editar origen de datos). El catálogo de datos que ha registrado se muestra en la columna Data source name (Nombre de origen de datos).

  12. Para ver o editar información sobre el nuevo catálogo de datos, elija el catálogo y, a continuación, elija Actions (Acciones) y Edit (Editar).

  13. Para eliminar el nuevo catálogo de datos, elija el catálogo y, a continuación, elija Actions (Acciones) y Delete (Eliminar).

Paso 3: El prestatario envía una consulta

El prestatario envía una consulta que hace referencia al catálogo mediante la sintaxis catalog.database.table, como en el ejemplo siguiente:

SELECT * FROM ownerCatalog.tpch1000.customer

En lugar de utilizar la sintaxis completa, el prestatario también puede especificar el catálogo según el contexto si lo hace pasar por QueryExecutionContext.

Permisos de Simple Storage Service (Amazon S3) adicionales

  • Si la cuenta del prestatario utiliza una consulta de Athena para escribir nuevos datos en una tabla de la cuenta del propietario, el propietario no tendrá acceso de manera automática a estos datos en Amazon S3, aunque la tabla exista en la cuenta del propietario. Esto se debe a que, a menos que se configure lo contrario, el prestatario es el propietario del objeto de la información en Amazon S3. Para concederle acceso a los datos al propietario, establezca los permisos en los objetos de manera apropiada como paso adicional.

  • Ciertas operaciones de DDL entre cuentas como MSCK REPAIR TABLE requieren permisos de Amazon S3. Por ejemplo, si la cuenta del prestatario está realizando una operación MSCK REPAIR entre cuentas contra una tabla de la cuenta del propietario que tiene sus datos en un bucket de S3 de la cuenta de propietario, ese bucket debe concederle permisos al rol asumido por el prestatario para que la consulta se realice de forma correcta.

Para obtener más información acerca de cómo conceder permisos de buckets, consulte ¿Cómo configuro permisos de buckets con ACL? en la Guía del usuario de Amazon Simple Storage Service.

Uso de un catálogo de forma dinámica

En algunos casos, es posible que desee realizar pruebas rápidamente contra un catálogo de AWS Glue entre cuentas sin el paso previo de registrarlo. Puede realizar consultas entre cuentas de forma dinámica sin crear el objeto de recurso DataCatalog si los permisos necesarios de IAM y Amazon S3 están configurados correctamente como se describió anteriormente en este documento.

Para hacer referencia explícita a un catálogo sin registro, utilice la sintaxis del ejemplo siguiente:

SELECT * FROM "glue:arn:aws:glue:us-east-1:999999999999:catalog".tpch1000.customer

Utilice el formato “glue:<arn>”, donde <arn> es el ARN de AWS Glue Data Catalog que desea utilizar. En el ejemplo, Athena utiliza esta sintaxis para apuntar dinámicamente al catálogo de datos AWS Glue de la cuenta 999999999999 como si hubiera creado por separado un objeto de DataCatalog para él.

Notas para el uso de catálogos dinámicos

Cuando utilice catálogos dinámicos, recuerde los siguientes puntos.

  • El uso de un catálogo dinámico requiere los permisos de IAM que utiliza normalmente para las operaciones de API de catálogo de datos de Athena. La principal diferencia es que el nombre de recurso del catálogo de datos sigue la convención de nomenclatura de glue:*.

  • El ARN del catálogo debe pertenecer a la misma región en la que se está ejecutando la consulta.

  • Cuando utilice un catálogo dinámico en una consulta o vista DML, indíquelo con comillas dobles escapadas (\"). Cuando utilice un catálogo dinámico en una consulta DDL, indíquelo con acentos graves (`).

Uso de la API para registrar un catálogo de datos de Athena que pertenece a la cuenta del propietario

En lugar de utilizar la consola de Athena como se describe en el paso 2, se pueden utilizar las operaciones de la API para registrar el catálogo de datos que pertenece a la cuenta del propietario.

El creador del recurso DataCatalog de Athena debe tener los permisos necesarios para ejecutar la operación de la API CreateDataCatalog de Athena. En función de sus requisitos, es posible que sea necesario acceder a operaciones de API adicionales. Para obtener más información, consulte Políticas de catálogos de datos de ejemplo.

El siguiente cuerpo de solicitud de CreateDataCatalog registra un catálogo de AWS Glue para acceso entre cuentas:

# Example CreateDataCatalog request to register a cross-account Glue catalog: { "Description": "Cross-account Glue catalog", "Name": "ownerCatalog", "Parameters": {"catalog-id" : "999999999999" # Owner's account ID }, "Type": "GLUE" }

El siguiente código de muestra utiliza un cliente Java para crear el objeto DataCatalog.

# Sample code to create the DataCatalog through Java client CreateDataCatalogRequest request = new CreateDataCatalogRequest() .withName("ownerCatalog") .withType(DataCatalogType.GLUE) .withParameters(ImmutableMap.of("catalog-id", "999999999999")); athenaClient.createDataCatalog(request);

Después de estos pasos, el prestatario debe ver el ownerCatalog cuando llama a la operación de la API ListDataCatalogs.

Véase también