Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Utilizzo di AWS Glue with AWS Lake Formation per l'accesso completo alla tabella
Introduzione all'accesso completo alla tabella
AWS Glue 5.0 supporta il controllo Full Table Access (FTA) in Apache Spark in base alle politiche definite in. AWS Lake Formation Questa funzionalità consente le operazioni di lettura e scrittura dei job AWS Glue Spark su tabelle AWS Lake Formation registrate quando il ruolo lavorativo 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 Datasets (RDDs), librerie personalizzate e User Defined Functions () con tabelle. UDFs AWS Lake Formation
Quando un job AWS Glue Spark è configurato per Full Table Access (FTA), AWS Lake Formation le credenziali vengono utilizzate per i dati di read/write Amazon S3 per le tabelle AWS Lake Formation registrate, mentre le credenziali del ruolo di runtime del job verranno utilizzate per le tabelle non registrate con. read/write 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 AWS Lake Formation autorizzazione per un determinato lavoro. AWS Glue Un processo non può eseguire contemporaneamente l'accesso completo alla tabella (FTA) e il controllo granulare degli accessi (FGAC).
Come funziona Full-Table Access (FTA) su AWS Glue
AWS Lake Formation offre due approcci per il controllo dell'accesso ai dati: Fine-Grained Access Control (FGAC) e Full Table Access (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).
Nella AWS Glue versione 4.0, l'accesso AWS Lake Formation basato sui dati funzionava tramite GlueContext class, la classe di utilità fornita da. AWS Glue Nella AWS Glue versione 5.0, l'accesso AWS Lake Formation basato ai dati è disponibile tramite Spark SQL nativo, Spark DataFrames e continua a essere supportato tramite la GlueContext classe.
Implementazione dell'accesso completo alla tabella
Fase 1: Abilita l'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 AWS Lake Formation autorizzazioni, un ruolo di job runtime richiede l'autorizzazione lakeformation:GetDataAccess IAM. 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.
Passaggio 2.1 Configurare le autorizzazioni AWS Lake Formation
AWS Glue I job Spark che leggono dati da Amazon S3 AWS Lake Formation richiedono l'autorizzazione SELECT.
AWS Glue Spark fa in modo che write/delete i dati in Amazon S3 AWS Lake Formation richiedano l'autorizzazione ALL.
AWS Glue I job Spark che interagiscono con AWS Glue Data catalog richiedono le autorizzazioni DESCRIBE, ALTER, DROP, a seconda dei casi.
Fase 3: Inizializza 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, devi 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: AWS Lake Formation abilita esplicitamente l'integrazione 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 S3 per le tabelle registrate. AWS Lake Formation 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. Ciò è necessario per la lettura delle tabelle, poiché le AWS Lake Formation credenziali non consentono la lettura di cartelle di AWS Lake Formation 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. Ciò è necessario per le tabelle AWS Lake Formation registrate, poiché AWS Lake Formation le credenziali per verificare la posizione vuota sono disponibili solo dopo la creazione della tabella Data Catalog. 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 è necessario per le tabelle AWS Lake Formation registrate, poiché AWS Lake Formation le credenziali per creare la cartella Amazon S3 sono disponibili solo AWS Glue dopo la creazione della tabella Data Catalog. -
spark.sql.catalog.dropDirectoryBeforeTable.enabled=true: configura Spark per cancellare la cartella Amazon S3 prima dell'eliminazione della tabella nel metastore Hive. Ciò è necessario per le tabelle AWS Lake Formation registrate, poiché AWS Lake Formation le credenziali per eliminare la cartella S3 non sono disponibili dopo l'eliminazione della tabella dal Data Catalog. AWS Glue -
spark.sql.catalog.<catalog>.AWS Glue.lakeformation-enabled=true: configura il catalogo Iceberg per utilizzare le credenziali AWS Lake Formation AWS Lake Formation Amazon S3 per le tabelle registrate. Se la tabella non è registrata, usare le credenziali di ambiente predefinite.
Modelli di utilizzo
Utilizzo di FTA con DataFrames
Per gli utenti che hanno familiarità con Spark, DataFrames può essere utilizzato con AWS Lake Formation Full Table Access.
AWS Glue 5.0 aggiunge il supporto Spark nativo per Lake Formation Full Table Access, semplificando il modo in cui lavori con le tabelle protette. Questa funzionalità consente ai job AWS Glue 5.0 AWS Glue Spark di leggere e scrivere direttamente i dati quando viene concesso l'accesso completo alla tabella, eliminando le limitazioni che in precedenza limitavano determinate operazioni di estrazione, trasformazione e caricamento (ETL). Ora puoi sfruttare le funzionalità avanzate di Spark, tra cui Resilient Distributed Datasets (RDDs), librerie personalizzate e User Defined Functions () con tabelle. UDFs AWS Lake Formation
Native Spark FTA nella versione 5.0 AWS Glue
AWS Glue 5.0 supporta il controllo dell'accesso completo alla tabella (FTA) in Apache Spark in base alle politiche 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 tuo AWS Glue ruolo di esecuzione del lavoro 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 nella AWS Glue versione 5.0:
-
Consenti ai motori di query di terze parti di accedere ai dati senza la convalida dei tag di sessione IAM in AWS Lake Formation
-
Concedi le autorizzazioni di tabella appropriate al tuo ruolo di esecuzione del AWS Glue lavoro tramite console AWS Lake Formation
-
Configurare la sessione Spark con i parametri richiesti mostrati nell'esempio precedente
Utilizzo di FTA con DynamicFrames
AWS Glue DynamicFrames può essere utilizzato con AWS Lake Formation Full Table Access 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.
Nella AWS Glue versione 4.0, DynamicFrames con FTA richiedeva una configurazione specifica GlueContext . Sebbene il DynamicFrame codice AWS Glue 4.0 esistente con FTA continuerà a funzionare nella versione AWS Glue 5.0, la versione più recente offre anche il supporto nativo di Spark FTA con maggiore flessibilità. Per un nuovo sviluppo, prendi in considerazione l'utilizzo dell'approccio nativo Spark descritto nella DataFrames sezione, soprattutto se hai bisogno di funzionalità aggiuntive come Resilient Distributed Datasets (RDDs), librerie personalizzate e Funzioni definite dall'utente () con tabelle. UDFs 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 DynamicFrame di implementazione in 5.0 AWS Glue
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
Configura la modalità di accesso completo alla tabella nei AWS Glue Studio notebook
Per accedere alle tabelle AWS Lake Formation registrate dalle sessioni interattive di Spark nei AWS Glue Studio notebook, devi 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 -
REGIONE:
AWS Region (e.g., us-east-1) -
ID ACCOUNT:
Your AWS Account ID
Nota
È necessario impostare queste configurazioni prima di eseguire qualsiasi operazione Spark sul notebook.
Operazioni supportate
Queste operazioni utilizzeranno le AWS Lake Formation credenziali per accedere ai dati della tabella.
Nota
Sull'abilitazione AWS Lake Formation:
-
Per FTA: abilitare la configurazione di Spark
spark.sql.catalog.{catalog_name}.glue.lakeformation-enabled
-
CREATE TABLE
-
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 AWS Glue 4.0 a AWS Glue 5.0 FTA
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: Abilita l'accesso completo alla tabella in AWS Lake Formation.
-
Non è necessario cambiare il ruolo di runtime del processo. Tuttavia, verifica che il ruolo di esecuzione del AWS Glue lavoro disponga dell'autorizzazione lakeformation: IAM. 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 -
Aggiorna lo script in modo che GlueContext DataFrames venga modificato in Spark nativo. DataFrames
-
Aggiorna il tuo AWS Glue job per usare 5.0 AWS Glue
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 lavori che fanno riferimento a tabelle con regole FGAC ( AWS Lake Formation Fine-Grained Access Control) o Data Catalog Views avranno esito negativo. AWS Glue Per interrogare una tabella con regole FGAC o AWS Glue Data Catalog View, è necessario utilizzare la modalità FGAC. È possibile abilitare la modalità FGAC seguendo i passaggi descritti nella AWS documentazione: Utilizzo con per un controllo granulare degli accessi. AWS Glue AWS Lake Formation
-
L'accesso completo alla tabella non supporta Spark Streaming.
-
Non può essere utilizzato contemporaneamente a FGAC.