En este documento se explica cómo hacer lo siguiente en Dataform:
- Concede el acceso necesario a Dataform.
- Controlar el acceso a Dataform con la gestión de identidades y accesos.
- Controlar el acceso a tablas concretas con la gestión de identidades y accesos.
Antes de empezar
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and Dataform APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and Dataform APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - A nivel de repositorio, para ejecutar todos los flujos de trabajo de un repositorio determinado.
- De forma individual para cada configuración de flujo de trabajo.
- Editor de datos de BigQuery en los proyectos a los que Dataform necesita acceso de lectura y escritura. Por lo general, se trata del proyecto que aloja tu repositorio de Dataform.
- Lector de datos de BigQuery en los proyectos a los que Dataform necesita acceso de solo lectura.
- Usuario de tareas de BigQuery en el proyecto que aloja tu repositorio de Dataform.
- Propietario de datos de BigQuery si quieres consultar conjuntos de datos de BigQuery.
- Roles de BigQuery para el control de acceso a nivel de columna si quieres usar etiquetas de política de BigQuery.
- Usuario de cuenta de servicio
(
roles/iam.serviceAccountUser) - Creador de tokens de cuenta de servicio
(
roles/iam.serviceAccountTokenCreator) Cualquier agente de servicio o cuenta de servicio que tenga 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. Las solicitudes procedentes de Dataform que usan un agente de servicio con los roles necesarios están dentro del perímetro de Controles de Servicio de VPC del proyecto al que pertenece el repositorio de Dataform.
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 el agente de servicio predeterminado de Dataform y todos los permisos concedidos a ese agente de servicio o cuenta de servicio.Para obtener más información, consulta Consideraciones de seguridad sobre los permisos de Dataform.
- 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 un agente de servicio de {dataform_name_short} o con una cuenta de servicio personalizada.
- 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 credenciales de usuario de una cuenta de Google y apuntar a una configuración de lanzamiento con una programación.
En la Google Cloud consola, ve a la página Dataform.
Seleccione o cree un repositorio.
En la consola, ve a la página Gestión de identidades y accesos. Google Cloud
Haz clic en Conceder acceso.
En el campo Principales nuevos, introduce el ID del agente de servicio, el ID de la cuenta de servicio o el correo de la cuenta de Google del usuario (Vista previa).
En la lista Selecciona un rol, elige el rol Usuario de tareas de BigQuery.
Haz clic en Añadir otro rol y, en la lista Seleccionar un rol, selecciona el rol Editor de datos de BigQuery.
Haz clic en Añadir otro rol y, en la lista Seleccionar un rol, selecciona el rol Lector de datos de BigQuery.
Haz clic en Guardar.
En la Google Cloud consola, ve a IAM > Cuentas de servicio.
Selecciona un proyecto.
En la página Cuentas de servicio del proyecto "PROJECT_NAME", selecciona tu cuenta de servicio personalizada.
Ve a Principales con acceso y, a continuación, haz clic en Dar acceso.
En el campo Nuevos principales, introduce el ID de agente de servicio de Dataform predeterminado.
Tu ID de agente de servicio de Dataform predeterminado tiene el siguiente formato:
service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.comEn la lista Seleccionar un rol, selecciona el rol Creador de tokens de cuenta de servicio y el rol Usuario de cuenta de servicio.
Haz clic en Guardar.
Usa Inventario de recursos de Cloud para enumerar todos los recursos de tipo
dataform.Repository. Para obtener más información, consulta Ver tus recursos.En cada repositorio de la salida de Cloud Asset Inventory, compruebe el campo
resource.data.labelspara determinar si está incluido en el ámbito. La ruta exacta puede variar ligeramente en función del formato de exportación.Identifica los repositorios que están fuera del ámbito inspeccionando el mapa de etiquetas de la clave
single-file-asset-type. La presencia de esta clave indica que el repositorio se usa en una función de BigQuery. Si el valor essqlodata_canvas, el repositorio se puede excluir de las comprobaciones de permisos de la cuenta de servicio.Los repositorios restantes que no tienen esta clave o estos valores están en el ámbito de las comprobaciones de permisos de la cuenta de servicio.
En cada repositorio incluido en el ámbito, comprueba el campo
resource.data.serviceAccounten el resultado de Cloud Asset Inventory para determinar si se ha configurado una cuenta de servicio personalizada:- Si el campo
resource.data.serviceAccountestá presente y su valor es diferente de la dirección de correo del agente de servicio de Dataform predeterminado del proyecto, el repositorio usa una cuenta de servicio personalizada. Si el campo
resource.data.serviceAccountno está presente o si el valor del campo coincide con el agente de servicio de Dataform predeterminado del proyecto, el repositorio usará el agente de servicio predeterminado.
- Si el campo
Si se usa una cuenta de servicio personalizada, comprueba que el agente de servicio predeterminado de Dataform tenga los roles Usuario de cuenta de servicio (
roles/iam.serviceAccountUser) y Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) en esa cuenta de servicio personalizada.Usa Inventario de Recursos de Cloud para enumerar todos los recursos del
dataform.WorkflowConfigtipo.En cada configuración de flujo de trabajo, examine el resultado de Cloud Asset Inventory para determinar la cuenta de servicio efectiva:
- Si el campo
resource.data.serviceAccountestá presente, este valor es la dirección de correo de la cuenta de servicio definida explícitamente en la configuración del flujo de trabajo. - Si falta el campo
resource.data.serviceAccount, la configuración del flujo de trabajo hereda la cuenta de servicio de su repositorio principal. Consulta la configuración del repositorio principal para encontrar la cuenta de servicio efectiva.
- Si el campo
Para identificar si se está usando una cuenta de servicio personalizada, compara la dirección de correo de la cuenta de servicio efectiva con la dirección de correo del agente de servicio de Dataform predeterminado del proyecto. Si son diferentes, se está usando una cuenta de servicio personalizada.
Si se usa una cuenta de servicio personalizada, asegúrate de que el agente de servicio predeterminado de Dataform tenga asignados los roles Usuario de cuenta de servicio (
roles/iam.serviceAccountUser) y Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) en esa cuenta de servicio personalizada. Estos permisos permiten que el agente de servicio de Dataform predeterminado inicie ejecuciones de flujos de trabajo suplantando la cuenta de servicio personalizada.dataform.commentThreads.createdataform.commentThreads.deletedataform.commentThreads.getdataform.commentThreads.listdataform.commentThreads.updatedataform.comments.createdataform.comments.deletedataform.comments.getdataform.comments.listdataform.comments.updatedataform.compilationResults. create dataform.compilationResults. get dataform.compilationResults. list dataform.compilationResults. query dataform.config.getdataform.config.updatedataform.folders.addContentsdataform.folders.createdataform.folders.deletedataform.folders.deleteTreedataform.folders.getdataform.folders.getIamPolicydataform.folders.movedataform.folders.queryContentsdataform.folders.setIamPolicydataform.folders.updatedataform.locations.getdataform.locations.listdataform.operations.canceldataform.operations.deletedataform.operations.getdataform.operations.listdataform.releaseConfigs.createdataform.releaseConfigs.deletedataform.releaseConfigs.getdataform.releaseConfigs.listdataform.releaseConfigs.updatedataform.repositories.commitdataform.repositories. computeAccessTokenStatus dataform.repositories.createdataform.repositories.deletedataform.repositories. fetchHistory dataform.repositories. fetchRemoteBranches dataform.repositories.getdataform.repositories. getIamPolicy dataform.repositories.listdataform.repositories.movedataform.repositories. queryDirectoryContents dataform.repositories.readFiledataform.repositories. scheduleRelease dataform.repositories. scheduleWorkflow dataform.repositories. setIamPolicy dataform.repositories.updatedataform.teamFolders.createdataform.teamFolders.deletedataform.teamFolders. deleteTree dataform.teamFolders.getdataform.teamFolders. getIamPolicy dataform.teamFolders. setIamPolicy dataform.teamFolders.updatedataform.workflowConfigs. create
Conceder a Dataform el acceso necesario
En esta sección se explica cómo asignar los roles de gestión de identidades y accesos (IAM) que necesitan los agentes de servicio de Dataform y las cuentas de servicio personalizadas para ejecutar flujos de trabajo en BigQuery.
Información sobre las cuentas de servicio personalizadas y los agentes de servicio de Dataform
Puedes configurar cuentas de servicio personalizadas para que ejecuten flujos de trabajo en tu nombre de las siguientes formas:
Cuando creas un repositorio o una configuración de flujo de trabajo de Dataform, puedes seleccionar cualquier cuenta de servicio para la que tengas permisos de actuar como. Debes configurar los permisos necesarios para todas las cuentas de servicio asociadas a tus recursos de Dataform.
Cuando creas tu primer repositorio de Dataform, Dataform genera automáticamente un agente de servicio predeterminado. Dataform usa el agente de servicio predeterminado para interactuar con BigQuery en tu nombre.
Tu ID de agente de servicio de Dataform predeterminado 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.
Roles necesarios para los agentes de servicio de Dataform, las cuentas de servicio personalizadas y las cuentas de Google
Los agentes de servicio de Dataform predeterminados, las cuentas de servicio personalizadas y las credenciales de usuario de la cuenta de Google (vista previa) 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, asigna los siguientes roles al agente de servicio predeterminado de Dataform en la cuenta de servicio efectiva de la configuración del flujo de trabajo:
Para las versiones automáticas de repositorios y las ejecuciones automáticas de flujos de trabajo, concede al agente de servicio predeterminado de Dataform el permiso iam.serviceAccounts.actAs en la cuenta de servicio efectiva.
Cuestiones sobre seguridad
Si asignas los roles que necesita Dataform a un agente de servicio de Dataform, a una cuenta de servicio personalizada o a una cuenta de Google de un usuario (vista previa), debes tener en cuenta los siguientes aspectos de seguridad:
Para restringir los datos que un usuario, un agente de servicio 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:
Conceder los roles de BigQuery necesarios
Para asignar los roles de gestión de identidades y accesos de BigQuery necesarios a tu agente de servicio de Dataform predeterminado, a una cuenta de servicio personalizada que quieras usar en Dataform o a una cuenta de Google de un usuario que quieras usar para autenticarte en Dataform (vista previa), sigue estos pasos:
Conceder los roles necesarios para los flujos de trabajo automáticos
Para usar una cuenta de servicio personalizada en Dataform, el agente de servicio de Dataform predeterminado debe poder acceder a la cuenta de servicio personalizada. De esta forma, Dataform puede ejecutar tus flujos de trabajo con los permisos definidos en tu cuenta de servicio personalizada en lugar de en la cuenta del agente de servicio predeterminado.
Para conceder este acceso, debes asignar el rol Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) al agente de servicio predeterminado de Dataform como principal. De esta forma, el agente de servicio predeterminado de Dataform puede suplantar la identidad de la cuenta de servicio creando credenciales de corta duración, conocidas como tokens. Dataform necesita estos tokens para ejecutar flujos de trabajo con la identidad de la cuenta de servicio personalizada.
También debes asignar el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser) al agente de servicio predeterminado de Dataform. De esta forma, el agente de servicio de Dataform predeterminado puede iniciar nuevas ejecuciones de flujo de trabajo automáticas para las configuraciones de flujo de trabajo que ejecute la cuenta de servicio personalizada.
Para conceder acceso al agente de servicio predeterminado de Dataform a una cuenta de servicio personalizada, sigue estos pasos:
La cuenta de servicio personalizada ya se puede configurar en tu repositorio de Dataform.
Auditar las configuraciones de cuentas de servicio
En esta sección se explica cómo auditar los recursos de Dataform para asegurarse de que se usan correctamente las cuentas de servicio y los permisos. La auditoría es especialmente importante cuando se usan cuentas de servicio personalizadas, ya que requieren permisos específicos para que el agente de servicio de Dataform predeterminado funcione.
Cuando uses una cuenta de servicio personalizada para un repositorio o una configuración de flujo de trabajo de Dataform, debes verificar que el agente de servicio de Dataform predeterminado tenga el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser) en la cuenta de servicio personalizada. Este rol concede el permiso iam.serviceAccounts.actAs, que permite que las ejecuciones programadas iniciadas por el agente de servicio de Dataform predeterminado suplanten la identidad de la cuenta de servicio personalizada. Además, comprueba que el agente de servicio predeterminado de Dataform tenga el rol Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) en la cuenta de servicio efectiva.
Verificar cuentas de servicio de repositorios
Primero, identifique los recursos de dataform.Repository que se incluyen en la programación y la ejecución de Dataform. A continuación, verifica las configuraciones de la cuenta de servicio de esos repositorios incluidos en el ámbito.
Verificar las cuentas de servicio de configuración de flujos de trabajo
Usar cuentas de servicio personalizadas específicas para las configuraciones de flujo de trabajo de Dataform es una práctica recomendada de seguridad que se ajusta al principio de mínimos accesos.
Para verificar el uso de la cuenta de servicio de dataform.WorkflowConfig resources, haz lo siguiente:
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 gestión de identidades y accesos, consulta el índice de roles y permisos de gestión de identidades y accesos.
Roles predefinidos de Dataform
En la siguiente tabla se indican los roles predefinidos que te dan acceso a los recursos de Dataform:
| Role | Permissions |
|---|---|
Dataform Admin( Full access to all Dataform resources. |
|