Usa el modo estricto de Actúa como

El modo estricto de actuar como permite una verificación de seguridad adicional para las siguientes acciones del 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 verificación de seguridad adicional requiere que el usuario que realiza estas acciones tenga el permiso iam.serviceAccounts.actAs en la cuenta de servicio vigente, 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.

El modo estricto de actuar como se aplica a todos los repositorios.

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 actuar como para la cuenta de servicio vigente

Para garantizar que tus flujos de trabajo de Dataform se ejecuten de forma segura y sin interrupciones, es importante verificar 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 vigente para tus recursos, usar 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 vigente que ejecuta los flujos de trabajo según el tipo de recurso y las siguientes condiciones:

Tipo de recurso Cuenta de servicio vigente
Repositorios

La cuenta de servicio personalizada configurada para el repositorio. Se requiere una cuenta de servicio personalizada para todos los repositorios. Esta cuenta de servicio aparece en el campo Repository.ServiceAccount.

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 cuenta de servicio del repositorio.

Invocación del flujo de trabajo

Si el resultado de la compilación es un recurso WORKFLOW_CONFIG, se usa la cuenta de servicio vigente 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 usa la cuenta de servicio que aparece en el campo WorkflowInvocation.InvocationConfig si está configurada.

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

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 con regularidad para identificar y otorgar los permisos iam.serviceAccounts.actAs faltantes. La verificación de 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 Google Cloud consola de, accede a la página Explorador de registros.

    Ir al Explorador de registros

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

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

    • Para enumerar solo las verificaciones actAs que fallaron y requieren una 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 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 de Google 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 jsonPayload:

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

false: Falló la verificación. A la principal del llamador le falta el permiso iam.serviceAccounts.actAs en la cuenta de servicio.
caller String Es la dirección de correo electrónico de la principal (usuario o cuenta de servicio) que inició la llamada a la API.
serviceAccount String Es la cuenta de servicio que la principal del llamador intentó usar. 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 llamado. 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 completamente calificados Google Cloud 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 usa 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: Presente 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 lanzamiento.
      • 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 Google Cloud proyecto.
  • 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. Este es el nombre que se le dio 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 lanzamiento de Dataform.
  • WORKFLOW_CONFIG_ID: Es el ID definido por el usuario de la configuración del flujo de trabajo de Dataform.

Resuelve problemas de permisos

Para resolver los problemas de permisos identificados en Logging, determina la causa raíz de la falla y, luego, sigue los pasos de resolución correspondientes.

Otorga permisos de actuar como faltantes

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

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

  3. Confirma que la principal del llamador debe tener permiso para actuar como la cuenta de servicio. Si otorgas este permiso, el llamador podrá usar los permisos que tiene la cuenta de servicio.

  4. Si el acceso es el previsto, otorga el rol de usuario de cuenta de servicio (roles/iam.serviceAccountUser) a la entidad del llamador en la cuenta de servicio de destino. Para obtener más información, consulta Otorga funciones de IAM necesarias.

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

Controla la conexión de cuentas de servicio entre proyectos

Si el repositorio y la cuenta de servicio vigente están en proyectos diferentes, la solicitud para actuar como la cuenta de servicio podría bloquearse con la restricción de política de la organización iam.disableCrossProjectServiceAccountUsage.

Para resolver este problema, consulta Habilita cuentas de servicio para conectarlas entre proyectos.

Otorga funciones de IAM necesarias

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

  • create o patch
    • Si se establece 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 vigentes en todas las configuraciones de 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 vigente 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 vigentes que se usan en las configuraciones de flujo de trabajo con esta configuración de lanzamiento.
  • workflowInvocations.create
    • Debes tener el rol de usuario de cuenta de servicio otorgado para la cuenta de servicio vigente 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 Google Cloud consola de, 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 Entidades con acceso y, luego, haz clic en Otorgar acceso.

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

    El ID del agente de servicio predeterminado de Dataform tiene el siguiente formato:

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

    Reemplaza PROJECT_NUMBER por el número del Google Cloud proyecto de.

  6. En la lista Selecciona 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 obligatorios para crear una configuración de flujo de trabajo y los roles obligatorios para crear una configuración de lanzamiento

Efectos del modo estricto de actuar como en los lanzamientos y las ejecuciones automáticas

El modo estricto de actuar como tiene el siguiente impacto en los lanzamientos automáticos de repositorios y las ejecuciones automáticas de flujos de trabajo.

Para los repositorios que no están conectados a repositorios de terceros, sucede lo siguiente:

  • No puedes establecer una programación de Cron para los lanzamientos automáticos en las configuraciones de lanzamiento. 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 iam.serviceAccounts.actAs necesarios en las cuentas de servicio de nivel inferior.
  • Las ejecuciones de flujo de trabajo programadas con una programación de Cron en las configuraciones de flujo de trabajo permanecen habilitadas. Para que estas ejecuciones automatizadas se realicen correctamente, debes otorgar al agente de servicio predeterminado de Dataform el iam.serviceAccounts.actAs permiso en la cuenta de servicio vigente especificada en la configuración del flujo de trabajo.

Para los repositorios que están conectados a repositorios de terceros, sucede lo siguiente:

¿Qué sigue?