Utilisation d'EMR Serverless AWS Lake Formation pour un contrôle d'accès précis - Amazon EMR

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation d'EMR Serverless AWS Lake Formation pour un contrôle d'accès précis

Présentation

Avec les versions 7.2.0 et supérieures d'Amazon EMR, vous pouvez AWS Lake Formation appliquer des contrôles d'accès précis aux tables du catalogue de données soutenues par S3. Cette fonctionnalité vous permet de configurer des contrôles d'accès au niveau des tables, des lignes, des colonnes et des cellules pour les read requêtes dans vos tâches Amazon EMR Serverless Spark. Pour configurer un contrôle d'accès précis pour les tâches par lots et les sessions interactives d'Apache Spark, utilisez EMR Studio. Consultez les sections suivantes pour en savoir plus sur Lake Formation et sur son utilisation avec EMR Serverless.

L'utilisation d'Amazon EMR Serverless AWS Lake Formation entraîne des frais supplémentaires. Pour plus d'informations, consultez la tarification d'Amazon EMR.

Comment fonctionne EMR Serverless avec AWS Lake Formation

L'utilisation d'EMR Serverless avec Lake Formation vous permet d'appliquer une couche d'autorisations à chaque tâche Spark afin d'appliquer le contrôle des autorisations de Lake Formation lorsque EMR Serverless exécute des tâches. EMR Serverless utilise les profils de ressources Spark pour créer deux profils afin d'exécuter efficacement les tâches. Le profil utilisateur exécute le code fourni par l'utilisateur, tandis que le profil système applique les politiques de Lake Formation. Pour plus d'informations, reportez-vous à la section Qu'est-ce que c'est, considérations AWS Lake Formation et limites.

Lorsque vous utilisez une capacité préinitialisée avec Lake Formation, nous vous conseillons de disposer d'au moins deux pilotes Spark. Chaque tâche activée par Lake Formation utilise deux pilotes Spark, l'un pour le profil utilisateur et l'autre pour le profil système. Pour de meilleures performances, utilisez deux fois plus de conducteurs pour les tâches compatibles avec Lake Formation que si vous n'utilisez pas Lake Formation.

Lorsque vous exécutez des tâches Spark sur EMR Serverless, tenez également compte de l'impact de l'allocation dynamique sur la gestion des ressources et les performances du cluster. La configuration spark.dynamicAllocation.maxExecutors du nombre maximum d'exécuteurs par profil de ressource s'applique aux exécuteurs utilisateur et système. Si vous configurez ce nombre pour qu'il soit égal au nombre maximum autorisé d'exécuteurs, l'exécution de votre tâche risque de se bloquer car un type d'exécuteur utilise toutes les ressources disponibles, ce qui empêche l'autre exécuteur d'exécuter des tâches.

Pour ne pas manquer de ressources, EMR Serverless définit le nombre maximum d'exécuteurs par défaut par profil de ressource à 90 % de la valeur. spark.dynamicAllocation.maxExecutors Vous pouvez remplacer cette configuration lorsque vous spécifiez spark.dynamicAllocation.maxExecutorsRatio une valeur comprise entre 0 et 1. Configurez également les propriétés suivantes pour optimiser l'allocation des ressources et les performances globales :

  • spark.dynamicAllocation.cachedExecutorIdleTimeout

  • spark.dynamicAllocation.shuffleTracking.timeout

  • spark.cleaner.periodicGC.interval

Voici un aperçu général de la manière dont EMR Serverless accède aux données protégées par les politiques de sécurité de Lake Formation.

Comment Amazon EMR accède aux données protégées par les politiques de sécurité de Lake Formation.
  1. Un utilisateur soumet une tâche Spark à une application EMR sans serveur AWS Lake Formation compatible.

  2. EMR Serverless envoie la tâche à un pilote utilisateur et l'exécute dans le profil utilisateur. Le pilote utilisateur exécute une version allégée de Spark qui n'est pas en mesure de lancer des tâches, de demander des exécuteurs, d'accéder à S3 ou au catalogue Glue. Il élabore un plan d'emploi.

  3. EMR Serverless configure un deuxième pilote appelé pilote système et l'exécute dans le profil système (avec une identité privilégiée). EMR Serverless configure un canal TLS crypté entre les deux pilotes pour la communication. Le pilote utilisateur utilise le canal pour envoyer les plans de travail au pilote du système. Le pilote du système n'exécute pas le code envoyé par l'utilisateur. Il exécute Spark dans son intégralité et communique avec S3 et le catalogue de données pour l'accès aux données. Il demande des exécuteurs et compile le Job Plan en une séquence d'étapes d'exécution.

  4. EMR Serverless exécute ensuite les étapes sur les exécuteurs à l'aide du pilote utilisateur ou du pilote système. À n'importe quel stade, le code utilisateur est exécuté exclusivement sur les exécuteurs de profil utilisateur.

  5. Les étapes qui lisent les données des tables du catalogue de données protégées par des filtres de sécurité AWS Lake Formation ou qui appliquent des filtres de sécurité sont déléguées aux exécuteurs du système.

Favoriser la formation de Lake dans Amazon EMR

Pour activer Lake Formation, définissez le paramètre de configuration spark.emr-serverless.lakeformation.enabled d'exécution sur « true spark-defaults sous-classification » lors de la création d'une application EMR Serverless.

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

Vous pouvez également activer Lake Formation lorsque vous créez une nouvelle application dans EMR Studio. Choisissez Utiliser Lake Formation pour un contrôle d'accès précis, disponible dans la section Configurations supplémentaires.

Le chiffrement entre utilisateurs est activé par défaut lorsque vous utilisez Lake Formation avec EMR Serverless. Il n'est donc pas nécessaire de réactiver explicitement le chiffrement entre utilisateurs.

