Usa el modo estricto de Actúa como

El modo estricto de act-as habilita una verificación de seguridad adicional para las siguientes acciones del usuario en Dataform:

  • Crea o actualiza un repositorio.
  • Crear o actualizar una configuración de flujo de trabajo
  • Crea una invocación de flujo de trabajo.
  • Se actualiza una configuración de versión.

Esta verificación de seguridad adicional requiere que el usuario que realiza 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 Conecta cuentas de servicio a recursos.

Para habilitar el modo de actuación, haz lo siguiente:

  • Cuando creas un repositorio
  • Cuando se actualiza un repositorio existente con la marca strict_act_as_checks

Roles obligatorios

Para obtener los permisos que necesitas para completar las tareas de este documento, pídele a tu administrador que te otorgue los siguientes roles de IAM:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Verifica los permisos de suplantación de la cuenta de servicio efectiva

Para garantizar que tus flujos de trabajo de Dataform se ejecuten de forma segura y sin interrupciones, es importante verificar los permisos de suplantación de las cuentas de servicio que utilizan. En esta sección, se explica cómo identificar la cuenta de servicio efectiva para tus recursos, usar Cloud Logging para verificar si hay problemas de permisos y, luego, resolver los problemas que encuentres.

Determina la cuenta de servicio vigente

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 vigente
Repositorios

En el caso de los repositorios nuevos, se usa la cuenta de servicio personalizada que seleccionas cuando creas un repositorio. Esta cuenta de servicio aparece en el campo Repository.ServiceAccount.

En el caso de los repositorios existentes, puede ser una cuenta de servicio personalizada (recomendada) o el agente de servicio de Dataform.

Configuración del flujo de trabajo

Para las configuraciones de flujo de trabajo nuevas, se usa la cuenta de servicio personalizada que seleccionas cuando creas una configuración de flujo de trabajo. Si no se selecciona una cuenta de servicio, se usa la del repositorio.

Para las configuraciones de flujo de trabajo existentes, puede ser una cuenta de servicio personalizada (recomendada) o el agente de servicio de Dataform del repositorio.

Invocación de flujo de trabajo

Si el resultado de la compilación es un recurso WORKFLOW_CONFIG, se usa la cuenta de servicio efectiva de la configuración del flujo de trabajo.

Si creas una invocación de flujo de trabajo a partir de un resultado de compilación, se usará la cuenta de servicio que aparece en el campo WorkflowInvocation.InvocationConfig si está configurada.

De lo contrario, se usará de forma predeterminada la cuenta de servicio configurada a nivel del repositorio.

Debes usar una cuenta de servicio personalizada o las credenciales de usuario de tu Cuenta de Google.

Verifica si hay problemas de permisos en Cloud Logging

Para mejorar la seguridad, Dataform verifica si falta el permiso iam.serviceAccounts.actAs en las cuentas de servicio que usan los recursos de Dataform.

Los resultados de estas verificaciones, incluidos los posibles problemas de permisos, se registran en Cloud Logging. Debes revisar estos registros periódicamente para identificar y otorgar los permisos de iam.serviceAccounts.actAs que falten. Revisar estos registros garantiza que tus flujos de trabajo y configuraciones de Dataform sigan funcionando sin interrupciones.

Observa los registros en Cloud Logging

  1. En la consola de Google Cloud , accede a la página Explorador de registros.

    Ir al Explorador de registros

  2. Selecciona el proyecto Google Cloud en el que deseas verificar los registros.

  3. Usa el editor de consultas para filtrar los registros de actAs de Dataform con las siguientes opciones:

    • Para enumerar solo las verificaciones de actAs que fallaron y requieren acción, usa la siguiente consulta:

      logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
      jsonPayload.dryRunResult = false
      
    • Para enumerar todas las verificaciones de actAs, usa la siguiente consulta:

      logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
      

    Reemplaza PROJECT_ID por el ID del proyecto deGoogle Cloud .

  4. Haz clic en Ejecutar consulta.

Interpreta las entradas de registro

Expande una entrada de registro en los resultados de la consulta para ver los siguientes campos de jsonPayload:

Campo Tipo Descripción
dryRunResult Booleano true: Se aprobó la verificación de permisos.

false: Falló la verificación. A la principal que llama le falta el permiso iam.serviceAccounts.actAs en la cuenta de servicio.
caller String Es la dirección de correo electrónico del principal (usuario o cuenta de servicio) que inició la llamada a la API.
serviceAccount String Es la cuenta de servicio que la principal de la llamada intentó suplantar. Por lo general, este campo está presente cuando el campo dryRunResult es false.
apiMethod String Es el método de la API de Dataform que activó la verificación, por ejemplo, CreateWorkflowInvocation o UpdateRepository.
*_context Objeto Es un objeto que contiene nombres de recursos relevantes para el método de la API al que se llamó. Para obtener más información, consulta Objetos de contexto.
Objetos de contexto

La entrada de registro incluye un objeto de contexto dentro de los campos jsonPayload. Los campos de este objeto contienen los nombres de recursos Google Cloud completamente calificados de las entidades de Dataform involucradas. Estos nombres siguen las estructuras estándar que se muestran en la siguiente lista, lo que te permite identificar los recursos con precisión.

  • create_workflow_invocation_context: Presente cuando el método de la API es CreateWorkflowInvocation.

    • workflowInvocation: Es el 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.
    • compilationResult o workflowConfig: Es el nombre del recurso de la fuente que se usó para la invocación.
      • El formato del nombre del recurso para compilationResult es el siguiente: projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/compilationResults/COMPILATION_RESULT_ID.
      • El formato del nombre del recurso para workflowConfig es el siguiente: projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
  • create_repository_context o update_repository_context: Presentes cuando el método de la API es CreateRepository o UpdateRepository.

    • repository: Es 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
  • update_release_config_context: Presente cuando el método de la API es UpdateReleaseConfig.

    • releaseConfig: Es el nombre del recurso de la configuración de la versión.
      • El formato del nombre del recurso es el siguiente: projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/releaseConfigs/RELEASE_CONFIG_ID.
  • create_workflow_config_context o update_workflow_config_context: Presente cuando el método de la API es CreateWorkflowConfig o UpdateWorkflowConfig.

    • workflowConfig: Es 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.

Para comparar los formatos documentados con la entrada de registro, reemplaza lo siguiente:

  • PROJECT_ID: Es el identificador único de tu proyecto deGoogle Cloud .
  • LOCATION_ID: Es la región en la que se encuentra tu repositorio de Dataform.
  • REPOSITORY_ID: Es el ID definido por el usuario del repositorio de Dataform. Es el nombre que se le asignó al repositorio cuando se creó.
  • COMPILATION_RESULT_ID: Es el identificador único generado por el sistema para un resultado de compilación de Dataform.
  • RELEASE_CONFIG_ID: Es el ID definido por el usuario de la configuración de versión de Dataform.
  • WORKFLOW_CONFIG_ID: Es el ID definido por el usuario de la configuración del flujo de trabajo de Dataform.

Cómo resolver problemas de permisos

Si encuentras entradas de registro en las que el campo dryRunResult es false, haz lo siguiente:

  1. En los detalles de jsonPayload, anota la dirección de correo electrónico en el campo caller para identificar al principal.

  2. Toma nota de la dirección de correo electrónico en el campo serviceAccount para identificar la cuenta de servicio.

  3. Confirma que la principal de la persona que llama debe tener permiso para actuar como la cuenta de servicio. Otorgar este permiso permite que la persona que llama use los permisos que tiene la cuenta de servicio.

  4. Si el acceso es intencional, otorga el rol de usuario de cuenta de servicio (roles/iam.serviceAccountUser) a la principal que llama en la cuenta de servicio objetivo. Para obtener más información, consulta Otorga los roles de IAM necesarios.

