Controlla l'accesso con IAM

Questo documento mostra come eseguire le seguenti operazioni in Dataform:

Prima di iniziare

  1. 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.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  8. 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:

    • 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.create può 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 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:

    • 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.

    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:

    1. Nella console Google Cloud , vai alla pagina Dataform.

      Vai a Dataform

    2. Seleziona o crea un repository.

    3. Nella console Google Cloud , vai alla pagina IAM.

      Vai a IAM

    4. Fai clic su Concedi l'accesso.

    5. Nel campo Nuove entità, inserisci l'ID agente di servizio, l'ID service account o l'indirizzo email dell'account Google dell'utente (anteprima).

    6. Nell'elenco Seleziona un ruolo, seleziona il ruolo Utente job BigQuery.

    7. Fai clic su Aggiungi un altro ruolo e poi seleziona il ruolo Editor dati BigQuery nell'elenco Seleziona un ruolo.

    8. Fai clic su Aggiungi un altro ruolo e poi, nell'elenco Seleziona un ruolo, seleziona il ruolo Visualizzatore dati BigQuery.

    9. Fai clic su Salva.

    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:

    1. Nella console Google Cloud , vai a IAM > Service accounts.

      Vai ad Account di servizio

    2. Seleziona un progetto.

    3. Nella pagina Service account per il progetto "PROJECT_NAME", seleziona il account di servizio personalizzato.

    4. Vai a Entità con accesso e poi fai clic su Concedi accesso.

    5. 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.com
      
    6. Nell'elenco Seleziona un ruolo, seleziona il ruolo Creatore token service account e il ruolo Utente service account.

    7. Fai clic su Salva.

    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.

    1. Utilizza Cloud Asset Inventory per elencare tutte le risorse di tipo dataform.Repository. Per ulteriori informazioni, vedi Visualizzare gli asset.

    2. Per ogni repository nell'output di Cloud Asset Inventory, controlla il campo resource.data.labels per determinare se è incluso nell'ambito. Il percorso esatto potrebbe variare leggermente in base al formato di esportazione.

    3. 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 è sql o data_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.

    4. Per ogni repository incluso nell'ambito, controlla il campo resource.data.serviceAccount nell'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.

    5. 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.

    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:

    1. Utilizza Cloud Asset Inventory per elencare tutte le risorse di tipo dataform.WorkflowConfig.

    2. 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.
    3. 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.

    4. 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.

    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

    (roles/dataform.admin)

    Full access to all Dataform resources.

    dataform.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update
    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update
    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query
    • dataform.config.get
    • dataform.config.update
    • dataform.folders.addContents
    • dataform.folders.create
    • dataform.folders.delete
    • dataform.folders.get
    • dataform.folders.getIamPolicy
    • dataform.folders.move
    • dataform.folders.queryContents
    • dataform.folders.setIamPolicy
    • dataform.folders.update
    • dataform.locations.get
    • dataform.locations.list
    • dataform.operations.cancel
    • dataform.operations.delete
    • dataform.operations.get
    • dataform.operations.list
    • dataform.releaseConfigs.create
    • dataform.releaseConfigs.delete
    • dataform.releaseConfigs.get
    • dataform.releaseConfigs.list
    • dataform.releaseConfigs.update
    • dataform.repositories.commit
    • dataform.repositories.computeAccessTokenStatus
    • dataform.repositories.create
    • dataform.repositories.delete
    • dataform.repositories.fetchHistory
    • dataform.repositories.fetchRemoteBranches
    • dataform.repositories.get
    • dataform.repositories.getIamPolicy
    • dataform.repositories.list
    • dataform.repositories.move
    • dataform.repositories.queryDirectoryContents
    • dataform.repositories.readFile
    • dataform.repositories.scheduleRelease
    • dataform.repositories.scheduleWorkflow
    • dataform.repositories.setIamPolicy
    • dataform.repositories.update
    • dataform.teamFolders.create
    • dataform.teamFolders.delete
    • dataform.teamFolders.get
    • dataform.teamFolders.getIamPolicy
    • dataform.teamFolders.setIamPolicy
    • dataform.teamFolders.update
    • dataform.workflowConfigs.create
    • dataform.workflowConfigs.delete
    • dataform.workflowConfigs.get
    • dataform.workflowConfigs.list
    • dataform.workflowConfigs.update
    • dataform.workflowInvocations.cancel
    • dataform.workflowInvocations.create
    • dataform.workflowInvocations.delete
    • dataform.workflowInvocations.get
    • dataform.workflowInvocations.list
    • dataform.workflowInvocations.query
    • dataform.workspaces.commit
    • dataform.workspaces.create
    • dataform.workspaces.delete
    • dataform.workspaces.fetchFileDiff
    • dataform.workspaces.fetchFileGitStatuses
    • dataform.workspaces.fetchGitAheadBehind
    • dataform.workspaces.get
    • dataform.workspaces.getIamPolicy
    • dataform.workspaces.installNpmPackages
    • dataform.workspaces.list
    • dataform.workspaces.makeDirectory
    • dataform.workspaces.moveDirectory
    • dataform.workspaces.moveFile
    • dataform.workspaces.pull
    • dataform.workspaces.push
    • dataform.workspaces.queryDirectoryContents
    • dataform.workspaces.readFile
    • dataform.workspaces.removeDirectory
    • dataform.workspaces.removeFile
    • dataform.workspaces.reset
    • dataform.workspaces.searchFiles
    • dataform.workspaces.setIamPolicy
    • dataform.workspaces.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeCommenter)

    Permissions to comment, at the repository level. Grants CRUD access over commentThread and comment resources.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.folders.get

    dataform.folders.queryContents

    dataform.locations.get

    dataform.repositories.get

    dataform.repositories.readFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeCreator)

    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.

    dataform.commentThreads.get

    dataform.commentThreads.list

    dataform.comments.get

    dataform.comments.list

    dataform.folders.create

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.repositories.create

    dataform.repositories.list

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeEditor)

    Edit access code resources.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

    dataform.folders.addContents

    dataform.folders.create

    dataform.folders.get

    dataform.folders.getIamPolicy

    dataform.folders.queryContents

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.operations.get

    dataform.repositories.commit

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.create

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.workspaces.commit

    dataform.workspaces.create

    dataform.workspaces.delete

    dataform.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.installNpmPackages

    dataform.workspaces.list

    dataform.workspaces.makeDirectory

    dataform.workspaces.moveDirectory

    dataform.workspaces.moveFile

    dataform.workspaces.pull

    dataform.workspaces.push

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.removeDirectory

    dataform.workspaces.removeFile

    dataform.workspaces.reset

    dataform.workspaces.searchFiles

    dataform.workspaces.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeOwner)

    Full access to code resources.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

    dataform.folders.*

    • dataform.folders.addContents
    • dataform.folders.create
    • dataform.folders.delete
    • dataform.folders.get
    • dataform.folders.getIamPolicy
    • dataform.folders.move
    • dataform.folders.queryContents
    • dataform.folders.setIamPolicy
    • dataform.folders.update

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.operations.get

    dataform.operations.list

    dataform.repositories.commit

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.create

    dataform.repositories.delete

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.move

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.repositories.setIamPolicy

    dataform.repositories.update

    dataform.workspaces.*

    • dataform.workspaces.commit
    • dataform.workspaces.create
    • dataform.workspaces.delete
    • dataform.workspaces.fetchFileDiff
    • dataform.workspaces.fetchFileGitStatuses
    • dataform.workspaces.fetchGitAheadBehind
    • dataform.workspaces.get
    • dataform.workspaces.getIamPolicy
    • dataform.workspaces.installNpmPackages
    • dataform.workspaces.list
    • dataform.workspaces.makeDirectory
    • dataform.workspaces.moveDirectory
    • dataform.workspaces.moveFile
    • dataform.workspaces.pull
    • dataform.workspaces.push
    • dataform.workspaces.queryDirectoryContents
    • dataform.workspaces.readFile
    • dataform.workspaces.removeDirectory
    • dataform.workspaces.removeFile
    • dataform.workspaces.reset
    • dataform.workspaces.searchFiles
    • dataform.workspaces.setIamPolicy
    • dataform.workspaces.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeScheduler)

    Access for scheduling workflows and releases.

    dataform.releaseConfigs.create

    dataform.workflowConfigs.create

    (roles/dataform.codeViewer)

    Read-only access to all code resources.

    dataform.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

    dataform.folders.get

    dataform.folders.getIamPolicy

    dataform.folders.queryContents

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.list

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.searchFiles

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.editor)

    Edit access to Workspaces and Read-only access to Repositories.

    dataform.commentThreads.get

    dataform.commentThreads.list

    dataform.comments.get

    dataform.comments.list

    dataform.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

    dataform.config.get

    dataform.folders.get

    dataform.folders.getIamPolicy

    dataform.folders.queryContents

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.operations.get

    dataform.operations.list

    dataform.releaseConfigs.get

    dataform.releaseConfigs.list

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.teamFolders.get

    dataform.teamFolders.getIamPolicy

    dataform.workflowConfigs.get

    dataform.workflowConfigs.list

    dataform.workflowInvocations.*

    • dataform.workflowInvocations.cancel
    • dataform.workflowInvocations.create
    • dataform.workflowInvocations.delete
    • dataform.workflowInvocations.get
    • dataform.workflowInvocations.list
    • dataform.workflowInvocations.query

    dataform.workspaces.commit

    dataform.workspaces.create

    dataform.workspaces.delete

    dataform.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.installNpmPackages

    dataform.workspaces.list

    dataform.workspaces.makeDirectory

    dataform.workspaces.moveDirectory

    dataform.workspaces.moveFile

    dataform.workspaces.pull

    dataform.workspaces.push

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.removeDirectory

    dataform.workspaces.removeFile

    dataform.workspaces.reset

    dataform.workspaces.searchFiles

    dataform.workspaces.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.serviceAgent)

    Gives permission for the Dataform API to access a secret from Secret Manager

    dataform.compilationResults.create

    dataform.workflowInvocations.create

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.teamFolderCommenter)

    View and comment access to a team folder and its contents.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

    dataform.folders.get

    dataform.folders.getIamPolicy

    dataform.folders.queryContents

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.teamFolders.get

    dataform.teamFolders.getIamPolicy

    dataform.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.list

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.searchFiles

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.teamFolderContributor)

    Edit access to a team folder and its contents.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

    dataform.folders.addContents

    dataform.folders.create

    dataform.folders.get

    dataform.folders.getIamPolicy

    dataform.folders.queryContents

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.operations.get

    dataform.repositories.commit

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.create

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.teamFolders.get

    dataform.teamFolders.getIamPolicy

    dataform.teamFolders.update

    dataform.workspaces.commit

    dataform.workspaces.create

    dataform.workspaces.delete

    dataform.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.installNpmPackages

    dataform.workspaces.list

    dataform.workspaces.makeDirectory

    dataform.workspaces.moveDirectory

    dataform.workspaces.moveFile

    dataform.workspaces.pull

    dataform.workspaces.push

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.removeDirectory

    dataform.workspaces.removeFile

    dataform.workspaces.reset

    dataform.workspaces.searchFiles

    dataform.workspaces.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.teamFolderCreator)

    Access to create new team folders.

    dataform.teamFolders.create

    (roles/dataform.teamFolderOwner)

    Full access to a team folder and its contents. Can share the team folder and its contents.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

    dataform.folders.*

    • dataform.folders.addContents
    • dataform.folders.create
    • dataform.folders.delete
    • dataform.folders.get
    • dataform.folders.getIamPolicy
    • dataform.folders.move
    • dataform.folders.queryContents
    • dataform.folders.setIamPolicy
    • dataform.folders.update

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.operations.get

    dataform.operations.list

    dataform.repositories.commit

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.create

    dataform.repositories.delete

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.move

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.repositories.setIamPolicy

    dataform.repositories.update

    dataform.teamFolders.delete

    dataform.teamFolders.get

    dataform.teamFolders.getIamPolicy

    dataform.teamFolders.setIamPolicy

    dataform.teamFolders.update

    dataform.workspaces.*

    • dataform.workspaces.commit
    • dataform.workspaces.create
    • dataform.workspaces.delete
    • dataform.workspaces.fetchFileDiff
    • dataform.workspaces.fetchFileGitStatuses
    • dataform.workspaces.fetchGitAheadBehind
    • dataform.workspaces.get
    • dataform.workspaces.getIamPolicy
    • dataform.workspaces.installNpmPackages
    • dataform.workspaces.list
    • dataform.workspaces.makeDirectory
    • dataform.workspaces.moveDirectory
    • dataform.workspaces.moveFile
    • dataform.workspaces.pull
    • dataform.workspaces.push
    • dataform.workspaces.queryDirectoryContents
    • dataform.workspaces.readFile
    • dataform.workspaces.removeDirectory
    • dataform.workspaces.removeFile
    • dataform.workspaces.reset
    • dataform.workspaces.searchFiles
    • dataform.workspaces.setIamPolicy
    • dataform.workspaces.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.teamFolderViewer)

    View access to a team folder and its contents.

    dataform.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

    dataform.folders.get

    dataform.folders.getIamPolicy

    dataform.folders.queryContents

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.teamFolders.get

    dataform.teamFolders.getIamPolicy

    dataform.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.list

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.searchFiles

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.viewer)

    Read-only access to all Dataform resources.

    dataform.commentThreads.get

    dataform.commentThreads.list

    dataform.comments.get

    dataform.comments.list

    dataform.compilationResults.get

    dataform.compilationResults.list

    dataform.compilationResults.query

    dataform.config.get

    dataform.folders.get

    dataform.folders.getIamPolicy

    dataform.folders.queryContents

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.operations.get

    dataform.operations.list

    dataform.releaseConfigs.get

    dataform.releaseConfigs.list

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.teamFolders.get

    dataform.teamFolders.getIamPolicy

    dataform.workflowConfigs.get

    dataform.workflowConfigs.list

    dataform.workflowInvocations.get

    dataform.workflowInvocations.list

    dataform.workflowInvocations.query

    dataform.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.list

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.searchFiles

    resourcemanager.projects.get

    resourcemanager.projects.list

    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:

    1. Vai alla pagina IAM e amministrazione > Ruoli.

      Vai a Ruoli.

    2. Nel campo Filtro, seleziona Utilizzato in, digita Dataform e premi Invio.

    3. 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.

    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:

    1. Nel terminale, passa la richiesta dell'API Dataform repositories.setIamPolicy con un criterio di accesso.

    2. 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, domain o serviceAccount.
      • IDENTIFIER: l'utente, il gruppo, il dominio o il service account a cui vuoi concedere il ruolo.
    3. 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.

    4. 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.

    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:

    1. Nel terminale, passa la richiesta dell'API Dataform repositories.setIamPolicy con un criterio di accesso.

    2. Nella policy, associa l'entità allAuthenticatedUsers a un ruolo selezionato nel seguente formato:

      {
      "policy":
         {
            "bindings": [
            {
               "role": "roles/ROLE",
               "members": [
                  "allAuthenticatedUsers",
               ]
            },
            ],
         }
      }
      

      Sostituisci ROLE con un ruolo IAM Dataform che vuoi concedere a tutti gli utenti autenticati.

    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:

    1. Nella console Google Cloud , vai alla pagina Dataform.

      Vai a Dataform

    2. Seleziona un repository, poi un workspace.

    3. Nel riquadro File, espandi la directory definitions/.

    4. Seleziona il file di definizione .sqlx della tabella o della vista a cui vuoi concedere l'accesso.

    5. 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: TABLE o VIEW.

      • USER_LIST: l'elenco separato da virgole degli utenti a cui viene concesso il ruolo.

        Per un elenco dei formati validi, vedi user_list.

    6. (Facoltativo) Fai clic su Formato.

    7. Esegui la tabella o la visualizzazione.

    8. Se hai concesso l'accesso a una tabella incrementale, rimuovi l'istruzione GRANT dal file di definizione della tabella dopo la prima esecuzione.

    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:

    1. Nella console Google Cloud , vai alla pagina Dataform.

      Vai a Dataform

    2. Seleziona un repository, poi un workspace.

    3. Nel riquadro File, espandi la directory definitions/.

    4. Seleziona il file di definizione .sqlx della tabella o della vista a cui vuoi revocare l'accesso.

    5. Nel blocco post_operations, inserisci la seguente istruzione REVOKE:

          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: TABLE o VIEW.
      • USER_LIST: l'elenco separato da virgole degli utenti a cui viene revocato il ruolo. Per un elenco dei formati validi, vedi user_list.
    6. Per revocare l'accesso concesso in un'istruzione GRANT nel file, sostituisci l'istruzione GRANT con un'istruzione REVOKE.

    7. (Facoltativo) Fai clic su Formato.

    8. Esegui la tabella o la visualizzazione.

    9. Se hai revocato l'accesso a una tabella incrementale, rimuovi l'istruzione REVOKE dal file di definizione della tabella dopo la prima esecuzione.

    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":

    1. Nella console Google Cloud , vai alla pagina Dataform.

      Vai a Dataform

    2. Seleziona un repository, poi un workspace.

    3. Nel riquadro File, accanto a definitions/, fai clic sul menu Altro.

    4. Fai clic su Crea file.

    5. Nel campo Aggiungi un percorso del file, inserisci il nome del file seguito da .sqlx dopo definitions/. Ad esempio: definitions/table-access.sqlx.

      I nomi dei file possono includere solo numeri, lettere, trattini e trattini bassi.

    6. Fai clic su Crea file.

    7. Nel riquadro File, espandi la directory definitions/ e seleziona il file appena creato.

    8. 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: TABLE o VIEW.
      • 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.
    9. Aggiungi le istruzioni GRANT e REVOKE in base alle esigenze.

      1. Per revocare l'accesso concesso in un'istruzione GRANT nel file, sostituisci l'istruzione GRANT con un'istruzione REVOKE.

        La rimozione dell'istruzione GRANT senza aggiungere l'istruzione REVOKE non revoca l'accesso.

    10. (Facoltativo) Fai clic su Formato.

    11. Esegui il file dopo ogni aggiornamento.

      1. Se hai concesso o revocato l'accesso a una tabella incrementale, rimuovi l'istruzione GRANT o REVOKE dal file dopo la prima esecuzione dell'istruzione.

    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:

    • Per creare una configurazione del workflow:

      • L'autorizzazione dataform.workflowConfigs.create sul progetto, concessa dal ruolo Code Scheduler (roles/dataform.codeScheduler).
      • L'autorizzazione dataform.repositories.scheduleWorkflow sul repository, concessa dal ruolo Dataform Admin (roles/dataform.admin).
    • Per creare una configurazione della release:

      • L'autorizzazione dataform.releaseConfigs.create sul progetto, concessa dal ruolo Code Scheduler (roles/dataform.codeScheduler).
      • L'autorizzazione dataform.repositories.scheduleRelease sul repository, concessa dal ruolo Dataform Admin (roles/dataform.admin).

    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.

    Passaggi successivi