Предотвращение единой точки входа в настройке мастера / агента управления конфигурацией
Я исследую программное обеспечение для управления конфигурацией, как Puppet. Моя главная задача - не допустить единой точки входа на все наши внутренние серверы. Возьмите этот сценарий для примера.
Каким-то образом доступ к главному серверу конфигурации получен. Оттуда пользователь сможет получить относительно легкий доступ для манипулирования или, в конечном итоге, получить доступ к другим серверам, контролируемым мастером.
Основная цель состоит в том, чтобы предотвратить вход одной точки в сеть, даже если указанная основная конфигурация недоступна для общедоступного Интернета.
tl; dr Как я могу запретить одноточечный доступ ко всем остальным серверам в настройке управления конфигурацией master/agent?
2 ответа
Если вы думаете о том, чтобы поручить задачу определения правил Puppet другим людям (например, технику), вы можете создать мастера Puppet (Master A), подключить тестовую машину к Master A, а затем заставить их зафиксировать код в Git или SVN.
Вы управляете вторым хозяином Puppet (Master B), которому вы извлекаете код из Git или SVN. Все ваши устройства в сети подключаются к Master B. После того, как вы довольны кодом, вы можете попросить Puppet отправить его на все ваши устройства.
Таким образом, доступ ко всей конфигурации машины возможен только на Master B, к которому обращаются только вы.
Вы не можете с конфигурацией по умолчанию.
Puppet разработан так, чтобы агенты связывались с мастером. Даже если вы находитесь за несколькими брандмауэрами, вам необходимо разрешить агентам входить во внутреннюю сеть. Даже если вы обычно разрешаете соединения из DMZ во внутреннюю сеть, вам все равно может потребоваться управление машинами в открытом Интернете. Что Puppet требует, чтобы открыть вашу внутреннюю сеть для открытого Интернета.
Риск такой схемы извлечения клиента состоит в том, что если вы можете взломать машину с агентом, вы можете связаться с мастером, и если у мастера есть какая-либо уязвимость, вы можете взломать ее, и с их помощью вы можете контролировать все машины с агентами, плюс Вы можете подключить атаку во внутренней сети. Итак, если уязвимость используется в главном канале связи Puppet с агентами, то Puppet становится вектором атаки (огромным, поскольку вы, возможно, управляете всей своей инфраструктурой с его помощью, и вы разрешили доступ извне к вашей локальной сети).
При использовании схемы master-push это может быть сведено к минимуму, поскольку master будет единственной точкой защиты и будет находиться внутри безопасной внутренней сети, а соединения будут проходить только изнутри наружу.
В PuppetLabs (4projects.puppetlabs.com/issues/2045) имеется ожидающий запрос функции (4 года!) Под названием Push-функциональность в puppetmaster для клиентов. Чтение комментариев к этому запросу и поиск таких вещей, как следующий комментарий, заставляет задуматься, действительно ли разработчики Puppet понимают, в чем проблема:
В конечном счете, это не так уж и высокий приоритет - почти все риски, связанные с открытием порта для главных экспонатов, также связаны с тем, что мастер обращается к клиенту и связывается с ним. Существует мало или нет изменений в реальном риске для предложенной модели.
Однако пока разработчики понимают проблему, другие разрабатывают свои собственные решения (например, https://github.com/tomas-edwardsson/puppet-push).
Обновление: я нашел презентацию Бернда Стрёссенройтера, озаглавленную " Лучшие практики о том, как превратить вашу среду в управляемую среду Puppet", доступную в формате PDF, по адресу http://stroessenreuther.info/pub/Puppet_getting_started.pdf
Он предлагает установить ssh-соединения от мастера к агентам и открыть обратный туннель, чтобы агенты могли подключаться к мастеру. Эти соединения могут периодически запускаться в задании cron. Таким образом, вам не нужно открывать внутреннюю сеть для входящих подключений, пока агенты имеют доступ к основным данным.
Теперь, что касается механизма вытягивания, это может показаться плохим проектом, но на самом деле очень важно, чтобы работали очень автоматизированные среды. Например, в эластичной сети (например, EC2 с автоматическим масштабированием), где серверы запускаются и останавливаются автоматически, серверы должны быть в состоянии настроить себя сразу, поэтому они загружаются, и первое, что они делают, это обращаются к мастеру за обновленным конфигурации. Это будет сложнее, если вам придется периодически передавать конфигурацию на каждый сервер, потому что им придется ждать мастера (секунды, минуты или часы; в некоторых приложениях это недопустимо).