Controla el acceso a Dataform con la IAM

En este documento, se describen las opciones de control de acceso para Dataform y se muestra cómo ver y otorgar roles de Dataform. Dataform usa Identity and Access Management (IAM) para el control de acceso. Para obtener más información sobre las funciones y los permisos de IAM, consulta Comprende las funciones y los permisos.

Roles predefinidos de Dataform

En la siguiente tabla, se enumeran los roles predefinidos que te brindan acceso a los recursos de 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

Roles personalizados de Dataform

Las funciones personalizadas pueden incluir cualquier permiso que especifiques. Puedes crear funciones personalizadas que incluyan permisos para realizar operaciones administrativas específicas, como la creación de lugares de trabajo de desarrollo o de archivos y directorios dentro de un lugar de trabajo de desarrollo. Para crear funciones personalizadas, consulta Crea y administra funciones personalizadas.

Consideraciones de seguridad para los permisos de Dataform

Cualquier usuario que tenga el permiso dataform.repositories.create puede ejecutar el código en BigQuery mediante la cuenta de servicio predeterminada de Dataform y todos los permisos otorgados a esa cuenta de servicio. Esto incluye la ejecución de los flujos de trabajo de SQL de Dataform.

Los permisos dataform.repositories.create se incluyen en las siguientes funciones de IAM:

Para restringir los datos que un usuario o una cuenta de servicio pueden leer o escribir en BigQuery, puedes otorgar permisos de IAM detallados de BigQuery a las tablas o los conjuntos de datos de BigQuery seleccionados. Para obtener más información, consulta Controla el acceso a los conjuntos de datos y Controla el acceso a las tablas y vistas.

Para obtener más información sobre la cuenta de servicio predeterminada de Dataform y las funciones y los permisos que requiere, consulta Otorga el acceso necesario a Dataform.

Antes de comenzar

  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

Ver roles de Dataform

En la consola de Google Cloud, sigue estos pasos:

  1. Ve a la página IAM y administración > Roles.

    Ir a Funciones

  2. En el campo Filtro, selecciona Usado en, escribe Dataform y, luego, presiona Intro.

  3. Haz clic en uno de los roles de la lista para ver los permisos del rol en el panel derecho.

    Por ejemplo, el rol Administrador de Dataform tiene acceso completo a todos los recursos de Dataform.

Para obtener más información sobre cómo otorgar un rol en un proyecto, consulta Cómo otorgar un rol. Puedes otorgar roles predefinidos o personalizados de esta manera.

Controla el acceso a un repositorio individual

Para controlar el acceso a Dataform con permisos detallados, puedes establecer roles de IAM de Dataform en repositorios individuales mediante la solicitud repositories.setIamPolicy de la API de Dataform.

Para establecer roles de IAM de Dataform en un repositorio individual de Dataform, sigue estos pasos:

  1. En la terminal, pasa la solicitud repositories.setIamPolicy a la API de Dataform con una política de acceso.

  2. En la política, vincula un usuario, un grupo, un dominio o una cuenta de servicio a una función seleccionada en el siguiente formato:

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

    Reemplaza lo siguiente:

    • ROLE: Es un rol de IAM de Dataform que deseas otorgar en el repositorio.
    • TYPE: user, group, domain o serviceAccount
    • IDENTIFIER: El usuario, grupo, dominio o cuenta de servicio a la que deseas otorgar la función
  3. En la página IAM, asegúrate de que todos los usuarios puedan ver la lista completa de repositorios de Dataform mediante un rol de Dataform con el permiso dataform.repositories.list.

  4. En IAM, asegúrate de que solo a los usuarios que requieran acceso completo a todos los repositorios de Dataform se les otorgue el rol de administrador de Dataform en todos los repositorios.

El siguiente comando pasa la solicitud repositories.setIamPolicy a la API de Dataform que otorga el rol de editor de Dataform en el repositorio sales a un solo usuario:

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"

Otorga acceso público a un repositorio

Puedes otorgar acceso público a un repositorio de Dataform si otorgas funciones de IAM en el repositorio a la principal allAuthenticatedUsers.

Cuando asignas un rol de IAM a la principal allAuthenticatedUsers, las cuentas de servicio y todos los usuarios de Internet que se autenticaron con una Cuenta de Google reciben ese rol. Esto incluye las cuentas que no están conectadas a una cuenta de Google Workspace o a un dominio de Cloud Identity, como cuentas personales de Gmail. Los usuarios que no están autenticados, como los visitantes anónimos, no están incluidos. Para obtener más información, consulta Todos los usuarios autenticados.

Por ejemplo, cuando otorgas el rol de visualizador de Dataform a allAuthenticatedUsers en el repositorio sales, todas las cuentas de servicio y los usuarios en Internet que se autenticaron con una Cuenta de Google tienen acceso de solo lectura a todos los recursos de código sales.

Para otorgar acceso público a un repositorio de Dataform, sigue estos pasos:

  1. En la terminal, pasa la solicitud repositories.setIamPolicy a la API de Dataform con una política de acceso.

  2. En la política, vincula la principal allAuthenticatedUsers a una función seleccionada en el siguiente formato:

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

    Reemplaza lo siguiente:

    • ROLE: Es un rol de IAM de Dataform que deseas otorgar a todos los usuarios autenticados.

El siguiente comando pasa la solicitud repositories.setIamPolicy a la API de Dataform que otorga el rol de visualizador de Dataform en el repositorio 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 el acceso público a los repositorios

Para asegurarte de que no se otorgue acceso al público en ningún repositorio de Dataform, puedes restringir la principal allAuthenticatedUsers en tu proyecto.

Para restringir allAuthenticatedUsers en tu proyecto, puedes establecer la política iam.allowedPolicyMemberDomains y quitar allAuthenticatedUsers de la lista de allowed_values.

Cuando restringes allAuthenticatedUsers en la política iam.allowedPolicyMemberDomains, la principal allAuthenticatedUsers no se puede usar en ninguna política de IAM en el proyecto, lo que impide otorgar acceso público a todos los recursos, incluidos los repositorios de Dataform.

Si deseas obtener más información sobre la política iam.allowedPolicyMemberDomains y también instrucciones para configurarla, consulta Restringe identidades por dominio.

Federación de identidades de personal en Dataform

La federación de identidades de personal te permite usar un proveedor de identidad externo (IdP) para autenticar y autorizar a los usuarios en los servicios de Google Cloud con la IAM.

Dataform admite la federación de identidades de personal sin limitaciones conocidas.

¿Qué sigue?