¿Cómo se puede redirigir de HTTP a HTTPS cuando IAP está configurado con GCP Load Balancers?

¿Cómo se puede redirigir de HTTP a HTTPS cuando IAP está configurado con GCP Load Balancers?

Actualmente tengo un sitio web alojado en Google Compute Engine que está autenticado con Identity-Aware-Proxy que se encuentra detrás de un equilibrador de carga. Todo esto funciona muy bien en https, pero quería asegurarme de que http redireccione a https ya que actualmente solo responde con un 404.

Entonces, seguíhttps://cloud.google.com/load-balancing/docs/https/setting-up-http-https-redirectque le indica que configure un segundo equilibrador de carga para redirigir el tráfico http a https.

Sin embargo, el problema es que después de seguir estas instrucciones, cuando buscohttp://mi-sitio-web.comObtuve el siguiente error:

¡¡Error 403 (Prohibido)!!1

  1. Eso es un error.

Su cliente no tiene permiso para obtener URL de este servidor. Eso es todo lo que sabemos.

Aunque el equilibrador de carga http está configurado con un redireccionamiento 301 - Redireccionamiento de ruta completa movido permanentemente, en la pestaña de red de herramientas de desarrollador del navegador no se produce ningún redireccionamiento. Simplemente responde de inmediato con el 403. La URL también permanece con el esquema http://.


Para resumir, así es como se ve mi configuración:

Balanceador de carga HTTPS externo

  • Frontend: HTTPS, IP estática, solo HTTPS
  • Backend: Identity-Aware-Proxy (autenticación de correo electrónico a través de Identity Platform) -> grupo de instancias de Compute Engine

Balanceador de carga HTTP externo

  • Frontend: HTTP, IP estática (igual que el balanceador de carga HTTPS anterior)
  • Servidor: Ninguno
  • Reglas de host y ruta:
    • Modo:Regla avanzada de ruta y host (redireccionamiento de URL, reescritura de URL)
    • Acción:Redirigir al cliente a un host/ruta diferente
    • Redirección de host: https://mi-sitio-web.com
    • Valor de ruta:*
    • Código de respuesta de redireccionamiento:301 Movido Permanentemente
    • Redirección HTTPS:Activado

¡Cualquier idea sobre cómo solucionar este problema y no obtener el 403 sería muy apreciada!

Respuesta1

La forma en que lo describisteparece que tienes un problema con el mapa de URLporque puedes acceder a la httpversión de tu sitio.

Para estar absolutamente seguro, verifique dos veces (ocrear nuevo) mapa de URL con gcloudcomando:

gcloud compute url-maps describe web-map-http

creationTimestamp: '2020-12-02T03:18:27.053-08:00'
defaultUrlRedirect:
  httpsRedirect: true
  redirectResponseCode: MOVED_PERMANENTLY_DEFAULT
fingerprint: KU2hPu1ao=
id: '50586028237895404'
kind: compute#urlMap
name: web-map-http
selfLink: https://www.googleapis.com/compute/v1/projects/xxxxx/global/urlMaps/web-map-http

Cuando tengas tu mapa de URL listo, crea un proxy de destino:

gcloud compute target-http-proxies create http-lb-proxy \
   --url-map=web-map-http \
   --global

resultado:

gcloud compute target-http-proxies describe http-lb-proxy
creationTimestamp: '2020-12-02T03:19:39.090-08:00'
fingerprint: lgJkIY8E=
id: '3781119498457764'
kind: compute#targetHttpProxy
name: http-lb-proxy
selfLink: https://www.googleapis.com/compute/v1/projects/xxxx/global/targetHttpProxies/http-lb-proxy
urlMap: https://www.googleapis.com/compute/v1/projects/xxxx/global/urlMaps/web-map-http

y una regla de reenvío:

gcloud compute forwarding-rules create http-content-rule \
   --address=lb-ipv4-1 \ # Same IP address used for HTTPS load balancer
   --global \
   --target-http-proxy=http-lb-proxy \
   --ports=80

que debería verse así:

gcloud compute forwarding-rules describe http-content-rule --global
IPAddress: 34.107.123.141
IPProtocol: TCP
creationTimestamp: '2020-12-02T03:22:38.132-08:00'
description: ''
fingerprint: L1vA0Ik9Y=
id: '888330202637841'
kind: compute#forwardingRule
loadBalancingScheme: EXTERNAL
name: http-content-rule
networkTier: PREMIUM
portRange: 80-80
selfLink: https://www.googleapis.com/compute/v1/projects/xxxx/global/forwardingRules/http-content-rule
target: https://www.googleapis.com/compute/v1/projects/xxxx/global/targetHttpProxies/http-lb-proxy

Asegúrese de utilizar la misma IP pública para los LB HTTP y HTTPS. Verifique las reglas del firewall si el tráfico entrante no se bloquea.

Si hace todo correctamente, debería obtener el mismo curlresultado que se presenta en el ejemplo.

información relacionada