Blog de Amazon Web Services (AWS)

Compartiendo catálogos de datos entre cuentas usando AWS Lake Formation

Por Rodrigo Alarcon, Sr. Solutions Architect de AWS.

 

Muchas organizaciones usan una configuración multicuenta para operar sus data lakes sobre Amazon S3. Algunas razones para esta configuración incluyen limitar el radio de impacto en el caso de un problema de seguridad, compartir únicamente tablas que por regulación se pueden compartir y aislar las que no, administrar presupuestos por unidad organizacional o simplificar los gastos de administración (overhead).

Tradicionalmente, el diseño de data lakes multicuenta requiere implementar y mantener políticas granulares tanto a nivel de AWS Identity and Access Management (IAM) como de Amazon S3, para definir permisos de acceso entre las diferentes unidades organizacionales. Pero usando el servicio AWS Lake Formation, ahora es posible simplificar este diseño.

Este artículo describe cómo utilizar AWS Lake Formation para acceder catálogos de datos entre cuentas de AWS, sin necesidad de definir políticas de AWS Identity and Access Management (IAM) para el acceso entre cuentas.

AWS Lake Formation es un servicio totalmente administrado que facilita la creación, la seguridad y la administración de data lakes. Este servicio simplifica y automatiza muchos de los pasos manuales complejos que suelen ser necesarios para crear data lakes, incluyendo la recopilación, limpieza, traslado y catalogación de datos, y hacer que esos datos estén disponibles de forma segura para analítica y machine learning. Lake Formation proporciona su propio modelo de permisos, complementario al de AWS IAM, permitiendo el acceso granular a los datos almacenados en data lakes a través de un mecanismo sencillo de concesión/revocación (grant/revoke).

 

Acceso desde otra cuenta: Cómo funciona

Además del acceso granular al data lake para usuarios de una misma cuenta, Lake Formation permite dar acceso entre cuentas de AWS, tanto a los metadatos del catálogo centralizado del data lake, como a los datos subyacentes en Amazon S3. Esta funcionalidad permite conceder permisos sobre recursos del catálogo (tablas y bases de datos) a otra cuenta, organización, o unidad organizacional de AWS.

Cuando se conceden permisos de Lake Formation sobre un recurso del catálogo a otra cuenta de AWS, Lake Formation usa el servicio AWS Resource Access Manager (RAM) para compartir automáticamente el recurso con dicha cuenta. Si la cuenta forma parte de la misma organización de AWS, entonces el recurso compartido queda inmediatamente disponible en la cuenta. De lo contrario, si ambas cuentas pertenecen a organizaciones diferentes, se debe seguir el proceso de aceptar o rechazar el recurso en la consola de AWS RAM.

Consideremos el caso de una cuenta Provider que mantiene un catálogo de datos que requieren ser consultados por uno o más usuarios de otra cuenta Consumer. Ambas cuentas de AWS mantienen un data lake registrado con AWS Lake Formation. El siguiente diagrama describe, a alto nivel, el proceso para que un usuario Data Analyst de la cuenta Consumer pueda hacer consultas sobre una tabla perteneciente al catálogo de la cuenta Provider:

 

 

  1. El administrador de Lake Formation en la cuenta Provider concede permisos sobre la tabla a la cuenta Consumer. En el caso de permisos externos, éstos se conceden sobre la cuenta AWS y no sobre usuarios o roles individuales de la cuenta.
  2. AWS Lake Formation utiliza AWS RAM para compartir la tabla con la cuenta de destino. Este proceso es transparente para el administrador de Lake Formation de la cuenta Provider. Si ambas cuentas no forman parte de la misma Organización, el administrador de Lake Formation de la cuenta Consumer deberá aceptar este recurso desde la consola de AWS RAM. Si ambas cuentas forman parte de una misma Organización, no es necesario aceptar el recurso en la consola de AWS RAM.
  3. Una vez compartida la tabla, el administrador de Lake Formation de la cuenta Consumer podrá verla listada dentro de la consola de AWS Lake Formation. Desde esta consola, el administrador podrá concede permisos sobre la tabla al usuario Data Analyst, igual como concede permisos para las tablas mantenidas en su data lake. En caso de que el usuario use servicios integrados como Amazon Athena o Amazon Redshift Spectrum, el administrador deberá crear además un resource link asociado a la tabla, y crear permisos sobre el resource link para el usuario Data Analyst.
  4. El usuario Data Analyst se conecta al catálogo de la cuenta Consumer usando un servicio integrado con AWS Lake Formation, como Amazon Athena, y realiza una consulta SQL sobre la tabla de la cuenta Provider.
  5. Athena envía una solicitud de acceso a Lake Formation, asociada al usuario Data Analyst. Lake Formation genera credenciales temporales para el acceso a los datos subyacentes de la tabla en S3, en base a la política de acceso configurada por el administrador. Lake Formation además informa a Athena sobre las columnas específicas sobre las cuales el usuario tiene permisos dentro de la tabla.
  6. Athena usa las credenciales temporales provistas por Lake Formation para acceder a la ubicación en S3 donde residen los datos en la cuenta Provider, y obtener los datos correspondientes a la consulta. Antes de devolver el resultado de la consulta, Athena filtra las columnas que no forman parte de los permisos informados por Lake Formation.
  7. Athena entrega el resultado de la consulta SQL al usuario Data Analyst.

 

Paso a paso

En este paso a paso demostraremos cómo brindar acceso a los datos del catálogo a un usuario en una cuenta AWS diferente, siguiendo el flujo descrito en la sección anterior. Para esto realizaremos las siguientes tareas:

En la cuenta Provider:

    1. Registrar una nueva base de datos en AWS Lake Formation.
    2. Conceder permisos hacia la cuenta Consumer usando Lake Formation.

En la cuenta Consumer:

    1. Aceptar el recurso compartido (Cuenta Consumer).
    2. Crear un Resource Link asociado a la tabla compartida.
    3. Conceder permisos de acceso al usuario Data Analyst.
    4. Validar el acceso del usuario Data Analyst a los datos compartidos en la cuenta Provider.

Prerrequisitos

Para seguir este paso a paso, se debería contar con lo siguiente:

    • Dos cuentas AWS (Provider y Consumer).
    • Conocimiento básico sobre Políticas, Roles, Usuarios.y Grupos de AWS IAM.
    • En la cuenta Consumer, un usuario DataAnalyst con los permisos descritos en la documentación de AWS Lake Formation, bajo la sección Data Analyst Permissions.
    • En cada cuenta, un data lake registrado con AWS Lake Formation, con un usuario definido como Lake Formation Admin. Una referencia general sobre cómo configurar AWS Lake Formation se encuentra en el artículo Getting started with AWS Lake Formation.
      • Validar que ambas cuentas tengan AWS Lake Formation configurado en la misma región. El listado de regiones soportadas por AWS Lake Formation se encuentra en el documento AWS Lake Formation endpoints and quotas.
      • En la consola de AWS Lake Formation, en el panel de Data catalog settings, validar que no se encuentren seleccionadas las opciones de control de acceso basado sólo en IAM.

 

 

Parte 1: Configuraciones en la cuenta Provider

Paso 1: Registrando una nueva base de datos en AWS Lake Formation

En la cuenta Provider registraremos una nueva base de datos, consistente de una tabla con una parte del conjunto de datos Amazon Customer Reviews Dataset. Para apoyar en este proceso, se provee una plantilla de AWS CloudFormation que provisionará los siguientes recursos:

  • Una copia de parte de los datos del conjunto de datos Amazon Customer Reviews hacia un bucket S3 en la cuenta Provider. AWS CloudFormation generará el nombre del bucket, basado en el nombre que se le asigne al stack de recursos.
  • Una base de datos registrada en AWS Glue (por defecto, amazon_reviews_db).
  • Una tabla registrada en AWS Glue (por defecto, amazon_reviews_table), perteneciente a la base da datos mencionada anteriormente.
  • El registro, en AWS Lake Formation, de la ubicación del path de la base de datos en S3.

 

 

Una vez implementada la plantilla anterior, podremos validar la creación de los recursos en la cuenta Provider. En primer lugar, vemos en la consola de Amazon S3 el bucket creado, conteniendo el archivo amazon_reviews_us_Camera_v1_00.tsv.gz en el path amazon_reviews_table. Este archivo contiene una parte del dataset de Amazon Customer Reviews.

 

 

Luego, en la consola de AWS Lake Formation vemos los recursos creados en el catálogo:

 

 

También en la consola de AWS Lake Formation podremos validar la ubicación de Amazon S3 registrada, con el rol de IAM por defecto para el servicio:

 

 

Paso 2: Concediendo permisos hacia la cuenta Consumer usando Lake Formation

Vamos a utilizar Lake Formation para conceder acceso a la tabla amazon_reviews_table a usuarios de la cuenta Consumer. Lake Formation ofrece, para estos efectos, un mecanismo similar al usado para conceder permisos a usuarios de la propia cuenta Provider.

Desde la consola de Lake Formation, en el panel de Tables, seleccionamos la tabla amazon_reviews_table. Luego, en el menu Actions, bajo Permissions, escogemos Grant. Debemos proveer la siguiente información para conceder acceso de lectura a la cuenta Consumer:

  • Seleccionamos External Account.
  • Para AWS account ID or AWS organization ID, ingresamos el número de cuenta AWS de la cuenta Consumer.
  • Para Columns, escogemos None. Con esto concederemos permisos para todas las columnas.
  • Para Table permissions y Grantable permissions, seleccionamos Select y Describe. Luego escogemos Grant.

La opción Select concede permisos para ver la tabla en el catálogo y acceder a los datos subyacentes en Amazon S3. Por otra parte, la opción Describe concede acceso a ver la tabla en el catálogo, pero no concede acceso a los datos. Al conceder ambos permisos a la cuenta Consumer, incluyendo la opción Grant, el administrador de la cuenta Consumer podrá, a su vez, conceder accesos granulares a los usuarios de dicha cuenta.

 

 

Nota: En caso de recibir el error Invalid Grant. Please revoke permission(s) for IAM_ALLOWED_PRINCIPALS on the table, se debe revocar el permiso asociado a IAM_ALLOWED_PRINCIPALS, desde el panel de Data permissions, y luego reintentar el proceso.

En el menú Data permissions podemos validar los permisos que acabamos de conceder. En la columna Principal vemos el ID de la cuenta Consumer y en el campo Principal type el tipo AWS account. Además podemos ver los tipos de permisos concedidos (Select y Describe), y el ID del Resource Share de RAM creado automáticamente por AWS Lake Formation.

 

 

Parte 2: Configuraciones en la cuenta Consumer

Paso 1: Aceptando el recurso compartido

Este paso sólo es necesario cuando las cuentas Provider y Consumer no forman parte de una misma Organización. En tal caso, el recurso compartido vía AWS RAM debe ser aceptado explícitamente en la cuenta Consumer.

En la consola de Resource Access Manager de la cuenta Consumer, en el panel de Resource Shares, escogemos el recurso con el ID de Resource Share creado por AWS Lake Formation en el paso anterior. Este recurso se encontrará con un estatus Pending.

Luego, desde el panel de detalles de este recurso, escogemos Accept resource share para aceptar el recurso compartido.

 

 

Una vez aceptada la tabla compartida, podremos verla en la consola de AWS Lake Formation, en el panel de Tables. Lake Formation nos muestra la tabla amazon_reviews_table, perteneciente a la base de datos amazon_reviews_db. Además, vemos el ID 71xx-xxxx-xxxx de la cuenta AWS dueña de la tabla (cuenta Producer). Como referencia, en este ejemplo vemos una segunda tabla nyc_tlc_table, perteneciente a la cuenta Consumer, con ID 72xx-xxxx-xxxx.

 

 

