Workflows usa cuentas de servicio para otorgar acceso a los recursos de Google Cloud . Las cuentas de servicio son cuentas especiales que actúan como la identidad de una entidad que no es una persona, como una función, una aplicación o una VM. Te brindan una forma de autenticar a las entidades que no son personas. Puedes pensar en una cuenta de servicio como una identidad y un recurso:
Cuando piensas en una cuenta de servicio como una identidad, puedes otorgarle un rol, lo que le permite acceder a un recurso (como un flujo de trabajo).
Cuando consideras que una cuenta de servicio es un recurso, puedes otorgar roles a otros usuarios para que accedan a esa cuenta de servicio o la administren.
Una cuenta de servicio se identifica por su dirección de correo electrónico, que es única a la cuenta.
Para obtener más información sobre cómo configurar la autenticación con una aplicación de producción, consulta Autentícate como cuenta de servicio.
Cuenta de servicio predeterminada
Cada flujo de trabajo se asocia a una cuenta de servicio de Identity and Access Management (IAM) cuando creas el flujo de trabajo. Si no especificas una cuenta de servicio durante la creación del flujo de trabajo, este usa la cuenta de servicio predeterminada de Compute Engine para su identidad. Para verificar qué cuenta de servicio está asociada con un flujo de trabajo, consulta Verifica la cuenta de servicio asociada con un flujo de trabajo en este documento.
Te recomendamos que uses la cuenta de servicio predeterminada solo para pruebas y desarrollo. Para los entornos de producción, recomendamos crear una cuenta de servicio nueva y otorgarle uno o más roles de IAM que contengan los permisos mínimos necesarios para acceder a los recursos organizados por tus flujos de trabajo.
Los únicos roles que requiere tu cuenta de servicio son los que se necesitan para acceder a los recursos que organizan tus flujos de trabajo. Para obtener más información, consulta Permisos de cuentas de servicio en este documento.
Permisos de las cuentas de servicio
Debido a que las cuentas de servicio son identidades, puedes permitir que una cuenta de servicio acceda a los recursos de tu proyecto si le otorgas una función, al igual que lo harías con cualquier otra principal. Por ejemplo, si deseas permitir 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 un rol que incluya el permiso logging.logEntries.create, por ejemplo,
el rol de IAM de escritor de registros
(roles/logging.logWriter). En general, los roles
que requiere tu cuenta de servicio dependen de los recursos que organizas
con tus flujos de trabajo. Para determinar qué roles se requieren, revisa
la documentación del producto del recurso que organizas o
elige roles predefinidos.
La cuenta de servicio del flujo de trabajo no requiere el rol de IAM de
Invocador de Workflows
(roles/workflows.invoker), a menos que el flujo de trabajo se invoque
a sí mismo o a otros flujos de trabajo (es decir, que cree nuevas ejecuciones de flujos de trabajo). Para obtener más
información, consulta
Invoca Workflows.
Conecta cuentas de servicio a recursos
Para crear un flujo de trabajo y adjuntar una cuenta de servicio, necesitas permisos para crear el flujo de trabajo y adjuntar la cuenta de servicio al flujo de trabajo.
Para obtener el permiso que
necesitas para adjuntar una cuenta de servicio a un recurso,
pídele a tu administrador que te otorgue el
rol de IAM de usuario de cuenta de servicio (roles/iam.serviceAccountUser) en la cuenta de servicio o el proyecto que contiene la cuenta de servicio.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Este rol predefinido contiene el permiso iam.serviceAccounts.actAs, que se requiere para conectar una cuenta de servicio a un recurso.
También puedes obtener este permiso con roles personalizados o con otros roles predefinidos.
Cuando actualizas el código fuente o la cuenta de servicio de un flujo de trabajo existente, también
necesitas el permiso iam.serviceAccounts.actAs:
- Actualiza solo el código fuente del flujo de trabajo (sin actualizar la cuenta de servicio): necesitas el permiso
iam.serviceAccounts.actAsen la cuenta de servicio existente asociada con el flujo de trabajo. - Actualiza la cuenta de servicio o el código fuente y la cuenta de servicio: Necesitas el permiso
iam.serviceAccounts.actAsen la cuenta de servicio nueva que asocias con el flujo de trabajo.
Para obtener más información sobre los roles de autenticación de cuentas de servicio, consulta Roles para la autenticación de cuentas de servicio.
Invoca funciones de Cloud Run
En Cloud Run Functions, los permisos de invocación están disponibles
administrando el servicio de Cloud Run subyacente. Si tu flujo de trabajo invoca
un servicio de Cloud Run Functions, no es necesario que otorgues a la cuenta de servicio
del emisor el rol de IAM de Invocador de Cloud Functions
(roles/cloudfunctions.invoker). En su lugar, debes
otorgar el rol de IAM de
Invocador de Cloud Run
(roles/run.invoker).
Para obtener más información, consulta Compara Cloud Run Functions.
Implementa un flujo de trabajo con una cuenta de servicio personalizada
Puedes crear tu propia cuenta de servicio administrada por el usuario para tener mayor flexibilidad en el control del acceso a tu flujo de trabajo.
Crea una cuenta de servicio y anota su nombre:
Otorga a la cuenta de servicio los roles adecuados, según los recursos a los que debe acceder el flujo de trabajo para realizar su tarea.
Asegúrate de que todas las principales que implementan o actualizan flujos de trabajo tengan permiso para adjuntar o actuar como la cuenta de servicio (
roles/iam.serviceAccountUser). Si creaste la cuenta de servicio, se te otorga este permiso de forma automática.Otorga el rol en el proyecto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
O bien, otorga el rol en la cuenta de servicio:
gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_RESOURCE_NAME \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto de Google Cloud que contiene el flujo de trabajo y la cuenta de servicio.PRINCIPAL: Es un identificador para el implementador del flujo de trabajo en el formatouser|group|serviceAccount:emailodomain:domain. Por ejemplo:user:dana@example.comgroup:admins@example.comserviceAccount:my-service-account@example.comdomain:example.com
SERVICE_ACCOUNT_RESOURCE_NAME: Es el nombre completo del recurso de la cuenta de servicio, en el siguiente formato:projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.Donde
SERVICE_ACCOUNT_NAMEes el nombre de la cuenta de servicio.
Implementa tu flujo de trabajo con la cuenta de servicio personalizada.
Implementa un flujo de trabajo con una cuenta de servicio entre proyectos
De forma predeterminada, no puedes crear una cuenta de servicio en un proyecto y conectarla a un recurso en otro proyecto. En las siguientes instrucciones, se muestra cómo conectar una cuenta de servicio de un proyecto a un flujo de trabajo de otro proyecto. Luego, 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 se encuentran en proyectos diferentes, haz lo siguiente:
En la consola de Google Cloud , ve a la página Políticas de la organización del proyecto en el que se encuentra la cuenta de servicio:
Ir a Políticas de la organización
Verifica la política de la organización del proyecto y asegúrate de que no se aplique la restricción booleana
iam.disableCrossProjectServiceAccountUsageen el proyecto. Si deseas obtener más información, consulta Habilita cuentas de servicio para conectarlas entre proyectos.En el proyecto en el que se encuentra la cuenta de servicio, crea tu cuenta de servicio y anota su nombre.
Otorga a la cuenta de servicio los roles adecuados, según los recursos a los que debe acceder el flujo de trabajo para realizar su tarea.
Otorga el rol de creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator) al agente de servicio de Workflows en el proyecto del flujo de trabajo. Esto permite que el agente de servicio administre el acceso entre proyectos de la cuenta de servicio. Un agente de servicio es la identidad de un servicio de Google Cloud determinado para un proyecto en particular. Para obtener más información, consulta Agentes de servicio.Console
En la consola de Google Cloud , ve a la página Workflows:
Para crear un flujo de trabajo, haz clic en Crear o, para actualizar uno existente, haz clic en el nombre del flujo de trabajo.
En la lista Cuenta de servicio, haz clic en Cambiar de proyecto.
Selecciona una cuenta de servicio de un proyecto diferente.
Si se te solicita, otorga el rol
roles/iam.serviceAccountTokenCreatoral agente de servicio de Workflows.
gcloud
Otorga el rol
roles/iam.serviceAccountTokenCreatoral 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.' \ --role='roles/iam.serviceAccountTokenCreator'
Reemplaza lo siguiente:
SERVICE_ACCOUNT_RESOURCE_NAME: Es el nombre completo del recurso de la cuenta de servicio, en el siguiente formato:projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.Aquí:
SERVICE_ACCOUNT_PROJECT_IDes el ID del proyecto deGoogle Cloud que contiene la cuenta de servicio.SERVICE_ACCOUNT_NAMEes el nombre de la cuenta de servicio.
WORKFLOWS_PROJECT_NUMBER: Es el número del proyecto deGoogle Cloud que contiene los recursos del flujo de trabajo.
Asegúrate de que todas las principales que implementan o actualizan flujos de trabajo tengan permiso para adjuntar o actuar como la cuenta de servicio (
roles/iam.serviceAccountUser). Si creaste la cuenta de servicio, se te otorga este permiso de forma automática.Console
En la consola de Google Cloud , ve a la página Workflows:
Para crear un flujo de trabajo, haz clic en Crear o, para actualizar uno existente, haz clic en el nombre del flujo de trabajo.
En la lista Cuenta de servicio, haz clic en Cambiar de proyecto.
Selecciona una cuenta de servicio de un proyecto diferente.
Si se te solicita, otorga el rol
roles/iam.serviceAccountUseren el proyecto de la cuenta de servicio.
gcloud
Otorga el rol en el proyecto que contiene la cuenta de servicio:
gcloud projects add-iam-policy-binding \ SERVICE_ACCOUNT_PROJECT_ID \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
O bien, otorga el rol en la cuenta de servicio:
gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_RESOURCE_NAME \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
Reemplaza lo siguiente:
SERVICE_ACCOUNT_PROJECT_ID: Es el ID del proyecto deGoogle Cloud que contiene la cuenta de servicio.PRINCIPAL: Es un identificador para el implementador del flujo de trabajo en el formatouser|group|serviceAccount:emailodomain:domain. Por ejemplo:user:dana@example.comgroup:admins@example.comserviceAccount:my-service-account@example.comdomain:example.com
SERVICE_ACCOUNT_RESOURCE_NAME: Es el nombre completo del recurso de la cuenta de servicio, en el siguiente formato:projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.Donde
SERVICE_ACCOUNT_NAMEes el nombre de la cuenta de servicio.
Implementa tu flujo de trabajo con la cuenta de servicio entre proyectos.
Verifica la cuenta de servicio asociada con un flujo de trabajo
Puedes verificar qué cuenta de servicio está asociada con un flujo de trabajo en particular.
Console
En la consola de Google Cloud , ve a la página Workflows:
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, haz clic en la pestaña Detalles.
En la pestaña Detalles, se muestra la cuenta de servicio asociada al flujo de trabajo.
gcloud
Para recuperar la descripción del flujo de trabajo, ejecuta el comando
gcloud workflows describe:
gcloud workflows describe WORKFLOW_NAME \ --location=LOCATION
Reemplaza lo siguiente:
WORKFLOW_NAME: El nombre de tu flujo de trabajo.LOCATION: Es la región en la que se implementa tu flujo de trabajo (por ejemplo,us-central1).
El resultado es similar al siguiente y, además, incluye la cuenta de servicio asociada:
createTime: '2020-06-05T23:45:34.154213774Z' name: projects/my-project/locations/us-central1/workflows/my-workflow serviceAccount: projects/my-project/serviceAccounts/012345678901-compute@ sourceContents: [...]