Connettiti ad Amazon S3
In qualità di amministratore BigQuery, puoi creare una connessione per consentire agli analisti dei dati di accedere ai dati archiviati nei bucket Amazon Simple Storage Service (Amazon S3).
BigQuery Omni accede ai dati di Amazon S3 tramite connessioni. Ogni collegamento ha il proprio utente IAM (Identity and Access Management) di Amazon Web Services (AWS). Concedi le autorizzazioni agli utenti tramite i ruoli IAM di AWS. I criteri all'interno dei ruoli AWS IAM determinano a quali dati può accedere BigQuery per ogni connessione.
Le connessioni sono necessarie per eseguire query sui dati di Amazon S3 e esportare i risultati delle query da BigQuery al tuo bucket Amazon S3.
Prima di iniziare
Assicurati di aver creato le seguenti risorse:
- Un progetto Google Cloud con l'API BigQuery Connection attivata.
- Se utilizzi il modello di determinazione dei prezzi in base alla capacità, assicurati di aver attivato l'API BigQuery Reservation per il tuo progetto. Per informazioni sui prezzi, consulta la pagina relativa ai prezzi di BigQuery Omni.
- Un account AWS con autorizzazioni per modificare i criteri IAM in AWS.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per creare una connessione per accedere ai dati di Amazon S3,
chiedi all'amministratore di concederti il ruolo IAM Amministratore connessione BigQuery (roles/bigquery.connectionAdmin
) nel progetto.
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Crea un criterio AWS IAM per BigQuery
Assicurati di seguire le best practice per la sicurezza di Amazon S3. Ti consigliamo di procedere come segue:
- Configura un criterio AWS che impedisca l'accesso al tuo bucket Amazon S3 tramite HTTP.
- Configura un criterio AWS che impedisca l'accesso pubblico al tuo bucket Amazon S3.
- Utilizza la crittografia lato server di Amazon S3.
- Limita le autorizzazioni concesse all'Account Google al minimo richiesto.
- Configura CloudTrail e attiva gli eventi di dati di Amazon S3.
Per creare un criterio AWS IAM, utilizza la console AWS o Terraform:
Console AWS
Vai alla console AWS IAM. Assicurati di accedere all'account proprietario del bucket Amazon S3 a cui vuoi accedere.
Seleziona Criteri > Crea criterio (si apre in una nuova scheda).
Fai clic su JSON e incolla quanto segue nell'editor:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::BUCKET_NAME" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", EXPORT_PERM ], "Resource": [ "arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*" ] } ] }
Sostituisci quanto segue:
BUCKET_NAME
: il bucket Amazon S3 a cui vuoi che BigQuery acceda.EXPORT_PERM
(facoltativo): autorizzazione aggiuntiva se vuoi esportare i dati in un bucket Amazon S3. Sostituisci con"s3:PutObject"
- Per separare il controllo dell'accesso all'esportazione, ti consigliamo di creare un'altra connessione con un ruolo IAM AWS distinto e di concedere al ruolo l'accesso di sola scrittura. Per un controllo dell'accesso più granulare, puoi anche limitare l'accesso di un ruolo a un percorso specifico del bucket.
Nel campo Nome, inserisci un nome per il criterio, ad esempio
bq_omni_read_only
.Fai clic su Crea criterio.
Il criterio viene creato con un nome della risorsa Amazon (ARN) nel seguente formato:
arn:aws:iam::AWS_ACCOUNT_ID:policy/POLICY_NAME
Sostituisci quanto segue:
AWS_ACCOUNT_ID
: il numero ID dell'utente IAM AWS della connessione.POLICY_NAME
: il nome del criterio che hai scelto.
Terraform
Aggiungi quanto segue alla configurazione di Terraform per collegare un criterio a una risorsa del bucket Amazon S3:
resource "aws_iam_policy" "bigquery-omni-connection-policy" { name = "bigquery-omni-connection-policy" policy = <<-EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "BucketLevelAccess", "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::BUCKET_NAME"] }, { "Sid": "ObjectLevelAccess", "Effect": "Allow", "Action": ["s3:GetObject",EXPORT_PERM], "Resource": [ "arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*" ] } ] } EOF }
Sostituisci quanto segue:
BUCKET_NAME
: il bucket Amazon S3 a cui vuoi che BigQuery acceda.EXPORT_PERM
(facoltativo): autorizzazione aggiuntiva se vuoi esportare i dati in un bucket Amazon S3. Sostituisci con"s3:PutObject"
- Per separare il controllo dell'accesso all'esportazione, ti consigliamo di creare un altro collegamento con un ruolo IAM AWS distinto e di concedere al ruolo l'accesso di sola scrittura. Per un controllo più granulare dell'accesso, puoi anche limitare l'accesso di un ruolo a un percorso specifico del bucket.
Creare un ruolo AWS IAM per BigQuery
Successivamente, crea un ruolo che consenta l'accesso al bucket Amazon S3 da all'interno di BigQuery. Questo ruolo utilizza il criterio che hai creato nella sezione precedente.
Per creare un ruolo IAM AWS, utilizza la console AWS o Terraform:
Console AWS
Vai alla console AWS IAM. Assicurati di accedere all'account proprietario del bucket Amazon S3 a cui vuoi accedere.
Seleziona Ruoli > Crea ruolo.
Per Seleziona il tipo di entità attendibile, seleziona Identità web.
In Provider di identità, seleziona Google.
In Segmento di pubblico, inserisci
00000
come valore segnaposto. Sostituirai il valore in un secondo momento.Fai clic su Successivo: autorizzazioni.
Per concedere al ruolo l'accesso ai dati di Amazon S3, associa al ruolo un criterio IAM. Cerca il criterio che hai creato nella sezione precedente e fai clic sul pulsante di attivazione/disattivazione.
Fai clic su Avanti: tag.
Fai clic su Successivo: esamina. Inserisci un nome per il ruolo, ad esempio
BQ_Read_Only
.Fai clic su Crea ruolo.
Terraform
Aggiungi quanto segue alla configurazione di Terraform per creare un ruolo IAM e assegna il criterio al ruolo creato:
resource "aws_iam_role" "bigquery-omni-connection-role" { name = "bigquery-omni-connection" max_session_duration = 43200 assume_role_policy = <<-EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "00000" } } } ] } EOF } resource "aws_iam_role_policy_attachment" "bigquery-omni-connection-role-attach" { role = aws_iam_role.bigquery-omni-connection-role.name policy_arn = aws_iam_policy.bigquery-omni-connection-policy.arn } output "bigquery_omni_role" { value = aws_iam_role.bigquery-omni-connection-role.arn }
Creare connessioni
Per connetterti al bucket Amazon S3, utilizza la console Google Cloud, lo strumento a riga di comando bq o la libreria client:
Console
Vai alla pagina BigQuery.
Nel menu Aggiungi
, seleziona Connessioni a origini dati esterne.Nel riquadro Origine dati esterna, inserisci le seguenti informazioni:
- Per Tipo di connessione, seleziona BigLake su AWS (tramite BigQuery Omni).
- In Connection ID (ID connessione), inserisci un identificatore per la risorsa di connessione. Puoi utilizzare lettere, numeri, trattini e trattini bassi.
- In Regione, seleziona la località in cui vuoi creare la connessione.
- (Facoltativo) In Nome visualizzato, inserisci un nome intuitivo per la connessione, ad esempio
My connection resource
. Il nome visualizzato può essere qualsiasi valore che ti aiuti a identificare la risorsa di connessione se devi modificarla in un secondo momento. - (Facoltativo) In Descrizione, inserisci una descrizione per questa risorsa di connessione.
- Per ID ruolo AWS, inserisci l'ID ruolo IAM completo che hai creato in questo formato:
arn:aws:iam::AWS_ACCOUNT_ID:role/ROLE_NAME
Fai clic su Crea connessione.
Fai clic su Vai alla connessione.
Nel riquadro Informazioni sulla connessione, copia l'identità Google BigQuery. Si tratta di un principale Google specifico per ogni collegamento. Esempio:
BigQuery Google identity: IDENTITY_ID
Terraform
resource "google_bigquery_connection" "connection" { connection_id = "bigquery-omni-aws-connection" friendly_name = "bigquery-omni-aws-connection" description = "Created by Terraform" location = "AWS_LOCATION" aws { access_role { # This must be constructed as a string instead of referencing the # AWS resources directly to avoid a resource dependency cycle # in Terraform. iam_role_id = "arn:aws:iam::AWS_ACCOUNT:role/IAM_ROLE_NAME" } } }
Sostituisci quanto segue:
AWS_LOCATION
: un luogo Amazon S3 in Google CloudAWS_ACCOUNT
: il tuo ID account AWS.IAM_ROLE_NAME
: il ruolo che consente l'accesso al bucket Amazon S3 da BigQuery. Utilizza il valore dell'argomentoname
della risorsaaws_iam_role
in Creare un ruolo AWS IAM per BigQuery.
bq
bq mk --connection --connection_type='AWS' \ --iam_role_id=arn:aws:iam::AWS_ACCOUNT_ID:role/ROLE_NAME \ --location=AWS_LOCATION \ CONNECTION_ID
Sostituisci quanto segue:
AWS_ACCOUNT_ID
: il numero ID dell'utente IAM AWS della connessioneROLE_NAME
: il nome del criterio del ruolo sceltoAWS_LOCATION
: un luogo Amazon S3 in Google CloudCONNECTION_ID
: l'ID assegnato a questa risorsa di connessione.
La riga di comando mostra il seguente output:
Identity: IDENTITY_ID
L'output contiene quanto segue:
IDENTITY_ID
: un principale Google che Google Cloud controlla specifico per ogni connessione.
Prendi nota del valore IDENTITY_ID
.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.
Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Aggiungere una relazione di attendibilità al ruolo AWS
BigQuery Omni fornisce due metodi per accedere in sicurezza ai dati da Amazon S3.
Puoi concedere all' Google Cloud account di servizio l'accesso al tuo ruolo AWS oppure, se il tuo account AWS ha un provider di identità personalizzato per accounts.google.com
, devi aggiungere l' Google Cloud account di servizio come segmento di pubblico al provider:
- Aggiungi il criterio di attendibilità al ruolo AWS.
- Configura un provider di identità AWS personalizzato.
Aggiungi un criterio di attendibilità al ruolo AWS
La relazione di attendibilità consente alla connessione di assumere il ruolo e di accedere ai dati di Amazon S3 come specificato nel criterio dei ruoli.
Per aggiungere una relazione di attendibilità, utilizza la console AWS o Terraform:
Console AWS
Vai alla console AWS IAM. Assicurati di accedere all'account proprietario del bucket Amazon S3 a cui vuoi accedere.
Seleziona Ruoli.
Seleziona il
ROLE_NAME
che hai creato.Fai clic su Modifica e poi segui questi passaggi:
Imposta Durata massima della sessione su 12 ore. Poiché ogni query può essere eseguita per un massimo di sei ore, questa durata consente un ulteriore tentativo. L'aumento della durata della sessione oltre le 12 ore non consentirà ulteriori tentativi. Per ulteriori informazioni, consulta il limite di tempo di esecuzione delle query/query con più istruzioni.
Fai clic su Salva modifiche.
Seleziona Relazioni di attendibilità e fai clic su Modifica relazione di attendibilità. Sostituisci i contenuti delle norme con quanto segue:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "IDENTITY_ID" } } } ] }
Sostituisci
IDENTITY_ID
con il valore BigQuery Google identity, che puoi trovare nella console AWS per la connessione che hai creato.Fai clic su Aggiorna criterio attendibilità.
Terraform
Aggiorna la risorsa aws_iam_role
nella configurazione Terraform per aggiungere un rapporto di attendibilità:
resource "aws_iam_role" "bigquery-omni-connection-role" { name = "bigquery-omni-connection" max_session_duration = 43200 assume_role_policy = <<-EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "${google_bigquery_connection.connection.aws[0].access_role[0].identity}" } } } ] } EOF }
La connessione è ora pronta per l'uso.
Configurare un provider di identità AWS personalizzato
Se il tuo account AWS ha un
provider di identità personalizzato
per accounts.google.com
, dovrai aggiungere IDENTITY_ID
come segmento di pubblico al provider. Per farlo:
Vai alla console AWS IAM. Assicurati di accedere all'account proprietario del bucket Amazon S3 a cui vuoi accedere.
Vai ad IAM > Identity Provider.
Seleziona il provider di identità per accounts.google.com.
Fai clic su Aggiungi segmento di pubblico e aggiungi IDENTITY_ID come segmento di pubblico.
La connessione è ora pronta per l'uso.
Condividere le connessioni con gli utenti
Puoi concedere i seguenti ruoli per consentire agli utenti di eseguire query sui dati e gestire le connessioni:
roles/bigquery.connectionUser
: consente agli utenti di utilizzare le connessioni per collegarsi a origini dati esterne ed eseguire query su di esse.roles/bigquery.connectionAdmin
: consente agli utenti di gestire le connessioni.
Per ulteriori informazioni sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Ruoli e autorizzazioni predefiniti.
Seleziona una delle seguenti opzioni:
Console
Vai alla pagina BigQuery.
Le connessioni sono elencate nel progetto, in un gruppo denominato Connessioni esterne.
Nel riquadro Explorer, fai clic sul nome del progetto > Connessioni esterne > Connessione.
Nel riquadro Dettagli, fai clic su Condividi per condividere una connessione. Poi:
Nella finestra di dialogo Autorizzazioni di connessione, condividi la connessione con altre entità aggiungendole o modificandole.
Fai clic su Salva.
bq
Non puoi condividere una connessione con lo strumento a riga di comando bq. Per condividere una connessione, utilizza la console Google Cloud o il metodo dell'API BigQuery Connections.
API
Utilizza il
metodo projects.locations.connections.setIAM
nella sezione di riferimento dell'API REST BigQuery Connections e
fornisci un'istanza della risorsa policy
.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.
Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Passaggi successivi
- Scopri i diversi tipi di connessione.
- Scopri di più sulla gestione delle connessioni.
- Scopri di più su BigQuery Omni.
- Utilizza il lab BigQuery Omni con AWS.
- Scopri di più sulle tabelle BigLake.
- Scopri come eseguire query sui dati di Amazon S3.
- Scopri come esportare i risultati di una query in un bucket Amazon S3.