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.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and Dataform APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and Dataform APIs.

    Enable the APIs

Concedi a Dataform l'accesso richiesto

Questa sezione spiega come concedere i ruoli di Identity and Access Management (IAM) necessari agli account di servizio Dataform per eseguire i flussi di lavoro in BigQuery.

Informazioni sugli account di servizio in Dataform

Quando crei il tuo primo repository Dataform, Dataform genera automaticamente un account di servizio predefinito. Dataform utilizza l'account di servizio predefinito per interagire con BigQuery per tuo conto. Per impostazione predefinita, all'account di servizio Dataform predefinito non vengono concessi ruoli o autorizzazioni BigQuery. Devi concedere l'accesso richiesto all'account di servizio Dataform predefinito.

L'ID account di servizio Dataform predefinito ha il seguente formato:

service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com

Sostituisci PROJECT_NUMBER con l'ID numerico del tuo progetto Google Cloud. Puoi trovare l'ID progetto Google Cloud nella dashboard della console Google Cloud. Per scoprire di più, consulta la sezione Identificazione dei progetti.

Oltre all'account di servizio Dataform predefinito, puoi utilizzare altri account di servizio per eseguire flussi di lavoro per tuo conto. Puoi configurare account di servizio personalizzati nei seguenti modi:

Quando crei un repository Dataform o una configurazione del flusso di lavoro, puoi selezionare qualsiasi service account associato al tuo progetto Google Cloud a cui hai accesso. Devi configurare le autorizzazioni richieste per tutti gli account di servizio associati alle risorse Dataform.

Un account di servizio personalizzato associato a un repository Dataform viene utilizzato solo per eseguire i flussi di lavoro da quel repository. Tutte le altre operazioni sul repository vengono comunque eseguite dall'account di servizio Dataform predefinito.

Ruoli richiesti per gli account di servizio Dataform

Gli account di servizio predefiniti e personalizzati utilizzati in Dataform richiedono i seguenti ruoli IAM BigQuery per poter eseguire le attività in BigQuery:

Inoltre, devi concedere all'account di servizio Dataform predefinito il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator) in modo che possa accedere a qualsiasi account di servizio personalizzato che vuoi utilizzare in Dataform.

Considerazioni sulla sicurezza per gli account di servizio Dataform

La concessione dei ruoli richiesti da Dataform a un account di servizio comporta i seguenti aspetti di sicurezza:

  • Qualsiasi 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, indipendentemente da VPC Service Controls.

    Per ulteriori informazioni, consulta Configurare i Controlli di servizio VPC per Dataform.

  • Qualsiasi utente che dispone dell'autorizzazione IAM dataform.repositories.create può eseguire codice utilizzando l'account di servizio Dataform predefinito e tutte le autorizzazioni concesse a questo account di servizio.

    Per ulteriori informazioni, consulta Considerazioni sulla sicurezza per le autorizzazioni di Dataform.

Per limitare i dati che un utente o un account di servizio può leggere o scrivere in BigQuery, puoi concedere autorizzazioni IAM di BigQuery granulari a set di dati o tabelle BigQuery selezionati. Per ulteriori informazioni, consulta Controllare l'accesso ai set di dati e Controllare l'accesso a tabelle e viste.

Concedi i ruoli BigQuery richiesti a un account di servizio utilizzato in Dataform

Per concedere i ruoli IAM BigQuery richiesti al tuo account di servizio Dataform predefinito o a un account di servizio personalizzato che vuoi utilizzare in Dataform:

  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 account di servizio.

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

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

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

  9. Fai clic su Salva.

Concedi l'accesso alla creazione di token a un account di servizio personalizzato

Per utilizzare un account di servizio personalizzato in Dataform, l'account di servizio Dataform predefinito deve essere in grado di accedere all'account di servizio personalizzato. Per concedere questo accesso, devi aggiungere l'account di servizio Dataform predefinito come entità all'account di servizio personalizzato con il ruolo Creatore token account di servizio.

