Controla el acceso con IAM

En este documento, se muestra cómo hacer lo siguiente en 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

Otorga el acceso necesario a Dataform

En esta sección, se muestra cómo otorgar los roles de Identity and Access Management (IAM) que las cuentas de servicio de Dataform requieren para ejecutar flujos de trabajo en BigQuery.

Acerca de las cuentas de servicio en Dataform

Cuando creas tu primer repositorio de Dataform, esta herramienta 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, a la cuenta de servicio predeterminada de Dataform no se le otorgan roles ni permisos de BigQuery. Debes otorgar el acceso requerido a la cuenta de servicio predeterminada de Dataform.

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

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

Reemplaza PROJECT_NUMBER por el ID numérico de tu proyecto de Google Cloud. Puedes encontrar el ID de tu proyecto de Google Cloud en el panel de la consola de Google Cloud. Para obtener más información, consulta Identifica 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. Puedes configurar cuentas de servicio personalizadas de las siguientes maneras:

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

Una cuenta de servicio personalizada asociada con un repositorio de Dataform solo se usa para ejecutar flujos de trabajo desde ese repositorio. La cuenta de servicio predeterminada de Dataform sigue realizando todas las demás operaciones del repositorio.

Roles necesarios para las cuentas de servicio de Dataform

Las cuentas de servicio predeterminadas y personalizadas que se usan en Dataform requieren los siguientes roles de IAM de BigQuery para poder ejecutar flujos de trabajo en BigQuery:

Además, debes otorgarle a la cuenta de servicio predeterminada de Dataform el rol de creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) para que pueda acceder a cualquier cuenta de servicio personalizada que desees usar en Dataform.

Consideraciones de seguridad para las cuentas de servicio de Dataform

Si otorgas los roles que requiere Dataform a una cuenta de servicio, ten en cuenta las siguientes consideraciones de seguridad:

  • Cualquier cuenta de servicio a la que se le otorguen los roles requeridos podría obtener acceso a BigQuery o Secret Manager en el proyecto al que pertenece, independientemente de los controles de servicio de VPC.

    Para obtener más información, consulta Configura los Controles del servicio de VPC para Dataform.

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

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

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 conjuntos de datos o tablas 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.

Otorga los roles de BigQuery necesarios a una cuenta de servicio que se usa en Dataform

Para otorgar los roles de IAM de BigQuery necesarios a tu cuenta de servicio predeterminada de Dataform o a una cuenta de servicio personalizada que quieras usar en Dataform, sigue estos pasos:

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

    Ir a Dataform

  2. Selecciona o crea un repositorio.

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

    Ir a IAM

  4. Haz clic en Otorgar acceso.

  5. En el campo Principales nuevas, ingresa el ID de la cuenta de servicio.

  6. En la lista Seleccionar un rol, selecciona el rol Usuario de trabajo de BigQuery.

  7. Haz clic en Agregar otro rol y, luego, en la lista Selecciona un rol, elige Editor de datos de BigQuery.

  8. Haz clic en Agregar otro rol y, luego, en la lista Selecciona un rol, elige Visualizador de datos de BigQuery.

  9. Haz clic en Guardar.

Otorga acceso a la 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 otorgar este acceso, debes agregar la cuenta de servicio predeterminada de Dataform como principal a la cuenta de servicio personalizada con el rol de creador de tokens de cuentas de servicio.

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

  1. En la consola de Google Cloud, 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 personalizada de Dataform.

  4. Ve a Permisos y, luego, haz clic en Otorgar acceso.

  5. En el campo Principales nuevas, ingresa el ID de tu cuenta de servicio predeterminada de Dataform.

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

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

  7. Haz clic en Guardar.

Controla el acceso a Dataform con IAM

En este documento, se describen las opciones de control de acceso de 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 los roles y los permisos de IAM, consulta Comprende los roles 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.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

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

Las funciones personalizadas pueden incluir cualquier permiso 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 dentro de un espacio de trabajo de desarrollo. Para crear roles personalizados, consulta Crea y administra roles personalizados.

Consideraciones de seguridad para 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 otorgados a esa cuenta de servicio. Esto incluye la ejecución de los flujos de trabajo de Dataform.

Los permisos dataform.repositories.create se incluyen en los siguientes roles 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 conjuntos de datos o tablas 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 los roles y permisos que requiere, consulta Otorga el acceso requerido a Dataform.

Consulta los 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 Filtrar, selecciona Usado en, escribe Dataform y, luego, presiona Intro.

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

    Por ejemplo, el rol de 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 Otorga 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 configurar roles de IAM de Dataform en repositorios individuales con 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 de 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 un rol seleccionado en el siguiente formato:

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

    Reemplaza lo siguiente:

    • ROLE: Es el rol de IAM de Dataform que deseas otorgar en el repositorio.
    • TYPE: user, group, domain o serviceAccount.
    • IDENTIFIER: Es el usuario, el grupo, el dominio o la cuenta de servicio al que deseas otorgar el rol.
  3. En la página de IAM, 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 IAM, asegúrate de que solo los usuarios que requieran acceso completo a todos los repositorios de Dataform tengan el rol de administrador de Dataform en todos los repositorios.

