В моем проекте GCP есть экземпляр, на котором запущен сервер Jenkins за ИПД-защищенный балансировщик нагрузки.
Добавление защиты IAP вызвало у меня две связанные проблемы, которые мне не удалось решить (и я думаю, что обе могут быть решены аналогичным образом):
Раньше у меня был физический ведомый Jenkins (который должен быть физическим, поскольку он подключен к специальному оборудованию), который был подключен к облачному серверу Jenkins. Теперь, когда облачный сервер защищен IAP, локальное подчиненное устройство Jenkins больше не может подключиться к нему, поскольку подчиненное приложение JNLP не знает, как авторизоваться с помощью интерфейса входа в систему Google. (РЕДАКТИРОВАТЬ: В конце концов я решил эту конкретную проблему, создав туннель SSH для ведомого устройства непосредственно на серверную машину Jenkins.)
Раньше у меня был репозиторий BitBucket-Cloud, POST
s на сервер Jenkins через функциональность веб-перехватчика BitBucket. BitBucket также не знает, как авторизоваться с помощью IAP, поэтому он тоже больше не работает.
Похоже, что Google поддерживает программная авторизация но в обоих случаях у меня нет программного контроля над сущностью, которая должна взаимодействовать с сервером Jenkins.
Есть ли способ обойти эту проблему? У меня есть несколько направлений, но я не уверен, как лучше всего это сделать / если это вообще возможно:
Есть ли способ просто занести определенные URL-адреса в белый список в IAP, чтобы они не требовали авторизации? Например, разрешить всем без авторизации доступ к https://my.jenkins.domain.com/bitbucket-scmsource-hook/notify
так что BitBucket может webhook? (Я знаю, что это не оптимально с точки зрения безопасности)
Есть ли способ внести в белый список доступ с определенных IP-адресов? Разрешить прохождение всех запросов от BitBucket Cloud и всех запросов от физического ведомого устройства без необходимости их аутентификации для IAP. Очевидно, что это также не оптимальная безопасность.
Возможно, создайте еще один параллельный балансировщик нагрузки без IAP, который также направляет на сервер Jenkins, который я специально настрою для внесения в белый список URL / IP-адресов, как я описал выше, и внесения в черный список всего остального, а также подключения BitBucket и физического ведомого устройства к это вместо обычного балансировщика нагрузки. Те же соображения безопасности, что и в приведенных выше решениях, очень сложные, требовали другого доменного имени. Совсем не оптимально. Но это единственное практическое решение, которое я могу придумать.
Что вы думаете? У вас есть идеи получше, проще и безопаснее? Может, мне не хватает очевидного способа сделать это? Я не смог найти в документации IAP ничего о том, как добиться чего-то подобного.
Итак, главный ответ здесь в основном то, что вам нужно. У меня есть отдельная небольшая виртуальная машина с обратным прокси-сервером Nginx, которая используется исключительно для обработки веб-перехватчиков. Он направляется в тот же сервер Jenkins, что и мой балансировщик нагрузки Google IAP.
Я использую GitHub для своих веб-перехватчиков, но полагаю, что он, вероятно, работает аналогично для Bitbucket.
На самом деле, у меня было бы задание Jenkins, которое запускалось бы периодически (ежедневно?), Которое возьмите записи CIDR отсюда и обновите правило брандмауэра для другого балансировщика нагрузки.