Questo documento mostra come eseguire le seguenti operazioni in Dataform:
- Concedi l'accesso richiesto a Dataform.
- Controllare l'accesso a Dataform con IAM.
- Controlla l'accesso alle singole tabelle con IAM.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and Dataform APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and Dataform APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - A livello di repository, per eseguire tutti i flussi di lavoro in un determinato repository.
- Singolarmente per ogni configurazione del workflow.
- Editor dati BigQuery sui progetti a cui Dataform deve accedere in lettura e scrittura. In genere, questi includono il progetto che ospita il repository Dataform.
- Visualizzatore dati BigQuery sui progetti a cui Dataform deve accedere in sola lettura.
- Utente job BigQuery nel progetto che ospita il repository Dataform.
- Proprietario dati BigQuery se vuoi eseguire query sui set di dati BigQuery.
- Ruoli BigQuery per il controllo dell'accesso a livello di colonna se vuoi utilizzare i tag di criteri BigQuery.
- Utente Service Account
(
roles/iam.serviceAccountUser) - Creatore token service account
(
roles/iam.serviceAccountTokenCreator) Qualsiasi service agent o account di servizio a cui sono stati concessi i ruoli richiesti potrebbe ottenere l'accesso a BigQuery o Secret Manager nel progetto a cui appartiene il service agent account di serviziont, indipendentemente dControlli di servizio VPCols. Le richieste provenienti da Dataform che utilizzano un service agent con i ruoli richiesti si trovano all'interno del perimetro Controlli di servizio VPC del progetto a cui appartiene il repository Dataform.
Per saperne di più, consulta Configura i Controlli di servizio VPC.
Qualsiasi utente con l'autorizzazione IAM
dataform.repositories.createpuò eseguire codice utilizzando il service agent Dataform predefinito e tutte le autorizzazioni concesse a questo service agent o service account.Per saperne di più, consulta Considerazioni sulla sicurezza per le autorizzazioni Dataform.
- Per modificare una configurazione del flusso di lavoro a cui sono associate le credenziali di un altro utente dell'account Google, devi allegare le tue credenziali utente dell'account Google alla configurazione del flusso di lavoro o modificare la configurazione del flusso di lavoro per l'autenticazione con un service agent {dataform_name_short} o un account di servizio personalizzato.
- Non puoi modificare un risultato di compilazione per una configurazione di rilascio se esistono configurazioni del flusso di lavoro che fanno riferimento alla configurazione di rilascio a cui sono associate le credenziali di un altro utente con Account Google.
Non puoi impostare una configurazione del workflow per l'autenticazione con le credenziali utente dell'Account Google e fare riferimento a una configurazione di rilascio con una pianificazione. Questa limitazione ha le seguenti conseguenze:
- Non puoi aggiornare una configurazione di rilascio per utilizzare una pianificazione se esistono configurazioni del flusso di lavoro che fanno riferimento alla configurazione di rilascio impostate per l'autenticazione con le credenziali utente dell'Account Google.
- Non puoi creare una configurazione del flusso di lavoro che esegue l'autenticazione con le credenziali utente dell'Account Google e punta a una configurazione di rilascio con una pianificazione.
- Non puoi creare o aggiornare una configurazione del flusso di lavoro per utilizzare le credenziali utente dell'Account Google e indirizzare una configurazione di rilascio con una pianificazione.
Nella console Google Cloud , vai alla pagina Dataform.
Seleziona o crea un repository.
Nella console Google Cloud , vai alla pagina IAM.
Fai clic su Concedi l'accesso.
Nel campo Nuove entità, inserisci l'ID agente di servizio, l'ID service account o l'indirizzo email dell'account Google dell'utente (anteprima).
Nell'elenco Seleziona un ruolo, seleziona il ruolo Utente job BigQuery.
Fai clic su Aggiungi un altro ruolo e poi seleziona il ruolo Editor dati BigQuery nell'elenco Seleziona un ruolo.
Fai clic su Aggiungi un altro ruolo e poi, nell'elenco Seleziona un ruolo, seleziona il ruolo Visualizzatore dati BigQuery.
Fai clic su Salva.
Nella console Google Cloud , vai a IAM > Service accounts.
Seleziona un progetto.
Nella pagina Service account per il progetto "PROJECT_NAME", seleziona il account di servizio personalizzato.
Vai a Entità con accesso e poi fai clic su Concedi accesso.
Nel campo Nuove entità, inserisci l'ID service agent Dataform predefinito.
L'ID service agent Dataform predefinito ha il seguente formato:
service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.comNell'elenco Seleziona un ruolo, seleziona il ruolo Creatore token service account e il ruolo Utente service account.
Fai clic su Salva.
Utilizza Cloud Asset Inventory per elencare tutte le risorse di tipo
dataform.Repository. Per ulteriori informazioni, vedi Visualizzare gli asset.Per ogni repository nell'output di Cloud Asset Inventory, controlla il campo
resource.data.labelsper determinare se è incluso nell'ambito. Il percorso esatto potrebbe variare leggermente in base al formato di esportazione.Identifica i repository fuori ambito esaminando la mappa delle etichette per la chiave
single-file-asset-type. La presenza di questa chiave indica che il repository viene utilizzato da una funzionalità BigQuery. Se il valore èsqlodata_canvas, il repository può essere escluso dai controlli delle autorizzazioni dell'account di servizio.I repository rimanenti a cui mancano questa chiave o questi valori rientrano nell'ambito dei controlli delle autorizzazioni delaccount di serviziot.
Per ogni repository incluso nell'ambito, controlla il campo
resource.data.serviceAccountnell'output di Cloud Asset Inventory per determinare se è configurato un account di servizio personalizzato:- Se il campo
resource.data.serviceAccountè presente e il suo valore è diverso dall'indirizzo email dell'agente di servizio Dataform predefinito del progetto, il repository utilizza un account di servizio personalizzato. Se il campo
resource.data.serviceAccountè assente o se il valore del campo corrisponde all'agente di servizio Dataform predefinito del progetto, il repository utilizza l'agente di servizio predefinito.
- Se il campo
Se viene utilizzato un account di servizio personalizzato, verifica che l'agente di servizio Dataform predefinito disponga sia del ruolo Service Account User (
roles/iam.serviceAccountUser) sia del ruolo Service Account Token Creator (roles/iam.serviceAccountTokenCreator) per quel account di servizio personalizzato.Utilizza Cloud Asset Inventory per elencare tutte le risorse di tipo
dataform.WorkflowConfig.Per ogni configurazione del flusso di lavoro, esamina l'output di Cloud Asset Inventory per determinare l'account di servizio effettivo:
- Se è presente il campo
resource.data.serviceAccount, questo valore è l'indirizzo email delaccount di serviziot impostato esplicitamente nella configurazione del flusso di lavoro. - Se il campo
resource.data.serviceAccountè assente, la configurazione del flusso di lavoro eredita il account di servizio dal repository principale. Controlla la configurazione del repository principale per trovare l'account di servizio effettivo.
- Se è presente il campo
Identifica se viene utilizzato un account di servizio personalizzato confrontando l'indirizzo email delaccount di serviziot effettivo con l'indirizzo email dell'agente di servizio Dataform predefinito del progetto. Se sono diversi, viene utilizzato un account di servizio personalizzato.
Se è in uso un account di servizio personalizzato, assicurati che all'agente di servizio Dataform predefinito siano concessi sia il ruolo Utente service account (
roles/iam.serviceAccountUser) sia il ruolo Creatore token service account (roles/iam.serviceAccountTokenCreator) per questo service account personalizzato. Queste autorizzazioni consentono all'agente di servizio Dataform predefinito di avviare le esecuzioni del flusso di lavoro rappresentando il account di servizio personalizzato.dataform.commentThreads.createdataform.commentThreads.deletedataform.commentThreads.getdataform.commentThreads.listdataform.commentThreads.updatedataform.comments.createdataform.comments.deletedataform.comments.getdataform.comments.listdataform.comments.updatedataform.compilationResults. create dataform.compilationResults. get dataform.compilationResults. list dataform.compilationResults. query dataform.config.getdataform.config.updatedataform.folders.addContentsdataform.folders.createdataform.folders.deletedataform.folders.getdataform.folders.getIamPolicydataform.folders.movedataform.folders.queryContentsdataform.folders.setIamPolicydataform.folders.updatedataform.locations.getdataform.locations.listdataform.operations.canceldataform.operations.deletedataform.operations.getdataform.operations.listdataform.releaseConfigs.createdataform.releaseConfigs.deletedataform.releaseConfigs.getdataform.releaseConfigs.listdataform.releaseConfigs.updatedataform.repositories.commitdataform.repositories. computeAccessTokenStatus dataform.repositories.createdataform.repositories.deletedataform.repositories. fetchHistory dataform.repositories. fetchRemoteBranches dataform.repositories.getdataform.repositories. getIamPolicy dataform.repositories.listdataform.repositories.movedataform.repositories. queryDirectoryContents dataform.repositories.readFiledataform.repositories. scheduleRelease dataform.repositories. scheduleWorkflow dataform.repositories. setIamPolicy dataform.repositories.updatedataform.teamFolders.createdataform.teamFolders.deletedataform.teamFolders.getdataform.teamFolders. getIamPolicy dataform.teamFolders. setIamPolicy dataform.teamFolders.updatedataform.workflowConfigs. create dataform.workflowConfigs. delete dataform.workflowConfigs.getdataform.workflowConfigs.listdataform.workflowConfigs. update dataform.workflowInvocations. cancel dataform.workflowInvocations. create dataform.workflowInvocations. delete dataform.workflowInvocations. get dataform.workflowInvocations. list dataform.workflowInvocations. query dataform.workspaces.commitdataform.workspaces.createdataform.workspaces.deletedataform.workspaces. fetchFileDiff dataform.workspaces. fetchFileGitStatuses dataform.workspaces. fetchGitAheadBehind dataform.workspaces.getdataform.workspaces. getIamPolicy dataform.workspaces. installNpmPackages dataform.workspaces.listdataform.workspaces. makeDirectory dataform.workspaces. moveDirectory dataform.workspaces.moveFiledataform.workspaces.pulldataform.workspaces.pushdataform.workspaces. queryDirectoryContents dataform.workspaces.readFiledataform.workspaces. removeDirectory dataform.workspaces.removeFiledataform.workspaces.resetdataform.workspaces. searchFiles dataform.workspaces. setIamPolicy dataform.workspaces.writeFiledataform.commentThreads.createdataform.commentThreads.deletedataform.commentThreads.getdataform.commentThreads.listdataform.commentThreads.updatedataform.comments.createdataform.comments.deletedataform.comments.getdataform.comments.listdataform.comments.updatedataform.locations.getdataform.locations.listdataform.commentThreads.createdataform.commentThreads.deletedataform.commentThreads.getdataform.commentThreads.listdataform.commentThreads.updatedataform.comments.createdataform.comments.deletedataform.comments.getdataform.comments.listdataform.comments.updatedataform.compilationResults. create dataform.compilationResults. get dataform.compilationResults. list dataform.compilationResults. query dataform.locations.getdataform.locations.listdataform.commentThreads.createdataform.commentThreads.deletedataform.commentThreads.getdataform.commentThreads.listdataform.commentThreads.updatedataform.comments.createdataform.comments.deletedataform.comments.getdataform.comments.listdataform.comments.updatedataform.compilationResults. create dataform.compilationResults. get dataform.compilationResults. list dataform.compilationResults. query dataform.folders.addContentsdataform.folders.createdataform.folders.deletedataform.folders.getdataform.folders.getIamPolicydataform.folders.movedataform.folders.queryContentsdataform.folders.setIamPolicydataform.folders.updatedataform.locations.getdataform.locations.listdataform.workspaces.commitdataform.workspaces.createdataform.workspaces.deletedataform.workspaces. fetchFileDiff dataform.workspaces. fetchFileGitStatuses dataform.workspaces. fetchGitAheadBehind dataform.workspaces.getdataform.workspaces. getIamPolicy dataform.workspaces. installNpmPackages dataform.workspaces.listdataform.workspaces. makeDirectory dataform.workspaces. moveDirectory dataform.workspaces.moveFiledataform.workspaces.pulldataform.workspaces.pushdataform.workspaces. queryDirectoryContents dataform.workspaces.readFiledataform.workspaces. removeDirectory dataform.workspaces.removeFiledataform.workspaces.resetdataform.workspaces. searchFiles dataform.workspaces. setIamPolicy dataform.workspaces.writeFiledataform.compilationResults. create dataform.compilationResults. get dataform.compilationResults. list dataform.compilationResults. query dataform.locations.getdataform.locations.listdataform.compilationResults. create dataform.compilationResults. get dataform.compilationResults. list dataform.compilationResults. query dataform.locations.getdataform.locations.listdataform.workflowInvocations. cancel dataform.workflowInvocations. create dataform.workflowInvocations. delete dataform.workflowInvocations. get dataform.workflowInvocations. list dataform.workflowInvocations. query dataform.commentThreads.createdataform.commentThreads.deletedataform.commentThreads.getdataform.commentThreads.listdataform.commentThreads.updatedataform.comments.createdataform.comments.deletedataform.comments.getdataform.comments.listdataform.comments.updatedataform.compilationResults. create dataform.compilationResults. get dataform.compilationResults. list dataform.compilationResults. query dataform.locations.getdataform.locations.listdataform.commentThreads.createdataform.commentThreads.deletedataform.commentThreads.getdataform.commentThreads.listdataform.commentThreads.updatedataform.comments.createdataform.comments.deletedataform.comments.getdataform.comments.listdataform.comments.updatedataform.compilationResults. create dataform.compilationResults. get dataform.compilationResults. list dataform.compilationResults. query dataform.locations.getdataform.locations.listdataform.commentThreads.createdataform.commentThreads.deletedataform.commentThreads.getdataform.commentThreads.listdataform.commentThreads.updatedataform.comments.createdataform.comments.deletedataform.comments.getdataform.comments.listdataform.comments.updatedataform.compilationResults. create dataform.compilationResults. get dataform.compilationResults. list dataform.compilationResults. query dataform.folders.addContentsdataform.folders.createdataform.folders.deletedataform.folders.getdataform.folders.getIamPolicydataform.folders.movedataform.folders.queryContentsdataform.folders.setIamPolicydataform.folders.updatedataform.locations.getdataform.locations.listdataform.workspaces.commitdataform.workspaces.createdataform.workspaces.deletedataform.workspaces. fetchFileDiff dataform.workspaces. fetchFileGitStatuses dataform.workspaces. fetchGitAheadBehind dataform.workspaces.getdataform.workspaces. getIamPolicy dataform.workspaces. installNpmPackages dataform.workspaces.listdataform.workspaces. makeDirectory dataform.workspaces. moveDirectory dataform.workspaces.moveFiledataform.workspaces.pulldataform.workspaces.pushdataform.workspaces. queryDirectoryContents dataform.workspaces.readFiledataform.workspaces. removeDirectory dataform.workspaces.removeFiledataform.workspaces.resetdataform.workspaces. searchFiles dataform.workspaces. setIamPolicy dataform.workspaces.writeFiledataform.compilationResults. create dataform.compilationResults. get dataform.compilationResults. list dataform.compilationResults. query dataform.locations.getdataform.locations.listdataform.locations.getdataform.locations.list- Amministratore BigQuery (
roles/bigquery.admin) - BigQuery Job User (
roles/bigquery.jobUser) - Utente BigQuery Studio (
roles/bigquery.studioUser) - Utente BigQuery (
roles/bigquery.user) - Code Creator (
roles/dataform.codeCreator) - Editor di codice (
roles/dataform.codeEditor) - Proprietario del codice (
roles/dataform.codeOwner) - Utente Colab Enterprise (
roles/aiplatform.colabEnterpriseUser) - Amministratore Dataform (
roles/dataform.admin) Vai alla pagina IAM e amministrazione > Ruoli.
Nel campo Filtro, seleziona Utilizzato in, digita
Dataforme premi Invio.Fai clic su uno dei ruoli elencati per visualizzare le relative autorizzazioni nel riquadro a destra.
Ad esempio, il ruolo Amministratore Dataform ha accesso completo a tutte le risorse Dataform.
Nel terminale, passa la richiesta dell'API Dataform
repositories.setIamPolicycon un criterio di accesso.Nel criterio, associa un utente, un gruppo, un dominio, un service agent o un service account a un ruolo selezionato nel seguente formato:
{ "policy": { "bindings": [ { "role": "roles/ROLE", "members": [ "TYPE:IDENTIFIER", ] }, ], } }Sostituisci quanto segue:
ROLE: il ruolo IAM Dataform che vuoi concedere per il repository.TYPE:user,group,domainoserviceAccount.IDENTIFIER: l'utente, il gruppo, il dominio o il service account a cui vuoi concedere il ruolo.
Nella pagina IAM, assicurati che tutti gli utenti possano visualizzare l'elenco completo dei repository Dataform tramite un ruolo Dataform con l'autorizzazione
dataform.repositories.list.In IAM, assicurati che solo gli utenti che richiedono l'accesso completo a tutti i repository Dataform dispongano del ruolo Dataform Admin in tutti i repository.
Nel terminale, passa la richiesta dell'API Dataform
repositories.setIamPolicycon un criterio di accesso.Nella policy, associa l'entità
allAuthenticatedUsersa un ruolo selezionato nel seguente formato:{ "policy": { "bindings": [ { "role": "roles/ROLE", "members": [ "allAuthenticatedUsers", ] }, ], } }Sostituisci
ROLEcon un ruolo IAM Dataform che vuoi concedere a tutti gli utenti autenticati.Nella console Google Cloud , vai alla pagina Dataform.
Seleziona un repository, poi un workspace.
Nel riquadro File, espandi la directory
definitions/.Seleziona il file di definizione
.sqlxdella tabella o della vista a cui vuoi concedere l'accesso.Nel file, inserisci il seguente snippet di codice:
post_operations { GRANT "ROLE_LIST" ON "RESOURCE_TYPE" ${self()} TO "USER_LIST" }Sostituisci quanto segue:
ROLE_LIST: il ruolo BigQuery o l'elenco di ruoli BigQuery separati da virgole che vuoi concedere.
RESOURCE_TYPE:
TABLEoVIEW.USER_LIST: l'elenco separato da virgole degli utenti a cui viene concesso il ruolo.
Per un elenco dei formati validi, vedi user_list.
(Facoltativo) Fai clic su Formato.
Esegui la tabella o la visualizzazione.
Se hai concesso l'accesso a una tabella incrementale, rimuovi l'istruzione
GRANTdal file di definizione della tabella dopo la prima esecuzione.Nella console Google Cloud , vai alla pagina Dataform.
Seleziona un repository, poi un workspace.
Nel riquadro File, espandi la directory
definitions/.Seleziona il file di definizione
.sqlxdella tabella o della vista a cui vuoi revocare l'accesso.Nel blocco
post_operations, inserisci la seguente istruzioneREVOKE:REVOKE "ROLE_LIST" ON "RESOURCE_TYPE" ${self()} FROM "USER_LIST"Sostituisci quanto segue:
- ROLE_LIST: il ruolo BigQuery o l'elenco di ruoli BigQuery separati da virgole che vuoi revocare.
- RESOURCE_TYPE:
TABLEoVIEW. - USER_LIST: l'elenco separato da virgole degli utenti a cui viene revocato il ruolo. Per un elenco dei formati validi, vedi user_list.
Per revocare l'accesso concesso in un'istruzione
GRANTnel file, sostituisci l'istruzioneGRANTcon un'istruzioneREVOKE.(Facoltativo) Fai clic su Formato.
Esegui la tabella o la visualizzazione.
Se hai revocato l'accesso a una tabella incrementale, rimuovi l'istruzione
REVOKEdal file di definizione della tabella dopo la prima esecuzione.Nella console Google Cloud , vai alla pagina Dataform.
Seleziona un repository, poi un workspace.
Nel riquadro File, accanto a
definitions/, fai clic sul menu
Altro.Fai clic su Crea file.
Nel campo Aggiungi un percorso del file, inserisci il nome del file seguito da
.sqlxdopodefinitions/. Ad esempio:definitions/table-access.sqlx.I nomi dei file possono includere solo numeri, lettere, trattini e trattini bassi.
Fai clic su Crea file.
Nel riquadro File, espandi la directory
definitions/e seleziona il file appena creato.Nel file, inserisci il seguente snippet di codice:
config { type: "operations" } GRANT "ROLE_LIST" ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST" REVOKE "ROLE_LIST" ON { "<var>" }}RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"Sostituisci quanto segue:
- ROLE_LIST: il ruolo BigQuery o l'elenco di ruoli BigQuery separati da virgole che vuoi concedere o revocare.
- RESOURCE_TYPE:
TABLEoVIEW. - RESOURCE_NAME: il nome della tabella o della vista.
- USER_LIST: l'elenco separato da virgole degli utenti a cui viene concesso o revocato il ruolo. Per un elenco dei formati validi, vedi user_list.
Aggiungi le istruzioni
GRANTeREVOKEin base alle esigenze.Per revocare l'accesso concesso in un'istruzione
GRANTnel file, sostituisci l'istruzioneGRANTcon un'istruzioneREVOKE.La rimozione dell'istruzione
GRANTsenza aggiungere l'istruzioneREVOKEnon revoca l'accesso.
(Facoltativo) Fai clic su Formato.
Esegui il file dopo ogni aggiornamento.
- Se hai concesso o revocato l'accesso a una tabella incrementale, rimuovi l'istruzione
GRANToREVOKEdal file dopo la prima esecuzione dell'istruzione.
- Se hai concesso o revocato l'accesso a una tabella incrementale, rimuovi l'istruzione
Per creare una configurazione del workflow:
- L'autorizzazione
dataform.workflowConfigs.createsul progetto, concessa dal ruolo Code Scheduler (roles/dataform.codeScheduler). - L'autorizzazione
dataform.repositories.scheduleWorkflowsul repository, concessa dal ruolo Dataform Admin (roles/dataform.admin).
- L'autorizzazione
Per creare una configurazione della release:
- L'autorizzazione
dataform.releaseConfigs.createsul progetto, concessa dal ruolo Code Scheduler (roles/dataform.codeScheduler). - L'autorizzazione
dataform.repositories.scheduleReleasesul repository, concessa dal ruolo Dataform Admin (roles/dataform.admin).
- L'autorizzazione
- Per saperne di più su IAM, consulta la panoramica di IAM.
- Per saperne di più sulla gestione dell'accesso alle risorse, consulta Gestire l'accesso a progetti, cartelle e organizzazioni
- Per scoprire di più sui concetti chiave della federazione delle identità per la forza lavoro, consulta la pagina Federazione delle identità per la forza lavoro.
- Per saperne di più sui ruoli e sulle autorizzazioni IAM di BigQuery, consulta Controllo dell'accesso con IAM.
- Per saperne di più sulla concessione di autorizzazioni granulari ai set di dati BigQuery, consulta la pagina Controllo dell'accesso ai set di dati.
Concedere a Dataform l'accesso richiesto
Questa sezione mostra come concedere i ruoli Identity and Access Management (IAM) richiesti dagli agenti di servizio Dataform e dagli account di servizio personalizzati per eseguire i workflow in BigQuery.
Informazioni sugli account di servizio personalizzati e sugli agenti di servizio Dataform
Puoi configurare service account personalizzati per eseguire i workflow per tuo conto nei seguenti modi:
Quando crei un repository o una configurazione del workflow Dataform, puoi selezionare qualsiasi account di servizio per cui disponi delle autorizzazioni act-as. Devi configurare le autorizzazioni richieste per tutti i service account associati alle tue risorse Dataform.
Quando crei il tuo primo repository Dataform, Dataform genera automaticamente un service agent predefinito. Dataform utilizza l'agente di servizio predefinito per interagire con BigQuery per tuo conto.
L'ID service agent Dataform predefinito ha il seguente formato:
service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
Sostituisci PROJECT_NUMBER con l'ID numerico del tuo progettoGoogle Cloud . Puoi trovare l'ID progetto Google Cloud nella dashboard della consoleGoogle Cloud . Per saperne di più, consulta la sezione Identificazione dei progetti.
Ruoli richiesti per gli agenti di servizio Dataform, i service account personalizzati e gli Account Google
Gli agenti di servizio Dataform predefiniti, i service account personalizzati e le credenziali utente dell'account Google (anteprima) utilizzati per l'autenticazione in Dataform richiedono i seguenti ruoli IAM BigQuery per poter eseguire i flussi di lavoro in BigQuery:
Inoltre, concedi i seguenti ruoli all'agente di servizio Dataform predefinito nell'account di servizio effettivo per la configurazione del flusso di lavoro:
Per le release automatiche dei repository e le esecuzioni automatiche dei flussi di lavoro,
concedi all'agente di servizio Dataform predefinito l'autorizzazione
iam.serviceAccounts.actAs sull'account di servizio effettivo.
Considerazioni sulla sicurezza
La concessione dei ruoli richiesti da Dataform a un agente di servizio Dataform, a un account di servizio personalizzato o a un Account Google dell'utente (anteprima) comporta le seguenti considerazioni sulla sicurezza:
Per limitare i dati che un utente, un service agent o un account di servizio possono leggere o scrivere in BigQuery, puoi concedere autorizzazioni IAM BigQuery granulari a tabelle o set di dati BigQuery selezionati. Per saperne di più, consulta Controllare l'accesso ai set di dati e Controllare l'accesso a tabelle e viste.
Per impedire agli utenti di eseguire azioni durante l'utilizzo delle credenziali utente dell'Account Google di un altro utente, vengono applicate le seguenti limitazioni:
Concedere i ruoli BigQuery richiesti
Per concedere i ruoli IAM BigQuery richiesti al tuo agente di servizio Dataform predefinito, a un account di servizio personalizzato che vuoi utilizzare in Dataform o a un Account Google di un utente che vuoi utilizzare per l'autenticazione in Dataform (Anteprima), segui questi passaggi:
Concedi i ruoli richiesti per i workflow automatici
Per utilizzare un account di servizio personalizzato in Dataform, l'agente di servizio Dataform predefinito deve essere in grado di accedere al service account personalizzato. In questo modo Dataform può eseguire i workflow utilizzando le autorizzazioni definite nel account di servizio personalizzato anziché nell'account del service agent predefinito.
Per concedere questo accesso, devi concedere il
ruolo Creatore token service account
(roles/iam.serviceAccountTokenCreator) all'agente di servizio Dataform
predefinito come entità. In questo modo, l'agente di servizio Dataform
predefinito può impersonare ilaccount di serviziot creando credenziali di breve durata
note come token. Questi token sono necessari per l'esecuzione dei workflow di Dataform utilizzando l'identità del account di servizio personalizzato.
Devi anche concedere il
ruolo Service Account User
(roles/iam.serviceAccountUser) all'agente di servizio Dataform predefinito. In questo modo, l'agente di servizio Dataform predefinito può avviare nuove esecuzioni automatiche del flusso di lavoro per le configurazioni del flusso di lavoro eseguite dal account di servizio personalizzato.
Per concedere all'agente di servizio Dataform predefinito l'accesso a un account di serviziot personalizzato:
L'account di servizio personalizzato è ora pronto per essere configurato nel tuo repository Dataform.
Controlla le configurazioni del account di servizio
Questa sezione mostra come controllare le risorse Dataform per garantire l'utilizzo corretto deiaccount di serviziot e la concessione delle autorizzazioni. L'audit è particolarmente importante quando si utilizzano service account personalizzati, in quanto richiedono autorizzazioni specifiche per il funzionamento dell'agente di servizio Dataform predefinito.
Quando utilizzi un account di servizio personalizzato per un repository Dataform o
una configurazione del flusso di lavoro, devi verificare che l'agente di servizio Dataform predefinito disponga del
ruolo Utente service account
(roles/iam.serviceAccountUser) saccount di serviziount personalizzato. Questo ruolo
concede l'autorizzazione iam.serviceAccounts.actAs, che consente alle esecuzioni pianificate,
avviate dal service agent Dataform predefinito, di simulare
account di serviziount personalizzato. Inoltre, verifica che l'agente di servizio Dataform predefinito disponga del ruolo Creatore token service account (roles/iam.serviceAccountTokenCreator) per il account di servizio effettivo.
Verificare gli account di servizio del repository
Innanzitutto, identifica gli asset dataform.Repository inclusi nell'ambito della pianificazione e dell'esecuzione di Dataform. Poi, verifica le configurazioni del service account per i repository inclusi nell'ambito.
Verificare i service account di configurazione del workflow
L'utilizzo di service account personalizzati dedicati per le configurazioni del workflow Dataform è una best practice di sicurezza, in linea con il principio del privilegio minimo.
Per verificare l'utilizzo del account di servizio per dataform.WorkflowConfig resources, segui questi passaggi:
Controllare l'accesso a Dataform con IAM
Questa sezione descrive le opzioni di controllo dell'accesso per Dataform e mostra come visualizzare e concedere i ruoli Dataform. Dataform utilizza Identity and Access Management (IAM) per controllo dell'accesso. Per saperne di più su ruoli e autorizzazioni in IAM, consulta l'indice di ruoli e autorizzazioni IAM.
Ruoli Dataform predefiniti
La tabella seguente elenca i ruoli predefiniti che ti danno accesso alle risorse Dataform:
| Role | Permissions |
|---|---|
Dataform Admin( Full access to all Dataform resources. |
|
Code Commenter Beta( Permissions to comment, at the repository level. Grants CRUD access over commentThread and comment resources. |
|
Code Creator( Access only to private and shared code resources. The permissions in the Code Creator let you create and list code in Dataform, and access only the code that you created and code that was explicitly shared with you. |
|
Code Editor( Edit access code resources. |
|
Code Owner( Full access to code resources. |
|
Code Scheduler Beta( Access for scheduling workflows and releases. |
|
Code Viewer( Read-only access to all code resources. |
|
Dataform Editor( Edit access to Workspaces and Read-only access to Repositories. |
|
Dataform Service Agent( Gives permission for the Dataform API to access a secret from Secret Manager |
|
Team Folder Commenter Beta( View and comment access to a team folder and its contents. |
|
Team Folder Contributor Beta( Edit access to a team folder and its contents. |
|
Team Folder Creator Beta( Access to create new team folders. |
|
Team Folder Owner Beta( Full access to a team folder and its contents. Can share the team folder and its contents. |
|
Team Folder Viewer Beta( View access to a team folder and its contents. |
|
Dataform Viewer( Read-only access to all Dataform resources. |
|
Ruoli personalizzati di Dataform
I ruoli personalizzati possono includere qualsiasi autorizzazione specificata. Puoi creare ruoli personalizzati che includono autorizzazioni per eseguire operazioni amministrative specifiche, come la creazione di workspace di sviluppo o la creazione di file e directory all'interno di un workspace di sviluppo. Per creare ruoli personalizzati, vedi Creazione e gestione di ruoli personalizzati.
Considerazioni sulla sicurezza per le autorizzazioni Dataform
Qualsiasi utente con l'autorizzazione dataform.repositories.create può eseguire codice in BigQuery utilizzando il service agent Dataform predefinito e tutte le autorizzazioni concesse a questo service agent. Ciò include
l'esecuzione dei workflow Dataform.
L'autorizzazione dataform.repositories.create è inclusa nei seguenti ruoli IAM:
Per limitare i dati che un utente, un service agent o un account di servizio possono leggere o scrivere in BigQuery, puoi concedere autorizzazioni IAM BigQuery granulari a tabelle o set di dati BigQuery selezionati. Per saperne di più, consulta Controllare l'accesso ai set di dati e Controllare l'accesso a tabelle e viste.
Per saperne di più sull'agente di servizio Dataform predefinito e sui ruoli e sulle autorizzazioni che richiede, consulta Concedere l'accesso richiesto a Dataform.
Visualizzare i ruoli Dataform
All'interno della console Google Cloud , segui questi passaggi:
Per saperne di più sulla concessione di un ruolo in un progetto, consulta Concedi un ruolo. In questo modo, puoi concedere ruoli predefiniti o personalizzati.
Controllare l'accesso a un singolo repository
Per controllare l'accesso a Dataform con autorizzazioni granulari,
puoi impostare i ruoli IAM Dataform su singoli
repository utilizzando la richiesta
repositories.setIamPolicy
dell'API Dataform.
Per impostare i ruoli IAM Dataform su un singolo repository Dataform:
Il seguente comando trasmette la richiesta dell'API Dataform repositories.setIamPolicy che concede il ruolo Editor Dataform nel repository sales a un singolo utente:
curl -H "Content-Type: application/json" -X POST -d '{ "policy": { "bindings": [{ "role": "roles/dataform.editor", "members": ["user:sasha@examplepetstore.com"]}] }}' "https://dataform.googleapis.com/v1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"
Concedere l'accesso pubblico a un repository
Puoi concedere l'accesso pubblico a un repository Dataform concedendo
ruoli IAM sul repository all'entità
allAuthenticatedUsers.
Quando assegni un ruolo IAM all'entità allAuthenticatedUsers, agli agenti di servizio, ai service account e a tutti gli utenti di internet che si sono autenticati con un Account Google, viene concesso quel ruolo. Sono inclusi gli account non collegati a un account Google Workspace o a un dominio Cloud Identity, ad esempio gli account Gmail personali. Gli utenti
non autenticati, come i visitatori anonimi, non sono inclusi. Per
maggiori informazioni, consulta
Tutti gli utenti autenticati.
Ad esempio, quando concedi il ruolo Visualizzatore Dataform a
allAuthenticatedUsers nel repository sales, tutti gli agenti di servizio,
i service account e gli utenti di internet che si sono autenticati con un
Account Google hanno accesso in sola lettura a tutte le risorse di codice sales.
Per concedere l'accesso pubblico a un repository Dataform:
Il seguente comando trasmette la richiesta dell'API Dataform repositories.setIamPolicy che concede il ruolo Visualizzatore Dataform nel repository sales a allAuthenticatedUsers:
curl -H "Content-Type: application/json" -X POST -d '{ "policy": { "bindings": [{ "role": "roles/dataform.viewer", "members": ["allAuthenticatedUsers"]}] }}' "https://dataform.googleapis.com/v1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"
Impedire l'accesso pubblico ai repository
Per assicurarti che non venga concesso l'accesso pubblico a nessun repository Dataform, puoi limitare l'entità allAuthenticatedUsers nel tuo progetto.
Per limitare allAuthenticatedUsers nel tuo progetto, puoi
impostare il criterio iam.allowedPolicyMemberDomains
e rimuovere allAuthenticatedUsers dall'elenco di allowed_values.
Quando limiti allAuthenticatedUsers nel criterio iam.allowedPolicyMemberDomains, il principal allAuthenticatedUsers non può essere utilizzato in nessun criterio IAM del tuo progetto, il che impedisce di concedere l'accesso pubblico a tutte le risorse, inclusi i repository Dataform.
Per ulteriori informazioni sulla norma iam.allowedPolicyMemberDomains
e istruzioni per impostarla, vedi
Limitazione delle identità per dominio.
Federazione delle identità per la forza lavoro in Dataform
La federazione delle identità per la forza lavoro ti consente di utilizzare un provider di identità (IdP) esterno per autenticare e autorizzare gli utenti ad accedere ai servizi Google Cloud con IAM.
Dataform supporta la federazione delle identità per la forza lavoro senza limitazioni note.
Controllare l'accesso a singole tabelle con IAM
Questa sezione mostra come concedere e revocare i ruoli IAM BigQuery per singole tabelle e viste Dataform.
Quando Dataform esegue una tabella o una vista, crea la risorsa in BigQuery. Durante lo sviluppo in Dataform, puoi concedere ruoli BigQuery a singole tabelle e viste per controllare il loro accesso in BigQuery dopo l'esecuzione.
Per ulteriori informazioni sulla concessione e la revoca dell'accesso alle risorse, vedi Concedere l'accesso a una risorsa.
Concedere ruoli BigQuery a una tabella o una vista
Puoi concedere ruoli BigQuery a una tabella o una vista in
Dataform aggiungendo un blocco post_operations con l'istruzione
GRANT DCL
al file di definizione .sqlx della tabella o della vista selezionata.
Per concedere ruoli BigQuery a una tabella o una vista selezionata:
Il seguente esempio di codice mostra il ruolo Visualizzatore BigQuery concesso a un utente su una tabella:
config { type: "table" }
SELECT ...
post_operations {
GRANT `roles/bigquery.dataViewer`
ON TABLE ${self()}
TO "user:222larabrown@gmail.com"
}
Revocare i ruoli BigQuery da una tabella o una vista
Puoi revocare i ruoli BigQuery da una tabella o una vista aggiungendo un blocco
post_operations con l'istruzione
REVOKE DCL
al file di definizione .sqlx della tabella o della vista selezionata.
Per revocare i ruoli BigQuery da una tabella o una vista selezionata:
Il seguente esempio di codice mostra il ruolo Visualizzatore BigQuery revocato a un utente in una tabella:
config { type: "table" }
SELECT ...
post_operations {
REVOKE `roles/bigquery.dataViewer`
ON TABLE ${self()}
FROM "user:222larabrown@gmail.com"
}
Gestire collettivamente i ruoli BigQuery per tabelle e viste
Per controllare l'accesso di BigQuery a singole tabelle e viste in un'unica posizione, puoi creare un file type: "operations" dedicato con istruzioni DCL GRANT e REVOKE.
Per gestire l'accesso alla tabella BigQuery in un unico file type: "operations":
Utilizzare l'API Config per personalizzare il comportamento di IAM
Puoi utilizzare il
metodo dell'API Dataform projects.locations.updateConfig
per personalizzare il comportamento di IAM e migliorare la sicurezza.
Concedere un ruolo specifico al momento della creazione della risorsa
Quando imposti il campo setAuthenticatedUserAdmin su true nella
risorsa projects.locations.repositories,
Dataform concede automaticamente all'utente che crea il
repository il
ruolo Dataform Admin
(roles/dataform.admin) per quel repository. Inoltre,
Dataform concede a qualsiasi utente che crea uno spazio di lavoro in questo
repository il ruolo Dataform Admin nel nuovo spazio di lavoro.
Puoi utilizzare il campo creator_role
(anteprima)
nel
metodo projects.locations.updateConfig
per eseguire l'override di questo comportamento. Se setAuthenticatedUserAdmin è true e configuri il campo creator_role con un ruolo personalizzato, Dataform concede il ruolo personalizzato anziché il ruolo dataform.admin predefinito.
Implementare autorizzazioni di pianificazione avanzate
Per richiedere agli utenti autorizzazioni esplicite per pianificare i flussi di lavoro Dataform, imposta il campo enable_project_checks_for_scheduling su true nel metodo projects.locations.updateConfig.
Quando attivi questi controlli per la pianificazione, l'utente deve disporre delle seguenti autorizzazioni:
Abilitare gli spazi di lavoro privati
Per limitare l'accesso al workspace Dataform in modo che solo il creatore del workspace possa leggere e scrivere codice in quel workspace, imposta il campo enable_private_workspace su true nel metodo projects.locations.updateConfig.
Questa limitazione si applica anche alla visualizzazione degli artefatti generati, come SQL compilato, errori di compilazione e log di esecuzione per le compilazioni o le chiamate del workflow del workspace.
Questa impostazione sostituisce i ruoli IAM standard che concedono l'accesso allo spazio di lavoro ad altri utenti del repository.