Usar la autenticación con destinos HTTP

Cloud Scheduler puede llamar a destinos HTTP que requieran autenticación si configuras una cuenta de servicio asociada que tenga las credenciales adecuadas.

Configurar una cuenta de servicio

Una cuenta de servicio suele utilizarse en una aplicación o una carga de trabajo de computación y se identifica por su dirección de correo electrónico, que es única para la cuenta.

Las aplicaciones pueden usar cuentas de servicio para hacer llamadas a APIs autorizadas autenticándose como la propia cuenta de servicio y accediendo a todos los recursos a los que la cuenta de servicio tenga permiso para acceder.

La forma más habitual de permitir que una aplicación se autentique como cuenta de servicio es asignar una cuenta de servicio al recurso que ejecuta la aplicación. Después, puedes conceder a la cuenta de servicio roles de gestión de identidades y accesos (IAM) para que pueda acceder a los recursos. Google Cloud

  1. Si aún no tienes una cuenta de servicio que quieras usar para los trabajos de Cloud Scheduler con destinos HTTP, crea una. Ten en cuenta lo siguiente:

    • La cuenta de servicio debe pertenecer al proyecto en el que se crea la tarea de Cloud Scheduler.

    • No utilices el agente de servicio de Cloud Scheduler (service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com). No se puede usar para este fin.

    • No revoques el rol Agente de servicios de Cloud Scheduler (roles/cloudscheduler.serviceAgent) del agente de servicios de Cloud Scheduler en tu proyecto. Si lo haces, se devolverán respuestas 403 a los endpoints que requieran autenticación, aunque la cuenta de servicio de tu trabajo tenga el rol adecuado.

  2. Si tu destino está en Google Cloud, concede los roles de gestión de identidades y accesos necesarios a tu cuenta de servicio. Cada servicio de Google Cloud requiere un rol específico, y el servicio receptor verifica automáticamente el token generado. Por ejemplo, en Cloud Run y en las funciones de Cloud Run de segunda generación, debes conceder el rol Cloud Run Invoker.

    Para obtener el permiso que necesitas para asociar una cuenta de servicio a un recurso, pide a tu administrador que te asigne el rol de gestión de identidades y accesos Usuario de cuenta de servicio (roles/iam.serviceAccountUser) en la cuenta de servicio. Este rol predefinido contiene el permiso iam.serviceAccounts.actAs, que es necesario para asignar una cuenta de servicio a un recurso. Si has creado la cuenta de servicio, se te concederá este permiso automáticamente.

    En el paso anterior, si has creado una cuenta de servicio específicamente para invocar el servicio al que se dirige tu tarea de Cloud Scheduler, puedes seguir el principio de privilegio mínimo vinculando la cuenta y su permiso de invocador a tu servicio de destino:

    Consola

    1. En la Google Cloud consola, en la página del selector de proyectos, selecciona unGoogle Cloud proyecto.

      Ir al selector de proyectos

    2. Vaya a la página del tipo de recurso que esté invocando. Por ejemplo, si invocas un servicio de Cloud Run, ve a la página que muestra los servicios de Cloud Run.

    3. Seleccione la casilla situada a la izquierda del servicio que quiera invocar. No hagas clic en el servicio en sí.

    4. Haz clic en la pestaña Permisos.

      Si el panel de información no está visible, es posible que tengas que hacer clic en Mostrar panel de información > Permisos.

    5. Haz clic en Añadir principal.

    6. En el campo Principales nuevas, introduce la dirección de correo de la cuenta de servicio que has creado.

    7. En la lista Selecciona un rol, elige el rol que quieras conceder.

      Sigue el principio de mínimos accesos y elige el rol que incluya solo los permisos que necesite tu principal.

    8. Haz clic en Guardar.

    gcloud

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
        --member=PRINCIPAL \
        --role=ROLE
    

    Haz los cambios siguientes:

    • RESOURCE_TYPE: el tipo de recurso de tu destino. Por ejemplo, run para un destino de Cloud Run.
    • RESOURCE_ID: el identificador de tu objetivo. Por ejemplo, el nombre del servicio de un destino de Cloud Run.
    • PRINCIPAL: el identificador de tu cuenta de servicio. Tiene el siguiente formato: serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS. Por ejemplo, serviceAccount:my-service-account@my-project.iam.gserviceaccount.com.
    • ROLE: el nombre del rol que requiere el servicio de destino para la invocación. Por ejemplo, roles/run.invoker para un destino de función de Cloud Run o de Cloud Run de segunda generación.
    • Otros parámetros opcionales se describen en la referencia de la línea de comandos gcloud.

    Ejemplos:

    • Concede el rol de IAM Invocador de Cloud Run (roles/run.invoker) a la cuenta de servicio my-service-account@my-project.iam.gserviceaccount.com en el servicio de Cloud Run my-service:

      gcloud run add-iam-policy-binding my-service \
          --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
          --role=roles/run.invoker
      
    • Concede el rol de IAM Invocador de Cloud Run (roles/run.invoker) que requieren las funciones de Cloud Run de segunda generación a la cuenta de servicio my-service-account@my-project.iam.gserviceaccount.com de la función de Cloud Run my-gen2-function:

      gcloud functions add-iam-policy-binding my-gen2-function \
          --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
          --role=roles/run.invoker \
          --gen2
      
  3. Si el destino está fuera de Google Cloud, el servicio receptor debe verificar el token manualmente.

  4. El agente de servicios de Cloud Scheduler predeterminado se configura automáticamente al habilitar la API Cloud Scheduler, a menos que lo hayas habilitado antes del 19 de marzo del 2019, en cuyo caso debes asignar el rol Agente de servicios de Cloud Scheduler. De esta forma, puede generar tokens de encabezado en nombre de tu cuenta de servicio para autenticarse en tu destino.

