Otorga permiso a un flujo de trabajo para acceder a recursos de Google Cloud

Los flujos de trabajo usan cuentas de servicio para otorgar a los flujos de trabajo acceso a los recursos de Google Cloud. Las cuentas de servicio son cuentas especiales que actúan como la identidad de una persona, como una función, una aplicación o una VM. Te proporcionan la posibilidad de autenticar a quienes no sean personas. Una cuenta de servicio, o principal, puede considerarse como una identidad y un recurso.

  • Cuando una cuenta de servicio se considera una identidad, se le puede otorgar una función, lo que le permite acceder a un recurso (como un flujo de trabajo).

  • Si una cuenta de servicio se considera un recurso, es posible otorgar funciones a otros usuarios para que accedan o administren esa cuenta de servicio.

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 Autentica como una cuenta de servicio.

Cuenta de servicio predeterminada

Cada flujo de trabajo está asociado con una cuenta de servicio de administración de identidades y accesos (IAM) en el momento en que se crea el flujo de trabajo. Si no especificas una cuenta de servicio durante la creación del flujo de trabajo, este usará la cuenta de servicio predeterminada de Compute Engine para su identidad. Puedes verificar la cuenta de servicio asociada de un flujo de trabajo. En este documento, consulta Verifica la cuenta de servicio asociada de un flujo de trabajo.

Recomendamos usar la cuenta de servicio predeterminada solo para pruebas y desarrollo.

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 una función que incluya el permiso logging.logEntries.create (por ejemplo, la función Logs Writer).

Ten en cuenta que la cuenta de servicio del flujo de trabajo no requiere la función workflows.invoker, a menos que el flujo de trabajo se invoque a sí mismo o a otros flujos de trabajo (es decir, cree ejecuciones de flujo de trabajo nuevas). Para obtener más información, consulta Cómo invocar flujos de trabajo.

Para obtener más información sobre cómo otorgar funciones a principales, incluidas las cuentas de servicio, consulta Cómo otorgar, cambiar y revocar el acceso a los recursos.

Invoca Cloud Functions (2a gen.)

En Cloud Functions (2a gen.), los permisos de invocación se encuentran disponibles mediante la administración del servicio subyacente de Cloud Run. Si tu flujo de trabajo invoca un servicio de Cloud Functions (2a gen.), no necesitas otorgarle la función de invocador de Cloud Functions (roles/cloudfunctions.invoker) a la cuenta de servicio del emisor. En su lugar, debes otorgar la función de Invocador de Cloud Run (roles/run.invoker).

Para obtener más información, consulta Diferencias en Cloud Functions (2.a gen.).

Verifica la cuenta de servicio asociada de un flujo de trabajo

Puedes verificar qué cuenta de servicio está asociada con un flujo de trabajo en particular.

Console

  1. En Google Cloud Console, ve a la página Flujos de trabajo:
    Ir a Flujos de trabajo

  2. En la página Flujos de trabajo, haz clic en el nombre del flujo de trabajo.

  3. En la página Detalles del flujo de trabajo, haz clic en la pestaña Detalles.

    Se muestra la cuenta de servicio asociada del flujo de trabajo.

gcloud

  1. Abre una terminal.

  2. Ingrese el siguiente comando:

    gcloud workflows describe MY_WORKFLOW
    

    Reemplaza MY_WORKFLOW por el nombre del flujo de trabajo.

    Se mostrará 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: [...]

¿Qué sigue?