Después de otorgar el rol, los registros futuros para esta combinación de llamador y cuenta de servicio deberían mostrar dryRunResult: true.

Otorga los roles de IAM necesarios

El rol de usuario de cuenta de servicio (roles/iam.serviceAccountUser) contiene el permiso iam.serviceAccounts.actAs, que se requiere para el modo de suplantación estricto. Cuando usas la API de Dataform, debes tener el rol de usuario de cuenta de servicio otorgado para la cuenta de servicio efectiva según el método projects.locations.repositories al que llamas:

  • create o patch
    • Si se configura la propiedad Repository.ServiceAccount, debes tener el rol de usuario de cuenta de servicio otorgado para esa propiedad.
    • Si llamas al método patch, debes tener el rol de usuario de cuenta de servicio otorgado para todas las cuentas de servicio efectivas en todas las configuraciones del flujo de trabajo del repositorio.
  • workflowConfigs.create o workflowConfigs.patch
    • Debes tener el rol de usuario de cuenta de servicio otorgado para la cuenta de servicio efectiva que se usa en la configuración del flujo de trabajo.
  • releaseConfigs.patch
    • Debes tener el rol de usuario de cuenta de servicio otorgado para todas las cuentas de servicio efectivas que se usen en las configuraciones del flujo de trabajo con esta configuración de versión.
  • workflowInvocations.create
    • Debes tener el rol de usuario de cuenta de servicio otorgado para la cuenta de servicio efectiva que se usa en la invocación del flujo de trabajo.

Para otorgar el rol de Usuario de cuenta de servicio 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 para el proyecto "PROJECT_NAME", selecciona tu cuenta de servicio personalizada.

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

  5. En el campo Principales nuevas, ingresa el ID de tu agente de servicio predeterminado de Dataform.

    Tu ID de agente de servicio de Dataform predeterminado tiene el siguiente formato:

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

    Reemplaza PROJECT_NUMBER por el número de proyecto deGoogle Cloud .

  6. En la lista Seleccionar un rol, selecciona el rol Usuario de cuenta de servicio.

  7. Haz clic en Agregar otro rol y selecciona el rol Creador de tokens de cuenta de servicio.

  8. 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 versión.

Efectos del modo estricto de act-as en las versiones y ejecuciones automáticas

Cuando se habilita el modo de actuación estricta, se ven afectadas las versiones automáticas del repositorio y las ejecuciones automáticas del flujo de trabajo de la siguiente manera:

En el caso de los repositorios que no están conectados a repositorios de terceros, haz lo siguiente:

  • No puedes establecer un programa de Cron para las versiones automáticas en las configuraciones de versiones. Esto se aplica para evitar que se implementen automáticamente los cambios de código realizados por un usuario que podría no tener los permisos de iam.serviceAccounts.actAs necesarios en las cuentas de servicio de nivel inferior.
  • Las ejecuciones de flujos de trabajo programadas con un programa Cron en la configuración del flujo de trabajo permanecen habilitadas. Para que estas ejecuciones automatizadas se realicen correctamente, debes otorgar al agente de servicio predeterminado de Dataform el permiso iam.serviceAccounts.actAs en 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, haz lo siguiente:

  • Se permiten los lanzamientos y las ejecuciones de flujos de trabajo programados.
  • Para habilitar una versión automática desde un parámetro de configuración de lanzamiento o una ejecución automática desde un parámetro de configuración de flujo de trabajo, debes otorgar al agente de servicio predeterminado de Dataform el permiso iam.serviceAccounts.actAs en la cuenta de servicio efectiva pertinente:
    • Para una configuración de lanzamiento automática, otorga el permiso en las cuentas de servicio efectivas de todas las configuraciones de flujo de trabajo que se activan con esta configuración de lanzamiento.
    • Para una configuración de flujo de trabajo automática, otorga el permiso en la cuenta de servicio efectiva que usa esa configuración de flujo de trabajo.

¿Qué sigue?