El modo estricto de rol permite realizar una comprobación de seguridad adicional para las siguientes acciones de usuario en Dataform:
- Crear o actualizar un repositorio
- Crear o actualizar una configuración de flujo de trabajo
- Crear una invocación de flujo de trabajo
- Actualizar una configuración de lanzamiento
Esta comprobación de seguridad adicional requiere que el usuario que realice estas acciones tenga el permiso iam.serviceAccounts.actAs en la cuenta de servicio efectiva, que es la cuenta de servicio cuyas credenciales se usan para ejecutar flujos de trabajo.
Para obtener más información, consulta el artículo Asociar cuentas de servicio a recursos.
Puede habilitar estos permisos de las siguientes formas:
- Cuando crees un repositorio
- Al actualizar un repositorio con la marca
strict_act_as_checksrepository
Roles obligatorios
Para obtener los permisos que necesitas para completar las tareas de este documento, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:
-
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser) en la cuenta de servicio personalizada -
Para ver los registros en Logging, haz lo siguiente:
Visualizador de registros (
roles/logging.viewer) en el proyecto -
Concede roles de IAM a usuarios o cuentas de servicio:
Administrador de cuentas de servicio (
roles/iam.serviceAccountAdmin) en el proyecto
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Verificar los permisos de suplantación de identidad de la cuenta de servicio efectiva
Para que tus flujos de trabajo de Dataform se ejecuten de forma segura y sin interrupciones, es importante que verifiques los permisos de actuar como en las cuentas de servicio que usan. En esta sección se explica cómo identificar la cuenta de servicio efectiva de tus recursos, usar Cloud Logging para comprobar si hay problemas de permisos y, a continuación, resolver los problemas que encuentres.
Determinar la cuenta de servicio efectiva
Puedes determinar la cuenta de servicio efectiva que ejecuta los flujos de trabajo según el tipo de recurso y las siguientes condiciones:
| Tipo de recurso | Cuenta de servicio efectiva |
|---|---|
| Repositorios | Si seleccionas una cuenta de servicio personalizada al crear el repositorio, se usará la cuenta de servicio De lo contrario, se usará de forma predeterminada el agente de servicio de Dataform. |
| Configuración del flujo de trabajo | Puedes seleccionar una cuenta de servicio personalizada cuando crees la configuración del flujo de trabajo. De lo contrario, se usará de forma predeterminada el agente de servicio de Dataform del repositorio. |
| Invocación de flujos de trabajo | Si el resultado de la compilación es Si creas una invocación de flujo de trabajo a partir de un resultado de compilación, se usará la cuenta de servicio De lo contrario, se usará de forma predeterminada el agente de servicio de Dataform del repositorio. |
Comprobar si hay problemas de permisos en Cloud Logging
Para mejorar la seguridad, Dataform comprueba si falta el permiso iam.serviceAccounts.actAs en las cuentas de servicio que usan los recursos de Dataform.
Los resultados de estas comprobaciones, incluidos los posibles problemas de permisos, se registran en Cloud Logging. Deberías revisar estos registros periódicamente para identificar y conceder los permisos iam.serviceAccounts.actAs que falten. Si compruebas estos registros, te aseguras de que tus flujos de trabajo y configuraciones de Dataform sigan funcionando sin interrupciones.
Ver los registros en Cloud Logging
En la Google Cloud consola, ve a la página Explorador de registros.
Selecciona el Google Cloud proyecto en el que quieras consultar los registros.
Usa el editor de consultas para filtrar los registros de Dataform
actAscon las siguientes opciones:Para mostrar solo las comprobaciones de
actAsque han fallado y requieren alguna acción, usa la siguiente consulta:logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result" jsonPayload.dryRunResult = falsePara obtener una lista con todas las comprobaciones de
actAs, usa la siguiente consulta:logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
Sustituye
PROJECT_IDpor elGoogle Cloud ID de tu proyecto.Haz clic en Realizar una consulta.
Interpretar entradas de registro
Despliega una entrada de registro en los resultados de la consulta para ver los siguientes campos jsonPayload:
| Campo | Tipo | Descripción |
|---|---|---|
dryRunResult |
Booleano | true: la comprobación de permisos se ha superado.false: la comprobación no se ha superado. El principal que llama no tiene el permiso iam.serviceAccounts.actAs en la cuenta de servicio. |
caller |
Cadena | La dirección de correo del principal (usuario o cuenta de servicio) que ha iniciado la llamada a la API. |
serviceAccount |
Cadena | La cuenta de servicio que el principal de la llamada ha intentado usar. Este campo suele estar presente cuando el campo dryRunResult es false. |
apiMethod |
Cadena | El método de la API Dataform que ha activado la comprobación. Por ejemplo, CreateWorkflowInvocation o UpdateRepository. |
*_context |
Objeto | Objeto que contiene los nombres de los recursos relevantes para el método de la API al que se ha llamado. Para obtener más información, consulta Objetos de contexto. |
Objetos de contexto
La entrada de registro incluye un objeto de contexto en los campos jsonPayload. Los campos de este objeto contienen los nombres de recursos Google Cloud completos de las entidades de Dataform implicadas. Estos nombres siguen las estructuras estándar que se muestran en la siguiente lista, lo que le permite identificar los recursos con precisión.
create_workflow_invocation_context: presente cuando el método de la API esCreateWorkflowInvocation.workflowInvocation: nombre del recurso de la invocación del flujo de trabajo.- El formato del nombre del recurso es el siguiente:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowInvocations/WORKFLOW_INVOCATION_ID.
- El formato del nombre del recurso es el siguiente:
compilationResultoworkflowConfig: el nombre de recurso de la fuente usada en la invocación.- El formato del nombre de recurso de
compilationResultes el siguiente:projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/compilationResults/COMPILATION_RESULT_ID. - El formato del nombre de recurso de
workflowConfiges el siguiente:projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
- El formato del nombre de recurso de
create_repository_contextoupdate_repository_context: se incluye cuando el método de la API esCreateRepositoryoUpdateRepository.repository: el nombre del recurso del repositorio de Dataform.- El formato del nombre del recurso es el siguiente:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID
- El formato del nombre del recurso es el siguiente:
update_release_config_context: presente cuando el método de la API esUpdateReleaseConfig.releaseConfig: el nombre del recurso de la configuración de lanzamiento.- El formato del nombre del recurso es el siguiente:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/releaseConfigs/RELEASE_CONFIG_ID.
- El formato del nombre del recurso es el siguiente:
create_workflow_config_contextoupdate_workflow_config_context: presente cuando el método de la API seaCreateWorkflowConfigoUpdateWorkflowConfig.workflowConfig: el nombre del recurso de la configuración del flujo de trabajo.- El formato del nombre del recurso es el siguiente:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
- El formato del nombre del recurso es el siguiente:
Para comparar los formatos documentados con la entrada de registro, sustituye lo siguiente:
PROJECT_ID: el identificador único de tu Google Cloud proyecto.LOCATION_ID: la región en la que se encuentra tu repositorio de Dataform.REPOSITORY_ID: ID definido por el usuario del repositorio de Dataform. Es el nombre que se le asignó al repositorio cuando se creó.COMPILATION_RESULT_ID: identificador único generado por el sistema para un resultado de compilación de Dataform.RELEASE_CONFIG_ID: ID definido por el usuario de la configuración de lanzamiento de Dataform.WORKFLOW_CONFIG_ID: ID definido por el usuario de la configuración del flujo de trabajo de Dataform.
Resolver problemas de permisos
Si encuentras entradas de registro en las que el campo dryRunResult es false, haz lo siguiente:
En los detalles de
jsonPayload, anota la dirección de correo del campocallerpara identificar la cuenta principal.Anota la dirección de correo del campo
serviceAccountpara identificar la cuenta de servicio.Confirma que la entidad de seguridad que llama debe tener permiso para actuar como la cuenta de servicio. Si se concede este permiso, el llamante podrá usar los permisos que tenga la cuenta de servicio.
Si el acceso es intencionado, asigna el rol Usuario de cuenta de servicio (
roles/iam.serviceAccountUser) a la entidad de llamada en la cuenta de servicio de destino. Para obtener más información, consulta Conceder el rol de gestión de identidades y accesos Usuario de cuenta de servicio.
Después de conceder el rol, los registros futuros de esta combinación de llamador y cuenta de servicio deberían mostrar dryRunResult: true.
Asignar el rol de IAM Usuario de cuenta de servicio
El rol Usuario de cuenta de servicio
(roles/iam.serviceAccountUser) contiene el permiso iam.serviceAccounts.actAs, que es necesario para el modo Actúa como estricto. Cuando usas la API de Dataform, debes tener asignado el rol Usuario de cuenta de servicio a la cuenta de servicio efectiva en función del método projects.locations.repositories al que llames:
createopatch- Si se define la propiedad
Repository.ServiceAccount, debes tener el rol Usuario de cuenta de servicio asignado a esa propiedad. - Si llamas al método
patch, debes tener el rol de usuario de cuenta de servicio concedido a todas las cuentas de servicio efectivas en todas las configuraciones de flujo de trabajo del repositorio.
- Si se define la propiedad
workflowConfigs.createoworkflowConfigs.patch- Debes tener asignado el rol Usuario de cuenta de servicio a la cuenta de servicio efectiva que se usa en la configuración del flujo de trabajo.
releaseConfigs.patch- Debes tener asignado el rol Usuario de cuenta de servicio a todas las cuentas de servicio efectivas que se usen en las configuraciones de flujo de trabajo que utilicen esta configuración de lanzamiento.
workflowInvocations.create- Debes tener el rol Usuario de cuenta de servicio asignado a la cuenta de servicio efectiva que se usa en la invocación del flujo de trabajo.
Para asignar el rol Usuario de cuenta de servicio a una cuenta de servicio personalizada, sigue estos pasos:
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 predeterminado de Dataform.
El 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 Usuario de cuenta de servicio.
Haz clic en Guardar.
Para obtener más información, consulta los roles necesarios para crear una configuración de flujo de trabajo y los roles necesarios para crear una configuración de lanzamiento.
Efectos del modo de rol estricto en las versiones y ejecuciones automáticas
Cuando el modo de rol estricto está habilitado, afecta a las versiones automáticas de repositorios y a las ejecuciones automáticas de flujos de trabajo de la siguiente manera:
En el caso de los repositorios que no estén conectados a repositorios de terceros, sigue estos pasos:
- No puedes definir una programación Cron para las versiones automáticas en las configuraciones de lanzamiento. Esto se aplica para evitar que se desplieguen automáticamente los cambios de código realizados por un usuario que no tenga los permisos
iam.serviceAccounts.actAsnecesarios en las cuentas de servicio posteriores. - Las ejecuciones de flujos de trabajo programadas mediante una programación cron en las configuraciones de flujos de trabajo seguirán habilitadas. Para que estas ejecuciones automatizadas se realicen correctamente, debes conceder al agente de servicio predeterminado de Dataform el permiso
iam.serviceAccounts.actAsen la cuenta de servicio efectiva especificada en la configuración del flujo de trabajo.
En el caso de los repositorios que estén conectados a repositorios de terceros, sigue estos pasos:
- Se permiten los lanzamientos y las ejecuciones de flujos de trabajo programados.
- Para habilitar una versión automática a partir de una configuración de versión o una ejecución automática a partir de una configuración de flujo de trabajo, debes conceder al agente de servicio predeterminado de Dataform el permiso
iam.serviceAccounts.actAsen la cuenta de servicio efectiva correspondiente:- En el caso de una configuración de lanzamiento automática, concede el permiso en las cuentas de servicio efectivas de todas las configuraciones de flujo de trabajo que se activen con esta configuración de lanzamiento.
- Para configurar un flujo de trabajo automático, concede el permiso a la cuenta de servicio efectiva que utilice esa configuración.
Siguientes pasos
- Para saber cómo crear un repositorio, consulta Crear un repositorio.
- Para obtener más información sobre cómo funciona Dataform con BigQuery, consulta el resumen de los flujos de trabajo.
- Para saber cómo crear una configuración de flujo de trabajo, consulta Programar ejecuciones.
- Para saber cómo crear una configuración de lanzamiento, consulta Configurar compilaciones.