Workflows usa cuentas de servicio para dar acceso a los workflows a los Google Cloud recursos. Las cuentas de servicio son cuentas especiales que sirven como identidad de una entidad que no es una persona, como una función, una aplicación o una VM. Te permiten autenticar a estas entidades no humanas. Una cuenta de servicio se puede considerar tanto una identidad como un recurso.
Si piensas en una cuenta de servicio como una identidad, puedes asignarle un rol para que pueda acceder a un recurso (como un flujo de trabajo).
Si piensas en una cuenta de servicio como un recurso, puedes conceder roles a otros usuarios para que accedan a esa cuenta o la gestionen.
Las cuentas de servicio se identifican por su dirección de correo, que es única para cada cuenta.
Para obtener más información sobre cómo configurar la autenticación con una aplicación de producción, consulta el artículo Autenticarse como cuenta de servicio.
Cuenta de servicio predeterminada
Cada flujo de trabajo se asocia a una cuenta de servicio de gestión de identidades y accesos (IAM) en el momento en que se crea. Si no especificas una cuenta de servicio durante la creación del flujo de trabajo, este usará la cuenta de servicio de Compute Engine predeterminada para su identidad. Puedes verificar la cuenta de servicio asociada a un flujo de trabajo. En este documento, consulta la sección Verificar la cuenta de servicio asociada a un flujo de trabajo.
Te recomendamos que utilices la cuenta de servicio predeterminada solo para pruebas y desarrollo. En los entornos de producción, te recomendamos que crees una cuenta de servicio y le asignes uno o varios roles de gestión de identidades y accesos que contengan los permisos mínimos necesarios para gestionar los flujos de trabajo.
Los únicos roles que necesita tu cuenta de servicio son los necesarios para acceder a los recursos organizados por tus flujos de trabajo. Para obtener más información, consulta la sección Permisos de las cuentas de servicio de este documento.
Permisos de cuenta de servicio
Como las cuentas de servicio son identidades, puedes permitir que una cuenta de servicio acceda a los recursos de tu proyecto concediéndole un rol, al igual que harías con cualquier otro principal. Por ejemplo, si quieres que tu flujo de trabajo envíe registros a Cloud Logging, asegúrate de que la cuenta de servicio que ejecuta el flujo de trabajo tenga asignado un rol que incluya el permiso logging.logEntries.create
(por ejemplo, el rol Logs Writer
). Por lo general, los roles que requiere tu cuenta de servicio dependen de los recursos que estés orquestando con tus flujos de trabajo. Para determinar qué roles son necesarios, consulta la documentación del producto del recurso que estés orquestando o elige roles predefinidos.
Ten en cuenta que la cuenta de servicio del flujo de trabajo no requiere el rol workflows.invoker
, a menos que el flujo de trabajo se invoque a sí mismo o a otros flujos de trabajo (es decir, cree nuevas ejecuciones de flujo de trabajo). Para obtener más información, consulta Invocar Workflows.
Para obtener más información sobre cómo conceder roles a principales, incluidas las cuentas de servicio, consulta el artículo Administra el acceso a proyectos, carpetas y organizaciones.
Asociar cuentas de servicio a recursos
Para crear un recurso y adjuntar una cuenta de servicio, debes tener permisos para crear ese recurso y para adjuntar la cuenta de servicio al recurso.
El permiso para asociar la cuenta de servicio a un recurso se proporciona mediante cualquier rol que incluya el permiso iam.serviceAccounts.actAs
.
Para obtener más información, consulta Roles para la autenticación de cuentas de servicio.
Invocar funciones de Cloud Run
En Cloud Run Functions, los permisos de invocación se pueden gestionar mediante el servicio de Cloud Run subyacente. Si tu flujo de trabajo invoca un servicio de funciones de Cloud Run, no es necesario que concedas a la cuenta de servicio del llamador el rol Invocador de Cloud Functions (roles/cloudfunctions.invoker
). En su lugar, debe conceder el rol Invocador de Cloud Run (roles/run.invoker
).
Para obtener más información, consulta Comparar funciones de Cloud Run.
Implementar un flujo de trabajo con una cuenta de servicio personalizada
Puedes crear tu propia cuenta de servicio gestionada por el usuario para tener más flexibilidad a la hora de controlar el acceso a tu flujo de trabajo.
Crea tu cuenta de servicio y anota su nombre.
Concede a la cuenta de servicio los roles adecuados, en función de los recursos a los que deba acceder el flujo de trabajo para realizar su tarea.
Asegúrate de que todas las entidades que implementen flujos de trabajo puedan asociar la cuenta de servicio a los recursos. Si has creado la cuenta de servicio, se te concederá este permiso automáticamente. Para obtener más información, consulta Roles para la autenticación de cuentas de servicio.
Para obtener el permiso que necesitas para asociar una cuenta de servicio a un recurso, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) en tu proyecto o en la cuenta de servicio. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.Este rol predefinido contiene el permiso
iam.serviceAccounts.actAs
, que es necesario para asignar una cuenta de servicio a un recurso.También puedes obtener este permiso con roles personalizados u otros roles predefinidos.
Concede el rol en el proyecto:
gcloud projects add-iam-policy-binding WORKFLOWS_PROJECT_ID \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
También puedes asignar el rol a la cuenta de servicio:
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
Haz los cambios siguientes:
WORKFLOWS_PROJECT_ID
: el ID del proyecto Google Cloud que contiene los recursos del flujo de trabajoPRINCIPAL
: identificador del implementador del flujo de trabajo con el formatouser|group|serviceAccount:email
odomain:domain
. Por ejemplo:user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
SERVICE_ACCOUNT_RESOURCE_NAME
: el nombre completo del recurso de la cuenta de servicio. Por ejemplo:projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com
Donde:
SERVICE_ACCOUNT_PROJECT_ID
es el Google Cloud ID del proyecto que contiene la cuenta de servicio.SERVICE_ACCOUNT_NAME
es el nombre de la cuenta de servicio.
Implementa tu flujo de trabajo con la cuenta de servicio personalizada.
Desplegar un flujo de trabajo con una cuenta de servicio entre proyectos
De forma predeterminada, no se puede crear una cuenta de servicio en un proyecto y vincularla a un recurso de otro proyecto. En las siguientes instrucciones se muestra cómo adjuntar una cuenta de servicio de un proyecto a un flujo de trabajo de otro proyecto. Después, puedes usar la cuenta de servicio en diferentes proyectos para implementar un flujo de trabajo.
Si la cuenta de servicio y los recursos del flujo de trabajo están en proyectos diferentes, haz lo siguiente desde el proyecto en el que se encuentre la cuenta de servicio:
En la Google Cloud consola, ve a la página Políticas de la organización:
Ir a Políticas de organización
Consulta la política de organización del proyecto y asegúrate de que la restricción booleana
iam.disableCrossProjectServiceAccountUsage
no se haya aplicado al proyecto. Para obtener más información, consulta el artículo Habilitar la vinculación de cuentas de servicio entre proyectos.Crea tu cuenta de servicio y anota su nombre.
Concede a la cuenta de servicio los roles adecuados, en función de los recursos a los que deba acceder el flujo de trabajo para realizar su tarea.
Asigna el rol Creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator
) al agente de servicio de Workflows. De esta forma, el agente de servicio puede gestionar el acceso entre proyectos de la cuenta de servicio. Un agente de servicio es la identidad de unGoogle Cloud servicio concreto de un proyecto determinado. Para obtener más información, consulta Agentes de servicio.Consola
En la Google Cloud consola, ve a la página Flujos de trabajo:
Haz clic en
Crear para crear un flujo de trabajo o selecciona el nombre del flujo de trabajo que quieras actualizar.En la lista Cuenta de servicio, haz clic en Cambiar de proyecto.
Selecciona una cuenta de servicio de otro proyecto.
Si se te pide, asigna el rol
roles/iam.serviceAccountTokenCreator
al agente de servicio de Workflows.
gcloud
Asigna el rol
roles/iam.serviceAccountTokenCreator
al agente de servicio de Workflows:gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \ --member='serviceAccount:service-WORKFLOWS_PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com' \ --role='roles/iam.serviceAccountTokenCreator'
Haz los cambios siguientes:
SERVICE_ACCOUNT_RESOURCE_NAME
: el nombre de recurso completo de la cuenta de servicio. Por ejemplo:projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com
Donde:
SERVICE_ACCOUNT_PROJECT_ID
es el Google Cloud ID del proyecto que contiene la cuenta de servicio.SERVICE_ACCOUNT_NAME
es el nombre de la cuenta de servicio.
WORKFLOWS_PROJECT_NUMBER
: el Google Cloud número de proyecto que contiene los recursos del flujo de trabajo.
Asegúrate de que todas las entidades que implementen flujos de trabajo puedan asociar la cuenta de servicio a los recursos. Si has creado la cuenta de servicio, se te concederá este permiso automáticamente. Para obtener más información, consulta Roles para la autenticación de cuentas de servicio.
Para obtener el permiso que necesitas para asociar una cuenta de servicio a un recurso, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) en tu proyecto o en la cuenta de servicio. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.Este rol predefinido contiene el permiso
iam.serviceAccounts.actAs
, que es necesario para asignar una cuenta de servicio a un recurso.También puedes obtener este permiso con roles personalizados u otros roles predefinidos.
Consola
En la Google Cloud consola, ve a la página Flujos de trabajo:
Haz clic en
Crear para crear un flujo de trabajo o selecciona el nombre del flujo de trabajo que quieras actualizar.En la lista Cuenta de servicio, haz clic en Cambiar de proyecto.
Selecciona una cuenta de servicio de otro proyecto.
Si se te solicita, concede el rol
roles/iam.serviceAccountUser
en el proyecto.
gcloud
Concede el rol en el proyecto:
gcloud projects add-iam-policy-binding WORKFLOWS_PROJECT_ID \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
También puedes asignar el rol a la cuenta de servicio:
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
Haz los cambios siguientes:
WORKFLOWS_PROJECT_ID
: tu Google Cloud ID de proyecto que contiene los recursos del flujo de trabajoPRINCIPAL
: identificador del implementador del flujo de trabajo con el formatouser|group|serviceAccount:email
odomain:domain
. Por ejemplo:user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
SERVICE_ACCOUNT_RESOURCE_NAME
: el nombre de recurso completo de la cuenta de servicio. Por ejemplo:projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com
Donde:
SERVICE_ACCOUNT_PROJECT_ID
es el Google Cloud ID del proyecto que contiene la cuenta de servicio.SERVICE_ACCOUNT_NAME
es el nombre de la cuenta de servicio.
Implementa tu flujo de trabajo con la cuenta de servicio entre proyectos.
Verificar la cuenta de servicio asociada a un flujo de trabajo
Puedes verificar qué cuenta de servicio está asociada a un flujo de trabajo concreto.
Consola
En la Google Cloud consola, ve a la página Flujos de trabajo:
En la página Flujos de trabajo, haz clic en el nombre del flujo de trabajo.
En la página Detalles del flujo de trabajo, haga clic en la pestaña Detalles.
Se muestra la cuenta de servicio asociada al flujo de trabajo.
gcloud
Abre la terminal.
Introduce el siguiente comando:
gcloud workflows describe MY_WORKFLOW
Sustituye
MY_WORKFLOW
por el nombre de tu flujo de trabajo.Se devuelve una descripción completa del flujo de trabajo, incluida la cuenta de servicio asociada. Por ejemplo:
createTime: '2020-06-05T23:45:34.154213774Z' name: projects/myProject/locations/us-central1/workflows/myWorkflow serviceAccount: projects/my-project/serviceAccounts/012345678901-compute@developer.gserviceaccount.com sourceContents: [...]