Uso de EMR sin servidor con AWS Lake Formation para control de acceso detallado - Amazon EMR

Uso de EMR sin servidor con AWS Lake Formation para control de acceso detallado

Información general

Con las versiones 7.2.0 y posteriores de Amazon EMR, puede aprovechar 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 sin servidor con AWS Lake Formation implica cargos adicionales. Para obtener más información, consulte Precios de Amazon EMR.

Cómo funciona EMR sin servidor 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 recomendamos que tenga un mínimo de dos controladores Spark. Cada trabajo habilitado para Lake Formation utiliza dos controladores Spark, uno para el perfil de usuario y otro para el perfil del sistema. Para obtener el mejor rendimiento, debe utilizar el doble de controladores para los trabajos habilitados para Lake Formation en comparación con los que utilizaría si no usara Lake Formation.

Al ejecutar 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 spark.dynamicAllocation.maxExecutors del número máximo de ejecutores por perfil de recursos se aplica tanto a los ejecutores de usuario como 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 EMR sin servidor habilitada con AWS Lake Formation.

  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 datos de las tablas del catálogo de datos protegidas por AWS Lake Formation o aquellas que aplican filtros de seguridad se delegan a 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 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.3.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.

El cifrado entre trabajadores está habilitado de forma predeterminada cuando usa Lake Formation con EMR sin servidor, por lo que no tiene que 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 de 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.

{ "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 detalles acerca de Lake Formation, consulte Qué esAWS Lake Formation en la AWS Lake Formation Guía para desarrolladores.

Después de configurar los permisos de Lake Formation, puede enviar 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. 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

Compatibilidad con el formato de tabla abierta

La versión 7.2.0 de Amazon EMR incluye compatibilidad para un control de acceso detallado basado en Lake Formation. EMR sin servidor admite los tipos de tablas Hive e Iceberg. La tabla siguiente describe todas las operaciones compatibles.

Operaciones Hive Iceberg
Comandos DDL Solo con permisos de roles de IAM Solo con permisos de roles de IAM
Consultas incrementales No aplicable Totalmente compatible
Consultas de viaje en el tiempo No es aplicable a este formato de tabla Totalmente compatible
Tabla de metadatos No es aplicable a este formato de tabla Es compatible, pero algunas tablas están ocultas. Consulte consideraciones y limitaciones para obtener más información.
DML INSERT Solo con permisos de IAM Solo con permisos de IAM
ACTUALIZACIÓN DE DML No es aplicable a este formato de tabla Solo con permisos de IAM
DML DELETE No es aplicable a este formato de tabla Solo con permisos de IAM
Operaciones de lectura Totalmente compatible Totalmente compatible
Procedimientos almacenados No aplicable Se admite con las excepciones de register_table y migrate. Consulte consideraciones y limitaciones para obtener más información.