View a markdown version of this page

Uso de EMR Serverless con AWS Lake Formation para un control de acceso detallado - Amazon EMR

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de EMR Serverless con AWS Lake Formation para un control de acceso detallado

Descripción general de

Con las versiones 7.2.0 y superiores de Amazon EMR, aproveche AWS Lake Formation para aplicar controles de acceso detallados en las tablas del catálogo de datos respaldadas por S3. Esta capacidad le permite configurar controles de acceso a nivel de tabla, fila, columna y celda para consultas deread dentro de sus trabajos de Spark de Amazon EMR sin servidor. Para configurar un control de acceso detallado para los trabajos por lotes y las sesiones interactivas de Apache Spark, utilice EMR Studio. Consulte las siguientes secciones para obtener más información sobre Lake Formation y cómo usarlo con EMR sin servidor.

El uso de Amazon EMR Serverless con conlleva cargos adicionales. AWS Lake Formation Para obtener más información, consulte Precios de Amazon EMR.

Cómo funciona EMR Serverless con AWS Lake Formation

El uso de EMR sin servidor con Lake Formation le permite implementar una capa de permisos en cada trabajo de Spark para aplicar el control de permisos de Lake Formation cuando EMR sin servidor ejecuta trabajos. EMR sin servidor utiliza los perfiles de recursos de Spark para crear dos perfiles para ejecutar los trabajos de forma eficaz. El perfil de usuario ejecuta el código proporcionado por el usuario, mientras que el perfil del sistema implementa las políticas de Lake Formation. Para obtener más información, consulte Qué es AWS Lake Formation y Consideraciones y limitaciones.

Cuando utilice la capacidad preinicializada con Lake Formation, le sugerimos que tenga un mínimo de dos controladores de Spark. Cada Formation-enabled trabajo de Lake utiliza dos controladores Spark, uno para el perfil del usuario y otro para el perfil del sistema. Para obtener el mejor rendimiento, usa el doble de controladores para los Formation-enabled trabajos de Lake que si no usas Lake Formation.

Cuando ejecute trabajos de Spark en EMR sin servidor, también debe tener en cuenta el impacto de la asignación dinámica en la administración de recursos y el rendimiento del clúster. La configuración de spark.dynamicAllocation.maxExecutors del número máximo de ejecutores por perfil de recursos se aplica a los ejecutores de usuario y a los ejecutores del sistema. Si configura ese número para que sea igual al número máximo permitido de ejecutores, es posible que la ejecución del trabajo se bloquee debido a que un tipo de ejecutor utiliza todos los recursos disponibles, lo que impide que el otro ejecutor ejecute los trabajos.

Para no quedarse sin recursos, EMR sin servidor establece el número máximo predeterminado de ejecutores por perfil de recursos en el 90 % del valor spark.dynamicAllocation.maxExecutors. Puede anular esta configuración al especificar spark.dynamicAllocation.maxExecutorsRatio con un valor entre 0 y 1. Además, también puede configurar las siguientes propiedades para optimizar la asignación de recursos y el rendimiento general:

  • spark.dynamicAllocation.cachedExecutorIdleTimeout

  • spark.dynamicAllocation.shuffleTracking.timeout

  • spark.cleaner.periodicGC.interval

A continuación, se ofrece una descripción general de alto nivel sobre cómo EMR sin servidor obtiene acceso a los datos protegidos por las políticas de seguridad de Lake Formation.

Cómo accede Amazon EMR a los datos protegidos por las políticas de seguridad de Lake Formation.
  1. Un usuario envía un trabajo de Spark a una aplicación sin servidor AWS Lake Formation de EMR habilitada.

  2. EMR sin servidor envía el trabajo a un controlador de usuario y lo ejecuta en el perfil de usuario. El controlador de usuario ejecuta una versión sencilla de Spark que no permite lanzar tareas, solicitar ejecutores ni acceder a S3 ni al catálogo de Glue. Crea un plan de trabajo.

  3. EMR sin servidor configura un segundo controlador denominado controlador del sistema y lo ejecuta en el perfil del sistema (con una identidad privilegiada). EMR sin servidor configura un canal TLS cifrado entre los dos controladores para la comunicación. El controlador de usuario utiliza el canal para enviar los planes de trabajo al controlador del sistema. El controlador del sistema no ejecuta el código enviado por el usuario. Ejecuta Spark a pleno rendimiento y se comunica con S3 y con el catálogo de datos para acceder a los datos. Solicita ejecutores y compila el plan de trabajo en una secuencia de etapas de ejecución.

  4. Luego, EMR sin servidor ejecuta las etapas en los ejecutores con el controlador de usuario o el controlador del sistema. En cualquier etapa, el código de usuario se ejecuta exclusivamente en los ejecutores de perfiles de usuario.

  5. Las etapas que leen los datos de las tablas del catálogo de datos protegidas por filtros de seguridad AWS Lake Formation o las que aplican filtros de seguridad se delegan en los ejecutores del sistema.

