Accesso alle tabelle Amazon S3 utilizzando l’endpoint AWS Glue Iceberg REST - Amazon Simple Storage Service

Accesso alle tabelle Amazon S3 utilizzando l’endpoint AWS Glue Iceberg REST

Una volta che i bucket di tabelle S3 sono integrati con il AWS Glue Data Catalog è possibile utilizzare l’endpoint AWS Glue Iceberg REST per connettersi alle tabelle S3 da client compatibili con Apache Iceberg, come PyIceberg o Spark. L’endpoint AWS Glue Iceberg REST implementa la specifica Iceberg REST Catalog Open API che fornisce un’interfaccia standardizzata per l’interazione con le tabelle Iceberg. Per accedere alle tabelle S3 utilizzando l’endpoint è necessario configurare le autorizzazioni tramite una combinazione di policy IAM e concessioni AWS Lake Formation. Le sezioni seguenti spiegano come configurare l’accesso, inclusa la creazione del ruolo IAM necessario, la definizione delle policy richieste e la definizione delle autorizzazioni di Lake Formation per l’accesso sia a livello di database sia a livello di tabella.

Per una procedura dettagliata sull’utilizzo di PyIceberg, consulta Accesso ai dati in Tabelle Amazon S3 utilizzando PyIceberg tramite l’endpoint AWS Glue Iceberg REST.

Creazione di un ruolo IAM per il client

Per accedere alle tabelle tramite gli endpoint AWS Glue, è necessario creare un ruolo IAM con autorizzazioni per le azioni AWS Glue e Lake Formation. Questa procedura spiega come creare questo ruolo e configurarne le autorizzazioni.

  1. Apri la console IAM all'indirizzo https://console.aws.amazon.com/iam/.

  2. Nel riquadro di navigazione sinistro, scegli Policy.

  3. Scegli Crea una policy e scegliere JSON nell'editor delle policy.

  4. Aggiungi la seguente policy inline che fornisce le autorizzazioni per accedere alle azioni AWS Glue e Lake Formation:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "glue:GetCatalog", "glue:GetDatabase", "glue:GetDatabases", "glue:GetTable", "glue:GetTables", "glue:CreateTable", "glue:UpdateTable" ], "Resource": [ "arn:aws:glue:us-east-1:111122223333:catalog", "arn:aws:glue:us-east-1:111122223333:catalog/s3tablescatalog", "arn:aws:glue:us-east-1:111122223333:catalog/s3tablescatalog/amzn-s3-demo-table-bucket", "arn:aws:glue:us-east-1:111122223333:table/s3tablescatalog/amzn-s3-demo-table-bucket/<namespace>/*", "arn:aws:glue:us-east-1:111122223333:database/s3tablescatalog/amzn-s3-demo-table-bucket/<namespace>" ] }, { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": "*" } ] }
  5. Dopo aver creato la policy, crea un ruolo IAM e scegli Policy di attendibilità personalizzata per Tipo di entità attendibile.

  6. Inserisci quanto segue per la Policy di attendibilità personalizzata.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Admin_role" }, "Action": "sts:AssumeRole", "Condition": {} } ] }

Definizione dell’accesso in Lake Formation

Lake Formation fornisce un controllo granulare degli accessi per le tabelle del data lake. Al momento dell’integrazione del bucket S3 con il AWS Glue Data Catalog, le tabelle sono state automaticamente registrate come risorse in Lake Formation. Per accedere a queste tabelle, è necessario fornire autorizzazioni specifiche di Lake Formation all’identità IAM, oltre alle autorizzazioni relative alle relative policy IAM.

Le seguenti fasi spiegano come applicare i controlli degli accessi di Lake Formation per consentire al client Iceberg di connettersi alle tabelle. È necessario accedere come amministratore del data lake per applicare queste autorizzazioni.

Consenso per l’accesso ai dati delle tabelle dai motori esterni

In Lake Formation, è necessario abilitare l’accesso completo alle tabelle per consentire ai motori esterni di accedere ai dati. Ciò consente alle applicazioni di terze parti di ottenere credenziali temporanee da Lake Formation quando utilizzano un ruolo IAM con autorizzazioni complete sulla tabella richiesta.

Aprire la console Lake Formation all'indirizzo https://console.aws.amazon.com/lakeformation/.

  1. Aprire la console Lake Formation all’indirizzo https://console.aws.amazon.com/lakeformation/ e accedere come amministratore del data lake.

  2. Nel riquadro di navigazione, scegliere Impostazioni di integrazione di applicazioni in Amministrazione.

  3. Selezionare Consenti ai motori esterni di accedere ai dati nelle posizioni Amazon S3 con accesso completo alla tabella. Quindi scegli Save (Salva).

Concedere le autorizzazioni di Lake Formation sulle risorse delle tabelle

Successivamente, si forniscono a Lake Formation le autorizzazioni per il ruolo IAM creato per il client compatibile con Iceberg. Queste autorizzazioni consentono al ruolo di creare e gestire tabelle nel namespace. È necessario fornire sia le autorizzazioni a livello di database sia a livello di tabella. Per ulteriori informazioni, consulta Concessione dell’autorizzazione Lake Formation per una tabella o un database.

Configurazione dell’ambiente per l’utilizzo dell’endpoint

Dopo aver configurato il ruolo IAM con le autorizzazioni necessarie per l’accesso alla tabella, è possibile utilizzarlo per eseguire i client Iceberg dal computer locale configurando AWS CLI con il ruolo tramite il seguente comando:

aws sts assume-role --role-arn "arn:aws:iam::<accountid>:role/<glue-irc-role>" --role-session-name <glue-irc-role>

Per accedere alle tabelle tramite l’endpoint AWS Glue REST, è necessario inizializzare un catalogo nel client compatibile con Iceberg. Questa inizializzazione richiede la specifica di proprietà personalizzate, tra cui le proprietà sigv4, l’URI dell’endpoint e la posizione del warehouse. Queste proprietà si specificano come segue:

  • Proprietà Sigv4: Sigv4 deve essere abilitato, il nome della firma è glue

  • Posizione del warehouse: è il bucket di tabelle, specificato nel formato <accountid>:s3tablescatalog/<table-bucket-name>

  • URI dell’endpoint: consulta la Guida di riferimento degli endpoint del servizio AWS Glue

L’esempio seguente mostra come inizializzare un catalogo pyIceberg.

rest_catalog = load_catalog( s3tablescatalog, **{ "type": "rest", "warehouse": "<accountid>:s3tablescatalog/<table-bucket-name>", "uri": "https://glue.<region>.amazonaws.com/iceberg", "rest.sigv4-enabled": "true", "rest.signing-name": "glue", "rest.signing-region": region } )

Per ulteriori informazioni sull’implementazione degli endpointAWS Glue Iceberg REST, consulta Connessione al Catalogo dati utilizzando l’endpoint AWS GlueIceberg REST nella Guida per l’utente di AWS Glue.