Cloud Scheduler puede llamar a objetivos HTTP que requieren autenticación si configuraste una cuenta de servicio asociada que tiene las credenciales adecuadas.
Configura la cuenta de servicio
Si aún no tienes una cuenta de servicio que quieras usar para trabajos de Cloud Scheduler con destinos 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 propósito.No revoques el rol de agente de servicio de Cloud Scheduler (
roles/cloudscheduler.serviceAgent
) del agente de servicio de Cloud Scheduler en tu proyecto. Si lo haces, se generarán respuestas403
en los extremos que requieran autenticación, incluso si la cuenta de servicio de tu trabajo tiene el rol adecuado.
Si tu objetivo está dentro de Google Cloud, otorga los roles de IAM necesarios a tu cuenta de servicio. Cada servicio dentro de Google Cloud requiere un rol específico, y el servicio receptor verifica automáticamente el token generado. Por ejemplo, para Cloud Run y las funciones de Cloud Run de segunda generación, 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 implementador debe tener el permiso
iam.serviceAccounts.actAs
para esa cuenta de servicio. Si creaste la cuenta de servicio, se te otorga este permiso de forma automática. De lo contrario, alguien que tenga los permisos correctos debe otorgarte este permiso en la cuenta de servicio.Práctica recomendada: En el paso anterior, si creaste una cuenta de servicio expresamente para invocar el servicio al que se orienta tu tarea de Cloud Scheduler, considera seguir el principio de privilegio mínimo (práctica recomendada de seguridad) vinculando la cuenta y su permiso de invocador a tu servicio objetivo. Puedes hacerlo con la consola de Google Cloud o gcloud CLI:
Console
1. Abra la consola de Google Cloud.
2. Elige tu proyecto.
3. Navega a la página del tipo de recurso que invocas. Por ejemplo, si invocas un servicio de Cloud Run, navega a la página que muestra los servicios de Cloud Run.
4. Selecciona la casilla de verificación a la izquierda del servicio que deseas invocar. (No hagas clic en el servicio).
5. Haz clic en la pestaña Permisos. Si el panel de información no está visible, puede 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 de la cuenta de servicio que creaste.
8. En Asignar roles, selecciona un rol para otorgar de la lista desplegable. Para seguir el principio de privilegio mínimo, elige el rol que incluya solo los permisos que necesita tu 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 objetivo. Por ejemplo,run
para un destino de Cloud Run.RESOURCE_ID
: Es el identificador de tu segmentación. Por ejemplo, el nombre del servicio para un destino de Cloud Run.PRINCIPAL
: Es 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
: Es el nombre del rol que requiere tu servicio de destino para la invocación. Por ejemplo,roles/run.invoker
para un destino de Cloud Run o de funciones de Cloud Run de segunda generación.
Ejemplos:
Destino de Cloud Run: El siguiente comando otorga el rol Invocador de Cloud Run a la cuenta de servicio
my-service-account@my-project.iam.gserviceaccount.com
para el servicio de Cloud Runmy-service
:gcloud run add-iam-policy-binding my-service \ --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ --role=roles/run.invoker
Objetivo de funciones de Cloud Run: El siguiente comando otorga el rol de invocador de Cloud Run que requieren las funciones de Cloud Run de segunda generación a la cuenta de servicio
my-service-account@my-project.iam.gserviceaccount.com
para la función de Cloud Run de segunda generaciónmy-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
Si tu objetivo está fuera de Google Cloud, el servicio receptor debe verificar el token de forma manual.
La cuenta de servicio predeterminada de Cloud Scheduler se configura automáticamente cuando habilitas la API de Cloud Scheduler, a menos que la hayas habilitado antes del 19 de marzo de 2019. En ese caso, debes agregar el rol
Cloud Scheduler Service Agent
de forma manual. Esto es para que pueda generar tokens de encabezado en nombre de la cuenta de servicio del cliente para autenticarte en el objetivo.Puedes verificar que la cuenta de servicio predeterminada de Cloud Scheduler esté configurada en tu proyecto y que tenga el rol
Cloud Scheduler Service Agent
otorgado si consultas 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 asignaciones de roles proporcionadas por Google.
Crea un trabajo programado 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 del cliente a tu solicitud create-job
:
Console
- Especifica la frecuencia como siempre.
- Especifica HTTP como el tipo de destino.
- Agrega la URL y el método HTTP como siempre.
- En la lista Encabezado de autenticación, selecciona el tipo de token. Ten en cuenta que, por lo general, OIDC (token de ID) se usa excepto para las APIs de Google alojadas en
*.googleapis.com
, ya que estas APIs esperan un token de acceso de OAuth. - En Cuenta de servicio, especifica el correo electrónico de la cuenta de servicio del cliente.
- Público es opcional y limita los destinatarios del token de OIDC. Por lo general, es la URL de destino del trabajo (sin ningún parámetro de URL). Si no se especifica, de forma predeterminada, se usa toda la URL como el público (incluidos los 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 único en el proyecto. Ten en cuenta que no puedes reutilizar un nombre de trabajo en un proyecto, incluso si borras su trabajo asociado.FREQUENCY
: El intervalo de trabajo es la frecuencia con la que se debe ejecutar el trabajo, por ejemplo,every 3 hours
oevery 10 mins
. La string que proporcionas puede ser cualquier string compatible con Crontab. (Aunque ya no recomendamos su uso, la sintaxis cron de App Engine heredada aún es compatible con las tareas existentes).URI
: Es la URL completamente calificada del extremo.--oidc-service-account-email
o--oauth-service-account-email
: Definen el tipo de token. Ten en cuenta que, por lo general, OIDC se usa excepto para las APIs de Google alojadas en*.googleapis.com
, ya que estas APIs esperan un token de OAuth.CLIENT_SERVICE_ACCOUNT_EMAIL
: Es el correo electrónico de la cuenta de servicio del cliente.- Hay otros parámetros opcionales disponibles, que se describen en la referencia de la línea de comandos de gcloud.
Elige tipos de token
Para autenticarse entre Cloud Scheduler y un objetivo HTTP, Cloud Scheduler crea un token de encabezado basado en la cuenta de servicio del cliente, identificado por su correo electrónico, y lo envía a través del HTTPS al destino.
Puedes usar un token de ID (OIDC) o uno de OAuth (acceso). Por lo general, el OIDC se usa excepto para las APIs de Google alojadas en *.googleapis.com
, ya que estas APIs esperan un token de OAuth.
Agrega de forma manual el rol de 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:
- Habilitaste la API de Cloud Scheduler antes del 19 de marzo de 2019
- Quitaste el rol de agente de servicio de Cloud Scheduler de tu cuenta de servicio.
La cuenta de servicio de Cloud Scheduler requiere el rol de agente de servicio de Cloud Scheduler. Sin este rol, los trabajos de Cloud Scheduler fallan. Puedes agregar el rol Agente de servicios de Cloud Scheduler a tu cuenta de servicio de Cloud Scheduler desde la consola de Google Cloud o con gcloud CLI:
Console
En la consola de Google Cloud, ve a la página API de Cloud Scheduler.
Ir a la API de Cloud Scheduler
Si hay un campo Estado y el estado aparece como Habilitado, continúa. De lo contrario, haz clic en Habilitar.
En la consola de Google Cloud, ve a la página Configuración.
Busca y copia el número de tu proyecto.
En la consola de Google Cloud, ve a la página IAM.
Haz clic en Otorgar acceso. Se abrirá el panel Otorgar acceso.
En el campo Principales nuevas, agrega una dirección de correo electrónico con el siguiente formato:
service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
Reemplaza
PROJECT_NUMBER
por el número de proyecto de Google Cloud.En la lista Seleccionar una función, busca y selecciona Agente de servicio de Cloud Scheduler.
Haz clic en Guardar.
gcloud
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
Si no es así (por ejemplo, si ves
Listed 0 items.
), habilita la API:gcloud services enable cloudscheduler.googleapis.com
Busca tu número de proyecto:
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
Reemplaza
PROJECT_ID
con el ID del proyecto.Copia el número.
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 proyectoPROJECT_NUMBER
: Es el número de proyecto que copiaste antes.