Activer Lake Formation pour les emplois de Spark

Pour activer Lake Formation pour des tâches Spark individuelles, définissez ce paramètre spark.emr-serverless.lakeformation.enabled sur true lors de l'utilisationspark-submit.

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

Autorisations IAM du rôle d'exécution des tâches

Les autorisations de Lake Formation contrôlent l'accès aux ressources du catalogue de données AWS Glue, aux sites Amazon S3 et aux données sous-jacentes de ces sites. Les autorisations IAM contrôlent l'accès à la Lake Formation and AWS Glue APIs et aux ressources. Bien que vous ayez l'autorisation Lake Formation d'accéder à une table du catalogue de données (SELECT), votre opération échoue si vous ne disposez pas de l'autorisation IAM pour l'opération d'glue:Get*API.

Voici un exemple de politique expliquant comment fournir des autorisations IAM pour accéder à un script dans S3, télécharger des journaux dans S3, autoriser l'API AWS Glue et accéder à 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": [ "*" ] } ] }

Configuration des autorisations de Lake Formation pour le rôle d'exécution des tâches

Tout d'abord, enregistrez l'emplacement de votre table Hive avec Lake Formation. Créez ensuite des autorisations pour votre rôle d'exécution des tâches dans le tableau de votre choix. Pour plus de détails sur la Lake Formation, reportez-vous à Qu'est-ce que c'est AWS Lake Formation ? dans le Guide AWS Lake Formation du développeur.

Après avoir configuré les autorisations de Lake Formation, soumettez des tâches Spark sur Amazon EMR Serverless. Pour plus d'informations sur les tâches Spark, reportez-vous aux exemples de Spark.

Soumission d'une exécution de tâche

Une fois que vous aurez fini de configurer les subventions Lake Formation, vous pourrez soumettre des tâches Spark sur EMR Serverless. La section qui suit présente des exemples de configuration et de soumission des propriétés d'exécution des tâches.

Support du format de tableau ouvert

EMR Serverless prend en charge Apache Hive, Apache Iceberg et, à partir de la version 7.6.0, Delta Lake et Apache Hudi. Pour plus d'informations sur le support opérationnel, reportez-vous aux onglets suivants.

Hive
Opérations Remarques
Opérations de lecture Entièrement pris en charge
Requêtes progressives Ne s’applique pas
Requêtes Time Travel Non applicable à ce format de tableau
DML INSERT Avec des autorisations IAM uniquement
MISE À JOUR DML Non applicable à ce format de tableau
DML DELETE Non applicable à ce format de tableau
Commandes DML Avec des autorisations IAM uniquement
Tables de métadonnées Non applicable à ce format de tableau
Procédures stockées Ne s’applique pas
Maintenance des tables et fonctionnalités utilitaires Ne s’applique pas
Iceberg
Opérations Remarques
Opérations de lecture Entièrement pris en charge
Requêtes progressives Entièrement pris en charge
Requêtes Time Travel Entièrement pris en charge
DML INSERT Avec des autorisations IAM uniquement
MISE À JOUR DML Avec des autorisations IAM uniquement
DML DELETE Avec des autorisations IAM uniquement
Commandes DML Avec des autorisations IAM uniquement
Tables de métadonnées Supporté, mais certaines tables sont masquées. Reportez-vous à la section Considérations et limites pour plus d'informations.
Procédures stockées Pris en charge à l'exception de register_table etmigrate. Reportez-vous à la section Considérations et limites pour plus d'informations.
Maintenance des tables et fonctionnalités utilitaires Ne s’applique pas

Configuration de Spark pour Iceberg : l'exemple suivant montre comment configurer Spark avec Iceberg. Pour exécuter des tâches Iceberg, saisissez les spark-submit propriétés suivantes.

--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
Opérations Remarques
Opérations de lecture Entièrement pris en charge
Requêtes progressives Entièrement pris en charge
Requêtes Time Travel Entièrement pris en charge
DML INSERT Avec des autorisations IAM uniquement
MISE À JOUR DML Avec des autorisations IAM uniquement
DML DELETE Avec des autorisations IAM uniquement
Commandes DML Avec des autorisations IAM uniquement
Tables de métadonnées Non pris en charge
Procédures stockées Ne s’applique pas
Maintenance des tables et fonctionnalités utilitaires Non pris en charge

Les exemples suivants configurent Spark avec Hudi, en spécifiant l'emplacement des fichiers et les autres propriétés nécessaires à son utilisation.

Configuration Spark pour Hudi : lorsqu'il est utilisé dans un bloc-notes, cet extrait indique le chemin d'accès au fichier JAR du bundle Hudi Spark, qui active la fonctionnalité Hudi dans Spark. Il configure également Spark pour utiliser le catalogue de données AWS Glue comme métastore.

%%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" } }

Configuration Spark pour Hudi with AWS Glue : cet extrait, lorsqu'il est utilisé dans un bloc-notes, active Hudi en tant que format de lac de données pris en charge et garantit la disponibilité des bibliothèques et des dépendances Hudi.

%%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
Opérations Remarques
Opérations de lecture Entièrement pris en charge
Requêtes progressives Entièrement pris en charge
Requêtes Time Travel Entièrement pris en charge
DML INSERT Avec des autorisations IAM uniquement
MISE À JOUR DML Avec des autorisations IAM uniquement
DML DELETE Avec des autorisations IAM uniquement
Commandes DML Avec des autorisations IAM uniquement
Tables de métadonnées Non pris en charge
Procédures stockées Ne s’applique pas
Maintenance des tables et fonctionnalités utilitaires Non pris en charge

EMR sans serveur avec Delta Lake : pour utiliser Delta Lake with Lake Formation sur EMR Serverless, exécutez la commande suivante :

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 \