Controlar el acceso con la gestión de identidades y accesos

En este documento se explica cómo hacer lo siguiente en Dataform:

Antes de empezar

  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. Verify 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. Verify that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and Dataform APIs.

    Enable the APIs

  8. Conceder el acceso necesario a Dataform

    En esta sección se explica cómo asignar los roles de Gestión de Identidades y Accesos (IAM) que necesitan las cuentas de servicio de Dataform para ejecutar flujos de trabajo en BigQuery.

    Información sobre las cuentas de servicio en Dataform

    Cuando creas tu primer repositorio de Dataform, Dataform genera automáticamente una cuenta de servicio predeterminada. Dataform usa la cuenta de servicio predeterminada para interactuar con BigQuery en tu nombre. De forma predeterminada, la cuenta de servicio de Dataform no tiene asignados roles ni permisos de BigQuery. Debes conceder el acceso necesario a la cuenta de servicio predeterminada de Dataform.

    El ID de tu cuenta de servicio predeterminada de Dataform tiene el siguiente formato:

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

    Sustituye PROJECT_NUMBER por el ID numérico de tuGoogle Cloud proyecto. Puedes encontrar el Google Cloud ID de tu proyecto en el Google Cloud panel de control de la consola. Para obtener más información, consulta el artículo sobre cómo identificar proyectos.

    Además de la cuenta de servicio predeterminada de Dataform, puedes usar otras cuentas de servicio para ejecutar flujos de trabajo en tu nombre. Puede configurar cuentas de servicio personalizadas de las siguientes formas:

    Cuando creas un repositorio o una configuración de flujo de trabajo de Dataform, puedes seleccionar cualquier cuenta de servicio asociada al proyecto Google Cloud al que tengas acceso. Debes configurar los permisos necesarios para todas las cuentas de servicio asociadas a tus recursos de Dataform.

    Una cuenta de servicio personalizada asociada a un repositorio de Dataform solo se usa para ejecutar flujos de trabajo de ese repositorio. El resto de las operaciones del repositorio se siguen realizando con la cuenta de servicio predeterminada de Dataform.

    Roles necesarios para las cuentas de servicio y las cuentas de Google de Dataform

    Las cuentas de servicio predeterminadas y personalizadas, así como las credenciales de usuario de la cuenta de Google (versión preliminar) que se usan para autenticarse en Dataform, requieren los siguientes roles de gestión de identidades y accesos de BigQuery para poder ejecutar flujos de trabajo en BigQuery:

    Además, debes asignar a la cuenta de servicio predeterminada de Dataform el rol Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) para que pueda acceder a las cuentas de servicio personalizadas que quieras usar en Dataform.

    Si has habilitado el modo Actúa como estricto (Vista previa) y has configurado el ajuste Frecuencia de una configuración de flujo de trabajo, asigna el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser) a la cuenta de servicio predeterminada de Dataform en la cuenta de servicio efectiva de la configuración del flujo de trabajo.

    Consideraciones de seguridad para las cuentas de servicio y las cuentas de Google de Dataform

    Otorgar los roles que requiere Dataform a una cuenta de servicio o a una cuenta de Google de un usuario (vista previa) conlleva las siguientes consideraciones de seguridad:

    • Cualquier cuenta de servicio a la que se le hayan concedido los roles necesarios puede obtener acceso a BigQuery o Secret Manager en el proyecto al que pertenezca, independientemente de los Controles de Servicio de VPC.

      Para obtener más información, consulta Configurar Controles de Servicio de VPC.

    • Cualquier usuario que tenga el permiso dataform.repositories.createde IAM puede ejecutar código con la cuenta de servicio predeterminada de Dataform y todos los permisos que se hayan concedido a esa cuenta de servicio.

      Para obtener más información, consulta Consideraciones de seguridad sobre los permisos de Dataform.

    Para restringir los datos que un usuario o una cuenta de servicio pueden leer o escribir en BigQuery, puedes conceder permisos de gestión de identidades y accesos de BigQuery granulares a conjuntos de datos o tablas de BigQuery concretos. Para obtener más información, consulta Controlar el acceso a los conjuntos de datos y Controlar el acceso a las tablas y las vistas.

    Para evitar que los usuarios realicen acciones mientras usan las credenciales de usuario de la cuenta de Google de otro usuario, se aplican las siguientes restricciones:

    • Para modificar una configuración de flujo de trabajo con las credenciales de otro usuario de una cuenta de Google, debes adjuntar tus propias credenciales de usuario de una cuenta de Google a la configuración del flujo de trabajo o cambiar la configuración del flujo de trabajo para autenticarte con una cuenta de servicio.
    • No puedes modificar el resultado de una compilación de una configuración de lanzamiento si hay configuraciones de flujo de trabajo que hacen referencia a la configuración de lanzamiento y que tienen adjuntas las credenciales de otro usuario de cuenta de Google.
    • No puedes configurar un flujo de trabajo para que se autentique con las credenciales de usuario de una cuenta de Google y hacer referencia a una configuración de lanzamiento con una programación. Esta limitación tiene las siguientes consecuencias:

      • No puedes actualizar una configuración de lanzamiento para que use una programación si hay configuraciones de flujo de trabajo que hacen referencia a la configuración de lanzamiento y que están configuradas para autenticarse con las credenciales de usuario de una cuenta de Google.
      • No puedes crear una configuración de flujo de trabajo que se autentique con credenciales de usuario de una cuenta de Google y que apunte a una configuración de lanzamiento con una programación.
      • No puedes crear ni actualizar una configuración de flujo de trabajo para usar las credenciales de usuario de una cuenta de Google y apuntar a una configuración de lanzamiento con una programación.

    Asignar los roles de BigQuery necesarios a una cuenta de servicio o a una cuenta de Google que se use en Dataform

    Para asignar los roles de gestión de identidades y accesos de BigQuery necesarios a tu cuenta de servicio predeterminada de Dataform, a una cuenta de servicio personalizada que quieras usar en Dataform o a la cuenta de Google de un usuario que quieras usar para autenticarte en Dataform (vista previa), sigue estos pasos:

    1. En la Google Cloud consola, ve a la página Dataform.

      Ir a Dataform

    2. Seleccione o cree un repositorio.

    3. En la consola, ve a la página IAM. Google Cloud

      Ir a IAM

    4. Haz clic en Conceder acceso.

    5. En el campo Nuevos principales, introduce el ID de la cuenta de servicio o el correo de la cuenta de Google del usuario (Vista previa).

    6. En la lista Selecciona un rol, elige el rol Usuario de tareas de BigQuery.

    7. Haz clic en Añadir otro rol y, en la lista Seleccionar un rol, selecciona el rol Editor de datos de BigQuery.

    8. Haz clic en Añadir otro rol y, en la lista Seleccionar un rol, selecciona el rol Lector de datos de BigQuery.

    9. Haz clic en Guardar.

    Conceder acceso de creación de tokens a una cuenta de servicio personalizada

    Para usar una cuenta de servicio personalizada en Dataform, la cuenta de servicio predeterminada de Dataform debe poder acceder a la cuenta de servicio personalizada. Para conceder este acceso, debes añadir la cuenta de servicio predeterminada de Dataform como principal a la cuenta de servicio personalizada con el rol Creador de tokens de cuenta de servicio.

    Para conceder acceso a la cuenta de servicio predeterminada de Dataform a una cuenta de servicio personalizada, sigue estos pasos:

    1. En la Google Cloud consola, ve a IAM > Cuentas de servicio.

      Ir a Cuentas de servicio

    2. Selecciona un proyecto.

    3. En la página Cuentas de servicio del proyecto "PROJECT_NAME", selecciona tu cuenta de servicio de Dataform personalizada.

    4. Ve a Permisos y, a continuación, haz clic en Conceder acceso.

    5. En el campo Nuevos principales, introduce el ID de tu cuenta de servicio predeterminada de Dataform.

      El ID de tu cuenta de servicio predeterminada de Dataform tiene el siguiente formato:

      service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
      
    6. En la lista Selecciona un rol, elige el rol Creador de tokens de cuenta de servicio.

    7. Haz clic en Guardar.

    Controlar el acceso a Dataform con la gestión de identidades y accesos

    En esta sección se describen las opciones de control de acceso de Dataform y se explica cómo ver y asignar roles de Dataform. Dataform usa Gestión de Identidades y Accesos (IAM) para el control de acceso. Para obtener más información sobre los roles y permisos de IAM, consulta el artículo sobre roles y permisos.

    Roles predefinidos de Dataform

    En la siguiente tabla se indican los roles predefinidos que te dan acceso a los recursos de 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.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.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.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.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.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.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.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.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

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

    Los roles personalizados pueden incluir los permisos que especifiques. Puedes crear roles personalizados que incluyan permisos para realizar operaciones administrativas específicas, como crear espacios de trabajo de desarrollo o crear archivos y directorios en un espacio de trabajo de desarrollo. Para crear roles personalizados, consulta el artículo Crear y gestionar roles personalizados.

    Consideraciones de seguridad sobre los permisos de Dataform

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

    El permiso dataform.repositories.create está incluido en los siguientes roles de gestión de identidades y accesos:

    Para restringir los datos que un usuario o una cuenta de servicio pueden leer o escribir en BigQuery, puedes conceder permisos de gestión de identidades y accesos de BigQuery granulares a conjuntos de datos o tablas de BigQuery concretos. Para obtener más información, consulta Controlar el acceso a los conjuntos de datos y Controlar el acceso a las tablas y las vistas.

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

    Ver roles de Dataform

    En la Google Cloud consola, sigue estos pasos:

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

      Ir a Roles

    2. En el campo Filtro, seleccione Usado en, escriba Dataform y, a continuación, pulse Intro.

    3. Haga clic en uno de los roles de la lista para ver sus permisos en el panel de la derecha.

      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 conceder un rol en un proyecto, consulta el artículo Conceder un rol. De esta forma, puedes conceder roles predefinidos o personalizados.

    Controlar el acceso a un repositorio concreto

    Para controlar el acceso a Dataform con permisos granulares, puedes definir roles de gestión de identidades y accesos de Dataform en repositorios concretos mediante una solicitud de la API Dataform repositories.setIamPolicy.

    Para definir roles de gestión de identidades y accesos de Dataform en un repositorio de Dataform concreto, sigue estos pasos:

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

    2. En la política, vincula un usuario, un grupo, un dominio o una cuenta de servicio a un rol seleccionado con el siguiente formato:

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

      Haz los cambios siguientes:

      • ROLE: el rol de gestión de identidades y accesos de Dataform que quieras conceder en el repositorio.
      • TYPE: user, group, domain o serviceAccount.
      • IDENTIFIER: el usuario, el grupo, el dominio o la cuenta de servicio a los que quieras asignar el rol.
    3. En la página Gestión de identidades y accesos, asegúrate de que todos los usuarios puedan ver la lista completa de repositorios de Dataform a través de un rol de Dataform con el permiso dataform.repositories.list.

    4. En Gestión de identidades y accesos, asegúrate de que solo los usuarios que necesiten acceso completo a todos los repositorios de Dataform tengan asignado el rol Administrador de Dataform en todos los repositorios.

    El siguiente comando envía la solicitud de la API repositories.setIamPolicy de Dataform que otorga el rol 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"
    

    Conceder acceso público a un repositorio

    Puedes conceder acceso público a un repositorio de Dataform asignando roles de gestión de identidades y accesos en el repositorio al principal allAuthenticatedUsers.

    Cuando asignas un rol de gestión de identidades y accesos al principal allAuthenticatedUsers, se concede ese rol a las cuentas de servicio y a todos los usuarios de Internet que se hayan autenticado con una cuenta de Google. Esto incluye las cuentas que no están conectadas a una cuenta de Google Workspace o a un dominio de Cloud Identity, como las cuentas personales de Gmail. No se incluyen los usuarios que no están autenticados, como los visitantes anónimos. Para obtener más información, consulta Todos los usuarios autenticados.

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

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

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

    2. En la política, vincula la principal allAuthenticatedUsers a un rol seleccionado con el siguiente formato:

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

      Sustituye ROLE por un rol de gestión de identidades y accesos de Dataform que quieras asignar a todos los usuarios autenticados.

    El siguiente comando envía la solicitud de la API Dataform repositories.setIamPolicy que asigna el rol Lector 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 conceda acceso público a ningún repositorio de Dataform, puedes restringir el principal allAuthenticatedUsers en tu proyecto.

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

    Cuando restringe allAuthenticatedUsers en la política iam.allowedPolicyMemberDomains, el principal allAuthenticatedUsers no se puede usar en ninguna política de gestión de identidades y accesos de su proyecto, lo que impide conceder acceso público a todos los recursos, incluidos los repositorios de Dataform.

    Para obtener más información sobre la política iam.allowedPolicyMemberDomains y las instrucciones para configurarla, consulta el artículo Restringir identidades por dominio.

    Federación de identidades para los trabajadores en Dataform

    La federación de identidades de los empleados te permite usar un proveedor de identidades externo para autenticar y autorizar a los usuarios en los servicios con IAM. Google Cloud

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

    Controlar el acceso a tablas concretas con gestión de identidades y accesos

    En esta sección se explica cómo asignar y revocar roles de gestión de identidades y accesos de BigQuery para tablas y vistas de Dataform concretas.

    Cuando Dataform ejecuta una tabla o una vista, crea el recurso en BigQuery. Durante el desarrollo en Dataform, puedes asignar roles de BigQuery a tablas y vistas concretas para controlar su acceso en BigQuery después de la ejecución.

    Para obtener más información sobre cómo conceder y revocar el acceso a los recursos, consulta Conceder acceso a un recurso.

    Asignar roles de BigQuery a una tabla o vista

    Para asignar roles de BigQuery a una tabla o una vista en Dataform, añade un bloque post_operations con la GRANT instrucción DCL al archivo de definición .sqlx de la tabla o la vista seleccionada.

    Para asignar roles de BigQuery a una tabla o vista seleccionada, sigue estos pasos:

    1. En la Google Cloud consola, ve a la página Dataform.

      Ir a Dataform

    2. Selecciona un repositorio y, a continuación, un espacio de trabajo.

    3. En el panel Archivos, despliega el directorio definitions/.

    4. Selecciona el archivo de definición .sqlx de la tabla o la vista a la que quieras conceder acceso.

    5. En el archivo, introduce el siguiente fragmento de código:

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

      Haz los cambios siguientes:

      • ROLE_LIST: el rol de BigQuery o la lista de roles de BigQuery separados por comas que quieras conceder.

      • RESOURCE_TYPE: TABLE o VIEW.

      • USER_LIST: la lista separada por comas de los usuarios a los que se les ha concedido el rol.

        Para ver una lista de formatos válidos, consulta user_list.

    6. Opcional: Haz clic en Formato.

    7. Ejecuta la tabla o la vista.

    8. Si has concedido acceso a una tabla incremental, elimina la instrucción GRANT del archivo de definición de la tabla después de la primera ejecución.

    En el siguiente ejemplo de código se muestra el rol Lector de BigQuery asignado a un usuario en una tabla:

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

    Revocar roles de BigQuery de una tabla o vista

    Para revocar funciones de BigQuery de una tabla o una vista, añade un bloque post_operations con la instrucción REVOKE DCL al archivo de definición .sqlx de la tabla o la vista seleccionada.

    Para revocar funciones de BigQuery de una tabla o vista seleccionada, sigue estos pasos:

    1. En la Google Cloud consola, ve a la página Dataform.

      Ir a Dataform

    2. Selecciona un repositorio y, a continuación, un espacio de trabajo.

    3. En el panel Archivos, despliega el directorio definitions/.

    4. Selecciona el archivo de definición .sqlx de la tabla o la vista a la que quieras revocar el acceso.

    5. En el bloque post_operations, introduce la siguiente instrucción REVOKE:

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

      Haz los cambios siguientes:

      • ROLE_LIST: el rol de BigQuery o la lista de roles de BigQuery separados por comas que quieras revocar.
      • RESOURCE_TYPE: TABLE o VIEW.
      • USER_LIST: lista separada por comas de los usuarios a los que se les ha revocado el rol. Para ver una lista de formatos válidos, consulta user_list.
    6. Para revocar el acceso concedido en una instrucción GRANT del archivo, sustituye la instrucción GRANT por una instrucción REVOKE.

    7. Opcional: Haz clic en Formato.

    8. Ejecuta la tabla o la vista.

    9. Si has revocado el acceso a una tabla incremental, elimina la instrucción REVOKE del archivo de definición de la tabla después de la primera ejecución.

    En el siguiente ejemplo de código se muestra cómo se revoca el rol Lector de BigQuery a un usuario en una tabla:

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

    Gestionar de forma colectiva los roles de BigQuery de tablas y vistas

    Para controlar el acceso de BigQuery a tablas y vistas concretas en una sola ubicación, puedes crear un archivo type: "operations" específico con instrucciones GRANT y REVOKE DCL.

    Para gestionar el acceso a las tablas de BigQuery en un solo archivo type: "operations", sigue estos pasos:

    1. En la Google Cloud consola, ve a la página Dataform.

      Ir a Dataform

    2. Selecciona un repositorio y, a continuación, un espacio de trabajo.

    3. En el panel Archivos, junto a definitions/, haz clic en el menú Más.

    4. Haz clic en Crear archivo.

    5. En el campo Añadir una ruta de archivo, introduce el nombre del archivo seguido de .sqlx después de definitions/. Por ejemplo, definitions/table-access.sqlx.

      Los nombres de archivo solo pueden incluir números, letras, guiones y guiones bajos.

    6. Haz clic en Crear archivo.

    7. En el panel Archivos, despliega el directorio definitions/ y selecciona el archivo que acabas de crear.

    8. En el archivo, introduce el siguiente fragmento 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"
      

      Haz los cambios siguientes:

      • ROLE_LIST: el rol de BigQuery o la lista de roles de BigQuery separados por comas que quieras conceder o revocar.
      • RESOURCE_TYPE: TABLE o VIEW.
      • RESOURCE_NAME: el nombre de la tabla o de la vista.
      • USER_LIST: lista separada por comas de los usuarios a los que se les ha concedido o revocado el rol. Para ver una lista de formatos válidos, consulta user_list.
    9. Añade enunciados GRANT y REVOKE según sea necesario.

      1. Para revocar el acceso concedido en una declaración GRANT del archivo, sustituye la declaración GRANT por una declaración REVOKE.

        Si quitas la instrucción GRANT sin añadir la instrucción REVOKE, no se revoca el acceso.

    10. Opcional: Haz clic en Formato.

    11. Ejecuta el archivo después de cada actualización.

      1. Si has concedido o revocado el acceso a una tabla incremental, elimina la instrucción GRANT o REVOKE del archivo después de la primera ejecución de la instrucción.

    Siguientes pasos