Habilitación de Lake Formation en Amazon EMR

Para habilitar Lake Formation, debe establecer spark.emr-serverless.lakeformation.enabled en true según la clasificación de spark-defaults para el parámetro de configuración de tiempo de ejecución al crear una aplicación EMR sin servidor.

aws emr-serverless create-application \ --release-label emr-7.14.0 \ --runtime-configuration '{ "classification": "spark-defaults", "properties": { "spark.emr-serverless.lakeformation.enabled": "true" } }' \ --type "SPARK"

También puede habilitar Lake Formation al crear una nueva aplicación en EMR Studio. Elija Uso de Lake Formation para un control de acceso detallado, disponible en Configuraciones adicionales.

Inter-worker el cifrado está habilitado de forma predeterminada cuando se utiliza Lake Formation con EMR Serverless, por lo que no es necesario volver a habilitar explícitamente el cifrado entre trabajadores.

Habilitación de Lake Formation para trabajos de Spark

Para habilitar Lake Formation para trabajos individuales de Spark, establezca spark.emr-serverless.lakeformation.enabled en “verdadero” cuando utilice spark-submit.

--conf spark.emr-serverless.lakeformation.enabled=true

Permisos de IAM del rol de tiempo de ejecución de trabajos

Los permisos de Lake Formation controlan el acceso a los recursos del catálogo de datos de AWS Glue, a las ubicaciones de Amazon S3 y a los datos subyacentes en esas ubicaciones. Los permisos de IAM controlan el acceso a las API y los recursos de Lake Formation y AWS Glue. Aunque es posible que tenga el permiso de Lake Formation para acceder a una tabla del catálogo de datos (SELECT), la operación fallará si no tiene el permiso de IAM en la operativa de la API glue:Get*.