Paso 2: Creando un Resource Link asociado a la tabla compartida

Algunos servicios integrados a AWS Lake Formation, tales como Amazon Athena o Amazon Redshift Spectrum no pueden acceder directamente tablas o bases de datos en otras cuentas. No obstante, estos servicios sí pueden acceder resource links creados en la misma cuenta.

Un resource link es un objeto del catálogo vinculado a una tabla o base de datos, ya sea local o compartida. Una vez creado, este objeto puede ser utilizado de la misma forma que se usaría una tabla o base de datos.

Para que el usuario Data Analyst pueda acceder a la tabla compartida desde Amazon Athena, crearemos un resource link asociado a la tabla. Asociaremos este resource link a una base de datos que crearemos específicamente para consolidar tablas compartidas.

Primero, para crear la base de datos, vamos a la consola de AWS Lake Formation. En el panel de Databases, escogemos Create database y proveemos la siguiente información:

  • Seleccionamos Database.
  • Para Name, ingresamos un nombre, por ejemplo, shared_tables_db. Opcionalmente, para Description podemos ingresar una descripción de esta base de datos.
  • En Default permissions for newly created tables, debemos validar que no se encuentren seleccionada la opción de control de acceso basado sólo en IAM. Luego escogemos Create database.

 

 

Ahora crearemos el resource link asociado a la tabla compartida. En la consola de AWS Lake Formation, desde el panel de Tables, escogemos la tabla compartida amazon_reviews_table. Luego, en el menú Actions, bajo Table, escogemos Create resource link y proveemos la siguiente información:

  • Para Resource link name ingresamos un nombre como amazon_reviews_table_link.
  • Para Database, escogemos la base de datos shared_tables_db creada anteriormente.
  • Los campos Shared table, Shared table’s database y Shared table’s owner ID ya estarán ingresados y no debemos modificarlos. Luego seleccionamos Create.

 

 

Una vez creado el resource link, podremos verlo en el panel de Tables. Dentro del panel, los resource links se pueden identificar por su nombre en letra cursiva. Para cada resource link podemos ver el recurso compartido al que están vinculados y el ID de la cuenta AWS del dueño del recurso.

 

 

Paso 3: Concediendo permisos de acceso al usuario Data Analyst

Para que el usuario Data Analyst pueda acceder a la tabla compartida, deberemos concederle dos tipos de permisos en la consola de AWS Lake Formation:

  1. Permiso para describir (Describe) el resource link asociado a la tabla compartida. Con esto, el usuario podrá ver el resource link en el catálogo, al utilizar los servicios Amazon Athena o Amazon Redshift Spectrum.
  2. Permiso de lectura (Select) sobre la tabla compartida. Con esto, el usuario podrá acceder a los datos subyacentes de la tabla compartida en Amazon S3, al utilizar los servicios antes descritos.

Dado que el usuario Data Analyst no es un usuario administrativo, no es necesario que este usuario tenga permisos concesibles (Grantable) a otros usuarios o roles.

Para conceder permisos al resource link, desde el panel de Tables seleccionamos el resource link amazon_reviews_table_link. Luego, en el menú Actions, bajo Permission, escogemos Grant y proveemos la siguiente información:

  • Seleccionamos My account.
  • Para IAM users and roles, escogemos el usuario DataAnalyst.
  • Para Resource Link permissions, seleccionamos Describe. Luego escogemos Grant.

 

 

Para conceder permisos a la tabla, desde el panel de Tables seleccionamos el resource link amazon_reviews_table_link. Luego, en el menú Actions, bajo Permission, escogemos Grant on target y proveemos la siguiente información:

  • Seleccionamos My account.
  • Para IAM users and roles, escogemos el usuario DataAnalyst.
  • Para Columns, escogemos None. Con esto concederemos permisos para todas las columnas.
  • Para Table permissions, seleccionamos Select. Luego escogemos Grant.

 

 