Crear una tarea de Cloud Scheduler que use la autenticación

Para autenticar la comunicación entre Cloud Scheduler y un destino HTTP, Cloud Scheduler crea un token de encabezado basado en tu cuenta de servicio de cliente, identificada por su correo electrónico, y lo envía al destino mediante HTTPS. Puedes usar un token de ID (OIDC) o un token de acceso de OAuth. OIDC se usa generalmente excepto en las APIs de Google alojadas en *.googleapis.com, ya que estas APIs esperan un token de OAuth.

Para crear un trabajo de Cloud Scheduler que use la autenticación, debes añadir el tipo de token y la dirección de correo que identifica la cuenta de servicio del cliente al crear el trabajo:

Consola

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

    Ir a Cloud Scheduler

  2. Haz clic en Crear trabajo.

  3. En el campo Name (Nombre), introduce un nombre único para el proyecto. Ten en cuenta que no puedes volver a usar el nombre de un trabajo en un proyecto aunque elimines el trabajo asociado.

  4. En la lista Región, selecciona una región para tu trabajo.

  5. Especifique la frecuencia y la zona horaria de la tarea. La cadena que proporciones aquí puede ser cualquier cadena compatible con unix-cron.

  6. Haz clic en Continuar.

  7. En la lista Tipo de destino, selecciona HTTP.

  8. Especifica una URL y un método HTTP.

  9. En la lista Encabezado de autorización, selecciona el tipo de token. Por lo general, se usa un token de OIDC excepto en las APIs de Google alojadas en *.googleapis.com, ya que estas APIs esperan un token de OAuth.

  10. En la lista Cuenta de servicio, selecciona el correo de tu cuenta de servicio.

  11. También puedes especificar una audiencia, que limita los destinatarios del token OIDC. Normalmente, se trata de la URL de destino del trabajo sin ningún parámetro de URL. Si no se especifica, se usa toda la URL como audiencia, incluidos los parámetros de solicitud.

  12. Configura los ajustes opcionales que quieras.

  13. Haz clic en Crear.

gcloud

gcloud scheduler jobs create http JOB_ID \
    --schedule="FREQUENCY" \
    --uri=URI \
    --oidc-service-account-email=SERVICE_ACCOUNT_EMAIL

Haz los cambios siguientes:

  • JOB_ID: un nombre para el trabajo que sea único en el proyecto. Ten en cuenta que no puedes volver a usar el nombre de un trabajo en un proyecto aunque elimines el trabajo asociado.
  • FREQUENCY: el intervalo o la frecuencia con la que se va a ejecutar el trabajo. Por ejemplo, every 3 hours o every 10 mins. La cadena que proporciones aquí puede ser cualquier cadena compatible con unix-cron.
  • URI: URL completa del endpoint.
  • SERVICE_ACCOUNT_EMAIL: el correo de tu cuenta de servicio. Por lo general, se usa un token de OIDC excepto en las APIs de Google alojadas en *.googleapis.com, ya que estas APIs esperan un token de OAuth. En su lugar, usa la marca --oauth-service-account-email para definir un tipo de token de OAuth.
  • Otros parámetros opcionales se describen en la referencia de la línea de comandos gcloud.

Asignar el rol Agente de servicio de Cloud Scheduler

Algunos Google Cloud servicios necesitan acceder a tus recursos para poder actuar en tu nombre. Para satisfacer esta necesidad, Google Cloud crea y gestiona cuentas de servicio que se conocen como agentes de servicio y que se crean y se les asignan roles automáticamente a medida que habilitas y usas los servicios de Google Cloud.

El agente de servicio de Cloud Scheduler requiere el rol Agente de servicio de Cloud Scheduler (roles/cloudscheduler.serviceAgent). Sin este rol, las tareas de Cloud Scheduler fallarán. Puedes asignar manualmente el rol a tu agente de servicio de Cloud Scheduler, que tiene una dirección de correo con el siguiente formato:

service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com

Debes asignar el rol manualmente solo si se cumple una de las siguientes condiciones:

  • Habilitaste la API Cloud Scheduler antes del 19 de marzo del 2019
  • Has quitado el rol Agente de servicio de Cloud Scheduler del agente de servicio

Para comprobar que el agente de servicio de Cloud Scheduler está configurado en tu proyecto y que tiene asignado el rol Agente de servicio de Cloud Scheduler, consulta el acceso actual de tu proyecto. Ten en cuenta que, si usas la Google Cloud consola para ver el acceso a tu proyecto, asegúrate de seleccionar la casilla Incluir concesiones de roles proporcionadas por Google.

Para saber cómo asignar un rol a tu agente de servicio, consulta el artículo Crear y asignar roles a agentes de servicio.

Siguientes pasos

Consulta cómo autenticarte en Cloud Scheduler mediante programación.