Utilizzo di AWS Glue con AWS Lake Formation per l'accesso completo alla tabella
Introduzione all'accesso completo alla tabella
AWS Glue 5.0 supporta l'accesso completo alla tabella (FTA) in Apache Spark in base alle policy definite in AWS Lake Formation. Questa funzionalità consente le operazioni di lettura e scrittura dei processi AWS Glue Spark su tabelle AWS Lake Formation registrate quando il ruolo del processo ha accesso completo alla tabella. FTA è ideale per i casi d'uso che devono rispettare le normative di sicurezza a livello di tabella e supporta le funzionalità di Spark, tra cui Resilient Distributed Dataset (RDD), librerie personalizzate e UDF (funzioni definite dall'utente) con tabelle. AWS Lake Formation
Quando un processo AWS Glue Spark è configurato per l'accesso completo alla tabella (FTA), le credenziali AWS Lake Formation vengono utilizzate per leggere/scrivere i dati di Amazon S3 per le tabelle AWS Lake Formation registrate, mentre le credenziali del ruolo di runtime del processo verranno utilizzate per leggere/scrivere tabelle non registrate con AWS Lake Formation. Questa funzionalità abilita le operazioni di linguaggio di manipolazione dei dati (DML) tra cui le istruzioni CREATE, ALTER, DELETE, UPDATE e MERGE INTO sulle tabelle Apache Hive e Iceberg.
Nota
Esaminare i requisiti e determinare se il controllo granulare degli accessi (FGAC) o l'accesso completo alla tabella (FTA) soddisfano le esigenze. È possibile abilitare un solo metodo di autorizzazione AWS Lake Formation per un determinato processo AWS Glue. Un processo non può eseguire contemporaneamente l'accesso completo alla tabella (FTA) e il controllo granulare degli accessi (FGAC).
Come funziona l'accesso completo alla tabella (FTA) su AWS Glue
AWS Lake Formation offre due approcci per il controllo dell'accesso ai dati: il controllo granulare degli accessi (FGAC) e l'accesso completo alla tabella (FTA). FGAC offre una sicurezza avanzata attraverso il filtraggio a livello di colonna, riga e cella, ideale per scenari che richiedono autorizzazioni granulari. FTA è ideale per scenari di controllo degli accessi semplici in cui sono necessarie autorizzazioni a livello di tabella. Semplifica l'implementazione eliminando la necessità di abilitare una modalità di accesso dettagliata, migliora le prestazioni e riduce i costi evitando il driver di sistema e gli esecutori di sistema e supporta operazioni di lettura e scrittura (inclusi i comandi CREATE, ALTER, DELETE, UPDATE e MERGE INTO).
In AWS Glue 4.0, l'accesso basato sui dati AWS Lake Formation funzionava tramite la classe GlueContext, la classe di utilità fornita da AWS Glue. In AWS Glue 5.0, l'accesso basato sui dati AWS Lake Formation è disponibile tramite Spark SQL nativo, Spark DataFrames e continua a essere supportato tramite la classe GlueContext.
Implementazione dell'accesso completo alla tabella
Fase 1: Abilitare dell'accesso completo alla tabella in AWS Lake Formation
Per utilizzare la modalità di accesso completo alla tabella (FTA), è necessario consentire ai motori di query di terze parti di accedere ai dati senza la convalida dei tag di sessione IAM in AWS Lake Formation. Per abilitarli, seguire i passaggi descritti in Integrazione delle applicazioni per l'accesso completo alla tabella.
Fase 2: Configurazione delle autorizzazioni IAM per il ruolo di runtime dei processi
Per l'accesso in lettura o scrittura ai dati sottostanti, oltre alle autorizzazioni AWS Lake Formation, un ruolo di runtime dei processi richiede l'autorizzazione IAM lakeformation:GetDataAccess. Con questa autorizzazione, AWS Lake Formation concede la richiesta di credenziali temporanee per accedere ai dati.
Di seguito è riportato una policy esemplificativa su come fornire le autorizzazioni IAM per accedere a uno script in Amazon S3, caricare i log su Amazon S3, le autorizzazioni dell'API AWS Glue e l'autorizzazione per accedere a AWS Lake Formation.
Fase 2.1: Configurazione delle autorizzazioni AWS Lake Formation
I processi AWS Glue Spark che leggono dati da Amazon S3 richiedono l'autorizzazione AWS Lake Formation SELECT.
I processi AWS Glue Spark che scrivono/eliminano dati in Amazon S3 richiedono l'autorizzazione AWS Lake Formation ALL.
I processi AWS Glue Spark che interagiscono con il catalogo dati AWS Glue richiedono le autorizzazioni DESCRIBE, ALTER, DROP, a seconda dei casi.
Fase 3: Inizializzazione di una sessione Spark per l'accesso completo alla tabella utilizzando AWS Lake Formation
Per accedere alle tabelle registrate con AWS Lake Formation, è necessario impostare le seguenti configurazioni durante l'inizializzazione di Spark per configurare Spark per l'utilizzo delle credenziali AWS Lake Formation.
Per accedere alle tabelle registrate con AWS Lake Formation, è necessario configurare in modo esplicito la sessione Spark per utilizzare le credenziali AWS Lake Formation. Aggiungere le seguenti configurazioni durante l'inizializzazione della sessione 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()
Configurazioni principali:
-
spark.sql.catalog.glue_catalog: registra un catalogo denominato "glue_catalog" che utilizza l'implementazione GlueCatalog -
spark.sql.catalog.glue_catalog.glue.lakeformation-enabled: abilita esplicitamente l'integrazione di AWS Lake Formation per questo catalogo -
Il nome del catalogo ("glue_catalog" in questo esempio) può essere personalizzato, ma deve essere coerente in entrambe le impostazioni di configurazione
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: configura EMR Filesystem (EMRFS) per utilizzare le credenziali AWS Lake Formation S3 per le tabelle registrate AWS Lake Formation. Se la tabella non è registrata, utilizzare le credenziali del ruolo di runtime del processo. -
spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=trueespark.hadoop.fs.s3.folderObject.autoAction.disabled=true: configurano EMRFS per utilizzare l'applicazione di intestazione di tipo di contenuto/directory x invece del suffisso $folder$ durante la creazione di cartelle S3. Questo è obbligatorio per la lettura delle tabelle AWS Lake Formation, poiché le credenziali AWS Lake Formation non consentono la lettura di cartelle di tabelle con il suffisso $folder$. -
spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true: configura Spark per saltare la convalida del vuoto della posizione della tabella prima della creazione. Questo è obbligatorio per le tabelle registrate AWS Lake Formation, poiché le credenziali AWS Lake Formation per verificare la posizione vuota sono disponibili solo dopo la creazione della tabella del catalogo dati AWS Glue. Senza questa configurazione, le credenziali del ruolo di runtime del processo convalideranno la posizione della tabella vuota. -
spark.sql.catalog.createDirectoryAfterTable.enabled=true: configura Spark per creare la cartella Amazon S3 dopo la creazione della tabella nel metastore Hive. Questo è obbligatorio per le tabelle registrate AWS Lake Formation, poiché le credenziali AWS Lake Formation per creare la cartella Amazon S3 sono disponibili solo dopo la creazione della tabella del catalogo dati AWS Glue. -
spark.sql.catalog.dropDirectoryBeforeTable.enabled=true: configura Spark per cancellare la cartella Amazon S3 prima dell'eliminazione della tabella nel metastore Hive. Questo è obbligatorio per le tabelle registrate AWS Lake Formation, poiché le credenziali AWS Lake Formation per cancellare la cartella S3 non sono disponibili dopo l'eliminazione della tabella dal catalogo dati AWS Glue. -
spark.sql.catalog.<catalog>.AWS Glue.lakeformation-enabled=true: configura il catalogo Iceberg per utilizzare le credenziali AWS Lake Formation di Amazon S3 per le tabelle registrate AWS Lake Formation. Se la tabella non è registrata, usare le credenziali di ambiente predefinite.
Modelli di utilizzo
Utilizzo di FTA con DataFrames
Per gli utenti che hanno dimestichezza con Spark, DataFrames può essere utilizzato l'accesso completo alla tabella AWS Lake Formation.
AWS Glue 5.0 aggiunge il supporto Spark nativo per l'accesso completo alla tabella su Lake Formation, semplificando la modalità di lavoro con le tabelle protette. Questa funzionalità consente ai processi Spark AWS Glue di AWS Glue 5.0 di leggere e scrivere direttamente i dati quando viene concesso l'accesso completo alla tabella, eliminando le restrizioni che in precedenza limitavano determinate operazioni di estrazione, trasformazione e caricamento (ETL). Ora è possibile sfruttare le funzionalità avanzate di Spark, tra cui Resilient Distributed Dataset (RDD), librerie personalizzate e UDF (funzioni definite dall'utente) con tabelle AWS Lake Formation.
FTA nativo su Spark in AWS Glue 5.0
AWS Glue 5.0 supporta l'accesso completo alla tabella (FTA) in Apache Spark in base alle policy definite in AWS Lake Formation. Questo livello di controllo è ideale per i casi d'uso che devono rispettare le norme di sicurezza a livello di tabella.
Esempio di tabella di 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()
Autorizzazioni IAM richieste
Il ruolo di esecuzione del processo AWS Glue deve avere:
{ "Action": "lakeformation:GetDataAccess", "Resource": "*", "Effect": "Allow" }
Autorizzazioni di accesso S3 appropriate per le posizioni dei dati.
Configurazione di Lake Formation
Prima di utilizzare Spark FTA nativo in AWS Glue 5.0:
-
Consentire ai motori di query di terze parti di accedere ai dati senza la convalida dei tag di sessione IAM in AWS Lake Formation
-
Concedere le autorizzazioni di tabella appropriate al ruolo di esecuzione del processo AWS Glue tramite la console AWS Lake Formation
-
Configurare la sessione Spark con i parametri richiesti mostrati nell'esempio precedente
Utilizzo di FTA con DynamicFrames
DynamicFrames nativo di AWS Glue può essere utilizzato con l'accesso completo alla tabella di AWS Lake Formation per operazioni ETL ottimizzate. L'accesso completo alla tabella (FTA) fornisce un modello di sicurezza che concede autorizzazioni a livello di tabella, consentendo un'elaborazione dei dati più rapida rispetto al controllo granulare degli accessi (FGAC) poiché aggira il sovraccarico dei controlli delle autorizzazioni a livello di riga e colonna. Questo approccio è utile quando è necessario elaborare intere tabelle e le autorizzazioni a livello di tabella soddisfano i requisiti di sicurezza.
In AWS Glue 4.0, DynamicFrames con FTA richiedeva una configurazione GlueContext specifica. Sebbene il codice DynamicFrame esistente di AWS Glue 4.0 con FTA continuerà a funzionare in AWS Glue versione 5.0, anche la versione più recente offre il supporto nativo Spark FTA con maggiore flessibilità. Per un nuovo sviluppo, prendere in considerazione l'utilizzo dell'approccio Spark nativo descritto nella sezione DataFrames, soprattutto se sono necessarie funzionalità aggiuntive come Resilient Distributed Datasets (RDD), librerie personalizzate e funzioni definite dall'utente (UDF) con tabelle AWS Lake Formation.
Autorizzazioni richieste
Il ruolo IAM che esegue il processo Glue deve avere:
-
Autorizzazione
lakeformation:GetDataAccess -
Autorizzazioni appropriate per la tabella di Lake Formation concesse tramite la console Lake Formation
Esempio di implementazione di DynamicFrame in 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" )
Configurazione aggiuntiva
Configurare la modalità di accesso completo alla tabella nei notebook AWS Glue Studio
Per accedere alle tabelle registrate AWS Lake Formation dalle sessioni interattive di Spark nei notebook AWS Glue Studio, è necessario utilizzare la modalità di autorizzazione alla compatibilità. Usare il comando %%configure magic per impostare la configurazione di Spark prima di iniziare la sessione interattiva. Questa configurazione deve essere il primo comando del notebook, in quanto non può essere applicata dopo l'inizio della sessione. Scegliere la configurazione in base al tipo di tabella:
Per le tabelle 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
Per le tabelle 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
Sostituire i segnaposto:
-
S3_DATA_LOCATION:
s3://amzn-s3-demo-bucket -
REGION: regione
AWS (ad esempio, us-east-1) -
ACCOUNT_ID:
l'ID dell'account AWS
Nota
È necessario impostare queste configurazioni prima di eseguire qualsiasi operazione Spark sul notebook.
Operazioni supportate
Queste operazioni utilizzeranno le credenziali AWS Lake Formation per accedere ai dati della tabella.
Nota
Al momento dell'abilitazione di AWS Lake Formation:
-
Per FTA: abilitare la configurazione di Spark
spark.sql.catalog.{catalog_name}.glue.lakeformation-enabled
-
CREA TABELLA
-
ALTER TABLE
-
INSERT INTO
-
INSERT OVERWRITE
-
SELECT
-
UPDATE
-
MERGE INTO
-
DELETE FROM
-
ANALYZE TABLE
-
REPAIR TABLE
-
DROP TABLE
-
Query su origini dati Spark
-
Scritture di origini dati Spark
Nota
Le operazioni non elencate sopra continueranno a utilizzare le autorizzazioni IAM per accedere ai dati delle tabelle.
Migrazione da FTA AWS Glue 4.0 a AWS Glue 5.0
Durante la migrazione da AWS Glue 4.0 GlueContext FTA a Spark FTA AWS Glue 5.0 nativo:
-
Consentire ai motori di query di terze parti di accedere ai dati senza la convalida dei tag di sessione IAM in AWS Lake Formation. Seguire Fase 1: Abilitare dell'accesso completo alla tabella in AWS Lake Formation.
-
Non è necessario cambiare il ruolo di runtime del processo. Tuttavia, verificare che il ruolo di esecuzione del processo AWS Glue disponga dell'autorizzazione IAM akeformation:GetDataAccess.
-
Modificare le configurazioni delle sessioni Spark nello script. Assicurarsi che siano presenti le seguenti configurazioni di Spark:
--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 -
Aggiornare script in modo tale che i DataFrames di GlueContext vengano modificati in Spark DataFrames nativi.
-
Aggiornare il processo AWS Glue per utilizzare AWS Glue 5.0
Considerazioni e limitazioni
-
Se una tabella Hive viene creata utilizzando un processo per cui non è abilitato l'accesso completo alla tabella e non viene inserito alcun record, le letture o scritture successive da un processo con accesso completo alla tabella avranno esito negativo. Questo perché AWS Glue Spark senza accesso completo alla tabella aggiunge il suffisso $folder$ al nome della cartella della tabella. Per risolvere questo problema, è possibile procedere in questi modi:
-
Inserire almeno una riga nella tabella da un processo che non ha FTA abilitato.
-
Configurare il processo per cui FTA non è abilitato in modo che non utilizzi il suffisso $folder$ nel nome della cartella in S3. Ciò si può ottenere impostando la configurazione
spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=truedi Spark. -
Creare una cartella Amazon S3 nella posizione delle tabelle
s3://path/to/table/table_nameutilizzando la console Amazon S3 o la CLI di Amazon S3
-
-
L'accesso completo alla tabella funziona esclusivamente con EMR Filesystem (EMRFS). Il file system S3A non è compatibile.
-
L'accesso completo alla tabella è supportato per le tabelle Hive e Iceberg. Il supporto per le tabelle Hudi e Delta non è stato ancora aggiunto.
-
I processi che fanno riferimento a tabelle con regole di controllo granulare degli accessi AWS Lake Formation (FGAC) o viste del catalogo dati AWS Glue avranno esito negativo. Per eseguire una query in una tabella con regole FGAC o viste del catalogo dati AWS Glue, è necessario utilizzare la modalità FGAC. È possibile abilitare la modalità FGAC seguendo le fasi descritte nella documentazione di AWS: utilizzo di AWS Glue con AWS Lake Formation per un controllo granulare degli accessi.
-
L'accesso completo alla tabella non supporta Spark Streaming.
-
Non può essere utilizzato contemporaneamente a FGAC.