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

Workflows usa cuentas de servicio para otorgar acceso a los flujos de trabajo a los recursos de Google Cloud. Las cuentas de servicio son cuentas especiales que funcionan como la identidad de un tercero, como una función, una aplicación o una VM. Te dan una forma de autenticar a estas personas que no son personas. Una cuenta de servicio puede considerarse una identidad y un recurso.

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

  • Cuando piensas en una cuenta de servicio como un recurso, puedes otorgar funciones a otros usuarios para acceder a esa cuenta de servicio o administrarla.

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 con una cuenta de servicio de Identity and Access Management (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 usa la cuenta de servicio predeterminada de Compute Engine para su identidad. Puedes verificar la cuenta de servicio asociada a 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. Para los entornos de producción, te recomendamos crear una cuenta de servicio nueva y otorgarle una o más funciones de IAM que contengan los permisos mínimos necesarios para administrar flujos de trabajo.

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, que cree ejecuciones de flujo de trabajo nuevas). Para obtener más información, consulta Invoca flujos de trabajo.

Para obtener más información sobre cómo otorgar roles a principales, incluidas las cuentas de servicio, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Conecta cuentas de servicio a recursos

Si quieres crear un recurso y conectar una cuenta de servicio, necesitas permisos para crear ese recurso y conectar la cuenta de servicio al recurso. Cualquier función que incluya el permiso iam.serviceAccounts.actAs proporciona el permiso para conectar la cuenta de servicio a un recurso.

Si deseas obtener más información, consulta Roles para la autenticación de cuentas de servicio.

Invoca Cloud Functions (2nd gen)

En Cloud Functions (2nd gen), los permisos de invocación están disponibles mediante la administración del servicio subyacente de Cloud Run. Si tu flujo de trabajo invoca un servicio de Cloud Function (2ª gen..), no es necesario que le otorgues a la cuenta de servicio del llamador la función de Invocador de Cloud Functions (roles/cloudfunctions.invoker). En su lugar, debes otorgar la función de invocador de Cloud Run (roles/run.invoker).

Para obtener más información, consulta Comparación de versiones de Cloud Functions.

Implementa un flujo de trabajo con una cuenta de servicio personalizada

