![Как можно перенаправить с HTTP на HTTPS, если IAP настроен с помощью балансировщиков нагрузки GCP?](https://rvso.com/image/760611/%D0%9A%D0%B0%D0%BA%20%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%B0%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D1%81%20HTTP%20%D0%BD%D0%B0%20HTTPS%2C%20%D0%B5%D1%81%D0%BB%D0%B8%20IAP%20%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20%D0%B1%D0%B0%D0%BB%D0%B0%D0%BD%D1%81%D0%B8%D1%80%D0%BE%D0%B2%D1%89%D0%B8%D0%BA%D0%BE%D0%B2%20%D0%BD%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8%20GCP%3F.png)
В настоящее время у меня есть веб-сайт, размещенный на Google Compute Engine, который аутентифицирован с помощью Identity-Aware-Proxy, который находится за балансировщиком нагрузки. Все это отлично работает через https, но я хотел убедиться, что http перенаправляет на https, так как в настоящее время он просто отвечает 404.
Итак, я последовалhttps://cloud.google.com/load-balancing/docs/https/setting-up-http-https-redirectкоторый говорит вам о необходимости настроить второй балансировщик нагрузки для перенаправления http-трафика на https.
Однако проблема в том, что после выполнения этих инструкций, когда я перехожу наhttp://my-website.comЯ получаю следующую ошибку:
Ошибка 403 (Запрещено)!!1
- Это ошибка.
У вашего клиента нет разрешения на получение URL / с этого сервера. Это все, что мы знаем.
Хотя балансировщик нагрузки http настроен с 301 - Moved Permanently Full path Redirect, на вкладке сети инструментов разработчика браузера нет никакого редиректа, который происходит. Он просто сразу отвечает 403. URL также остается со схемой http://.
Подводя итог, вот как выглядит моя установка:
Внешний балансировщик нагрузки HTTPS
- Фронтенд — HTTPS, статический IP, только HTTPS
- Бэкэнд — Identity-Aware-Proxy (аутентификация электронной почты через Identity Platform) -> группа экземпляров Compute Engine
Внешний балансировщик нагрузки HTTP
- Фронтенд — HTTP, статический IP (то же, что и балансировщик нагрузки HTTPS выше)
- Бэкэнд - Нет
- Правила хоста и пути:
- Режим:Расширенное правило хоста и пути (перенаправление URL, перезапись URL)
- Действие:Перенаправить клиента на другой хост/путь
- Перенаправление хоста: https://my-website.com
- Значение пути:*
- Код ответа перенаправления:301 - Перемещено навсегда
- HTTPS-перенаправление:Включено
Буду очень признателен за любые идеи, как это исправить и не получать ошибку 403!
решение1
То, как вы описалипохоже, у вас проблема с url-mapпотому что вы можете получить доступ к http
версии своего сайта.
Чтобы быть абсолютно уверенным, дважды проверьте (илисоздавать новое) url-map с gcloud
командой:
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
Когда ваша карта URL будет готова, создайте целевой прокси-сервер:
gcloud compute target-http-proxies create http-lb-proxy \
--url-map=web-map-http \
--global
результат:
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
и правило пересылки:
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
что должно выглядеть так:
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
Убедитесь, что вы используете один и тот же публичный IP для HTTP и HTTPS LB. Проверьте правила брандмауэра, не блокируется ли входящий трафик.
Если вы все сделаете правильно, вы должны получить тот же curl
результат, что представлен в примере.