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 DML (Data Manipulation Language) tra cui le istruzioni CREATE, ALTER, DELETE, UPDATE e MERGE INTO sulle tabelle Apache Hive e Iceberg.
Nota
Esamina i tuoi requisiti e determina se Fine-Grained Access Control (FGAC) o Full Table Access (FTA) soddisfano le tue esigenze. È possibile abilitare un solo metodo di AWS Lake Formation autorizzazione per un determinato lavoro. AWS Glue Un job non può eseguire contemporaneamente Full Table Access (FTA) e Fine-Grained Access Control (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 maggiore sicurezza 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
Passaggio 1: abilitare l'accesso completo alla tabella in AWS Lake Formation
Per utilizzare la modalità Full Table Access (FTA), devi consentire ai motori di query di terze parti di accedere ai dati senza la convalida dei tag di sessione IAM. AWS Lake Formation Per abilitarla, segui i passaggi descritti in Integrazione delle applicazioni per l'accesso completo alla tabella.
Fase 2: Configurazione delle autorizzazioni IAM per il ruolo Job Runtime
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 un esempio di policy su come fornire autorizzazioni IAM per accedere a uno script in Amazon S3, caricare log su Amazon S3, autorizzazioni API e autorizzazioni di accesso. AWS Glue AWS Lake Formation
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ScriptAccess", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/scripts/*" ] }, { "Sid": "LoggingAccess", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/logs/*" ] }, { "Sid": "GlueCatalogAccess", "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetDatabases", "glue:GetTable", "glue:GetTables", "glue:GetPartition", "glue:GetPartitions", "glue:CreateTable", "glue:UpdateTable" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default", "arn:aws:glue:us-east-1:123456789012:table/default/*" ] }, { "Sid": "LakeFormationAccess", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": "*" } ] }
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 Aggiungi 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 chiave:
-
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, utilizza le credenziali del ruolo di runtime del job. -
spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true
espark.hadoop.fs.s3.folderObject.autoAction.disabled=true
: configura EMRFS per utilizzare Content Type Header application/x-directory invece del suffisso $folder$ durante la creazione di cartelle S3. Questo è necessario per la lettura delle tabelle, poiché AWS Lake Formation le 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. Questo è necessario per le tabelle AWS Lake Formation registrate, poiché AWS Lake Formation le credenziali per verificare la posizione vuota sono disponibili solo dopo AWS Glue la creazione della tabella Data Catalog. Senza questa configurazione, le credenziali del ruolo di runtime del job 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 eliminare 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, usa 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 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 ruolo AWS Glue di esecuzione del lavoro deve avere:
{ "Action": "lakeformation:GetDataAccess", "Resource": "*", "Effect": "Allow" }
Oltre alle autorizzazioni di accesso S3 appropriate per le posizioni dei dati.
Configurazione 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
-
Configura la tua sessione Spark con i parametri richiesti mostrati nell'esempio precedente
Usare FTA con DynamicFrames
AWS Glue DynamicFrames può essere utilizzato con AWS Lake Formation Full Table Access per operazioni ETL ottimizzate. Full Table Access (FTA) fornisce un modello di sicurezza che concede le autorizzazioni a livello di tabella, consentendo un'elaborazione dei dati più rapida rispetto al Fine-Grained Access Control (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 tuo lavoro Glue deve avere:
-
Autorizzazione
lakeformation:GetDataAccess
-
Autorizzazioni appropriate per la tabella Lake Formation concesse tramite la console Lake Formation
Esempio di DynamicFrame 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à. Usa il comando %%configure
magico per configurare la configurazione di Spark prima di iniziare la sessione interattiva. Questa configurazione deve essere il primo comando del tuo notebook, in quanto non può essere applicata dopo l'inizio della sessione. Scegliete 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 tavoli 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
Sostituisci 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: abilita la configurazione Spark
spark.sql.catalog.{catalog_name}.glue.lakeformation-enabled
-
CREATE TABLE
-
ALTER TABLE
-
INSERT INTO
-
INSERT OVERWRITE
-
SELECT
-
UPDATE
-
MERGE INTO
-
DELETE FROM
-
ANALIZZA LA TABELLA
-
TABELLA DI RIPARAZIONE
-
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 5.0 FTA AWS Glue
Durante la migrazione da AWS Glue 4.0 GlueContext FTA a Spark FTA AWS Glue 5.0 nativo:
-
Consenti ai motori di query di terze parti di accedere ai dati senza la convalida dei tag di sessione IAM. AWS Lake Formation SeguiPassaggio 1: abilitare l'accesso completo alla tabella in AWS Lake Formation.
-
Non è necessario modificare il ruolo di job runtime. Tuttavia, verifica che il ruolo di esecuzione del AWS Glue lavoro disponga dell'autorizzazione lakeformation: GetDataAccess IAM.
-
Modifica le configurazioni delle sessioni Spark nello script. Assicurati 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 gli script in modo che GlueContext DataFrames vengano modificati 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 lavoro per cui non è abilitato l'accesso completo alla tabella e non viene inserito alcun record, le letture o scritture successive da un lavoro 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, puoi:
-
Inserire almeno una riga nella tabella da un lavoro in cui l'FTA non è abilitato.
-
Configura il lavoro per cui non è abilitato FTA in modo che non utilizzi il suffisso $folder$ nel nome della cartella in S3. Ciò può essere ottenuto impostando la configurazione di Spark.
spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true
-
Crea una cartella Amazon S3 nella posizione della tabella
s3://path/to/table/table_name
utilizzando la console Amazon S3 o l'interfaccia a riga di comando di Amazon S3.
-
-
Full Table Access 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.