Como você pode redirecionar de HTTP para HTTPS onde o IAP está configurado com balanceadores de carga do GCP?

Como você pode redirecionar de HTTP para HTTPS onde o IAP está configurado com balanceadores de carga do GCP?

Atualmente, tenho um site hospedado no Google Compute Engine autenticado com Identity-Aware-Proxy, que fica atrás de um balanceador de carga. Tudo isso funciona muito bem em https, mas eu queria ter certeza de que http redireciona para https, pois atualmente ele responde apenas com um 404.

Então, eu seguihttps://cloud.google.com/load-balancing/docs/https/setting-up-http-https-redirectque informa para configurar um segundo balanceador de carga para redirecionar o tráfego http para https.

A questão, no entanto, é que depois de seguir estas instruções, quando navego parahttp://meu-site.comEstou tendo o erro a seguir:

Erro 403 (Proibido)!!1

  1. Isso é um erro.

Seu cliente não tem permissão para obter URL/ deste servidor. Isso é tudo que sabemos.

Embora o balanceador de carga http esteja configurado com um redirecionamento de caminho completo permanentemente movido 301, na guia de rede das ferramentas do desenvolvedor do navegador não há redirecionamento. Ele apenas responde imediatamente com o 403. A URL também permanece com o esquema http://.


Para resumir, esta é a aparência da minha configuração:

Balanceador de carga HTTPS externo

  • Frontend - HTTPS, IP estático, somente HTTPS
  • Back-end: Identity-Aware-Proxy (autenticação de e-mail via Identity Platform) -> grupo de instâncias do Compute Engine

Balanceador de carga HTTP externo

  • Frontend - HTTP, IP estático (igual ao balanceador de carga HTTPS acima)
  • Back-end - Nenhum
  • Regras de host e caminho:
    • Modo:Regra avançada de host e caminho (redirecionamento de URL, reescrita de URL)
    • Ação:Redirecione o cliente para host/caminho diferente
    • Redirecionamento de host: https://meu-site.com
    • Valor do caminho:*
    • Código de resposta de redirecionamento:301 mudou-se permanentemente
    • Redirecionamento HTTPS:Habilitado

Qualquer idéia de como consertar isso e não obter o 403 seria muito apreciada!

Responder1

Do jeito que você descreveuparece que você tem um problema com o mapa de URLporque você pode acessar a httpversão do seu site.

Para ter certeza absoluta, verifique novamente (ouCrie um novo) mapa de url com 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

Quando você tiver seu mapa de URL pronto, crie um 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

e uma regra de encaminhamento:

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 deve ser parecido com:

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

Certifique-se de usar o mesmo IP público para LBs HTTP e HTTPS. Verifique as regras do firewall se o tráfego de entrada não for bloqueado.

Se você fizer tudo correto, deverá obter a mesma curlsaída apresentada no exemplo.

informação relacionada