Controlla l'accesso con le condizioni IAM
Questo documento descrive come utilizzare Condizioni IAM per controllare l'accesso a di 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 a una risorsa per un periodo limitato o periodicamente per determinate ore durante la giornata. Le condizioni IAM sono supportate a livello di progetto, cartella e organizzazione e possono essere applicate a set di dati, tabelle, viste, routine e modelli BigQuery.
Le condizioni IAM sono utili per concedere contemporaneamente autorizzazioni di Identity and Access Management (IAM) a molte risorse correlate, incluse quelle che non esistono ancora. Per concedere le autorizzazioni a gruppi di risorse BigQuery non correlate, ti consigliamo di utilizzare i tag IAM.
Prima di iniziare
Abilita l'API IAM e concedi i ruoli IAM che concedi agli utenti le autorizzazioni necessarie per eseguire ciascuna attività in questo documento.
Abilita l'API IAM
Per attivare l'API IAM, seleziona una delle seguenti opzioni:
Console
Vai alla pagina dell'API Identity and Access Management (IAM) e abilita il tramite Google Cloud CLI o tramite l'API Compute Engine.
gcloud
Esegui il comando gcloud services enable
:
gcloud services enable iam.googleapis.com
Autorizzazioni obbligatorie
Per ottenere l'autorizzazione necessaria
applicare condizioni IAM alle risorse BigQuery,
chiedi all'amministratore di concederti
Ruolo IAM Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin
).
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Questo ruolo predefinito contiene
resourcemanager.projects.setIamPolicy
autorizzazione,
che è obbligatorio
e applicare condizioni IAM alle risorse BigQuery.
Potresti anche riuscire a ottenere questa autorizzazione con ruoli personalizzati 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.
Attributi della condizione
Puoi impostare condizioni IAM su risorse BigQuery, in base ai seguenti attributi:
request.time
: l'ora in cui l'utente tenta di accedere a un 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 consulta le tabelle in Formati degli attributi.resource.service
: il servizio Google Cloud che BigQuery gli utilizzi delle risorse. Per il formato, consulta le tabelle in Formati degli attributi.resource.tags
: i tag associati alla risorsa BigQuery. I tag sono supportati solo sulle 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 la sezione Tag delle risorse. |
Quando crei le condizioni per le tabelle e le viste BigQuery, utilizza il metodo 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 le condizioni per i modelli BigQuery, utilizza quanto segue 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 che contiene la alle risorse a cui concedi 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 tua routine concedere l'accesso aMODEL_ID
: l'ID del modello che stai concedere l'accesso a
Aggiungere condizioni a una risorsa
Per aggiungere una condizione a un set di dati, una tabella, una vista, una routine o un modello in BigQuery, consulta Consentire i criteri con condizioni. Quando crei le condizioni, fai riferimento alle tabelle dei formati degli attributi.
Best practice per le condizioni
Quando crei condizioni in BigQuery, utilizza le seguenti best practice:
- Non utilizzare condizioni negative per
resource.type
,resource.name
oresource.service
, perché i tipi non supportati utilizzano la stringa vuota e corrispondono a quasi tutte le condizioni negative. Per ulteriori dettagli, vedi condizioni negative. - Includi
resource.type
,resource.name
eresource.service
nel tuo anche quando questo livello di specificità non è necessario. Questa prassi aiuta a sostenere le condizioni mentre le risorse nel flusso di lavoro cambiano, non verranno incluse involontariamente in futuro. - Quando concedi le autorizzazioni, includi l'insieme più ristretto possibile di autorizzazioni per assicurarti di non concedere involontariamente accessi troppo permissivi.
- Usa
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, può utilizzare l'attributoresource.name.startsWith
per consentire agli utenti di eseguire il carattere jolly query sulle tabelle. Ad esempio, l'accesso concesso utilizzandoresource.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 sul
risorsa. Ad esempio, l'autorizzazione a elencare le risorse
(
bigquery.RESOURCE.list
) deve essere concessa dall'entità principale ma l'autorizzazione per eliminare le risorse (bigquery.RESOURCE.delete
) deve essere concesso al a livello di risorsa. Eliminazione del set di dati, in cui tutte le risorse contenute vengono vengono eliminate, richiede le autorizzazioni di eliminazione di tabelle, modelli e routine del 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. Risorse
nei servizi esterni a BigQuery potrebbero corrispondere 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 sulla tabella utilizzando un carattere jolly
come 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 perché le autorizzazioni di eliminazione sono gestite a livello del set di dati.
Limitazioni
- Non puoi aggiungere concessioni di visualizzazioni autorizzate, routine autorizzate o set di dati autorizzati con le condizioni IAM.
- Quando un utente ha accesso condizionale a un set di dati o a una tabella, non può modificare autorizzazioni alla risorsa tramite la console Google Cloud. Sono supportati solo lo strumento bq e l'API.
- Controllo dell'accesso a livello di riga e di colonna non è supportato direttamente tramite
Condizioni IAM. Tuttavia, un utente con accesso condizionale può concedere
il ruolo Amministratore BigQuery (
roles/bigquery.admin
) nella tabella e e modificare i criteri di accesso a righe e colonne. - L'applicazione delle modifiche ai criteri IAM può richiedere fino a cinque minuti effetto.
- Gli utenti con accesso condizionale potrebbero non essere in grado di eseguire query
INFORMATION_SCHEMA
visualizzazioni. - Gli utenti con accesso solo alle tabelle con condizioni non possono eseguire le funzioni con caratteri jolly per le tabelle.
Esempi
Di seguito sono riportati alcuni esempi di casi d'uso per le condizioni IAM in: 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 una query sulla tabella e accedervi tramite lo strumento bq. L'utente non può visualizzare
nella console Google Cloud perché non hanno
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 visualizzatore di metadati BigQuery
nel set di dati dataset_2
. Con questo ruolo, l'utente può elencare tutte le
risorse nel set di dati, ma non possono 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 di Proprietario dati BigQuery
su tutte le tabelle in 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 al proprietario l'accesso a tutte le tabelle, i modelli e le routine in tutti i set di dati che hanno un prefisso specifico
Questo esempio concede a cloudysanfrancisco@gmail.com
il ruolo di Proprietario dati BigQuery
su tutte le tabelle, i modelli e le routine in tutti i set di dati che iniziano con
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ù su configurare l'accesso temporaneo. utilizzando le condizioni IAM.
- Scopri di più su come configurare l'accesso basato sulle risorse utilizzando le condizioni IAM.