Controlla l'accesso con le condizioni IAM
Questo documento descrive come utilizzare le condizioni IAM per controllare l'accesso alle risorse BigQuery.
Le condizioni IAM ti consentono di concedere l'accesso alle risorse BigQuery solo se sono soddisfatte le condizioni specificate. Ad esempio, puoi concedere l'accesso a una risorsa per una durata limitata o periodicamente per determinate ore del giorno. Puoi aggiungere condizioni IAM a livello di organizzazione, cartella, progetto e set di dati delle risorse. I criteri di autorizzazione con condizioni vengono ereditati dalle risorse figlio. Per ulteriori informazioni sui livelli delle risorse, consulta gerarchie delle risorse.
Le condizioni IAM sono utili per concedere autorizzazioni di Identity and Access Management (IAM) a molte risorse correlate contemporaneamente, incluse quelle che non esistono ancora. Per concedere le autorizzazioni a gruppi non correlati di risorse BigQuery, ti consigliamo di utilizzare i tag IAM.
Prima di iniziare
- Concedere agli utenti i ruoli IAM che contengono le autorizzazioni necessarie per eseguire ogni attività in questo documento.
- Attiva l'API IAM.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per applicare le condizioni IAM alle risorse BigQuery, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Per i progetti:
Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) -
Per i set di dati:
Proprietario dati BigQuery (
roles/bigquery.dataOwner
)
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Questi ruoli predefiniti contengono le autorizzazioni necessarie per applicare le condizioni IAM alle risorse BigQuery. Per visualizzare le autorizzazioni esatte richieste, espandi la sezione Autorizzazioni richieste:
Autorizzazioni obbligatorie
Per applicare le condizioni IAM alle risorse BigQuery sono necessarie le seguenti autorizzazioni:
-
Imposta l'accesso IAM condizionale a livello di progetto:
resourcemanager.projects.setIamPolicy
-
Imposta l'accesso IAM condizionale sui set di dati:
-
bigquery.datasets.setIamPolicy
-
bigquery.datasets.update
-
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Se prevedi di utilizzare le condizioni IAM nella tua organizzazione, devi disporre anche delle autorizzazioni per gestire i criteri dell'organizzazione.Per saperne di più sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Introduzione a IAM.
Abilita l'API IAM
Per attivare l'API IAM, seleziona una delle seguenti opzioni:
Console
Vai alla pagina API Identity and Access Management (IAM) e attiva l'API.
gcloud
Esegui il comando gcloud services enable
:
gcloud services enable iam.googleapis.com
Visualizzare il criterio di accesso condizionale in un set di dati
Seleziona una delle seguenti opzioni:
Console
Vai alla pagina BigQuery.
Nel riquadro Explorer, espandi il progetto e seleziona un set di dati.
Fai clic su > Autorizzazioni.
CondivisioneAccanto al ruolo associato, fai clic su condition:
TITLE
per visualizzare la condizione per quel ruolo.
bq
Per visualizzare o aggiornare i criteri di accesso condizionale in Cloud Shell, devi utilizzare Cloud Shell 503.0.0 o versioni successive.
Per ottenere un criterio di accesso esistente e stamparlo in un file locale in JSON, utilizza il
comando bq show
in Cloud Shell:
bq show --format=prettyjson PROJECT_ID:DATASET > PATH_TO_FILE
Sostituisci quanto segue:
- PROJECT_ID: il tuo ID progetto
- DATASET: il nome del set di dati
- PATH_TO_FILE: il percorso del file JSON sul computer locale
La proprietà access
nel file JSON della risorsa del set di dati contiene il criterio di accesso.
API
Per visualizzare il criterio di accesso di un set di dati con condizioni, chiama
datasets.get
con
accessPolicyVersion=3
come parametro di richiesta.
La proprietà access
nella risorsa set di dati contiene il criterio di accesso.
Modificare l'accesso condizionale alle risorse
Le sezioni seguenti descrivono come aggiungere o rimuovere l'accesso condizionale a diverse risorse.
Aggiungere condizioni a un'organizzazione, una cartella o un progetto
Per aggiungere l'accesso condizionale a un'organizzazione, a una cartella o a un progetto in BigQuery, consulta Consentire i criteri con condizioni. Quando crei le condizioni, consulta le tabelle dei formati degli attributi.
Aggiungere l'accesso condizionale al set di dati
Per aggiungere condizioni a un set di dati, seleziona uno dei seguenti metodi. Quando crei le condizioni, fai riferimento alle tabelle dei formati degli attributi.
Console
Vai alla pagina BigQuery.
Nel riquadro Explorer, espandi il progetto e seleziona un set di dati.
Nel riquadro dei dettagli, fai clic su > Autorizzazioni.
CondivisioneFai clic su
Aggiungi entità.Nel campo Nuovi principali, inserisci un principale.
Nell'elenco Seleziona un ruolo, seleziona un ruolo predefinito o un ruolo personalizzato.
Fai clic su Aggiungi condizione IAM.
Aggiungi condizioni al campo
condition
utilizzando gli attributi condizione.Nel riquadro Aggiungi condizione IAM, fai clic su Salva.
Nel riquadro Concedi l'accesso a
DATASET
, fai clic su Salva.
bq
Per visualizzare o aggiornare i criteri di accesso condizionale in Cloud Shell, devi utilizzare Cloud Shell 503.0.0 o versioni successive.
Per concedere l'accesso condizionale a un set di dati utilizzando Cloud Shell, segui le istruzioni per concedere l'accesso a un set di dati.
Puoi aggiungere le condizioni di accesso condizionale alla sezione access
del
file JSON del set di dati.
Ad esempio, la seguente aggiunta alla sezione access
del file JSON di un set di dati concederebbe il ruolo roles/bigquery.dataViewer
a cloudysanfrancisco@gmail.com
fino al 31 dicembre 2032:
"access": [ { "role": "roles/bigquery.dataViewer", "userByEmail": "cloudysanfrancisco@gmail.com", "condition": { "title": "Grant roles/bigquery.dataViewer until 2033", "description": "Role expires on December 31, 2032.", "expression": "request.time < timestamp('2032-12-31T12:00:00Z')" } } ]
API
Per concedere l'accesso condizionale a un set di dati utilizzando l'API BigQuery, segui le istruzioni per la concessione dell'accesso a un set di dati con accessPolicyVersion=3
nel parametro di richiesta.
Puoi aggiungere voci con condizioni di accesso alla proprietà
access.condition
della risorsa set di dati.
Per i set di dati con criteri di accesso condizionale, gli utenti possono aggiornare le impostazioni di accesso senza condizioni utilizzando i flussi di lettura, modifica e aggiornamento standard senza specificare il parametro di richiesta accessPolicyVersion
.
Rimuovere l'accesso condizionale dai set di dati
Per rimuovere le condizioni da un set di dati, seleziona uno dei seguenti metodi. Quando crei le condizioni, fai riferimento alle tabelle dei formati degli attributi.
Console
Vai alla pagina BigQuery.
Nel riquadro Explorer, espandi il progetto e seleziona un set di dati.
Nel riquadro dei dettagli, fai clic su > Autorizzazioni.
CondivisioneSeleziona l'entità di cui vuoi revocare l'accesso.
Fai clic su
Elimina.Nella finestra di dialogo Eliminare il principale?, fai clic su Elimina.
bq
Per visualizzare o aggiornare i criteri di accesso condizionale in Cloud Shell, devi utilizzare Cloud Shell 503.0.0 o versioni successive.
Per rimuovere l'accesso condizionale a un set di dati utilizzando Cloud Shell, segui le istruzioni riportate in Ritirare l'accesso a un set di dati.
Puoi rimuovere la voce con condizione dalla sezione access
del
file JSON del set di dati.
API
Per revocare l'accesso condizionale a un set di dati utilizzando l'API BigQuery, segui le istruzioni per la revoca dell'accesso a un set di dati con accessPolicyVersion=3
nel parametro di richiesta.
Puoi rimuovere le voci con condizioni dalla proprietà access
della risorsa del set di dati.
Per i set di dati con criteri di accesso condizionale, gli utenti possono aggiornare le impostazioni di accesso senza condizioni utilizzando i flussi di lettura, modifica e aggiornamento standard senza specificare il parametro di richiesta accessPolicyVersion
.
Attributi condizione
Puoi impostare condizioni IAM sulle risorse BigQuery in base ai seguenti attributi:
request.time
: l'ora in cui l'utente tenta di accedere a una risorsa BigQuery. Per ulteriori dettagli ed esempi, consulta Attributo data/ora.resource.name
: il percorso della risorsa BigQuery. Per il formato, consulta le tabelle in Formati degli attributi.resource.type
: il tipo di risorsa BigQuery. Per il formato, consulta le tabelle in Formati degli attributi.resource.service
: il Google Cloud servizio utilizzato dalla risorsa BigQuery. Per il formato, consulta le tabelle in Formati degli attributi.resource.tags
: i tag associati alla risorsa BigQuery. I tag sono supportati solo nelle risorse di set di dati, tabelle e viste BigQuery. Per il formato, consulta le tabelle in Formati degli attributi e nella documentazione di IAM.
Formati degli attributi
Quando crei condizioni per i set di dati BigQuery, utilizza i seguenti formati:
Attributo | Valore |
---|---|
resource.type |
bigquery.googleapis.com/Dataset |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID |
resource.service |
bigquery.googleapis.com |
resource.tags |
Supporta hasTagKey , hasTagKeyId , matchTag e matchTagId . Per ulteriori informazioni, consulta Tag delle risorse. |
Quando crei condizioni per le tabelle e le viste BigQuery, utilizza i seguenti formati:
Attributo | Valore |
---|---|
resource.type |
bigquery.googleapis.com/Table |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID |
resource.service |
bigquery.googleapis.com |
resource.tags |
Supporta hasTagKey , hasTagKeyId , matchTag e matchTagId . Per ulteriori informazioni, consulta Tag delle risorse. |
Quando crei condizioni per le routine BigQuery, utilizza i seguenti formati:
Attributo | Valore |
---|---|
resource.type |
bigquery.googleapis.com/Routine |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/routines/ROUTINE_ID |
resource.service |
bigquery.googleapis.com |
Quando crei condizioni per i modelli BigQuery, utilizza i seguenti formati:
Attributo | Valore |
---|---|
resource.type |
bigquery.googleapis.com/Model |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/models/MODEL_ID |
resource.service |
bigquery.googleapis.com |
Sostituisci quanto segue:
PROJECT_ID
: l'ID del progetto contenente le risorse a cui stai concedendo l'accessoDATASET_ID
: l'ID del set di dati a cui stai concedendo l'accessoTABLE_ID
: l'ID della tabella o della vista a cui stai concedendo l'accessoROUTINE_ID
: l'ID della routine a cui stai concedendo l'accessoMODEL_ID
: l'ID del modello a cui stai grantendo l'accesso
Best practice per le condizioni
Quando crei condizioni in BigQuery, utilizza le seguenti best practice:
- Per una maggiore precisione, ti consigliamo di utilizzare condizioni positive per
resource.type
,resource.name
eresource.service
. Poiché i tipi non supportati sono rappresentati da una stringa vuota, le condizioni negative potrebbero corrispondere a una vasta gamma di risorse. Per ulteriori informazioni, consulta la sezione sulle condizioni negative. - Le condizioni IAM a livello di set di dati devono essere utilizzate solo per i ruoli applicati alle risorse all'interno del set di dati, come tabelle, visualizzazioni, modelli e routine.
Non devono essere utilizzati per concedere ruoli che operano a livello di set di dati o progetto, come
bigquery.user
obigquery.jobUser
. - Non utilizzare la condizione
resource.type == 'bigquery.googleapis.com/Dataset'
per i criteri a livello di set di dati, in quanto non ha alcun effetto sull'autorizzazione. Questo attributo è progettato per controllare l'accesso alle risorse dei sottoset di dati come tabelle, viste, routine e modelli. - Includi
resource.type
,resource.name
eresource.service
nella condizione, anche se questo livello di specificità non è necessario. Questa prassi contribuisce a mantenere le condizioni man mano che le risorse nel flusso di lavoro cambiano, in modo che altre risorse non vengano incluse involontariamente in futuro. - Quando concedi le autorizzazioni, includi il set più limitato possibile per assicurarti di non concedere involontariamente un accesso eccessivamente permissivo.
- Utilizza
resource.name.startsWith
con cautela. I percorsi delle tabelle e delle visualizzazioni BigQuery sono preceduti dall'ID progetto e dall'ID set di dati principali. Condizioni non sufficientemente specifiche potrebbero concedere troppo accesso. Tuttavia, puoi utilizzare l'attributoresource.name.startsWith
per consentire agli utenti di eseguire query con caratteri jolly sulle tabelle. Ad esempio, l'accesso concesso utilizzando la condizioneresource.name.startsWith("projects/my_project/datasets/my_dataset/tables/table_prefix")
consente agli utenti di eseguire la querySELECT * FROM my_dataset.table_prefix*
. - Non aggiungere condizioni per risorse BigQuery diverse da set di dati, tabelle, viste, routine e modelli.
- Verifica di concedere le autorizzazioni corrette alla risorsa corretta. Ad esempio, l'autorizzazione per elencare le risorse
(
bigquery.RESOURCE.list
) deve essere concessa a livello di entità superiore, mentre l'autorizzazione per eliminare le risorse (bigquery.RESOURCE.delete
) deve essere concessa a livello di risorsa. L'eliminazione del set di dati, in cui vengono eliminate anche tutte le risorse contenute, richiede autorizzazioni di eliminazione di tabelle, modelli e routine sul set di dati. - Tieni presente che gli snapshot delle tabelle e il viaggio nel tempo non influiscono sulle autorizzazioni.
Condizioni negative
Condizioni negative come resource.name != resource
possono concedere inavvertitamente accesso eccessivamente permissivo. Le risorse BigQuery non supportate hanno attributi delle risorse vuoti, il che significa che corrispondono a tutte le condizioni negative. Le risorse
nei servizi esterni a BigQuery possono corrispondere anche a condizioni negative.
Inoltre, le condizioni negative creano problemi quando gli utenti eseguono query con caratteri jolly. Ad esempio, prendi in considerazione la condizione negativa
resource.name != /projects/my_project/datasets/my_dataset/tables/secret
. Questa condizione sembra concedere l'accesso a tutte le risorse, ad eccezione di una tabella denominata secret
. Tuttavia, l'utente può comunque eseguire query su questa tabella utilizzando una query con caratteri jolly, ad esempio SELECT * from my_project.my_dataset.secre*;
.
Inoltre, le condizioni negative su tabelle, routine e modelli potrebbero consentire un accesso eccessivamente permissivo ai set di dati principali. Gli utenti potrebbero quindi essere in grado di eliminare queste risorse perché le autorizzazioni di eliminazione vengono gestite a livello di set di dati.
Limitazioni
- Non puoi aggiungere concessioni di visualizzazioni autorizzate, routine autorizzate o set di dati autorizzati con le condizioni IAM.
- Se viene utilizzato un
accessPolicyVersion
incompatibile durante la visualizzazione di una risorsa con condizioni, le associazioni potrebbero contenerewithcond
seguito da un valore hash. Per ulteriori informazioni, consulta Risoluzione dei problemi relativi awithcond
nei criteri e nelle associazioni di ruoli. - Gli utenti con accesso condizionale a un set di dati o a una tabella non possono modificare le autorizzazioni per la risorsa tramite la console Google Cloud. Le modifiche alle autorizzazioni sono supportate solo tramite lo strumento bq e l'API BigQuery.
- Il controllo dell'accesso a livello di riga e a livello di colonna non è supportato direttamente tramite le condizioni IAM. Tuttavia, un utente con accesso condizionale può assegnare a se stesso il ruolo Amministratore BigQuery (
roles/bigquery.admin
) sulla tabella e poi modificare i criteri di accesso a righe e colonne. - L'applicazione delle modifiche ai criteri IAM può richiedere fino a cinque minuti.
- Gli utenti con accesso condizionale potrebbero non essere in grado di eseguire query sulle visualizzazioni
INFORMATION_SCHEMA
. - Gli utenti con accesso solo alle tabelle condizionali non possono eseguire funzioni con caratteri jolly per le tabelle.
Esempi
Di seguito sono riportati alcuni esempi di casi d'uso per le condizioni IAM in BigQuery.
Concedere l'accesso in lettura a una tabella specifica
Questo esempio assegna a cloudysanfrancisco@gmail.com
il ruolo Visualizzatore dati BigQuery per la tabella table_1
nel set di dati dataset_1
. Con questo ruolo, l'utente può eseguire query sulla tabella e accedervi tramite lo strumento bq. L'utente non può visualizzare la tabella nella console Google Cloud perché non dispone dell'autorizzazione bigquery.tables.list
per il set di dati.
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataViewer, "condition": { "title": "Table dataset_1.table_1", "description": "Allowed to read table with name table_1 in dataset_1 dataset", "expression": resource.name == projects/project_1/datasets/dataset_1/tables/table_1 && resource.type == bigquery.googleapis.com/Table } }
Concedere l'accesso in elenco a un set di dati specifico
Questo esempio concede a cloudysanfrancisco@gmail.com
il ruolo Visualizzatore metadati BigQuery sul set di dati dataset_2
. Con questo ruolo, l'utente può elencare tutte le risorse nel set di dati, ma non può eseguire query su queste risorse.
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.metadataViewer, "condition": { "title": "Dataset dataset_2", "description": "Allowed to list resources in dataset_2 dataset", "expression": resource.name == projects/project_2/datasets/dataset_2 && resource.type == bigquery.googleapis.com/Dataset } }
Concedi l'accesso come proprietario a tutte le tabelle di tutti i set di dati con un prefisso specifico
Questo esempio concede a cloudysanfrancisco@gmail.com
il ruolo Proprietario dati BigQuery su tutte le tabelle di tutti i set di dati che iniziano con il prefisso public_
:
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Tables public_", "description": "Allowed owner access to tables in datasets with public_ prefix", "expression": resource.name.startsWith("projects/project_3/datasets/public_") && resource.type == bigquery.googleapis.com/Table } }
Concedi l'accesso come proprietario a tutte le tabelle, i modelli e le routine in tutti i set di dati con un prefisso specifico
Questo esempio concede a cloudysanfrancisco@gmail.com
il ruolo Proprietario dati BigQuery su tutte le tabelle, i modelli e le routine di tutti i set di dati che iniziano con il prefisso general_
:
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Tables general_", "description": "Allowed owner access to tables in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Table } }, { "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Models general_", "description": "Allowed owner access to models in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Model } }, { "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Routines general_", "description": "Allowed owner access to routines in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Routine } }
Passaggi successivi
- Scopri di più sulla configurazione dell'accesso temporaneo utilizzando le condizioni IAM.
- Scopri di più su come configurare l'accesso basato sulle risorse utilizzando le condizioni IAM.