Controlar o acesso com o IAM

Este documento mostra como fazer o seguinte no 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.

    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. Conceder ao Dataform o acesso necessário

    Nesta seção, mostramos como conceder os papéis do Identity and Access Management (IAM) que os agentes de serviço do Dataform e as contas de serviço personalizadas precisam para executar fluxos de trabalho no BigQuery.

    Sobre contas de serviço personalizadas e agentes de serviço do Dataform

    É possível configurar contas de serviço personalizadas para executar fluxos de trabalho em seu nome das seguintes maneiras:

    Ao criar um repositório ou uma configuração de fluxo de trabalho do Dataform, é possível selecionar qualquer conta de serviço em que você tenha permissões para agir como. É necessário configurar as permissões necessárias para todas as contas de serviço associadas aos recursos do Dataform.

    Quando você cria seu primeiro repositório do Dataform, o Dataform gera automaticamente um agente de serviço padrão. O Dataform usa o agente de serviço padrão para interagir com o BigQuery em seu nome.

    O ID do agente de serviço padrão do Dataform está no seguinte formato:

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

    Substitua PROJECT_NUMBER pelo ID numérico do seu projeto do Google Cloud . Encontre o ID do projeto Google Cloud no painel do consoleGoogle Cloud . Para mais informações, consulte Identificar projetos.

    Papéis necessários para agentes de serviço do Dataform, contas de serviço personalizadas e Contas do Google

    Os agentes de serviço padrão do Dataform, as contas de serviço personalizadas e as credenciais de usuário da Conta do Google (prévia) usadas para autenticar no Dataform exigem os seguintes papéis do IAM do BigQuery para executar fluxos de trabalho no BigQuery:

    Além disso, conceda os seguintes papéis ao agente de serviço padrão do Dataform na conta de serviço efetiva da configuração do fluxo de trabalho:

    Para versões automáticas de repositório e execuções automáticas de fluxo de trabalho, conceda ao agente de serviço padrão do Dataform a permissão iam.serviceAccounts.actAs na conta de serviço efetiva.

    Considerações sobre segurança

    Conceder os papéis exigidos pelo Dataform a um agente de serviço do Dataform, uma conta de serviço personalizada ou uma Conta do Google de um usuário (prévia) vem com as seguintes considerações de segurança:

    • Qualquer agente de serviço ou conta de serviço que receba as funções necessárias pode ter acesso ao BigQuery ou ao Secret Manager no projeto a que pertence, independente dos VPC Service Controls. As solicitações originadas do Dataform que usam um agente de serviço com as funções necessárias estão dentro do perímetro do VPC Service Controls do projeto a que o repositório do Dataform pertence.

      Para mais informações, consulte Configurar o VPC Service Controls.

    • Qualquer usuário com a permissão dataform.repositories.create do IAM pode executar código usando o agente de serviço padrão do Dataform e todas as permissões concedidas a esse agente ou conta de serviço.

      Para mais informações, consulte Considerações de segurança para permissões do Dataform.

    Para restringir os dados que um usuário, agente de serviço ou conta de serviço pode ler ou gravar no BigQuery, conceda permissões granulares do IAM do BigQuery a 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 impedir que os usuários realizem ações usando as credenciais de outro usuário, as seguintes restrições são aplicadas:

    • Para modificar uma configuração de fluxo de trabalho com as credenciais de outro usuário da Conta do Google anexadas, anexe suas próprias credenciais de usuário da Conta do Google à configuração do fluxo de trabalho ou mude a configuração para autenticar com um agente de serviço do {dataform_name_short} ou uma conta de serviço personalizada.
    • Não é possível modificar um resultado de compilação para uma configuração de lançamento se houver configurações de fluxo de trabalho que referenciam a configuração de lançamento com credenciais anexadas de outro usuário da Conta do Google.
    • Não é possível definir uma configuração de fluxo de trabalho para autenticar com credenciais de usuário da Conta do Google e referenciar uma configuração de lançamento com uma programação. Essa limitação tem as seguintes consequências:

      • Não é possível atualizar uma configuração de versão para usar uma programação se houver configurações de fluxo de trabalho que referenciam a configuração de versão definida para autenticar com as credenciais de usuário da Conta do Google.
      • Não é possível criar uma configuração de fluxo de trabalho que faça a autenticação com credenciais de usuário da Conta do Google e aponte para uma configuração de versão com uma programação.
      • Não é possível criar ou atualizar uma configuração de fluxo de trabalho para usar credenciais de usuário da Conta do Google e apontar para uma configuração de lançamento com uma programação.

    Conceder os papéis obrigatórios do BigQuery

    Para conceder os papéis necessários do IAM do BigQuery ao agente de serviço padrão do Dataform, a uma conta de serviço personalizada que você quer usar no Dataform ou a uma Conta do Google de um usuário que você quer usar para autenticar no Dataform (Prévia), siga estas etapas:

    1. No Google Cloud console, acesse a página Dataform.

      Acesse o Dataform

    2. Selecione ou crie um repositório.

    3. No console do Google Cloud , acesse a página IAM.

      Acessar IAM

    4. Clique em Permitir acesso.

    5. No campo Novos principais, insira o ID do agente de serviço, o ID da conta de serviço ou o e-mail da Conta do Google do usuário (Prévia).

    6. Na lista Selecionar um papel, escolha a opção Usuário de jobs do BigQuery.

    7. Clique em Adicionar outro papel. Em seguida, na lista Selecionar papel, escolha a opção Editor de dados do BigQuery.

    8. Clique em Adicionar outro papel e, na lista Selecionar papel, escolha Leitor de dados do BigQuery.

    9. Clique em Salvar.

    Conceder papéis necessários para fluxos de trabalho automáticos

    Para usar uma conta de serviço personalizada no Dataform, o agente de serviço padrão do Dataform precisa ter acesso a ela. Isso permite que o Dataform execute seus fluxos de trabalho usando as permissões definidas na sua conta de serviço personalizada em vez da conta do agente de serviço padrão.

    Para conceder esse acesso, atribua o papel de criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator) ao agente de serviço padrão do Dataform como principal. Isso permite que o agente de serviço padrão do Dataform simule a conta de serviço criando credenciais de curta duração conhecidas como tokens. Esses tokens são necessários para que o Dataform execute fluxos de trabalho usando a identidade da conta de serviço personalizada.

    Também é necessário conceder o papel de usuário da conta de serviço (roles/iam.serviceAccountUser) ao agente de serviço padrão do Dataform. Isso permite que o agente de serviço padrão do Dataform inicie novas execuções automáticas de fluxo de trabalho para configurações executadas pela conta de serviço personalizada.

    Para conceder ao agente de serviço padrão do Dataform acesso a uma conta de serviço personalizada, siga estas etapas:

    1. No console Google Cloud , acesse IAM > Contas de serviço.

      Acesse as Contas de serviço

    2. Selecione um projeto.

    3. Na página Contas de serviço do projeto "PROJECT_NAME", selecione sua conta de serviço personalizada.

    4. Acesse Principais com acesso e clique em Conceder acesso.

    5. No campo Novos principais, insira o ID do agente de serviço padrão do Dataform.

      O ID do agente de serviço padrão do Dataform está no seguinte formato:

      service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
      
    6. Na lista Selecionar um papel, selecione os papéis Criador de token de conta de serviço e Usuário da conta de serviço.

    7. Clique em Salvar.

    A conta de serviço personalizada está pronta para ser configurada no seu repositório do Dataform.

    Auditar configurações de conta de serviço

    Esta seção mostra como auditar seus recursos do Dataform para garantir o uso adequado da conta de serviço e concessões de permissão. A auditoria é especialmente importante ao usar contas de serviço personalizadas, já que elas exigem permissões específicas para que o agente de serviço padrão do Dataform funcione.

    Ao usar uma conta de serviço personalizada para um repositório ou configuração de fluxo de trabalho do Dataform, verifique se o agente de serviço padrão do Dataform tem o papel Usuário da conta de serviço (roles/iam.serviceAccountUser) na conta de serviço personalizada. Esse papel concede a permissão iam.serviceAccounts.actAs, que permite que as execuções programadas, iniciadas pelo agente de serviço padrão do Dataform, representem a conta de serviço personalizada. Além disso, verifique se o agente de serviço padrão do Dataform tem o papel Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator) na conta de serviço efetiva.

    Verificar as contas de serviço do repositório

    Primeiro, identifique os recursos do dataform.Repository que estão no escopo do agendamento e da execução do Dataform. Em seguida, verifique as configurações da conta de serviço para esses repositórios no escopo.

    1. Use o Inventário de recursos do Cloud para listar todos os recursos do tipo dataform.Repository. Para mais informações, consulte Ver seus recursos.

    2. Para cada repositório na saída do Inventário de recursos do Cloud, verifique o campo resource.data.labels para determinar se ele está no escopo. O caminho exato pode variar um pouco de acordo com o formato de exportação.

    3. Identifique repositórios fora do escopo inspecionando o mapa de rótulos da chave single-file-asset-type. A presença dessa chave indica que o repositório é usado por um recurso do BigQuery. Se o valor for sql ou data_canvas, o repositório poderá ser excluído das verificações de permissão da conta de serviço.

      Os repositórios restantes que não têm essa chave ou esses valores estão no escopo das verificações de permissão da conta de serviço.

    4. Para cada repositório no escopo, verifique o campo resource.data.serviceAccount na saída do Inventário de recursos do Cloud para determinar se uma conta de serviço personalizada está configurada:

      • Se o campo resource.data.serviceAccount estiver presente e o valor dele for diferente do endereço de e-mail padrão do agente de serviço do Dataform do projeto, o repositório usará uma conta de serviço personalizada.
      • Se o campo resource.data.serviceAccount estiver ausente ou se o valor do campo corresponder ao agente de serviço padrão do Dataform do projeto, o repositório usará o agente de serviço padrão.

    5. Se uma conta de serviço personalizada for usada, verifique se o agente de serviço padrão do Dataform tem os papéis Usuário da conta de serviço (roles/iam.serviceAccountUser) e Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator) nessa conta de serviço personalizada.

    Verificar as contas de serviço de configuração do fluxo de trabalho

    Usar contas de serviço personalizadas dedicadas para configurações de fluxo de trabalho do Dataform é uma prática recomendada de segurança, alinhada ao princípio de privilégio mínimo.

    Para verificar o uso da conta de serviço para dataform.WorkflowConfig resources, faça o seguinte:

    1. Use o Inventário de recursos do Cloud para listar todos os recursos do tipo dataform.WorkflowConfig.

    2. Para cada configuração de fluxo de trabalho, examine a saída do Inventário de recursos do Cloud para determinar a conta de serviço efetiva:

      • Se o campo resource.data.serviceAccount estiver presente, esse valor será o endereço de e-mail da conta de serviço definida explicitamente na configuração do fluxo de trabalho.
      • Se o campo resource.data.serviceAccount estiver ausente, a configuração do fluxo de trabalho vai herdar a conta de serviço do repositório pai. Verifique a configuração do repositório principal para encontrar a conta de serviço efetiva.
    3. Para identificar se uma conta de serviço personalizada está sendo usada, compare o endereço de e-mail da conta de serviço efetiva com o endereço de e-mail do agente de serviço padrão do Dataform do projeto. Se forem diferentes, uma conta de serviço personalizada está em uso.

    4. Se uma conta de serviço personalizada estiver em uso, verifique se o agente de serviço padrão do Dataform tem os papéis Usuário da conta de serviço (roles/iam.serviceAccountUser) e Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator) concedidos nessa conta personalizada. Com essas permissões, o agente de serviço padrão do Dataform pode iniciar execuções de fluxo de trabalho representando a conta de serviço personalizada.

    Controlar o acesso ao Dataform com o IAM

    Esta seção descreve as opções de controle de acesso do Dataform e mostra como visualizar e conceder papéis do Dataform. O Dataform usa o gerenciamento de identidade e acesso (IAM) para controle de acesso. Para mais informações sobre papéis e permissões no IAM, consulte o índice de papéis e permissões do IAM.

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

    Funções personalizadas 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 realizar 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 código no BigQuery usando o agente de serviço padrão do Dataform e todas as permissões concedidas a esse agente. Isso inclui a execução de fluxos de trabalho 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, agente de serviço ou conta de serviço pode ler ou gravar no BigQuery, conceda permissões granulares do IAM do BigQuery a 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 o agente de serviço padrão do Dataform e os papéis e permissões necessários, consulte Conceder o acesso necessário ao Dataform.

    Ver papéis do Dataform

    No console 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 uma das funções listadas para ver as permissões no painel direito.

      Por exemplo, a função 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, defina papéis do IAM do Dataform em repositórios individuais usando a solicitação repositories.setIamPolicy da API Dataform.

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

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

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

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

      Substitua:

      • ROLE: o papel do Dataform do IAM que você quer conceder no 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 acessar a lista completa de repositórios do Dataform com uma função do Dataform com a permissão dataform.repositories.list.

    4. No IAM, verifique se apenas os usuários que precisam de acesso total a todos os repositórios do Dataform têm o papel de administrador do Dataform em todos os repositórios.

    O comando a seguir transmite a solicitação da API Dataform repositories.setIamPolicy que concede a função 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/v1/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 allAuthenticatedUsers, os agentes de serviço, as contas de serviço e todos os usuários na 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 domínio do Cloud Identity, como contas pessoais do Gmail. Os usuários que não forem autenticados, como os visitantes anônimos, não serã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, todos os agentes de serviço, contas de serviço e usuários na Internet que se autenticaram com uma Conta do Google têm acesso somente leitura a todos os recursos de código sales.

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

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

    2. Na política, vincule o principal allAuthenticatedUsers a uma função selecionada no seguinte formato:

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

      Substitua ROLE por uma função do IAM do Dataform que você quer conceder a todos os usuários autenticados.

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

    Impedir o acesso público a repositórios

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

    Para restringir allAuthenticatedUsers no seu projeto, você pode definir a política iam.allowedPolicyMemberDomains e remover allAuthenticatedUsers da lista de allowed_values.

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

    Para mais informações sobre a política iam.allowedPolicyMemberDomains e 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 a acessar os serviços do Google Cloud com o IAM.

    O Dataform é compatível com a federação de identidade de colaboradores sem limitações conhecidas.

    Controlar o acesso a tabelas individuais com o IAM

    Nesta seção, mostramos como conceder e revogar papéis do IAM do BigQuery para tabelas e visualizações individuais do Dataform.

    Quando o Dataform executa uma tabela ou visualização, ele cria o recurso no BigQuery. Durante o desenvolvimento no Dataform, você pode conceder papéis do BigQuery a tabelas e visualizações individuais para controlar o acesso delas no BigQuery após a execução.

    Para mais informações sobre como conceder e revogar o acesso a recursos, consulte Conceder acesso a um recurso.

    Conceder papéis do BigQuery a uma tabela ou visualização

    É possível conceder papéis do BigQuery a uma tabela ou visualização no Dataform adicionando um bloco post_operations com a instrução DCL GRANT ao arquivo de definição .sqlx da tabela ou visualização selecionada.

    Para conceder papéis do BigQuery a uma tabela ou visualização selecionada, siga estas etapas:

    1. No Google Cloud console, acesse a página Dataform.

      Acesse o Dataform

    2. Selecione um repositório e um espaço de trabalho.

    3. No painel Arquivos, abra o diretório definitions/.

    4. Selecione o arquivo de definição .sqlx da tabela ou visualização a que você quer conceder acesso.

    5. No arquivo, digite este snippet de código:

      post_operations {
          GRANT "ROLE_LIST"
          ON "RESOURCE_TYPE" ${self()}
          TO "USER_LIST"
      }
      

      Substitua:

      • ROLE_LIST: o papel do BigQuery ou a lista de papéis do BigQuery separados por vírgula que você quer conceder.

      • RESOURCE_TYPE: TABLE ou VIEW.

      • USER_LIST: a lista separada por vírgulas de usuários a que o papel é concedido.

        Para ver uma lista de formatos válidos, consulte user_list.

    6. Opcional: clique em Formatar.

    7. Execute a tabela ou a visualização.

    8. Se você concedeu acesso a uma tabela incremental, remova a instrução GRANT do arquivo de definição de tabela após a primeira execução.

    O exemplo de código a seguir mostra a função de leitor do BigQuery concedida a um usuário em uma tabela:

    config { type: "table" }
    
    SELECT ...
    
    post_operations {
      GRANT `roles/bigquery.dataViewer`
      ON TABLE ${self()}
      TO "user:222larabrown@gmail.com"
    }
    

    Revogar papéis do BigQuery de uma tabela ou visualização

    Para revogar papéis do BigQuery de uma tabela ou visualização, adicione um bloco post_operations com a instrução DCL REVOKE ao arquivo de definição .sqlx da tabela ou visualização selecionada.

    Para revogar papéis do BigQuery de uma tabela ou visualização selecionada, siga estas etapas:

    1. No Google Cloud console, acesse a página Dataform.

      Acesse o Dataform

    2. Selecione um repositório e um espaço de trabalho.

    3. No painel Arquivos, abra o diretório definitions/.

    4. Selecione o arquivo de definição .sqlx da tabela ou visualização a que você quer revogar o acesso.

    5. No bloco post_operations, insira a seguinte instrução REVOKE:

          REVOKE "ROLE_LIST"
          ON "RESOURCE_TYPE" ${self()}
          FROM "USER_LIST"
      

      Substitua:

      • ROLE_LIST: a função do BigQuery ou a lista de funções do BigQuery separadas por vírgula que você quer revogar.
      • RESOURCE_TYPE: TABLE ou VIEW.
      • USER_LIST: a lista separada por vírgulas de usuários com o papel revogado. Para ver uma lista de formatos válidos, consulte user_list.
    6. Para revogar o acesso concedido em uma instrução GRANT no arquivo, substitua a instrução GRANT por uma instrução REVOKE.

    7. Opcional: clique em Formatar.

    8. Execute a tabela ou a visualização.

    9. Se você revogou o acesso a uma tabela incremental, remova a instrução REVOKE do arquivo de definição de tabela após a primeira execução.

    O exemplo de código a seguir mostra a função de leitor do BigQuery revogada de um usuário em uma tabela:

    config { type: "table" }
    
    SELECT ...
    
    post_operations {
      REVOKE `roles/bigquery.dataViewer`
      ON TABLE ${self()}
      FROM "user:222larabrown@gmail.com"
    }
    

    Gerenciar coletivamente papéis do BigQuery para tabelas e visualizações

    Para controlar o acesso do BigQuery a tabelas e visualizações individuais em um único local, crie um arquivo type: "operations" dedicado com instruções de DCL GRANT e REVOKE.

    Para gerenciar o acesso à tabela do BigQuery em um único arquivo type: "operations", siga estas etapas:

    1. No Google Cloud console, acesse a página Dataform.

      Acesse o Dataform

    2. Selecione um repositório e um espaço de trabalho.

    3. No painel Arquivos, ao lado de definitions/, clique no menu Mais.

    4. Selecione Criar arquivo.

    5. No campo Adicionar um caminho de arquivo, insira o nome do arquivo seguido por .sqlx depois de definitions/. Por exemplo, definitions/table-access.sqlx.

      Os nomes de arquivo só podem incluir números, letras, hifens e sublinhados.

    6. Selecione Criar arquivo.

    7. No painel Arquivos, abra o diretório definitions/ e selecione o arquivo recém-criado.

    8. No arquivo, digite este snippet de código:

        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"
      

      Substitua:

      • ROLE_LIST: o papel do BigQuery ou a lista de papéis do BigQuery separados por vírgula que você quer conceder ou revogar.
      • RESOURCE_TYPE: TABLE ou VIEW.
      • RESOURCE_NAME: o nome da tabela ou visualização.
      • USER_LIST: a lista separada por vírgulas de usuários a quem o papel é concedido ou revogado. Para ver uma lista de formatos válidos, consulte user_list.
    9. Adicione instruções GRANT e REVOKE conforme necessário.

      1. Para revogar o acesso concedido em uma instrução GRANT no arquivo, substitua a instrução GRANT por uma instrução REVOKE.

        Remover a instrução GRANT sem adicionar a instrução REVOKE não revoga o acesso.

    10. Opcional: clique em Formatar.

    11. Execute o arquivo após cada atualização.

      1. Se você concedeu ou revogou o acesso em uma tabela incremental, remova a instrução GRANT ou REVOKE do arquivo após a primeira execução da instrução.

    Usar a API Config para personalizar o comportamento do IAM

    É possível usar o método projects.locations.updateConfig da API Dataform para personalizar o comportamento do IAM e aumentar a segurança.

    Conceder um papel específico na criação do recurso

    Quando você define o campo setAuthenticatedUserAdmin como true no recurso projects.locations.repositories, o Dataform concede automaticamente ao usuário que cria o repositório o papel de administrador do Dataform (roles/dataform.admin) nesse repositório. Além disso, o Dataform concede a qualquer usuário que cria um espaço de trabalho nesse repositório a função de administrador do Dataform no novo espaço de trabalho.

    É possível usar o campo creator_role (prévia) no método projects.locations.updateConfig para substituir esse comportamento. Se setAuthenticatedUserAdmin for true e você configurar o campo creator_role com uma função personalizada, o Dataform vai conceder essa função em vez da função padrão dataform.admin.

    Implementar permissões de programação avançadas

    Para exigir que os usuários tenham permissões explícitas para programar fluxos de trabalho do Dataform, defina o campo enable_project_checks_for_scheduling como true no método projects.locations.updateConfig.

    Quando você ativa essas verificações para programação, o usuário precisa das seguintes permissões:

    Ativar espaços de trabalho particulares

    Para restringir o acesso ao espaço de trabalho do Dataform para que apenas o criador possa ler e gravar código nele, defina o campo enable_private_workspace como true no método projects.locations.updateConfig.

    Essa restrição também se aplica à visualização de artefatos gerados, como SQL compilado, erros de compilação e registros de execução para compilações ou invocações de fluxo de trabalho do espaço de trabalho.

    Essa configuração substitui os papéis padrão do IAM que concedem acesso ao espaço de trabalho a outros usuários do repositório.

    A seguir