El siguiente comando pasa la solicitud de la API de Dataform repositories.setIamPolicy 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

Para otorgar acceso público a un repositorio de Dataform, otorga roles de IAM en el repositorio a la principal allAuthenticatedUsers.

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

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

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

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

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

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

    Reemplaza ROLE por un rol de IAM de Dataform que desees otorgar a todos los usuarios autenticados.

En el siguiente comando, se pasa la solicitud de la API de Dataform repositories.setIamPolicy 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"

Cómo impedir el acceso público a los repositorios

Para garantizar que no se otorgue acceso público a ningún repositorio de Dataform, puedes restringir el principal de 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, el principal allAuthenticatedUsers no se puede usar en ninguna política de IAM de tu proyecto, lo que evita otorgar 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 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 a acceder a los Google Cloud servicios con IAM.

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

Controla el acceso a tablas individuales con IAM

En esta sección, se muestra cómo otorgar y revocar roles de IAM de BigQuery para tablas y vistas individuales de Dataform.

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

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

Otorga roles de BigQuery a una tabla o vista

Para otorgar roles de BigQuery a una tabla o vista en Dataform, agrega un bloque post_operations con la declaración DCL GRANT al archivo de definición .sqlx de la tabla o vista seleccionada.

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

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

    Ir a Dataform

  2. Selecciona un repositorio y, luego, un lugar de trabajo.

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

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

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

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

    Reemplaza lo siguiente:

    • ROLE_LIST: Es el rol de BigQuery o la lista de roles de BigQuery separados por comas que deseas otorgar.

    • RESOURCE_TYPE: TABLE o VIEW.

    • USER_LIST: Es la lista separada por comas de los usuarios a los que se otorga el rol.

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

  6. Opcional: Haz clic en Formato.

  7. Ejecuta la tabla o vista.

  8. Si otorgaste acceso a una tabla incremental, quita la sentencia GRANT del archivo de definición de tablas después de la primera ejecución.

En el siguiente ejemplo de código, se muestra el rol de Visualizador de BigQuery que se otorgó a un usuario en una tabla:

config { type: "table" }

SELECT ...

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

Cómo revocar roles de BigQuery de una tabla o vista

Para revocar los roles de BigQuery de una tabla o vista, agrega un bloque post_operations con la declaración DCL REVOKE al archivo de definición .sqlx de la tabla o vista seleccionada.

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

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

    Ir a Dataform

  2. Selecciona un repositorio y, luego, un lugar de trabajo.

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

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

  5. En el bloque post_operations, ingresa la siguiente sentencia REVOKE:

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

    Reemplaza lo siguiente:

    • ROLE_LIST: Es el rol de BigQuery o la lista de roles de BigQuery separados por comas que deseas revocar.
    • RESOURCE_TYPE: TABLE o VIEW.
    • USER_LIST: Es la lista separada por comas de los usuarios a los que se les revocó el rol. Para obtener una lista de los formatos válidos, consulta user_list.
  6. Para revocar el acceso otorgado en una sentencia GRANT en el archivo, reemplaza la sentencia GRANT por una sentencia REVOKE.

  7. Opcional: Haz clic en Formato.

  8. Ejecuta la tabla o vista.

  9. Si revocaste el acceso a una tabla incremental, quita la sentencia REVOKE del archivo de definición de tablas después de la primera ejecución.

En el siguiente ejemplo de código, se muestra el rol de Visualizador de BigQuery revocado de un usuario en una tabla:

config { type: "table" }

SELECT ...

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

Administra de forma colectiva los roles de BigQuery para tablas y vistas

Para controlar el acceso de BigQuery a tablas y vistas individuales en una sola ubicación, puedes crear un archivo type: "operations" dedicado con las sentencias DCL GRANT y REVOKE.

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

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

    Ir a Dataform

  2. Selecciona un repositorio y, luego, un lugar 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 Agregar una ruta de archivo, ingresa 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, expande el directorio definitions/ y selecciona el archivo que acabas de crear.

  8. En el archivo, ingresa 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"
    

    Reemplaza lo siguiente:

    • ROLE_LIST: Es el rol de BigQuery o la lista de roles de BigQuery separados por comas que deseas otorgar o revocar.
    • RESOURCE_TYPE: TABLE o VIEW.
    • RESOURCE_NAME: Es el nombre de la tabla o vista.
    • USER_LIST: Es la lista separada por comas de los usuarios a los que se otorga o se les revoca el rol. Para obtener una lista de los formatos válidos, consulta user_list.
  9. Agrega sentencias GRANT y REVOKE según sea necesario.

    1. Para revocar el acceso otorgado en una sentencia GRANT en el archivo, reemplaza la sentencia GRANT por una sentencia REVOKE.

      Quitar la sentencia GRANT sin agregar la sentencia REVOKE no revoca el acceso.

  10. Opcional: Haz clic en Formato.

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

    1. Si otorgaste o revocaste el acceso a una tabla incremental, quita la instrucción GRANT o REVOKE del archivo después de la primera ejecución de la instrucción.

¿Qué sigue?