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:
- Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser) en la cuenta de servicio personalizada -
Ver registros en Cloud Logging:
Visor de registros (
roles/logging.viewer) en el proyecto -
Otorga 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 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 |
| 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 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 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
En la Google Cloud consola de, accede a la página Explorador de registros.
Selecciona el Google Cloud proyecto en el que deseas verificar los registros.
Usa el editor de consultas para filtrar los registros
actAsde Dataform con las siguientes opciones:Para enumerar solo las verificaciones
actAsque fallaron y requieren una acción, usa la siguiente consulta:logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result" jsonPayload.dryRunResult = falsePara enumerar todas las verificaciones
actAs, usa la siguiente consulta:logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
Reemplaza
PROJECT_IDpor el ID del proyecto de Google Cloud .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 esCreateWorkflowInvocation.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.
- El formato del nombre del recurso es el siguiente:
compilationResultoworkflowConfig: Es el nombre del recurso de la fuente que se usa para la invocación.- El formato del nombre del recurso para
compilationResultes el siguiente:projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/compilationResults/COMPILATION_RESULT_ID. - El formato del nombre del recurso para
workflowConfiges el siguiente:projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
- El formato del nombre del recurso para
create_repository_contextoupdate_repository_context: Presente cuando el método de la API esCreateRepositoryoUpdateRepository.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
- El formato del nombre del recurso es el siguiente:
update_release_config_context: Presente cuando el método de la API esUpdateReleaseConfig.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.
- El formato del nombre del recurso es el siguiente:
create_workflow_config_contextoupdate_workflow_config_context: Presente cuando el método de la API esCreateWorkflowConfigoUpdateWorkflowConfig.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.
- El formato del nombre del recurso es el siguiente:
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:
En los detalles de
jsonPayload, anota la dirección de correo electrónico en el campocallerpara identificar la principal.Anota la dirección de correo electrónico en el campo
serviceAccountpara identificar la cuenta de servicio.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.
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:
createopatch- 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.
- Si se establece la propiedad
workflowConfigs.createoworkflowConfigs.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:
En la Google Cloud consola de, ve a IAM > Cuentas de servicio.
Selecciona un proyecto.
En la página Cuentas de servicio para el proyecto "PROJECT_NAME", selecciona tu cuenta de servicio personalizada.
Ve a Entidades con acceso y, luego, haz clic en Otorgar acceso.
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.comReemplaza
PROJECT_NUMBERpor el número del Google Cloud proyecto de.En la lista Selecciona un rol, selecciona el rol Usuario de cuenta de servicio.
Haz clic en Agregar otro rol y selecciona el rol Creador de tokens de cuenta de servicio.
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.actAsnecesarios 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.actAspermiso 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:
- Se permiten los lanzamientos programados y las ejecuciones de flujo de trabajo programadas.
- Para habilitar un lanzamiento automático desde una configuración de lanzamiento o una ejecución automática desde una configuración de flujo de trabajo, debes otorgar al agente de servicio predeterminado de Dataform el permiso
iam.serviceAccounts.actAsen la cuenta de servicio vigente correspondiente: - Para una configuración de lanzamiento automático, otorga el permiso en las cuentas de servicio vigentes 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ático, otorga el permiso en la cuenta de servicio vigente que usa esa configuración de flujo de trabajo.
¿Qué sigue?
- Para obtener información sobre cómo crear un repositorio, consulta Crea un repositorio.
- Para obtener más información sobre cómo funciona Dataform con BigQuery, consulta Descripción general de los flujos de trabajo.
- Para obtener información sobre cómo crear una configuración de flujo de trabajo, consulta Programa ejecuciones.
- Para obtener información sobre cómo crear una configuración de lanzamiento, consulta Configura compilaciones.