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 de AWS Glue with AWS Lake Formation pour un accès complet à la table
Présentation de l'accès complet aux tables
AWS Glue La version 5.0 prend en charge le contrôle de l'accès complet aux tables (FTA) dans Apache Spark en fonction de vos politiques définies dans AWS Lake Formation. Cette fonctionnalité permet d'effectuer des opérations de lecture et d'écriture à partir de vos tâches AWS Glue Spark sur des tables AWS Lake Formation enregistrées lorsque le rôle de tâche dispose d'un accès complet aux tables. FTA est idéal pour les cas d'utilisation qui doivent se conformer aux réglementations de sécurité au niveau des tables et prend en charge les fonctionnalités de Spark, notamment les ensembles de données distribués résilients (RDDs), les bibliothèques personnalisées et les fonctions définies par l'utilisateur (UDFs) avec des AWS Lake Formation tables.
Lorsqu'une tâche AWS Glue Spark est configurée pour un accès complet aux tables (FTA), les AWS Lake Formation informations d'identification sont utilisées pour accéder aux données read/write Amazon S3 relatives aux tables AWS Lake Formation enregistrées, tandis que les informations d'identification du rôle d'exécution de la tâche sont utilisées pour read/write les tables non enregistrées auprès AWS Lake Formation de celles-ci. Cette fonctionnalité active les opérations DML (Data Manipulation Language), notamment les instructions CREATE, ALTER, DELETE, UPDATE et MERGE INTO sur les tables Apache Hive et Iceberg.
Note
Passez en revue vos exigences et déterminez si le contrôle d'accès détaillé (FGAC) ou l'accès complet aux tables (FTA) répondent à vos besoins. Une seule méthode AWS Lake Formation d'autorisation peut être activée pour une AWS Glue tâche donnée. Une tâche ne peut pas exécuter simultanément Full Table Access (FTA) et Fine-Grained Access Control (FGAC).
Comment fonctionne Full-Table Access (FTA) sur AWS Glue
AWS Lake Formation propose deux approches pour le contrôle d'accès aux données : le contrôle d'accès détaillé (FGAC) et l'accès complet aux tables (FTA). Le FGAC fournit une sécurité renforcée grâce à un filtrage au niveau des colonnes, des lignes et des cellules, idéal pour les scénarios nécessitant des autorisations granulaires. FTA est idéal pour les scénarios de contrôle d'accès simples où vous avez besoin d'autorisations au niveau de la table. Il simplifie la mise en œuvre en éliminant le besoin d'activer le mode d'accès détaillé, améliore les performances et réduit les coûts en évitant le pilote système et les exécuteurs du système, et prend en charge les opérations de lecture et d'écriture (y compris les commandes CREATE, ALTER, DELETE, UPDATE et MERGE INTO).
Dans la AWS Glue version 4.0, l'accès aux données AWS Lake Formation basé sur la GlueContext classe s'effectuait par le biais de la classe utilitaire fournie par AWS Glue. Dans la AWS Glue version 5.0, l'accès aux données AWS Lake Formation basé est disponible via Spark SQL natif, Spark DataFrames, et continue d'être pris en charge par le biais GlueContext de classes.
Mise en œuvre de l'accès complet aux tables
Étape 1 : activer l'accès complet à la table dans AWS Lake Formation
Pour utiliser le mode Full Table Access (FTA), vous devez autoriser les moteurs de requêtes tiers à accéder aux données sans que la balise de session IAM ne soit validée. AWS Lake Formation Pour l'activer, suivez les étapes de la section Intégration des applications pour un accès complet aux tables.
Étape 2 : Configuration des autorisations IAM pour le rôle d'exécution des tâches
Pour accéder en lecture ou en écriture aux données sous-jacentes, en plus des AWS Lake Formation autorisations, un rôle d'exécution de tâche nécessite l'autorisation lakeformation:GetDataAccess
IAM. Avec cette autorisation, AWS Lake Formation accorde la demande d'informations d'identification temporaires pour accéder aux données.
Voici un exemple de politique expliquant comment fournir les autorisations IAM pour accéder à un script dans Amazon S3, le téléchargement de journaux sur Amazon S3, les autorisations d' AWS Glue API et les autorisations d'accès. AWS Lake Formation
Étape 2.1 Configuration AWS Lake Formation des autorisations
AWS Glue Les tâches Spark qui lisent des données depuis Amazon S3 nécessitent l'autorisation AWS Lake Formation SELECT.
AWS Glue Spark Jobs pour write/delete lesquels les données d'Amazon S3 nécessitent AWS Lake Formation TOUTES les autorisations.
AWS Glue Les tâches Spark qui interagissent avec le catalogue de AWS Glue données nécessitent les autorisations DESCRIBE, ALTER, DROP, selon le cas.
Étape 3 : Initialisation d'une session Spark pour un accès complet à la table à l'aide de AWS Lake Formation
Pour accéder aux tables enregistrées auprès de Spark AWS Lake Formation, les configurations suivantes doivent être définies lors de l'initialisation de Spark afin que Spark utilise les AWS Lake Formation informations d'identification.
Pour accéder aux tables enregistrées auprès de vous AWS Lake Formation, vous devez configurer explicitement votre session Spark pour utiliser les AWS Lake Formation informations d'identification. Ajoutez les configurations suivantes lors de l'initialisation de votre session 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()
Configurations principales :
-
spark.sql.catalog.glue_catalog
: Enregistre un catalogue nommé « glue_catalog » qui utilise l'implémentation GlueCatalog -
spark.sql.catalog.glue_catalog.glue.lakeformation-enabled
: active explicitement AWS Lake Formation l'intégration pour ce catalogue -
Le nom du catalogue (« glue_catalog » dans cet exemple) peut être personnalisé, mais il doit être cohérent dans les deux paramètres de configuration
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
: Configurez le système de fichiers EMR (EMRFS) pour utiliser les informations d'identification AWS Lake Formation S3 pour les tables enregistrées. AWS Lake Formation Si la table n'est pas enregistrée, utilisez les informations d'identification du rôle d'exécution de la tâche. -
spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true
etspark.hadoop.fs.s3.folderObject.autoAction.disabled=true
: Configurez EMRFS pour utiliser l'en-tête de type de contenu application/x-directory au lieu du suffixe $folder$ lors de la création de dossiers S3. Cela est nécessaire lors de la lecture de AWS Lake Formation tables, car les AWS Lake Formation informations d'identification ne permettent pas de lire les dossiers de tables portant le suffixe $folder$. -
spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true
: configurez Spark pour qu'il ignore la validation de l'emplacement vide de la table avant sa création. Cela est nécessaire pour les tables AWS Lake Formation enregistrées, car les AWS Lake Formation informations d'identification permettant de vérifier l'emplacement vide ne sont disponibles qu'après la création de la table du catalogue de AWS Glue données. Sans cette configuration, les informations d'identification du rôle d'exécution de la tâche valideront l'emplacement de la table vide. -
spark.sql.catalog.createDirectoryAfterTable.enabled=true
: configurez Spark pour créer le dossier Amazon S3 après la création de la table dans le métastore Hive. Cela est obligatoire pour les tables AWS Lake Formation enregistrées, car les AWS Lake Formation informations d'identification permettant de créer le dossier Amazon S3 ne sont disponibles qu'après la création de la table du catalogue de AWS Glue données. -
spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
: configurez Spark pour qu'il supprime le dossier Amazon S3 avant de supprimer la table dans le métastore Hive. Cela est nécessaire pour les tables AWS Lake Formation enregistrées, car les AWS Lake Formation informations d'identification permettant de supprimer le dossier S3 ne sont pas disponibles après la suppression des tables du catalogue de AWS Glue données. -
spark.sql.catalog.<catalog>.AWS Glue.lakeformation-enabled=true
: configurez le catalogue Iceberg pour utiliser les informations d'identification AWS Lake Formation Amazon S3 pour les tables AWS Lake Formation enregistrées. Si la table n'est pas enregistrée, utilisez les informations d'identification d'environnement par défaut.
Schémas d'utilisation
Utiliser FTA avec DataFrames
Pour les utilisateurs habitués à Spark, il DataFrames peut être utilisé avec AWS Lake Formation Full Table Access.
AWS Glue La version 5.0 ajoute le support natif de Spark pour l'accès complet aux tables de Lake Formation, simplifiant ainsi la façon dont vous travaillez avec les tables protégées. Cette fonctionnalité permet aux tâches AWS Glue Spark AWS Glue 5.0 de lire et d'écrire directement des données lorsque l'accès complet à la table est accordé, supprimant ainsi les limitations qui limitaient auparavant certaines opérations d'extraction, de transformation et de chargement (ETL). Vous pouvez désormais tirer parti des fonctionnalités avancées de Spark, notamment des ensembles de données distribués résilients (RDDs), des bibliothèques personnalisées et des fonctions définies par l'utilisateur (UDFs) avec des AWS Lake Formation tables.
Native Spark FTA en version 5.0 AWS Glue
AWS Glue La version 5.0 prend en charge le contrôle d'accès aux tables complètes (FTA) dans Apache Spark en fonction de vos politiques définies dans. AWS Lake Formation Ce niveau de contrôle est idéal pour les cas d'utilisation qui doivent être conformes aux réglementations de sécurité au niveau de la table.
Exemple de table 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()
Autorisations IAM nécessaires
Votre rôle AWS Glue d'exécution de tâches doit comporter les éléments suivants :
{ "Action": "lakeformation:GetDataAccess", "Resource": "*", "Effect": "Allow" }
Sans oublier les autorisations d'accès S3 appropriées pour l'emplacement de vos données.
Configuration de la formation du lac
Avant d'utiliser Spark FTA natif dans la AWS Glue version 5.0 :
-
Autoriser les moteurs de requêtes tiers à accéder aux données sans validation des balises de session IAM dans AWS Lake Formation
-
Accordez les autorisations de table appropriées à votre AWS Glue rôle d'exécution de tâches via AWS Lake Formation la console
-
Configurez votre session Spark avec les paramètres requis indiqués dans l'exemple ci-dessus
Utiliser FTA avec DynamicFrames
AWS Glue DynamicFrames peut être utilisé avec AWS Lake Formation Full Table Access pour des opérations ETL optimisées. L'accès complet aux tables (FTA) fournit un modèle de sécurité qui accorde des autorisations au niveau de la table, ce qui permet un traitement des données plus rapide que le contrôle d'accès détaillé (FGAC), car il permet d'éviter les surcharges liées aux vérifications d'autorisation au niveau des lignes et des colonnes. Cette approche est utile lorsque vous devez traiter des tables entières et que les autorisations au niveau des tables répondent à vos exigences de sécurité.
Dans la AWS Glue version 4.0, DynamicFrames FTA nécessitait une GlueContext configuration spécifique. Alors que le DynamicFrame code AWS Glue 4.0 existant avec FTA continuera de fonctionner dans la version AWS Glue 5.0, la nouvelle version offre également un support natif de Spark FTA avec une plus grande flexibilité. Pour les nouveaux développements, pensez à utiliser l'approche native de Spark décrite dans la DataFrames section, en particulier si vous avez besoin de fonctionnalités supplémentaires telles que des ensembles de données distribués résilients (RDDs), des bibliothèques personnalisées et des fonctions définies par l'utilisateur (UDFs) avec des AWS Lake Formation tables.
Autorisations nécessaires
Le rôle IAM exécutant votre tâche Glue doit avoir :
-
lakeformation:GetDataAccess
autorisation -
Permissions de table Lake Formation appropriées accordées via la console Lake Formation
Exemple de DynamicFrame mise en œuvre dans la AWS Glue version 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" )
Configuration supplémentaire
Configurer le mode d'accès complet aux tables dans les AWS Glue Studio blocs-notes
Pour accéder aux tables AWS Lake Formation enregistrées à partir de sessions Spark interactives dans des AWS Glue Studio blocs-notes, vous devez utiliser le mode d'autorisation de compatibilité. Utilisez la commande %%configure
magique pour configurer votre configuration Spark avant de démarrer votre session interactive. Cette configuration doit être la première commande de votre bloc-notes, car elle ne peut pas être appliquée une fois la session démarrée. Choisissez la configuration en fonction de votre type de table :
Pour les tables 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
Pour les tables 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
Remplacez les espaces réservés :
-
S3_DATA_LOCATION :
s3://amzn-s3-demo-bucket
-
RÉGION :
AWS Region (e.g., us-east-1)
-
IDENTIFIANT DU COMPTE :
Your AWS Account ID
Note
Vous devez définir ces configurations avant d'exécuter des opérations Spark dans votre bloc-notes.
Opérations prises en charge
Ces opérations utiliseront des AWS Lake Formation informations d'identification pour accéder aux données de la table.
Note
Lors de l'activation AWS Lake Formation :
-
Pour FTA : activer la configuration Spark
spark.sql.catalog.{catalog_name}.glue.lakeformation-enabled
-
CREATE TABLE
-
ALTER TABLE
-
INSERT INTO
-
INSERT OVERWRITE
-
SELECT
-
UPDATE
-
MERGE INTO
-
DELETE FROM
-
ANALYSER LE TABLEAU
-
TABLE DE RÉPARATION
-
DROP TABLE
-
Requêtes de source de données Spark
-
Écritures de source de données Spark
Note
Les opérations non répertoriées ci-dessus continueront à utiliser les autorisations IAM pour accéder aux données des tables.
Migration de la AWS Glue version 4.0 à la version AWS Glue 5.0 FTA
Lors de la migration de la AWS Glue version 4.0 GlueContext FTA vers la AWS Glue version 5.0 native de Spark FTA :
-
Autorisez les moteurs de requêtes tiers à accéder aux données sans la validation de la balise de session IAM dans AWS Lake Formation. SuivezÉtape 1 : activer l'accès complet à la table dans AWS Lake Formation.
-
Il n'est pas nécessaire de modifier le rôle d'exécution des tâches. Vérifiez toutefois que le rôle AWS Glue d'exécution de la tâche dispose de l'autorisation lakeformation : GetDataAccess IAM.
-
Modifiez les configurations de session Spark dans le script. Assurez-vous que les configurations Spark suivantes sont présentes :
--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
-
Mettez à jour le script tel qu' GlueContext DataFrames il est remplacé par Native Spark DataFrames.
-
Mettez à jour votre AWS Glue tâche pour utiliser la AWS Glue version 5.0
Considérations et restrictions
-
Si une table Hive est créée à l'aide d'une tâche pour laquelle l'accès complet à la table n'est pas activé et qu'aucun enregistrement n'est inséré, les lectures ou écritures suivantes à partir d'une tâche avec accès complet à la table échoueront. Cela est dû au fait que AWS Glue Spark sans accès complet à la table ajoute le suffixe $folder$ au nom du dossier de la table. Pour résoudre ce problème, vous pouvez soit :
-
Insérez au moins une ligne dans le tableau à partir d'une tâche pour laquelle FTA n'est pas activé.
-
Configurez la tâche pour laquelle FTA n'est pas activé pour ne pas utiliser le suffixe $folder$ dans le nom du dossier dans S3. Cela peut être réalisé en définissant la configuration de Spark
spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true
. -
Créez un dossier Amazon S3 à l'emplacement de la table à
s3://path/to/table/table_name
l'aide de la console Amazon S3 ou de la CLI Amazon S3.
-
-
Full Table Access fonctionne exclusivement avec le système de fichiers EMR (EMRFS). Le système de fichiers S3A n'est pas compatible.
-
L'accès complet aux tables est pris en charge pour les tables Hive et Iceberg. Support pour les tables Hudi et Delta n'a pas encore été ajouté.
-
Les tâches faisant référence à des tables dotées de règles de contrôle d' AWS Lake Formation accès fin (FGAC) ou à des vues de catalogue de AWS Glue données échoueront. Pour interroger une table avec des règles FGAC ou une vue de catalogue de AWS Glue données, vous devez utiliser le mode FGAC. Vous pouvez activer le mode FGAC en suivant les étapes décrites dans la AWS documentation : Utilisation AWS Glue avec AWS Lake Formation pour un contrôle d'accès précis.
-
L'accès complet aux tables ne prend pas en charge Spark Streaming.
-
Ne peut pas être utilisé simultanément avec le FGAC.