Controlar o acesso ao Dataform com o IAM

Neste documento, descrevemos as opções de controle de acesso do Dataform e mostramos como visualizar e conceder papéis do Dataform. O Dataform usa o Identity and Access Management (IAM) para controle de acesso. Para mais informações sobre papéis e permissões no IAM, consulte Noções básicas sobre papéis e permissões.

Papéis predefinidos do Dataform

A tabela a seguir lista os papéis predefinidos que dão acesso aos recursos do 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

Papéis personalizados do Dataform

Os papéis personalizados podem incluir qualquer permissão especificada por você. É possível criar papéis personalizados que incluam permissões para executar operações administrativas específicas, como criar espaços de trabalho de desenvolvimento ou criar arquivos e diretórios em um espaço de trabalho de desenvolvimento. Para criar papéis personalizados, consulte Como criar e gerenciar papéis personalizados.

Considerações de segurança para permissões do Dataform

Qualquer usuário com a permissão dataform.repositories.create pode executar um código no BigQuery usando a conta de serviço padrão do Dataform e todas as permissões concedidas a essa conta de serviço. Isso inclui a execução de fluxos de trabalho SQL do Dataform.

As permissões dataform.repositories.create estão incluídas nos seguintes papéis do IAM:

Para restringir os dados que um usuário ou uma conta de serviço pode ler ou gravar no BigQuery, conceda permissões granulares do IAM do BigQuery aos conjuntos de dados ou tabelas selecionados do BigQuery. Para mais informações, consulte Como controlar o acesso a conjuntos de dados e Como controlar o acesso a tabelas e visualizações.

Para mais informações sobre a conta de serviço padrão do Dataform e os papéis e permissões necessários, consulte Conceder acesso necessário ao Dataform.

Antes de começar

  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

Conferir papéis do Dataform

No console do Google Cloud, siga estas etapas:

  1. Acesse a página IAM e administrador > Papéis.

    Acessar "Papéis"

  2. No campo Filtro, selecione Usado em, digite Dataform e pressione Enter.

  3. Clique em um dos papéis listados para ver as permissões dele no painel à direita.

    Por exemplo, o papel de administrador do Dataform tem acesso total a todos os recursos do Dataform.

Para mais informações sobre como conceder um papel em um projeto, consulte Conceder um papel. É possível conceder papéis predefinidos ou personalizados dessa maneira.

Controlar o acesso a um repositório individual

Para controlar o acesso ao Dataform com permissões granulares, é possível definir papéis de IAM do Dataform em repositórios individuais usando a solicitação repositories.setIamPolicy da API Dataform.

Para definir papéis de IAM do Dataform em um repositório individual do Dataform, siga estas etapas:

  1. No terminal, transmita a solicitação repositories.setIamPolicy da API Dataform com uma política de acesso.

  2. Na política, vincule um usuário, grupo, domínio ou conta de serviço a um papel selecionado no seguinte formato:

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

    Substitua:

    • ROLE: um papel do IAM do Dataform que você quer conceder ao repositório
    • TYPE: user, group, domain ou serviceAccount
    • IDENTIFIER: o usuário, grupo, domínio ou conta de serviço a que você quer conceder o papel.
  3. Na página do IAM, verifique se todos os usuários podem visualizar a lista completa de repositórios do Dataform usando um papel do Dataform com a permissão dataform.repositories.list.

  4. No IAM, garanta que apenas os usuários que precisam de acesso total a todos os repositórios do Dataform recebam o papel de administrador do Dataform em todos os repositórios.

O comando a seguir transmite a solicitação repositories.setIamPolicy da API Dataform que concede o papel de Editor do Dataform no repositório sales a um único usuário:

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"

Conceder acesso público a um repositório

É possível conceder acesso público a um repositório do Dataform concedendo papéis do IAM no repositório ao principal allAuthenticatedUsers.

Quando você atribui um papel do IAM ao principal allAuthenticatedUsers, as contas de serviço e todos os usuários da Internet que se autenticaram com uma Conta do Google recebem esse papel. Isso inclui contas que não estão conectadas a uma conta do Google Workspace ou a um domínio do Cloud Identity, como contas pessoais do Gmail. Os usuários não autenticados, como visitantes anônimos, não são incluídos. Para mais informações, consulte Todos os usuários autenticados.

Por exemplo, quando você concede o papel de Leitor do Dataform a allAuthenticatedUsers no repositório sales, todas as contas de serviço e usuários na Internet que se autenticaram com uma Conta do Google terão acesso somente leitura a todos os recursos do código sales.

Para conceder acesso público a um repositório do Dataform, siga estas etapas:

  1. No terminal, transmita a solicitação repositories.setIamPolicy da API Dataform com uma política de acesso.

  2. Na política, vincule o principal allAuthenticatedUsers a um papel selecionado no seguinte formato:

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

    Substitua:

    • ROLE: um papel do IAM do Dataform que você quer conceder a todos os usuários autenticados.

O comando a seguir transmite a solicitação repositories.setIamPolicy da API Dataform que concede o papel Leitor do Dataform no repositório 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"

Impedir o acesso público aos repositórios

Para garantir que nenhum acesso seja concedido ao público em qualquer repositório do Dataform, restrinja a principal allAuthenticatedUsers no seu projeto.

Para restringir allAuthenticatedUsers no projeto, defina a política iam.allowedPolicyMemberDomains e remova allAuthenticatedUsers da lista de allowed_values.

Quando você restringe allAuthenticatedUsers na política iam.allowedPolicyMemberDomains, a principal allAuthenticatedUsers não pode ser usada em nenhuma política do IAM no seu projeto, o que impede a concessão de acesso público a todos os recursos, incluindo repositórios do Dataform.

Para mais informações sobre a política iam.allowedPolicyMemberDomains e também instruções para configurá-la, consulte Como restringir identidades por domínio.

Federação de identidade de colaboradores no Dataform

A federação de identidade de colaboradores permite usar um provedor de identidade externo (IdP) para autenticar e autorizar usuários nos serviços do Google Cloud com o IAM.

O Dataform oferece suporte à federação de identidade de colaboradores sem limitações conhecidas.

A seguir