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 controllo dell'accesso#39;accesso. Per maggiori informazioni sui ruoli e sulle autorizzazioni in IAM, consulta Informazioni sui ruoli e sulle autorizzazioni.

Ruoli Dataform predefiniti

Nella tabella seguente sono elencati i ruoli predefiniti che consentono di accedere alle risorse Dataform:

Role Permissions

(roles/dataform.admin)

Full access to all Dataform resources.

dataform.*

  • 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.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.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.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.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.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.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 da te specificata. Puoi creare ruoli personalizzati che includono autorizzazioni per eseguire operazioni amministrative specifiche, come la creazione di aree di lavoro di sviluppo o di file e directory all'interno di un'area di lavoro di sviluppo. Per creare ruoli personalizzati, consulta Creazione e gestione di ruoli personalizzati.

Considerazioni sulla sicurezza per le autorizzazioni Dataform

Qualsiasi utente con l'autorizzazione dataform.repositories.create può eseguire il codice in BigQuery utilizzando l'account di servizio Dataform predefinito e tutte le autorizzazioni concesse a quell'account. Ciò include l'esecuzione dei flussi di lavoro SQL 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 granulari di BigQuery a determinati set di dati o tabelle BigQuery. Per maggiori informazioni, consulta Controllo dell'accesso ai set di dati e Controllo dell'accesso a tabelle e viste.

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

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

Visualizza 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 autorizzazioni del ruolo 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 in un progetto, consulta Concedere 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 API Dataform repositories.setIamPolicy.

Per impostare i ruoli IAM Dataform su un singolo repository Dataform:

  1. Nel terminale, passa la richiesta 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: un ruolo IAM Dataform che vuoi concedere nel repository
    • TYPE: user, group, domain o serviceAccount
    • IDENTIFIER: l'utente, il gruppo, il dominio o l'account di 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 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/v1beta1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"

Concedi 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 ruolo 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, ad esempio gli account Gmail personali. Non sono inclusi gli utenti non autenticati, ad esempio i visitatori anonimi. Per maggiori informazioni, consulta Tutti gli utenti autenticati.

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

Per concedere l'accesso pubblico a un repository Dataform:

  1. Nel terminale, passa la richiesta 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 quanto segue:

    • ROLE: un ruolo IAM Dataform da concedere a tutti gli utenti autenticati.

Il seguente comando passa la richiesta 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/v1beta1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"

Impedisci l'accesso pubblico ai repository

Per assicurarti che non venga concesso al pubblico l'accesso su qualsiasi repository Dataform, puoi limitare l'entità allAuthenticatedUsers nel progetto.

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

Se limiti allAuthenticatedUsers nel criterio iam.allowedPolicyMemberDomains, l'entità allAuthenticatedUsers non può essere utilizzata in nessun criterio IAM nel 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 per istruzioni su come impostarlo, consulta Limitazione delle identità per dominio.

Federazione delle identità per la forza lavoro in Dataform

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

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

Passaggi successivi