El siguiente es un ejemplo de política sobre cómo proporcionar permisos de IAM para acceder a un script en S3, cargar registros en S3, permisos de la API de Glue de AWS y permiso para acceder a Lake Formation.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "ScriptAccess", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::*.amzn-s3-demo-bucket/scripts", "arn:aws:s3:::*.amzn-s3-demo-bucket/*" ] }, { "Sid": "LoggingAccess", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/logs/*" ] }, { "Sid": "GlueCatalogAccess", "Effect": "Allow", "Action": [ "glue:Get*", "glue:Create*", "glue:Update*" ], "Resource": [ "*" ] }, { "Sid": "LakeFormationAccess", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": [ "*" ] } ] }

Configuración de permisos de Lake Formation para roles de tiempo de ejecución de trabajos

Primero, registre la ubicación de su tabla de Hive con Lake Formation. A continuación, cree los permisos para el rol de tiempo de ejecución de su trabajo en la tabla que desee. Para obtener más información sobre Lake Formation, consulte ¿Qué es AWS Lake Formation? en la Guía para AWS Lake Formation desarrolladores.

Después de configurar los permisos de Lake Formation, envíe trabajos de Spark en Amazon EMR sin servidor. Para obtener más información acerca de trabajos de Spark, consulte ejemplos de Spark.

Envío de la ejecución de un trabajo

Cuando termine de configurar los permisos de Lake Formation, podrá enviar trabajos a Spark en EMR sin servidor. En la siguiente sección, se muestran ejemplos de cómo configurar y enviar las propiedades de la ejecución del trabajo.

Requisitos del permiso

Tablas no registradas en AWS Lake Formation

En el caso de las tablas no registradas AWS Lake Formation, el rol de ejecución del trabajo accede tanto al catálogo de datos de AWS Glue como a los datos de la tabla subyacente en Amazon S3. Esto requiere que el rol de ejecución del trabajo tenga los permisos de IAM adecuados para las operaciones de AWS Glue y Amazon S3.

Tablas registradas en AWS Lake Formation

En el caso de las tablas registradas AWS Lake Formation, el rol de ejecución del trabajo accede a los metadatos del catálogo de datos de AWS Glue, mientras que las credenciales temporales vendidas por Lake Formation acceden a los datos de la tabla subyacente en Amazon S3. Los permisos de Lake Formation necesarios para ejecutar una operación dependen del catálogo de datos de AWS Glue y de las llamadas a la API de Amazon S3 que inicie el trabajo de Spark y se pueden resumir de la siguiente manera:

  • El permiso DESCRIBE permite al rol de tiempo de ejecución leer los metadatos de la tabla o la base de datos en el catálogo de datos

  • El permiso ALTER permite al rol de tiempo de ejecución modificar los metadatos de una tabla o base de datos en el catálogo de datos

  • El permiso DROP permite al rol de tiempo de ejecución eliminar los metadatos de tablas o bases de datos del catálogo de datos

  • El permiso SELECT permite al rol de tiempo de ejecución leer los datos de la tabla de Amazon S3

  • El permiso INSERT permite al rol de tiempo de ejecución escribir datos de tablas en Amazon S3

  • El permiso DELETE permite al rol de tiempo de ejecución eliminar datos de tablas de Amazon S3

    nota

    Lake Formation evalúa los permisos de forma perezosa cuando un trabajo de Spark llama a AWS Glue para recuperar los metadatos de la tabla y a Amazon S3 para recuperar los datos de la tabla. Los trabajos que utilizan un rol de tiempo de ejecución con permisos insuficientes no fallarán hasta que Spark realice una llamada de AWS Glue o Amazon S3 que requiera el permiso faltante.

nota

En la siguiente matriz de tablas compatible:

  • Las operaciones marcadas como compatibles utilizan exclusivamente las credenciales de Lake Formation para acceder a los datos de las tablas registradas en Lake Formation. Si los permisos de Lake Formation son insuficientes, la operación no recurrirá a las credenciales del rol en tiempo de ejecución. En el caso de las tablas no registradas en Lake Formation, las credenciales del rol de ejecución del trabajo acceden a los datos de la tabla.

  • Las operaciones marcadas como compatibles con los permisos de IAM en la ubicación de Amazon S3 no utilizan las credenciales de Lake Formation para acceder a los datos de las tablas subyacentes en Amazon S3. Para ejecutar estas operaciones, el rol de ejecución del trabajo debe tener los permisos de IAM de Amazon S3 necesarios para acceder a los datos de la tabla, independientemente de si la tabla está registrada en Lake Formation.

nota

A partir de Amazon EMR 7.12, las operaciones DML y DDL que modifican los datos de las tablas utilizan credenciales de Lake Formation. En Amazon EMR 7.11 y versiones anteriores, estas operaciones (excepto DELETE, UPDATE y MERGE) utilizan las credenciales del rol de ejecución del trabajo para modificar los datos de la tabla. Amazon EMR 7.11 y las versiones anteriores no admiten las operaciones de ELIMINACIÓN, ACTUALIZACIÓN ni COMBINACIÓN.

Hive
Operación AWS Lake Formation permisos Estado de soporte
SELECT SELECT compatible
CREATE TABLE CREATE_TABLE compatible
CREATE TABLE LIKE CREATE_TABLE Compatible con los permisos de IAM en la ubicación de Amazon S3
CREATE TABLE AS SELECT CREATE_TABLE Compatible con los permisos de IAM en la ubicación de Amazon S3
DESCRIBE TABLE DESCRIBE compatible
SHOW TBLPROPERTIES DESCRIBE compatible
SHOW COLUMNS DESCRIBE compatible
SHOW PARTITIONS DESCRIBE compatible
SHOW CREATE TABLE DESCRIBE compatible
ALTERAR TABLA tablename SELECCIONAR y MODIFICAR compatible
ALTERAR LA UBICACIÓN DEL tablename CONJUNTO DE MESAS - No compatible
ALTERAR TABLA tablename AGREGAR PARTICIÓN SELECCIONAR, INSERTAR y ALTERAR compatible
REPARAR TABLA SELECCIONAR y MODIFICAR compatible
CARGAR DATOS No compatible
INSERT INSERTAR y ALTERAR compatible
INSERT OVERWRITE SELECCIONAR, INSERTAR, ELIMINAR y ALTERAR compatible
DROP TABLE SELECCIONAR, SOLTAR, ELIMINAR y MODIFICAR compatible
TRUNCATE TABLE SELECCIONAR, INSERTAR, ELIMINAR y MODIFICAR compatible
Dataframe Writer V1 Igual que la operación SQL correspondiente

Se admite cuando se anexan datos a una tabla existente. Consulte las consideraciones y limitaciones para obtener más información

Dataframe Writer V2 Igual que la operación SQL correspondiente

Se admite cuando se anexan datos a una tabla existente. Consulte las consideraciones y limitaciones para obtener más información

Iceberg
Operación AWS Lake Formation permisos Estado de soporte
SELECT SELECT compatible
CREATE TABLE CREATE_TABLE compatible
CREATE TABLE LIKE CREATE_TABLE Compatible con los permisos de IAM en la ubicación de Amazon S3
CREATE TABLE AS SELECT CREATE_TABLE Compatible con los permisos de IAM en la ubicación de Amazon S3
REEMPLACE LA TABLA POR SELECTA SELECCIONAR, INSERTAR y MODIFICAR compatible
DESCRIBE TABLE DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
SHOW TBLPROPERTIES DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
SHOW CREATE TABLE DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
ALTER TABLE SELECT, INSERT y ALTER compatible
ALTER TABLE SET LOCATION SELECCIONAR, INSERTAR y MODIFICAR Compatible con los permisos de IAM en la ubicación de Amazon S3
MODIFICAR LA ESCRITURA DE LA TABLA ORDENADA POR SELECCIONA, INSERTA y ALTERA Compatible con los permisos de IAM en la ubicación de Amazon S3
ALTERAR LA ESCRITURA DE LA TABLA DISTRIBUIDA POR SELECCIONAR, INSERTAR Y ALTERAR Compatible con los permisos de IAM en la ubicación de Amazon S3
ALTERAR LA TABLA, CAMBIAR EL NOMBRE DE LA TABLA CREATE_TABLE y DROP compatible
INSERT INTO SELECCIONAR, INSERTAR y ALTERAR compatible
INSERT OVERWRITE SELECCIONAR, INSERTAR y MODIFICAR compatible
DELETE SELECCIONAR, INSERTAR y MODIFICAR compatible
UPDATE SELECCIONAR, INSERTAR y MODIFICAR compatible
MERGE INTO SELECCIONAR, INSERTAR y MODIFICAR compatible
DROP TABLE SELECCIONAR, BORRAR y SOLTAR compatible
DataFrame Escritor V1 - No compatible
DataFrame Escritor V2 Igual que la operación SQL correspondiente

Se admite cuando se anexan datos a una tabla existente. Consulte consideraciones y limitaciones para obtener más información.

Tabla de metadatos SELECT Soportado. Algunas tablas están ocultas. Consulte consideraciones y limitaciones para obtener más información.
Procedimientos almacenados - Se admite en tablas que cumplan las siguientes condiciones:
  • Tablas no registradas en AWS Lake Formation

  • Tablas que no utilizan register_table y migrate

    Consulte consideraciones y limitaciones para obtener más información.

Configuración de Spark para Iceberg: en el siguiente ejemplo, se muestra cómo configurar Spark con Iceberg. Para ejecutar trabajos de Iceberg, debe proporcionar las siguientes propiedades spark-submit.

--conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog --conf spark.sql.catalog.spark_catalog.warehouse=<S3_DATA_LOCATION> --conf spark.sql.catalog.spark_catalog.glue.account-id=<ACCOUNT_ID> --conf spark.sql.catalog.spark_catalog.client.region=<REGION> --conf spark.sql.catalog.spark_catalog.glue.endpoint=https://glue.<REGION>.amazonaws.com
Hudi
Operación AWS Lake Formation permisos Estado de soporte
SELECT SELECT compatible
CREATE TABLE CREAR_TABLA Compatible con los permisos de IAM en la ubicación de Amazon S3
CREATE TABLE LIKE CREATE_TABLE Compatible con los permisos de IAM en la ubicación de Amazon S3
CREATE TABLE AS SELECT - No compatible
DESCRIBE TABLE DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
SHOW TBLPROPERTIES DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
SHOW COLUMNS DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
SHOW CREATE TABLE DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
ALTER TABLE SELECT Compatible con los permisos de IAM en la ubicación de Amazon S3
INSERT INTO SELECT y ALTER Compatible con los permisos de IAM en la ubicación de Amazon S3
INSERT OVERWRITE SELECT y ALTER Compatible con los permisos de IAM en la ubicación de Amazon S3
DELETE - No compatible
UPDATE - No compatible
MERGE INTO - No compatible
DROP TABLE SELECCIONAR y ELIMINAR Compatible con los permisos de IAM en la ubicación de Amazon S3
DataFrame Escritor V1 - No compatible
DataFrame Escritor V2 Igual que la operación SQL correspondiente Compatible con los permisos de IAM en la ubicación de Amazon S3
Tabla de metadatos - No compatible
Características de mantenimiento y utilidad de la tabla - No compatible

En los siguientes ejemplos, se configura Spark con Hudi y se especifican las ubicaciones de los archivos y otras propiedades necesarias para su uso.

Configuración de Spark para Hudi: cuando se usa en un cuaderno, este fragmento especifica la ruta al archivo JAR de la agrupación de Hudi Spark que habilita la funcionalidad de Hudi en Spark. También configura Spark para usar el catálogo de datos de AWS Glue como metastore.

%%configure -f { "conf": { "spark.jars": "/usr/lib/hudi/hudi-spark-bundle.jar", "spark.hadoop.hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "spark.serializer": "org.apache.spark.serializer.JavaSerializer", "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.hudi.catalog.HoodieCatalog", "spark.sql.extensions": "org.apache.spark.sql.hudi.HoodieSparkSessionExtension" } }

Configuración de Spark para Hudi con AWS Glue: cuando se usa este fragmento en una libreta, habilita Hudi como formato de lago de datos compatible y garantiza que las bibliotecas y dependencias de Hudi estén disponibles.

%%configure { "--conf": "spark.serializer=org.apache.spark.serializer.JavaSerializer --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension", "--datalake-formats": "hudi", "--enable-glue-datacatalog": True, "--enable-lakeformation-fine-grained-access": "true" }
Delta Lake
Operación AWS Lake Formation permisos Estado de soporte
SELECT SELECT compatible
CREATE TABLE CREATE_TABLE compatible
CREATE TABLE LIKE - No compatible
CREATE TABLE AS SELECT CREATE_TABLE compatible
REEMPLAZAR TABLA POR SELECCIÓN SELECCIONAR, INSERTAR y MODIFICAR compatible
DESCRIBE TABLE DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
SHOW TBLPROPERTIES DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
SHOW COLUMNS DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
SHOW CREATE TABLE DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
ALTER TABLE SELECCIONA e INSERTA compatible
ALTER TABLE SET LOCATION SELECCIONAR e INSERTAR Compatible con los permisos de IAM en la ubicación de Amazon S3
MODIFICA EL tablename CLÚSTER DE TABLAS POR SELECCIONAR e INSERTAR Compatible con los permisos de IAM en la ubicación de Amazon S3
ALTERAR TABLA tablename AGREGAR RESTRICCIÓN SELECCIONAR e INSERTAR Compatible con los permisos de IAM en la ubicación de Amazon S3
ALTERE LA RESTRICCIÓN DE ELIMINACIÓN DE tablename TABLAS SELECCIONAR e INSERTAR Compatible con los permisos de IAM en la ubicación de Amazon S3
INSERT INTO SELECCIONA e INSERTA compatible
INSERT OVERWRITE SELECCIONAR e INSERTAR compatible
DELETE SELECCIONAR e INSERTAR compatible
UPDATE SELECCIONAR e INSERTAR compatible
MERGE INTO SELECCIONAR e INSERTAR compatible
DROP TABLE SELECCIONAR, BORRAR y SOLTAR compatible
DataFrame Escritor V1 - No compatible
DataFrame Escritor V2 Igual que la operación SQL correspondiente

compatible

Características de mantenimiento y utilidad de la tabla - No compatible

EMR sin servidor con Delta Lake: para utilizar Delta Lake con Lake Formation en EMR sin servidor, ejecute el siguiente comando:

spark-sql \ --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog \