Usa la autenticación con destinos HTTP

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

Configura la cuenta de servicio

  1. Si aún no tienes una cuenta de servicio que quieras usar trabajos de Cloud Scheduler con objetivos HTTP, Crea una cuenta de servicio nueva. Ten en cuenta lo siguiente:

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

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

    • No revocar el rol de agente de servicio de Cloud Scheduler (roles/cloudscheduler.serviceAgent) de Cloud Scheduler agente de servicio en tu proyecto. Si lo haces, se generará 403 las respuestas a los endpoints que requieren autenticación, incluso si el servicio de tu trabajo cuenta tiene el rol adecuado.

  2. Si tu destino está dentro de Google Cloud, otorga los permisos necesarios Funciones de IAM para tu servicio de servicio predeterminada. Cada servicio en Google Cloud requiere un rol específico, y el servicio receptor verifica automáticamente el token generado. Para por ejemplo, para Cloud Run y de segunda generación Cloud Functions, debes agregar el rol Cloud Run Invoker.

    Ten en cuenta que, para implementar un recurso con una cuenta de servicio administrada por el usuario, el el implementador debe tener el permiso iam.serviceAccounts.actAs cuenta de servicio. Si creaste la cuenta de servicio, puedes se otorgó este permiso automáticamente. Si no es así, alguien que tenga la información los permisos deben otorgarte este permiso en la cuenta de servicio.

    Práctica recomendada: Si creaste una cuenta de servicio en el paso anterior, haz lo siguiente: específicamente para invocar el servicio al que tu trabajo de Cloud Scheduler objetivos, considere seguir el principio de privilegio mínimo (mejor seguridad práctica) vinculando la cuenta y su permiso de invocación con tu destino servicio. Puedes hacerlo con la consola de Google Cloud o Gcloud CLI:

    Console

    1. Abra la consola de Google Cloud.

    Ir en la consola

    2. Elige tu proyecto.

    3. Navega a la página del tipo de recurso que invocas. Para Por ejemplo, si invocas un servicio de Cloud Run, navega a la página que Enumera los servicios de Cloud Run.

    4. Selecciona la casilla de verificación a la izquierda del servicio que quieres invocar. (No hagas clic en el servicio).

    5. Haz clic en la pestaña Permisos. Si el panel de información no está visible, Es posible que debas hacer clic en Mostrar panel de información y, luego, en Permisos.

    6. Haz clic en Agregar principal.

    7. En Agregar principales, ingresa la dirección de correo electrónico del servicio. cuenta que creaste.

    8. En Asignar roles, selecciona el rol que deseas otorgar de la lista desplegable. Sigue el principio de privilegio mínimo y elige el rol que incluya solo los permisos que necesita el principal.

    9. Haz clic en Guardar.

    gcloud

    Ejecuta el comando add-iam-policy-binding:

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

    Reemplaza lo siguiente:

    • RESOURCE_TYPE: Es el tipo de recurso de tu destino. Por ejemplo, run para un destino de Cloud Run.
    • RESOURCE_ID: Es el identificador de tu destino. Para Por ejemplo, el nombre del servicio para un destino de Cloud Run.
    • PRINCIPAL: Es el identificador de la cuenta de servicio. Esto tiene la siguiente forma: serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS. Por ejemplo, serviceAccount:my-service-account@my-project.iam.gserviceaccount.com.
    • ROLE: Es el nombre de la función a la que se orienta. que el servicio requiere para la invocación. Por ejemplo, roles/run.invoker para en un destino de Cloud Run o Cloud Functions de segunda generación.

    Ejemplos:

    • Destino de Cloud Run: El siguiente comando otorga el rol de invocador de Cloud Run en la cuenta de servicio my-service-account@my-project.iam.gserviceaccount.com por el Servicio my-service de Cloud Run:

      gcloud run add-iam-policy-binding my-service \
       --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
       --role=roles/run.invoker
      
    • Destino de Cloud Functions: El siguiente comando otorga la Rol de Invocador de Cloud Run requerido por la segunda generación Funciones de Cloud Functions para la cuenta de servicio my-service-account@my-project.iam.gserviceaccount.com por el segundo generación de Cloud Functions 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 tu destino está fuera de Google Cloud, el servicio receptor debe verificar el token de forma manual

  4. La cuenta de servicio predeterminada de Cloud Scheduler se configura automáticamente cuando habilites la API de Cloud Scheduler, a menos que la hayas habilitado antes de 19 de marzo de 2019, en cuyo caso debes agregar el rol de Cloud Scheduler Service Agent manualmente. Esto es así que puede generar tokens de encabezado en nombre de tu cuenta de servicio del cliente para autenticarse en tu destino.

    Puedes verificar que la cuenta de servicio predeterminada de Cloud Scheduler esté configurado en tu proyecto y que tenga el elemento Cloud Scheduler Service Agent rol otorgado por visualizar el acceso actual de tu proyecto. Ten en cuenta que, si usas la consola de Google Cloud para ver el acceso de tu proyecto, asegúrate de seleccionar la casilla de verificación Incluir otorgamientos de roles proporcionados por Google.

Crea un trabajo de Scheduler con autenticación

Para crear un trabajo que use autenticación, debes agregar el tipo de token y la dirección de correo electrónico que identifica la cuenta de servicio al cliente en tu Solicitud de create-job:

Console

  1. Especifica la frecuencia como siempre.
  2. Especifica HTTP como el tipo de destino.
  3. Agrega la URL y el método HTTP como siempre.
  4. En la lista Encabezado de la autenticación, selecciona el tipo de token. Ten en cuenta que OIDC (token de ID) generalmente se usa, excepto para las APIs de Google alojadas en *.googleapis.com, ya que estas APIs esperan un token de acceso OAuth.
  5. En Cuenta de servicio, especifica el correo electrónico de la cuenta de servicio del cliente.
  6. Audience es opcional y limita los destinatarios del token de OIDC. por lo general, la URL de destino del trabajo (sin ningún parámetro de URL). Si no es así especificado, de forma predeterminada, se usa toda la URL como público (incluidas las parámetros de solicitud).

gcloud

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

Reemplaza lo siguiente:

  • JOB_ID: Es un nombre para el trabajo. Debe ser únicos en el proyecto. Ten en cuenta que no puedes volver a usar el nombre de un trabajo en un proyecto incluso si borras su trabajo asociado.
  • FREQUENCY: El intervalo de trabajo es la frecuencia con la que trabajo sea ejecutarse, por ejemplo, every 3 hours o every 10 mins. La string que proporcionas puede ser cualquier string compatible con Crontab. (Aunque ya no recomendamos su uso, la versión Sintaxis de cron de App Engine todavía es compatible con los trabajos existentes).
  • URI: Es la URL completamente calificada del extremo.
  • --oidc-service-account-email o --oauth-service-account-email: define el tipo de token. Ten en cuenta que OIDC se suele usar, excepto para Las APIs de Google alojadas en *.googleapis.com, ya que estas APIs esperan un permiso token.
  • CLIENT_SERVICE_ACCOUNT_EMAIL: el correo electrónico de la cuenta de servicio del cliente.
  • Hay otros parámetros opcionales disponibles y se describen en el Referencia de la línea de comandos de gcloud

Elige los tipos de tokens

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

Agrega de forma manual el rol Agente de servicio de Cloud Scheduler a tu cuenta de servicio de Cloud Scheduler

Esto es necesario solo si se cumple una de las siguientes condiciones:

  • Habilitó la API de Cloud Scheduler antes del 19 de marzo de 2019.
  • Quitaste el rol Agente de servicio de Cloud Scheduler de tu servicio. cuenta

La cuenta de servicio de Cloud Scheduler requiere la Rol de agente de servicios de Cloud Scheduler. Sin este puesto, Los trabajos de Cloud Scheduler fallan. Puedes agregar El rol Agente de servicios de Cloud Scheduler en tu Cloud Scheduler cuenta de servicio desde la consola de Google Cloud Gcloud CLI:

Console

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

    Ir a la API de Cloud Scheduler

    Si hay un campo Estado y el estado aparece como Habilitado, continuar. De lo contrario, haz clic en Habilitar.

  2. En la consola de Google Cloud, ve a Configuración. .

    Ir a la configuración

  3. Busca y copia el número de tu proyecto.

  4. En la consola de Google Cloud, ve a IAM .

    Ir a IAM

  5. Haz clic en Otorgar acceso. Se abrirá el panel Otorgar acceso.

  6. En el campo Principales nuevas, agrega una dirección de correo electrónico con el formato:

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

    Reemplaza PROJECT_NUMBER por tu Número del proyecto de Google Cloud.

  7. En la lista Selecciona un rol, busca y selecciona Cloud Scheduler Agente de servicio

  8. Haz clic en Guardar.

gcloud

  1. Confirma que la API de Cloud Scheduler esté habilitada para tu proyecto:

    gcloud services list --enabled \
     --filter=cloudscheduler.googleapis.com
    
    • Si ves el siguiente resultado, la API está habilitada:

      NAME: cloudscheduler.googleapis.com
      TITLE: Cloud Scheduler API
      
    • De lo contrario (por ejemplo, si ves Listed 0 items.), habilita la API:

      gcloud services enable cloudscheduler.googleapis.com
      
  2. Busca tu número de proyecto:

    gcloud projects describe PROJECT_ID --format='table(projectNumber)'
    

    Reemplaza PROJECT_ID con el ID del proyecto.

  3. Copia el número.

  4. Otorga el rol Cloud Scheduler Service Agent a la cuenta de servicio de Cloud Scheduler:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com \
       --role roles/cloudscheduler.serviceAgent
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID de tu proyecto
    • PROJECT_NUMBER: Es el número de proyecto que copiado anteriormente