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
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 respuestas403
a los endpoints que requieran autenticación, aunque la cuenta de servicio de tu trabajo tenga el rol adecuado.
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 permisoiam.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
En la Google Cloud consola, en la página del selector de proyectos, selecciona unGoogle Cloud proyecto.
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.
Seleccione la casilla situada a la izquierda del servicio que quiera 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 tengas que hacer clic en Mostrar panel de información > Permisos.
Haz clic en
Añadir principal.En el campo Principales nuevas, introduce la dirección de correo de la cuenta de servicio que has creado.
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.
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 serviciomy-service-account@my-project.iam.gserviceaccount.com
en 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
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 serviciomy-service-account@my-project.iam.gserviceaccount.com
de 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
Si el destino está fuera de Google Cloud, el servicio receptor debe verificar el token manualmente.
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
En la Google Cloud consola, ve a la página Cloud Scheduler.
Haz clic en
Crear trabajo.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.
En la lista Región, selecciona una región para tu trabajo.
Especifique la frecuencia y la zona horaria de la tarea. La cadena que proporciones aquí puede ser cualquier cadena compatible con unix-cron.
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 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.En la lista Cuenta de servicio, selecciona el correo de tu cuenta de servicio.
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.
Configura los ajustes opcionales que quieras.
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
oevery 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.