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.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.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.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. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita las API de BigQuery and Dataform.

    Habilita las API

  5. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  6. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  7. Habilita las API de BigQuery and Dataform.

    Habilita las API

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?