Puedes crear tu propia cuenta de servicio administrada por el usuario a fin de brindarte una mayor flexibilidad para controlar el acceso a tu flujo de trabajo.

  1. Crea una cuenta de servicio y anota su nombre:

  2. Otorga a la cuenta de servicio las funciones adecuadas, según los recursos a los que debe acceder el flujo de trabajo para realizar su trabajo.

  3. Asegúrate de que todas las principales que implementan flujos de trabajo tengan la capacidad de conectar la cuenta de servicio a los recursos. Si creaste la cuenta de servicio, se te otorga este permiso de forma automática. Para obtener más información, consulta Funciones para la autenticación de cuentas de servicio.

    Si quieres obtener el permiso que necesitas para conectar una cuenta de servicio a un recurso, pídele a tu administrador que te otorgue el rol de IAM Usuario de cuenta de servicio (roles/iam.serviceAccountUser) en tu proyecto o cuenta de servicio. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

    Este rol predefinido contiene el permiso iam.serviceAccounts.actAs, necesario para conectar una cuenta de servicio a un recurso.

    También puedes obtener este permiso con roles personalizados o, también, otros roles predefinidos.

    Otorga el rol en el proyecto:

    gcloud projects add-iam-policy-binding WORKFLOWS_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:

    • WORKFLOWS_PROJECT_ID: Es el ID del proyecto de Google Cloud que contiene los recursos del flujo de trabajo.
    • PRINCIPAL: Es un identificador para el implementador del flujo de trabajo en el formato user|group|serviceAccount:email o domain: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: Es 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

      Aquí:

      • SERVICE_ACCOUNT_PROJECT_ID es el ID del proyecto de Google Cloud que contiene la cuenta de servicio.
      • SERVICE_ACCOUNT_NAME es el nombre de la cuenta de servicio.
  4. 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 adjuntar una cuenta de servicio de un proyecto a un flujo de trabajo en 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 están en proyectos diferentes, del proyecto en el que se encuentra la cuenta de servicio, completa lo siguiente:

  1. En la consola de Google Cloud, ve a la página Políticas de la organización:

    Ir a Políticas de la organización

    Verifica la política de la organización del proyecto y asegúrate de que la restricción booleana iam.disableCrossProjectServiceAccountUsage no se aplique al proyecto. Para obtener más información, consulta Habilita cuentas de servicio para que se vinculen a otros proyectos.

  2. Crea una cuenta de servicio y anota su nombre:

  3. Otorga a la cuenta de servicio las funciones adecuadas, según los recursos a los que debe acceder el flujo de trabajo para realizar su trabajo.

  4. Otorga la función de creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) al agente de servicio de Workflows. Esto permite que el agente de servicio administre el acceso entre proyectos para 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

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

      Ir a Workflows

    2. Haz clic en Crear para crear un flujo de trabajo o selecciona el nombre del flujo de trabajo que deseas actualizar.

    3. En la lista Cuenta de servicio, haz clic en Cambiar proyecto.

    4. Selecciona una cuenta de servicio de un proyecto diferente.

    5. Si se te solicita, otorga la función roles/iam.serviceAccountTokenCreator al agente de servicio de Workflows.

    gcloud

    1. Otorga la función 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'

      Reemplaza lo siguiente:

      • 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

        Aquí:

        • SERVICE_ACCOUNT_PROJECT_ID es el ID del proyecto de Google Cloud que contiene la cuenta de servicio.
        • SERVICE_ACCOUNT_NAME es el nombre de la cuenta de servicio.
      • WORKFLOWS_PROJECT_NUMBER: Es el número de proyecto de Google Cloud que contiene los recursos del flujo de trabajo.

  5. Asegúrate de que todas las principales que implementan flujos de trabajo tengan la capacidad de conectar la cuenta de servicio a los recursos. Si creaste la cuenta de servicio, se te otorga este permiso de forma automática. Para obtener más información, consulta Funciones para la autenticación de cuentas de servicio.

    Si quieres obtener el permiso que necesitas para conectar una cuenta de servicio a un recurso, pídele a tu administrador que te otorgue el rol de IAM Usuario de cuenta de servicio (roles/iam.serviceAccountUser) en tu proyecto o cuenta de servicio. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

    Este rol predefinido contiene el permiso iam.serviceAccounts.actAs, necesario para conectar una cuenta de servicio a un recurso.

    También puedes obtener este permiso con roles personalizados o, también, otros roles predefinidos.

    Console

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

      Ir a Workflows

    2. Haz clic en Crear para crear un flujo de trabajo o selecciona el nombre del flujo de trabajo que deseas actualizar.

    3. En la lista Cuenta de servicio, haz clic en Cambiar proyecto.

    4. Selecciona una cuenta de servicio de un proyecto diferente.

    5. Si se te solicita, otorga la función roles/iam.serviceAccountUser en el proyecto.

    gcloud

    Otorga el rol en el proyecto:

    gcloud projects add-iam-policy-binding WORKFLOWS_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:

    • WORKFLOWS_PROJECT_ID: Es el ID del proyecto de Google Cloud que contiene los recursos del flujo de trabajo.
    • PRINCIPAL: Es un identificador para el implementador del flujo de trabajo en el formato user|group|serviceAccount:email o domain: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

      Aquí:

      • SERVICE_ACCOUNT_PROJECT_ID es el ID del proyecto de Google Cloud que contiene la cuenta de servicio.
      • SERVICE_ACCOUNT_NAME es el nombre de la cuenta de servicio.
  6. 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

  1. En la consola de Google Cloud, ve a la página Workflows.

    Ir a Workflows

  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 al flujo de trabajo.

gcloud

  1. Abre una terminal.

  2. Ingresa el siguiente comando:

    gcloud workflows describe MY_WORKFLOW
    

    Reemplaza MY_WORKFLOW por el nombre de tu flujo de trabajo.

    Se muestra una descripción completa del flujo de trabajo que incluye 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?