Usa la autenticación con destinos de HTTP

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

Configurar una cuenta de servicio

Por lo general, una cuenta de servicio se usa en una carga de trabajo de aplicación o 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 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 los roles de Identity and Access Management (IAM) de la cuenta de servicio para permitir que la cuenta de servicio acceda a los recursos de 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 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.). 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 respuestas 403 a los extremos que requieren autenticación, incluso si la cuenta de servicio de tu trabajo tiene el rol adecuado.

  2. Si tu destino 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 Cloud Run Functions, debes otorgar el rol Invocador de Cloud Run (roles/run.invoker), mientras que para Cloud Functions (1ª gen.), debes otorgar el rol Invocador de Cloud Functions (roles/cloudfunctions.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 cuenta de servicio (roles/iam.serviceAccountUser) en la cuenta de servicio. Este rol predefinido contiene el permiso iam.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 se orienta 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

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

      Ir al selector de proyectos

    2. Navega a la página del tipo de recurso que estás invocando. Por ejemplo, si invocas un servicio de Cloud Run, navega a la página que enumera los servicios de Cloud Run.

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

    4. 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.

    5. Haz clic en Agregar principal.

    6. En el campo Principales nuevas, ingresa la dirección de correo electrónico de la cuenta de servicio que creaste.

    7. En la lista Seleccionar un rol, elige un rol para otorgar.

      Sigue el principio de privilegio mínimo y elige el rol que incluya solo los permisos que necesita la principal.

    8. Haz clic en Guardar.

    gcloud

    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 services para un destino de servicio de Cloud Run.
    • RESOURCE_ID: Es el identificador de tu destino. Por ejemplo, el nombre de un servicio de Cloud Run.
    • PRINCIPAL: Es el identificador de tu cuenta de servicio. Este tiene el siguiente formato: serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS. Por ejemplo, serviceAccount:my-service-account@my-project..
    • 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 servicio de Cloud Run. Para los destinos de Cloud Run Functions, recomendamos usar el comando add-invoker-policy-binding.

    Ejemplos:

    • Usa el comando gcloud run services add-iam-policy-binding para otorgar el rol de IAM Invocador de Cloud Run (roles/run.invoker) a la cuenta de servicio my-service-account@my-project. en el servicio de Cloud Run my-service:

      gcloud run services add-iam-policy-binding my-service \
          --region=REGION \
          --member=serviceAccount:my-service-account@my-project. \
          --role=roles/run.invoker
      
    • Usa el comando gcloud functions add-invoker-policy-binding para otorgar el rol adecuado a la cuenta de servicio my-service-account@my-project. en la función de Cloud Run my-cloud-function.

      Para Cloud Run Functions, esto agrega la vinculación Invocador de Cloud Run (roles/run.invoker) a la política de IAM del servicio de Cloud Run subyacente de la función especificada. En Cloud Functions (1ª gen.), esto agrega la vinculación Invocador de Cloud Functions (roles/cloudfunctions.invoker) a la política de IAM de la función especificada:

      gcloud functions add-invoker-policy-binding my-cloud-function \
          --region=REGION \
          --member=serviceAccount:my-service-account@my-project.
      

    Para ver un ejemplo de cómo usar 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.

  3. Si tu destino está fuera de Google Cloud, el servicio receptor debe verificar el token de forma manual.

  4. El agente de servicio predeterminado de Cloud Scheduler se configura de forma automática 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 tu destino.

Crea un trabajo de Cloud Scheduler que use la autenticación

Para autenticar 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, con HTTPS, al destino. 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 alojadas en *.googleapis.com: estas APIs esperan un token de OAuth, y Cloud Scheduler acepta tokens de OAuth solo para las URLs de destino alojadas en *.googleapis.com.

Para crear un trabajo de Cloud Scheduler que use la 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 el trabajo:

Console

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

    Ir a Cloud Scheduler

  2. Haz clic en Crear trabajo.

  3. En el campo Nombre, ingresa un nombre para el trabajo que sea único en el proyecto y la región. Después de borrar el trabajo asociado, puedes volver a usar su nombre.

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

  5. Especifica una Frecuencia y una Zona horaria para tu trabajo. 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 que comience con https:// y un método HTTP.

  9. En la lista Encabezado de autenticación, selecciona el tipo de token. Por lo general, se usa un token de OIDC, excepto para 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 electrónico de tu cuenta de servicio.

  11. De manera opcional, especifica un Público que limite los destinatarios del token de OIDC; por lo general, la URL de destino del trabajo sin ningún parámetro de URL. Si no se especifica, se usa la URL completa como el público, incluidos los parámetros de solicitud.

  12. Establece los parámetros de configuración opcionales.

  13. Haz clic en Crear.

gcloud

gcloud scheduler jobs create http JOB_ID \
    --location=LOCATION \
    --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 y la región. Después de borrar el trabajo asociado, puedes volver a usar su nombre.
  • LOCATION: Es la ubicación (región) del trabajo.
  • FREQUENCY: Es el intervalo o la frecuencia con la que se 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: Es la URL HTTPS completamente calificada del extremo (debe comenzar con https://).
  • SERVICE_ACCOUNT_EMAIL: Es el correo electrónico de tu cuenta de servicio. Por lo general, se usa un token de OIDC, excepto para 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 de gcloud.

Otorga el rol de agente de servicio de Cloud Scheduler

Algunos servicios de Google Cloud necesitan acceso a tus recursos para 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 se les otorgan roles automáticamente a medida que habilitas y usas los servicios de Google Cloud.

El agente de servicio de Cloud Scheduler requiere el rol de agente de servicio de Cloud Scheduler (roles/cloudscheduler.serviceAgent). Sin este rol, los trabajos de Cloud Scheduler que requieren el agente de servicio (como los trabajos de destino HTTP que usan autenticación y los trabajos de destino de Pub/Sub) fallan. 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.

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.

Para verificar que el agente de servicio de Cloud Scheduler esté configurado en tu proyecto y que tenga asignado el rol de agente de servicio de Cloud Scheduler, consulta 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.

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?

Obtén información para autenticarte en Cloud Scheduler de manera programática.