Per concedere all'account di servizio Dataform predefinito l'accesso a un account di servizio personalizzato:

  1. Nella console Google Cloud, vai a IAM > Account di servizio.

    Vai ad Account di servizio

  2. Seleziona un progetto.

  3. Nella pagina Account di servizio per il progetto "PROJECT_NAME", seleziona il tuo account di servizio Dataform personalizzato.

  4. Vai a Autorizzazioni e poi fai clic su Concedi accesso.

  5. Nel campo Nuove entità, inserisci l'ID account di servizio Dataform predefinito.

    L'ID account di servizio 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 account di servizio.

  7. Fai clic su Salva.

Controlla l'accesso a Dataform con IAM

Questo documento 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 il controllo degli accessi. Per ulteriori informazioni sui ruoli e sulle autorizzazioni in IAM, consulta Informazioni sui ruoli e sulle autorizzazioni.

Ruoli Dataform predefiniti

La tabella seguente elenca i ruoli predefiniti che ti consentono di accedere alle risorse di 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.locations.get
  • dataform.locations.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.queryDirectoryContents
  • dataform.repositories.readFile
  • dataform.repositories.setIamPolicy
  • dataform.repositories.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

(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.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.locations.*

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

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.locations.*

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

dataform.repositories.*

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

Read-only access to all code resources.

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.locations.*

  • dataform.locations.get
  • dataform.locations.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.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.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.locations.*

  • dataform.locations.get
  • dataform.locations.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.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 Dataform personalizzati

I ruoli personalizzati possono includere qualsiasi autorizzazione specificata. Puoi creare ruoli personalizzati che includono autorizzazioni per eseguire operazioni amministrative specifiche, come la creazione di spazi di lavoro di sviluppo o la creazione di file e directory all'interno di uno spazio di lavoro di sviluppo. Per creare ruoli personalizzati, consulta Creare e gestire ruoli personalizzati.

Considerazioni sulla sicurezza per le autorizzazioni di Dataform

Qualsiasi utente che dispone dell'autorizzazione dataform.repositories.create può eseguire codice in BigQuery utilizzando l'account di servizio Dataform predefinito e tutte le autorizzazioni concesse a quell'account di servizio. È inclusa l'esecuzione dei workflow di Dataform.

Le autorizzazioni dataform.repositories.create sono incluse nei seguenti ruoli IAM:

Per limitare i dati che un utente o un account di servizio può leggere o scrivere in BigQuery, puoi concedere autorizzazioni IAM di BigQuery granulari a set di dati o tabelle BigQuery selezionati. Per ulteriori informazioni, consulta Controllare l'accesso ai set di dati e Controllare l'accesso a tabelle e viste.

Per ulteriori informazioni sull'account di servizio Dataform predefinito e sui ruoli e le autorizzazioni richiesti, consulta Concedere l'accesso richiesto a Dataform.

Visualizzare i ruoli di Dataform

Nella console Google Cloud, svolgi i seguenti 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 visualizzarne le autorizzazioni nel riquadro a destra.

    Ad esempio, il ruolo Amministratore Dataform ha accesso completo a tutte le risorse Dataform.

Per ulteriori informazioni sulla concessione di un ruolo a un progetto, consulta Concedere un ruolo. In questo modo puoi assegnare 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 di Dataform sui singoli repository utilizzando la richiesta dell'API Dataform repositories.setIamPolicy.

Per impostare i ruoli IAM di 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 o un account di servizio 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 al repository.
    • TYPE: user, group, domain o serviceAccount.
    • IDENTIFIER: l'account utente, gruppo, dominio o servizio 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 agli utenti che richiedono l'accesso completo a tutti i repository Dataform venga concesso il ruolo Amministratore Dataform su tutti i repository.

Il seguente comando passa la richiesta dell'API Dataform repositories.setIamPolicy che concede il ruolo Editor di Dataform al 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/v1beta1/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 i ruoli IAM sul repository all'entitàallAuthenticatedUsers.

Quando assegni un ruolo IAM all'entità allAuthenticatedUsers, questo viene concesso agli account di servizio e a tutti gli utenti su internet che si sono autenticati con un Account Google. Sono inclusi gli account non collegati a un account Google Workspace o a un dominio Cloud Identity, come gli account Gmail personali. Gli utenti non autenticati, come i visitatori anonimi, non sono inclusi. Per ulteriori informazioni, consulta Tutti gli utenti autenticati.

Ad esempio, quando concedi il ruolo Visualizzatore di Dataform a allAuthenticatedUsers nel repository sales, tutti gli account di servizio e gli utenti su internet che si sono autenticati con un Account Google hanno accesso di sola lettura a tutte le risorse di codice sales.

Per concedere l'accesso pubblico a un repository Dataform, segui questi passaggi:

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

  2. Nel criterio, 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 passa la richiesta dell'API Dataform repositories.setIamPolicy che assegna il ruolo Visualizzatore Dataform al 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/v1beta1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"

Impedisci l'accesso pubblico ai repository

Per assicurarti che non venga concesso alcun accesso al pubblico in nessun repository Dataform, puoi limitare il principale allAuthenticatedUsers nel tuo progetto.

Per limitare allAuthenticatedUsers nel progetto, puoi impostare il criterio iam.allowedPolicyMemberDomains, e rimuovere allAuthenticatedUsers dall'elenco di allowed_values.

Quando limiti allAuthenticatedUsers nel criterio iam.allowedPolicyMemberDomains, l'entità allAuthenticatedUsers non può essere utilizzata in nessun criterio IAM del progetto, il che impedisce di concedere l'accesso pubblico a tutte le risorse, inclusi i repository Dataform.

Per ulteriori informazioni sul criterio iam.allowedPolicyMemberDomains e sulle istruzioni per impostarlo, consulta Limitare le identità per dominio.

Federazione delle identità per la forza lavoro in Dataform

La federazione delle identità della forza lavoro consente di utilizzare un provider di identità (IdP) esterno per autenticare e autorizzare gli utenti ai servizi con IAM. Google Cloud

Dataform supporta la federazione delle identità della forza lavoro senza limitazioni note.

Controllare l'accesso alle singole tabelle con IAM

Questa sezione mostra come concedere e revocare i ruoli IAM di 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 assegnare ruoli BigQuery a singole tabelle e viste per controllarne l'accesso in BigQuery dopo l'esecuzione.

Per ulteriori informazioni su come concedere e revocare l'accesso alle risorse, consulta Concedere l'accesso a una risorsa.

Concedi i ruoli BigQuery a una tabella o una vista

Puoi concedere i ruoli BigQuery a una tabella o una vista in Dataform aggiungendo un blocco post_operations con l'istruzione DCL GRANT al file di definizione .sqlx della tabella o della vista selezionata.

Per concedere i ruoli BigQuery a una tabella o una visualizzazione selezionata, segui questi passaggi:

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

    Vai a Dataform

  2. Seleziona un repository e poi uno spazio di lavoro.

  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 virgola 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, consulta user_list.

  6. (Facoltativo) Fai clic su Formato.

  7. Esegui la tabella o la vista.

  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 concessi a un utente in 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 visualizzazione

Puoi revocare i ruoli BigQuery da una tabella o una vista aggiungendo un blocco post_operations con l'istruzione DCL REVOKE al file di definizione .sqlx della tabella o della vista selezionata.

Per revocare i ruoli BigQuery da una tabella o una visualizzazione selezionata:

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

    Vai a Dataform

  2. Seleziona un repository e poi uno spazio di lavoro.

  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 virgola che vuoi revocare.
    • RESOURCE_TYPE: TABLE o VIEW.
    • USER_LIST: l'elenco separato da virgole di utenti a cui viene revocato il ruolo. Per un elenco dei formati validi, consulta 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 vista.

  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 da 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 alle tabelle BigQuery in un unico type: "operations" file:

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

    Vai a Dataform

  2. Seleziona un repository e poi uno spazio di lavoro.

  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 virgola che vuoi concedere o revocare.
    • RESOURCE_TYPE: TABLE o VIEW.
    • RESOURCE_NAME: il nome della tabella o della visualizzazione.
    • USER_LIST: l'elenco separato da virgole di utenti a cui viene concesso o revocato il ruolo. Per un elenco dei formati validi, consulta user_list.
  9. Aggiungi le istruzioni GRANT e REVOKE se necessarie.

    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 comporta la revoca dell'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.

Passaggi successivi