From f893662ef1f937453c1c17e13ba6b9f8b3c34465 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Wed, 26 Aug 2026 15:21:04 +0300 Subject: [PATCH] =?UTF-8?q?fix(observability):=20=D1=83=20Grafana=20=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D1=91=D1=82=D1=81=D1=8F=20=D0=BE=D0=B4=D0=B8?= =?UTF-8?q?=D0=BD=20=D0=B2=D1=85=D0=BE=D0=B4=20(#3078)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Внешний basic_auth Caddy снят с витрины по решению владельца: два запроса пароля подряд мешали работе, а у Grafana есть собственная аутентификация с ролями и GF_USERS_ALLOW_SIGN_UP=false. Что теряется, чтобы решение было осознанным: basic_auth отсекал сканеры до Grafana и прикрыл бы её собственную будущую уязвимость. Теперь страница входа видна из интернета напрямую. Это записано комментарием прямо в конфиге, чтобы через полгода не выглядело недосмотром. Приём метрик НАРОЧНО остаётся под basic_auth: туда ходит агент по паролю, который лежит в открытом виде в окружении продуктового хоста, и отдельная учётка там ограничивает ущерб записью. Снят ровно один слой и ровно с витрины. Файл metrics-ui.caddy.snippet и его bind-mount оставлены на месте: диффу так меньше, вернуть слой можно одной строкой. Гард импортов (#3104) проверяет обратное направление - что каждый import покрыт маунтом, - поэтому лишний маунт его не трогает. Проверено: scripts/check-caddy-snippet-mounts.py зелёный (6 конфигов, 7 маунтов); конфиг с новой версией infra.caddy проходит caddy validate в одноразовом контейнере на Beget - Valid configuration. --- caddy/sites/infra.caddy | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/caddy/sites/infra.caddy b/caddy/sites/infra.caddy index b39f3de7..6c289ae4 100644 --- a/caddy/sites/infra.caddy +++ b/caddy/sites/infra.caddy @@ -94,8 +94,18 @@ metrics.gendsgn.ru { reverse_proxy loki:3100 } + # Вход ОДИН — собственный вход Grafana (#3078). Внешний basic_auth снят по + # решению владельца: два запроса пароля подряд мешали работе, а Grafana имеет + # собственную аутентификацию с ролями и `GF_USERS_ALLOW_SIGN_UP=false`. + # + # Что при этом теряется, чтобы решение было осознанным: basic_auth отсекал + # сканеры до Grafana и прикрывал бы её собственную будущую уязвимость. Теперь + # страница входа Grafana видна из интернета напрямую. + # + # Приём метрик НАРОЧНО остаётся под basic_auth (см. handle_path выше): туда + # ходит агент по паролю, который лежит в открытом виде в окружении + # продуктового хоста, и отдельная учётка там ограничивает ущерб записью. handle { - import ../metrics-ui.caddy.snippet reverse_proxy grafana:3000 } -- 2.45.3