Uso de AWS Glue con AWS Lake Formation para acceso completo a la tabla
Introducción al acceso completo a la tabla
AWS Glue 5.0 admite el control de acceso completo a la tabla (FTA) en Apache Spark según las políticas definidas en AWS Lake Formation. Esta característica permite realizar operaciones de lectura y escritura desde los trabajos de Spark en AWS Glue sobre tablas registradas en AWS Lake Formation, siempre que el rol del trabajo tenga acceso completo a la tabla. FTA es ideal para casos de uso que deben cumplir con normativas de seguridad a nivel de tabla y es compatible con las capacidades de Spark, incluidos los conjuntos de datos distribuidos resilientes (RDD), bibliotecas personalizadas y funciones definidas por el usuario (UDF) sobre tablas de AWS Lake Formation.
Cuando un trabajo de Spark en AWS Glue se configura para acceso completo a la tabla (FTA), se utilizan las credenciales de AWS Lake Formation para leer o escribir datos en Amazon S3 correspondientes a tablas registradas en AWS Lake Formation, mientras que se emplean las credenciales del rol de tiempo de ejecución del trabajo para acceder a tablas no registradas en AWS Lake Formation. Esta funcionalidad permite realizar operaciones del lenguaje de manipulación de datos (DML), como CREAR, MODIFICAR, ELIMINAR, ACTUALIZAR e INSERTAR CON FUSIÓN, sobre tablas de Apache Hive y Iceberg.
nota
Revise sus requisitos y determine si el control de acceso detallado (FGAC) o el acceso completo a las tablas (FTA) se ajusta mejor a sus necesidades. Solo se puede habilitar un método de permisos de AWS Lake Formation para un trabajo de AWS Glue dado. Un trabajo no puede utilizar simultáneamente el acceso completo a las tablas (FTA) y el control de acceso detallado (FGAC).
Cómo funciona el acceso completo a la tabla (FTA) en AWS Glue
AWS Lake Formation ofrece dos enfoques para controlar el acceso a los datos: el control de acceso detallado (FGAC) y el acceso completo a la tabla (FTA). FGAC proporciona seguridad avanzada mediante filtrado a nivel de columna, fila y celda, lo que lo convierte en la opción ideal para escenarios que requieren permisos detallados. FTA resulta ideal en escenarios simples de control de acceso que requieren permisos a nivel de tabla. Facilita la implementación al no requerir la habilitación del modo de acceso detallado, mejora el rendimiento y reduce los costos al prescindir del controlador y los ejecutores del sistema, y permite tanto operaciones de lectura como de escritura (incluidos los comandos CREAR, MODIFICAR, ELIMINAR, ACTUALIZAR e INSERTAR CON FUSIÓN).
En AWS Glue 4.0, el acceso a datos basado en AWS Lake Formation funcionaba a través de la clase GlueContext, la clase utilitaria proporcionada por AWS Glue. En AWS Glue 5.0, el acceso a datos basado en AWS Lake Formation se ofrece de forma nativa mediante Spark SQL y Spark DataFrames, y también se admite a través de la clase GlueContext.
Implementación del acceso completo a la tabla
Paso 1: habilitación del acceso completo a la tabla en AWS Lake Formation
Para utilizar el modo de acceso completo a la tabla (FTA), debe permitir que motores de consulta de terceros accedan a los datos sin la validación de etiquetas de sesión de IAM en AWS Lake Formation. Para habilitarlo, siga los pasos descritos en Integración de aplicaciones para acceso completo a la tabla .
Paso 2: configuración de los permisos de IAM para el rol en tiempo de ejecución del trabajo
Para acceder a los datos subyacentes, ya sea para lectura o escritura, además de los permisos de AWS Lake Formation, el rol en tiempo de ejecución del trabajo necesita el permiso de IAM lakeformation:GetDataAccess
. Con este permiso, AWS Lake Formation concede la solicitud de credenciales temporales para acceder a los datos.
A continuación se muestra un ejemplo de política para otorgar permisos de IAM que permiten acceder a un script en Amazon S3, cargar registros en Amazon S3, utilizar las API de AWS Glue y acceder a AWS Lake Formation.
Paso 2.1: configuración de los permisos de AWS Lake Formation
Los trabajos de AWS Glue Spark que leen datos desde Amazon S3 requieren el permiso SELECCIONAR de AWS Lake Formation.
Los trabajos de AWS Glue Spark que escriben o eliminan datos en Amazon S3 requieren el permiso TODOS de AWS Lake Formation.
Los trabajos de AWS Glue Spark que interactúan con el Catálogo de datos de AWS Glue requieren los permisos Describir, Modificar y Descartar, según corresponda.
Paso 3: inicialización de una sesión de Spark para el acceso completo a la tabla mediante AWS Lake Formation
Para acceder a tablas registradas en AWS Lake Formation, es necesario establecer las siguientes configuraciones durante la inicialización de Spark, con el fin de configurar Spark para que utilice credenciales de AWS Lake Formation.
Para acceder a tablas registradas en AWS Lake Formation, debe configurar explícitamente la sesión de Spark para que utilice credenciales de AWS Lake Formation. Agregue las siguientes configuraciones al inicializar la sesión de Spark:
from pyspark.sql import SparkSession # Initialize Spark session with Lake Formation configurations spark = SparkSession.builder \ .appName("Lake Formation Full Table Access") \ .config("spark.sql.catalog.glue_catalog", "org.apache.spark.sql.catalog.hive.GlueCatalog") \ .config("spark.sql.catalog.glue_catalog.glue.lakeformation-enabled", "true") \ .config("spark.sql.defaultCatalog", "glue_catalog") \ .getOrCreate()
Configuraciones clave:
-
spark.sql.catalog.glue_catalog
: registra un catálogo llamado “glue_catalog” que utiliza la implementación GlueCatalog -
spark.sql.catalog.glue_catalog.glue.lakeformation-enabled
: habilita explícitamente la integración con AWS Lake Formation para este catálogo -
El nombre del catálogo (por ejemplo, “glue_catalog”) se puede personalizar, pero se debe mantener coherente en ambas configuraciones
Hive
‐‐conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.AWS Glue.accesscontrol.AWSLakeFormationCredentialResolver --conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true --conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true --conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true --conf spark.sql.catalog.createDirectoryAfterTable.enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
Iceberg
--conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.AWS Glue.accesscontrol.AWSLakeFormationCredentialResolver --conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true --conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true --conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true --conf spark.sql.catalog.createDirectoryAfterTable.enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true --conf spark.sql.catalog.<catalog>.AWS Glue.lakeformation-enabled=true
-
spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.AWS Glue.accesscontrol.AWSLakeFormationCredentialResolver
: configure el sistema de archivos EMR (EMRFS) para que utilice las credenciales de S3 de AWS Lake Formation al acceder a tablas registradas en AWS Lake Formation. Si la tabla no está registrada, utilice las credenciales del rol en tiempo de ejecución del trabajo. -
spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true
yspark.hadoop.fs.s3.folderObject.autoAction.disabled=true
: configure EMRFS para que utilice el encabezado de tipo de contenido application/x-directory en lugar del sufijo $folder$ al crear carpetas en S3. Esto es necesario al leer tablas de AWS Lake Formation, ya que las credenciales de AWS Lake Formation no permiten leer carpetas de tablas que utilicen el sufijo $folder$. -
spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true
: configure Spark para omitir la validación de que la ubicación de la tabla esté vacía antes de crearla. Esto es necesario para tablas registradas en AWS Lake Formation, ya que las credenciales de AWS Lake Formation para verificar que la ubicación esté vacía solo están disponibles después de crear la tabla en el Catálogo de datos de AWS Glue. Sin esta configuración, las credenciales del rol en tiempo de ejecución del trabajo validarán si la ubicación de la tabla está vacía. -
spark.sql.catalog.createDirectoryAfterTable.enabled=true
: configure Spark para crear la carpeta en Amazon S3 después de crear la tabla en el repositorio de metadatos de Hive. Esto es necesario para tablas registradas en AWS Lake Formation, ya que las credenciales de AWS Lake Formation para crear la carpeta en Amazon S3 solo están disponibles después de crear la tabla en el Catálogo de datos de AWS Glue. -
spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
: configure Spark para descartar la carpeta en Amazon S3 antes de eliminar la tabla del repositorio de metadatos de Hive. Esto es necesario para tablas registradas en AWS Lake Formation, ya que las credenciales de AWS Lake Formation para descartar la carpeta de S3 no están disponibles después de eliminar la tabla del Catálogo de datos de AWS Glue. -
spark.sql.catalog.<catalog>.AWS Glue.lakeformation-enabled=true
: configure el catálogo de Iceberg para que utilice las credenciales de Amazon S3 de AWS Lake Formation al acceder a tablas registradas en AWS Lake Formation. Si la tabla no está registrada, utilice las credenciales predeterminadas del entorno.
Patrones de uso
Uso de FTA con DataFrames
Para quienes estén familiarizados con Spark, se pueden usar DataFrames con el acceso completo a tablas de AWS Lake Formation.
AWS Glue 5.0 incorpora compatibilidad nativa de Spark con el acceso completo a tablas de Lake Formation, lo que simplifica el trabajo con tablas protegidas. Esta función permite a los trabajos de Spark de AWS Glue 5.0 AWS Glue leer y escribir datos directamente cuando se concede el acceso completo a la tabla, eliminando las limitaciones que anteriormente restringían determinadas operaciones de extracción, transformación y carga (ETL). Ahora puede aprovechar las capacidades avanzadas de Spark, como los conjuntos de datos distribuidos resilientes (RDD), bibliotecas personalizadas y funciones definidas por el usuario (UDF), con tablas de AWS Lake Formation.
FTA con Spark nativo en AWS Glue 5.0
AWS Glue 5.0 admite el control de acceso completo a tablas (FTA) en Apache Spark, basado en las políticas definidas en AWS Lake Formation. Este nivel de control resulta ideal para casos de uso que deben cumplir con regulaciones de seguridad a nivel de tabla.
Ejemplo de tabla de Apache Iceberg
from pyspark.sql import SparkSession catalog_name = "spark_catalog" aws_region = "us-east-1" aws_account_id = "123456789012" warehouse_path = "s3://amzn-s3-demo-bucket/warehouse/" spark = SparkSession.builder \ .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \ .config(f"spark.sql.catalog.{catalog_name}", "org.apache.iceberg.spark.SparkSessionCatalog") \ .config(f"spark.sql.catalog.{catalog_name}.warehouse", f"{warehouse_path}") \ .config(f"spark.sql.catalog.{catalog_name}.client.region",f"{aws_region}") \ .config(f"spark.sql.catalog.{catalog_name}.glue.account-id",f"{aws_account_id}") \ .config(f"spark.sql.catalog.{catalog_name}.glue.lakeformation-enabled","true") \ .config(f"spark.sql.catalog.dropDirectoryBeforeTable.enabled", "true") \ .config(f"spark.sql.catalog.{catalog_name}.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \ .config(f"spark.sql.catalog.{catalog_name}.io-impl", "org.apache.iceberg.aws.s3.S3FileIO") \ .config("spark.sql.defaultCatalog", catalog_name) \ # Add this line .getOrCreate() database_name = "your_database" table_name = "your_table" df = spark.sql(f"select * from {database_name}.{table_name}") df.show()
Permisos de IAM necesarios
El rol de ejecución del trabajo de AWS Glue debe contar con:
{ "Action": "lakeformation:GetDataAccess", "Resource": "*", "Effect": "Allow" }
Además, debe incluir los permisos apropiados de acceso a S3 para las ubicaciones de los datos.
Configuración de Lake Formation
Antes de usar FTA con Spark nativo en AWS Glue 5.0:
-
Permita que los motores de consulta de terceros accedan a los datos sin validación de etiquetas de sesión IAM en AWS Lake Formation.
-
Conceda los permisos adecuados sobre las tablas al rol de ejecución de trabajos de AWS Glue mediante la consola de AWS Lake Formation.
-
Configure la sesión de Spark con los parámetros requeridos que se muestran en el ejemplo anterior
Uso de FTA con DynamicFrames
Los DynamicFrames nativos de AWS Glue se pueden usar con FTA de AWS Lake Formation para optimizar las operaciones de ETL. El acceso completo a tablas (FTA) ofrece un modelo de seguridad que otorga permisos a nivel de tabla, lo que permite procesar datos más rápidamente en comparación con el control de acceso detallado (FGAC), ya que evita la sobrecarga de las verificaciones de permisos a nivel de fila y columna. Este enfoque resulta útil cuando necesita procesar tablas completas y los permisos a nivel de tabla cumplen con los requisitos de seguridad.
En AWS Glue 4.0, el uso de DynamicFrames con FTA requería una configuración específica de GlueContext. Aunque el código existente de DynamicFrame con FTA en AWS Glue 4.0 seguirá funcionando en AWS Glue 5.0, la nueva versión también ofrece compatibilidad con FTA de forma nativa en Spark, lo que brinda mayor flexibilidad. Para nuevos desarrollos, considere usar el enfoque nativo de Spark descrito en la sección de DataFrames, especialmente si necesita capacidades adicionales como conjuntos de datos distribuidos resilientes (RDD), bibliotecas personalizadas y funciones definidas por el usuario (UDF) con tablas de AWS Lake Formation.
Permisos necesarios
El rol de IAM que ejecuta el trabajo de Glue debe contar con lo siguiente:
-
Permiso de
lakeformation:GetDataAccess
-
Permisos adecuados sobre las tablas de Lake Formation, concedidos a través de la consola de Lake Formation
Ejemplo de implementación con DynamicFrame en AWS Glue 5.0
from awsglue.context import GlueContext from pyspark.context import SparkContext # Initialize Glue context sc = SparkContext() glueContext = GlueContext(sc) # Configure catalog for Iceberg tables catalog_name = "glue_catalog" aws_region = "us-east-1" aws_account_id = "123456789012" warehouse_path = "s3://amzn-s3-demo-bucket/warehouse/" spark = glueContext.spark_session spark.conf.set(f"spark.sql.catalog.{catalog_name}", "org.apache.iceberg.spark.SparkCatalog") spark.conf.set(f"spark.sql.catalog.{catalog_name}.warehouse", f"{warehouse_path}") spark.conf.set(f"spark.sql.catalog.{catalog_name}.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") spark.conf.set(f"spark.sql.catalog.{catalog_name}.io-impl", "org.apache.iceberg.aws.s3.S3FileIO") spark.conf.set(f"spark.sql.catalog.{catalog_name}.glue.lakeformation-enabled","true") spark.conf.set(f"spark.sql.catalog.{catalog_name}.client.region",f"{aws_region}") spark.conf.set(f"spark.sql.catalog.{catalog_name}.glue.id", f"{aws_account_id}") # Read Lake Formation-protected table with DynamicFrame df = glueContext.create_data_frame.from_catalog( database="your_database", table_name="your_table" )
Configuración adicional
Configuración del modo de acceso completo a tablas en blocs de notas de AWS Glue Studio
Para acceder a tablas registradas en AWS Lake Formation desde sesiones interactivas de Spark en blocs de notas de AWS Glue Studio, debe usar el modo de permisos de compatibilidad. Use el comando mágico %%configure
para configurar Spark antes de iniciar la sesión interactiva. Esta configuración debe ser el primer comando en el bloc de notas, ya que no se podrá aplicar una vez iniciada la sesión. Elija la configuración según el tipo de tabla:
Para tablas de Hive
%%configure --conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver --conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true --conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true --conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true --conf spark.sql.catalog.createDirectoryAfterTable.enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
Para tablas de Iceberg
%%configure --conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver --conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true --conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true --conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true --conf spark.sql.catalog.createDirectoryAfterTable.enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true --conf spark.sql.catalog.glue_catalog.glue.lakeformation-enabled=true --conf spark.sql.catalog.glue_catalog.warehouse=s3://example-s3-bucket_DATA_LOCATION --conf spark.sql.catalog.glue_catalog.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog --conf spark.sql.catalog.glue_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO --conf spark.sql.catalog.glue_catalog.glue.account-id=ACCOUNT_ID --conf spark.sql.catalog.glue_catalog.glue.region=REGION
Reemplace los marcadores de posición:
-
S3_DATA_LOCATION:
s3://amzn-s3-demo-bucket
-
REGIÓN:
Región de AWS (por ejemplo, us-east-1)
-
ACCOUNT_ID:
El ID de cuenta de AWS
nota
Debe establecer estas configuraciones antes de ejecutar cualquier operación de Spark en el bloc de notas.
Operaciones admitidas
Estas operaciones usarán credenciales de AWS Lake Formation para acceder a los datos de las tablas.
nota
Al habilitar AWS Lake Formation:
-
Para FTA: habilite la configuración de Spark
spark.sql.catalog.{catalog_name}.glue.lakeformation-enabled
-
CREATE TABLE
-
ALTER TABLE
-
INSERT INTO
-
INSERT OVERWRITE
-
SELECT
-
UPDATE
-
MERGE INTO
-
DELETE FROM
-
ANALIZAR TABLA
-
REPARAR TABLA
-
DROP TABLE
-
Consultas de orígenes de datos de Spark
-
Escrituras de orígenes de datos de Spark
nota
Las operaciones no mencionadas anteriormente aún usan permisos de IAM para acceder a los datos de las tablas.
Migración de AWS Glue 4.0 a AWS Glue 5.0 con FTA
Al migrar de FTA con GlueContext en AWS Glue 4.0 a FTA nativo de Spark en AWS Glue 5.0:
-
Permita que los motores de consultas de terceros accedan a los datos sin la validación de etiquetas de sesión de IAM en AWS Lake Formation. Realice un seguimiento de Paso 1: habilitación del acceso completo a la tabla en AWS Lake Formation.
-
No es necesario cambiar el rol de tiempo de ejecución del trabajo. Sin embargo, verifique que el rol de ejecución del trabajo de AWS Glue tenga el permiso de IAM lakeformation:GetDataAccess.
-
Modifique las configuraciones de la sesión de Spark en el script. Verifique que las siguientes configuraciones de Spark estén incluidas:
--conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog --conf spark.sql.catalog.spark_catalog.warehouse=s3://<bucket-name>/warehouse/ --conf spark.sql.catalog.spark_catalog.client.region=<REGION> --conf spark.sql.catalog.spark_catalog.glue.account-id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.glue.lakeformation-enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
-
Actualice el script para reemplazar los DataFrames de GlueContext por DataFrames nativos de Spark.
-
Actualice el trabajo de AWS Glue de modo que utilice AWS Glue 5.0
Condiciones y limitaciones
-
Si una tabla de Hive se crea mediante un trabajo que no tiene habilitado el acceso completo a la tabla y no se insertan registros, las lecturas o escrituras posteriores desde un trabajo con acceso completo a la tabla fallarán. Esto se debe a que AWS Glue Spark, cuando no tiene habilitado el acceso completo a la tabla, agrega el sufijo $folder$ al nombre de la carpeta de la tabla. Para resolver esto, puede optar por una de las siguientes acciones:
-
Insertar al menos una fila en la tabla desde un trabajo que no tenga FTA habilitado.
-
Configure el trabajo que no tiene FTA habilitado para evitar el uso del sufijo $folder$ en el nombre de la carpeta en S3. Esto se logra al configurar
spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true
en Spark. -
Cree una carpeta de Amazon S3 en la ubicación de la tabla
s3://path/to/table/table_name
mediante la consola de Amazon S3 o la CLI de Amazon S3.
-
-
El acceso completo a la tabla (FTA) funciona exclusivamente con el sistema de archivos de EMR (EMRFS). El sistema de archivos de S3A no es compatible.
-
El acceso completo a tablas (FTA) es compatible con tablas de Hive e Iceberg. Aún no se ha agregado compatibilidad con tablas Hudi y Delta.
-
Los trabajos que hagan referencia a tablas con reglas de control de acceso detallado (FGAC) de AWS Lake Formation o con vistas del Catálogo de datos de AWS Glue generarán errores. Para consultar una tabla con reglas de FGAC o una vista del Catálogo de datos de AWS Glue, debe usar el modo FGAC. Para habilitar el modo FGAC, siga los pasos que se indican en la documentación de AWS: Cómo utilizar AWS Glue con AWS Lake Formation para el control de acceso detallado.
-
El acceso completo a tablas no ofrece compatibilidad con Spark Streaming.
-
No se puede usar simultáneamente con FGAC.