Finalmente, podemos validar los permisos concedidos al usuario Data Analyst en el panel de Data permissions:

 

 

Paso 4: Validando el acceso del usuario Data Analyst a la tabla compartida

Una vez concedidos los permisos en el paso anterior, iniciamos sesión en la Consola de Amazon Athena usando la cuenta de usuario DataAnalyst.

Nota: Si es la primera vez utilizando el servicio Amazon Athena en esta región, se deberá configurar una ubicación en Amazon S3 para almacenar los resultados de las consultas efectuadas por Athena, tal como se describe en el documento Workgroup Settings. Para la prueba de este paso, se recomienda que esta ubicación sea en un bucket de Amazon S3 cuyo nombre comience con aws-athena-query-results-, pues la política gestionada AmazonAthenaFullAccess incluye por defecto permisos de acceso a buckets con este formato de nombre. De lo contrario, se deberán configurar los permisos necesarios para que el usuario DataAnalyst pueda acceder a la ubicación de los resultados de las consultas.

En la Consola de Amazon Athena, bajo Database, podremos escoger la base de datos shared_tables_db. Luego podremos ver la tabla amazon_reviews_table_link, que es el resource link vinculado a la tabla compartida amazon_reviews_table. Si escogemos los tres puntos a la derecha del nombre de la tabla y luego Preview Table, podremos ver los datos de la tabla.

 

 

Notar que estos datos están siendo consultados desde la cuenta Consumer, sobre el bucket S3 de la cuenta Provider. Sin embargo, el usuario DataAnalyst no tiene ningún permiso específico a nivel de políticas de IAM para acceder a la cuenta Provider. Este acceso entre cuentas es posible gracias a las credenciales temporales provistas por AWS Lake Formation a Amazon Athena.

 

Limpieza

Para evitar cargos futuros, se deben eliminar los recursos creados durante este paso a paso, en caso de no requerirlos.

En la cuenta Consumer:

    1. Revocar los permisos concedidos al usuario Data Analyst con AWS Lake Formation, sobre la tabla y sobre el resource link.
    2. Eliminar el resource link creado (amazon_reviews_table_link).
    3. Eliminar la base de datos creada (shared_tables_db)

En la cuenta Provider:

    1. Revocar los permisos concedidos a la cuenta consumer con AWS Lake Formation. Esto eliminará también el Resource Share de AWS RAM creado por AWS Lake Formation
    2. Eliminar el stack de CloudFormation creado. Si no se eliminó junto a los otros recursos del stack, eliminar también el bucket de S3 creado por CloudFormation.

 

Conclusión

Este artículo describió como utilizar AWS Lake Formation para conceder acceso a catálogos de datos de data lakes entre cuentas de AWS. Usando servicios integrados como Amazon Athena, vimos que es posible que un Data Analyst de una cuenta pueda consultar datos pertenecientes al data lake de otra cuenta, sin necesidad de contar con permisos entre cuentas a nivel de políticas de AWS IAM.

Los invito a probar esta funcionalidad de AWS Lake Formation, siguiendo el paso a paso y utilizando el template de CloudFormation para facilitar la implementación de un dataset de ejemplo.

 

 


Sobre los autores

Rodrigo Alarcón es Arquitecto de Soluciones senior en AWS. En su rol, ayuda a empresas de distinto tamaño a generar valor para su negocio mediante tecnologías de computación en la nube. Sus intereses incluyen machine learning y ciberseguridad. 

Se ha desempeñado por más de 10 años como profesional de tecnologías de la información, con foco en ciberseguridad e infraestructura de redes.

 

 

 

Revisores

Andrés Palacios es Arquitecto de Soluciones Especialista en Analytics en AWS.

 

 

 

 

Luis Caro es Arquitecto de Soluciones senior en AWS.

 

 

 

 

Use los datos para impulsar el crecimiento empresarial. Logre una innovación constante con el volante de inercia de datos.