Cloud Scheduler puede llamar a objetivos HTTP que requieren autenticación si configuras una cuenta de servicio asociada que tiene las credenciales adecuadas.
Configurar una cuenta de servicio
Por lo general, una cuenta de servicio es usada por una aplicación o carga de trabajo de procesamiento 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 realizar llamadas autorizadas a la API. Para ello, se autentican como la cuenta de servicio y acceden a todos los recursos a los que tiene permiso para acceder la cuenta de servicio.
La forma más común de permitir que una aplicación se autentique como una cuenta de servicio es conectar una cuenta de servicio al recurso que ejecuta la aplicación. Luego, puedes otorgar roles de Identity and Access Management (IAM) a la cuenta de servicio para permitir que la cuenta de servicio acceda a los Google Cloud recursos.
Si aún no tienes una cuenta de servicio que quieras usar para trabajos de Cloud Scheduler con objetivos HTTP, crea una cuenta de servicio nueva. Ten en cuenta la siguiente información:
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-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 respuestas403en 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 otorgar el rol
Cloud Run Invoker.Para 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 de usuario de la cuenta de servicio (
roles/iam.serviceAccountUser) en la cuenta de servicio. Este rol predefinido contiene el permisoiam.serviceAccounts.actAs, que se requiere para conectar una cuenta de servicio a un recurso. (Si creaste la cuenta de servicio, se te otorga este permiso de forma automática).En el paso anterior, si creaste específicamente una cuenta de servicio para invocar el servicio al que apunta tu trabajo de Cloud Scheduler, puedes seguir el principio de privilegio mínimo vinculando la cuenta y su permiso de invocador a tu servicio de destino:
Console
En la Google Cloud consola de, en la página del selector de proyectos, selecciona un Google Cloud proyecto.
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.
Selecciona la casilla de verificación a la izquierda del servicio que deseas invocar. (No hagas clic en el servicio en sí).
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 > Permisos.
Haz clic en Agregar principal.
En el campo Nuevas principales, ingresa la dirección de correo electrónico de la cuenta de servicio que creaste.
En la lista Seleccionar un rol, elige un rol para otorgar.
Sigue el principio de privilegio mínimo eligiendo el rol que incluye solo los permisos que necesita tu principal.
Haz clic en Guardar.
gcloud
gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL \ --role=ROLEReemplaza lo siguiente:
RESOURCE_TYPE: Es el tipo de recurso de tu objetivo. Por ejemplo,runpara un objetivo de Cloud Run.RESOURCE_ID: Es el identificador de tu objetivo. Por ejemplo, el nombre del servicio para un objetivo 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.invokerpara un objetivo de Cloud Run o de función de Cloud Run de segunda generación.- Otros parámetros opcionales se describen en la referencia de la línea de comandos de gcloud.
Ejemplos:
Otorga el rol de IAM de invocador de Cloud Run (
roles/run.invoker) a la cuenta de serviciomy-service-account@my-project.iam.gserviceaccount.comen 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.invokerOtorga el rol de IAM de invocador de Cloud Run (
roles/run.invoker) que requieren las funciones de Cloud Run de segunda generación a la cuenta de serviciomy-service-account@my-project.iam.gserviceaccount.comen la función de Cloud Runmy-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
Para obtener un ejemplo del uso de Terraform para crear una cuenta de servicio con permiso para invocar un servicio de Cloud Run, consulta Crea una cuenta de servicio para Cloud Scheduler.
Si tu objetivo está fuera de Google Cloud, el servicio receptor debe verificar el token de forma manual.
El agente de servicio predeterminado 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 cuyo caso debes otorgar el rol de agente de servicio de Cloud Scheduler. Esto es para que pueda generar tokens de encabezado en nombre de tu cuenta de servicio para autenticarte en el objetivo.
Crea un trabajo de Cloud Scheduler que use autenticación
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 un token 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.
Para crear un trabajo de Cloud Scheduler 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 cuando creas tu trabajo:
Console
En la Google Cloud consola, ve a la página Cloud Scheduler.
Haz clic en Crear trabajo.
En el campo Nombre, ingresa un nombre para tu trabajo que sea único para el proyecto. Ten en cuenta que no puedes volver a usar un nombre de trabajo en un proyecto, incluso si borras su trabajo asociado.
En la lista Región, selecciona una región para tu trabajo.
Especifica una Frecuencia y una Zona horaria para tu trabajo. La cadena que proporcionas aquí puede ser cualquier unix-cron compatible cadena.
Haz clic en Continuar.
En la lista Tipo de destino, selecciona HTTP.
Especifica una URL y un método HTTP.
En la lista Encabezado de autenticación, selecciona el tipo de token. 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.En la lista Cuenta de servicio, selecciona el correo electrónico de tu cuenta de servicio.
De manera opcional, especifica un Público que limite los destinatarios para el token de OIDC. Por lo general, es la URL de destino del trabajo sin ningún parámetro de URL. Si no se especifica, se usa la URL completa como público, incluidos los parámetros de solicitud.
Establece la configuración opcional.
Haz clic en Crear.
gcloud
gcloud scheduler jobs create http JOB_ID \ --schedule="FREQUENCY" \ --uri=URI \ --oidc-service-account-email=SERVICE_ACCOUNT_EMAIL
Reemplaza lo siguiente:
JOB_ID: Es un nombre para el trabajo que es único para el proyecto. Ten en cuenta que no puedes volver a usar un nombre de trabajo en un proyecto, incluso si borras su trabajo asociado.FREQUENCY: Es el intervalo o la frecuencia con la que se ejecutará el trabajo; por ejemplo,every 3 hoursoevery 10 mins. La cadena que proporcionas aquí puede ser cualquier unix-cron compatible cadena.URI: Es la URL completamente calificada del extremo.SERVICE_ACCOUNT_EMAIL: Es el correo electrónico de tu cuenta de servicio. 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. (Usa la marca--oauth-service-account-emailen su lugar para definir un tipo de token de OAuth).- Otros parámetros opcionales se describen en la referencia de la línea de comandos de gcloud.
Otorga el rol de 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 administra cuentas de servicio que se conocen como agentes de servicio y que se crean y otorgan roles automáticamente a medida que habilitas y usas Google Cloud servicios.
El agente de servicio de Cloud Scheduler requiere el
rol de agente de servicio de Cloud Scheduler
(roles/cloudscheduler.serviceAgent). Sin este rol, fallan los trabajos de Cloud Scheduler. Puedes otorgar el rol de forma manual a tu agente de servicio de Cloud Scheduler, que tiene una dirección de correo electrónico con el siguiente formato:
service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
Debes otorgar el rol de forma manual 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 del agente de servicio.
Puedes verificar que el agente de servicio de Cloud Scheduler esté configurado en tu proyecto y que tenga el rol de agente de servicio de Cloud Scheduler otorgado . Para ello, consulta el acceso actual de tu proyecto. Ten en cuenta que, si usas la Google Cloud consola para ver el acceso de tu proyecto, asegúrate de seleccionar la casilla de verificación Incluir asignaciones de roles proporcionadas por Google.
Para obtener información sobre cómo otorgar un rol a tu agente de servicio, consulta Crea y otorga roles a los agentes de servicio.
¿Qué sigue?
Aprende a autenticarte en Cloud Scheduler de manera programática.