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:
-
Conexión con orígenes de datos: contiene temas sobre el uso de Athena con fuentes del catálogo de datos de AWS Glue, Hive o Lambda.
-
Políticas de catálogos de datos de ejemplo: muestra cómo escribir políticas que controlan el acceso a catálogos de datos.
-
Uso de la AWS CLI con almacenes de matadatos de Hive: muestra cómo utilizar la AWS CLI con metaalmacenes de Hive, pero contiene casos de uso aplicables a otras fuentes de datos.
Condiciones 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.
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 ejemplo a continuación:
SELECT * FROM ownerCatalog.tpch1000.customer
En el siguiente procedimiento, los pasos 1a y 1b muestran cómo conceder acceso a la cuenta de prestatario a los recursos AWS Glue de la cuenta de 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: Crear una política de propietario para conceder al prestatario acceso a AWS Glue
Para conceder acceso a AWS Glue desde la cuenta de propietario (999999999999) al rol de prestatario, puede utilizar la consola de AWS Glue o la operación de 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
-
Inicie sesión en la consola de AWS Glue en https://console.aws.amazon.com/glue/
desde la cuenta de propietario. -
En el panel de navegación, seleccione Settings (Configuración).
-
En el navegador Permissions (Permisos), ingrese una política como la siguiente. 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
" ] } ] }
Paso 1b: Crear un rol de prestatario con acceso a los recursos de AWS Glue del propietario
Para dar acceso al rol de cuenta de prestatario a los recursos de AWS Glue de la cuenta de 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.
Conceder acceso a un rol de prestatario a los recursos de AWS Glue de la cuenta de propietario
-
Inicie sesión en la consola de IAM en https://console.aws.amazon.com/iam/
desde la cuenta de propietario. -
Seleccione Roles (Roles) en el panel de navegación.
-
Elija el rol que desee cambiar.
-
Seleccione Attach policies (Asociar políticas).
-
Elija Create Policy (Crear política).
-
Elija JSON.
-
En el cuadro, 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
" ] } ] } -
Elija Review policy (Revisar política).
-
En Name (Nombre), escriba un nombre para la política.
-
Elija Create Policy (Crear política).
Después de terminar, se recomienda que utilice la API de AWS Glue para efectuar 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
Abra la consola de Athena en https://console.aws.amazon.com/athena/
. Si el panel de navegación de la consola no está visible, elija el menú de expansión de la izquierda.
-
Elija Edit Data Source (Editar origen de datos).
-
En la parte superior derecha de la consola, seleccione Create data source (Crear origen de datos).
-
En la página Choose a data source (Elegir un origen de datos), para Data Sources (Orígenes de datos), elija S3 -AWS Glue Data Catalog y, a continuación, elija Next (Siguiente).
-
En la página Enter data source details (Introducir detalles del origen de datos), en la sección AWS Glue Data Catalog, para Choose an AWS Glue Data Catalog (Elegir un AWS Glue Data Catalog), elija AWS Glue Data Catalog in another account (AWS Glue Data Catalog en otra cuenta).
-
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.
-
-
(Opcional) En Tags (Etiquetas), ingrese 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.
-
Elija Next (Siguiente).
-
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.
-
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).
-
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).
-
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 contextualmente al hacerlo pasar por QueryExecutionContext.
Permisos de Simple Storage Service (Amazon S3) adicionales
-
Si la cuenta de prestatario utiliza una consulta de Athena para escribir nuevos datos en una tabla de la cuenta de propietario, el propietario no tendrá acceso automáticamente 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 conceder al propietario acceso a los datos, establezca los permisos en los objetos debidamente como paso adicional.
-
Ciertas operaciones de DDL entre cuentas como MSCK REPAIR TABLE requieren permisos de Amazon S3. Por ejemplo, si la cuenta de prestatario está realizando una operación
MSCK REPAIR
entre cuentas contra una tabla de la cuenta de propietario que tiene sus datos en un bucket de S3 de la cuenta de propietario, ese bucket debe conceder permisos al rol asumido por el prestatario para que la consulta se realice correctamente.
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:
”, 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 <arn>
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.