Шлюз доступа SSH для многих серверов


12

Управление несколькими серверами, более 90 в настоящее время с 3 devops через Ansible. Все работает отлично, однако сейчас существует гигантская проблема безопасности. Каждый devop использует свой собственный локальный ключ ssh, чтобы получить доступ напрямую к серверам. Каждый devop использует ноутбук, и каждый ноутбук потенциально может быть скомпрометирован, таким образом, открывая всю сеть серверов prod для атаки.

Я ищу решение для централизованного управления доступом и, таким образом, блокирования доступа для любого данного ключа. Не похоже на то, как ключи добавляются в bitbucket или github.

Вдобавок ко всему, я бы предположил, что решением будет туннель от одной машины, шлюза, до желаемого сервера prod ... при прохождении шлюза запрос будет подбирать новый ключ и использовать для получения доступа к продукту. сервер. В результате мы можем быстро и эффективно прекратить доступ для любого devop в течение нескольких секунд, просто отказав в доступе к шлюзу.

введите описание изображения здесь

Это хорошая логика? Кто-нибудь уже видел решение, чтобы помешать этой проблеме?


1
Пора переходить на AWX / Tower.
Майкл Хэмптон

В последнее время я пробовал Kryptonite для управления ключами SSH и 2FA, и он работал для меня довольно хорошо. их пакет pro / enterprise, кажется, дает еще больший контроль, а также аудит входов в систему.
Alex

2
Ответ свободный IPA
Джейкоб Эванс

Ответы:


22

Это слишком сложно (проверка, есть ли у ключа доступ к конкретному серверу prod). Используйте сервер шлюза в качестве хоста перехода, который принимает каждый действительный ключ (но может легко удалить доступ к определенному ключу, который по очереди удаляет доступ ко всем серверам), а затем добавлять только разрешенные ключи к каждому соответствующему серверу. После этого убедитесь, что вы можете получить доступ к SSH-порту каждого сервера только через хост перехода.

Это стандартный подход.


2
Еще лучше: делайте то, что говорит @Sven, но также добавьте 2FA на хосте перехода. Потому что вы подключаетесь напрямую только с ноутбука, когда вам нужно вручную, верно? Что-нибудь автоматизированное работает с сервера внутри хоста перехода?
Адам

1
Если у вас есть локальный центр сертификации (подчиненный или изолированный), вы можете использовать эти сертификаты с SSH, что позволяет централизованно аннулировать сертификат, который считается скомпрометированным.
Рэндалл

11

Инженеры не должны запускать ANSI непосредственно со своего ноутбука, если только это не среда разработки / тестирования.

Вместо этого имейте центральный сервер, который извлекает runbook из git. Это позволяет дополнительные элементы управления (четыре глаза, обзор кода).

Объедините это с бастионом или хостом прыжка, чтобы ограничить доступ дальше.


1
Действительно, эту проблему решает AWX (или ее коммерческая версия Tower).
Майкл Хэмптон

1

Netflix реализовал ваши настройки и выпустил бесплатное программное обеспечение, чтобы помочь в этой ситуации.

Смотрите это видео https://www.oreilly.com/learning/how-netflix-gives-all-its-engineers-ssh-access или эту презентацию по адресу https://speakerdeck.com/rlewis/how-netflix-gives- все-его-инженеры-ssh-доступ-к-экземплярам, ​​работающим в производстве с основной точкой:

Мы рассмотрим нашу архитектуру SSH-бастиона, которая по своей сути использует SSO для аутентификации инженеров, а затем выдаст учетные данные для каждого пользователя с недолговечными сертификатами для SSH-аутентификации бастиона для экземпляра. Эти кратковременные учетные данные снижают риск потери. Мы рассмотрим, как этот подход позволяет нам проводить аудит и автоматически оповещать о фактах, а не замедлять работу инженеров перед предоставлением доступа.

Их программное обеспечение доступно здесь: https://github.com/Netflix/bless

Некоторые интересные вещи, даже если вы не реализуете их полное решение:

  • они используют сертификаты SSH вместо просто ключей; Вы можете поместить в сертификат гораздо больше метаданных, что позволяет использовать множество ограничений для каждого требования, а также упрощает аудит.
  • использование очень короткого (например, 5 минут) срока действия сертификатов (сессии SSH остаются открытыми даже после истечения срока действия сертификата)
  • использование 2FA также усложняет работу сценариев и заставляет разработчиков находить другие решения
  • определенный подмодуль, находящийся вне их инфраструктуры и должным образом защищенный с помощью механизмов безопасности, предлагаемых облаком, в котором он работает, динамически обрабатывает создание сертификатов, так что каждый разработчик может получить доступ к любому хосту

1

OneIdentity (ex-Balabit) SPS - это именно то, что вам нужно в этом сценарии. С помощью этого устройства вы можете управлять идентификаторами пользователей практически на любых машинах, отслеживать поведение пользователей, отслеживать и предупреждать, а также индексировать все, что пользователи делают для последующих проверок.


0

Мое предложение состоит в том, чтобы запретить доступ по SSH с компьютеров пользователей.

Вместо этого вы должны

  1. Принимаю playbooks в Git.
  2. Превратите «Сервер доступа» в сервер Jenkins.
  3. Предоставить Дженкинсу доступ только для пользователей devops.
  4. Выполнение Ansible играет на Jenkins поверх заданий сборки через HTTP.
  5. В качестве дополнительной меры безопасности отключите Jenkins CLI, если это необходимо.

Образец исполнения модели,

  1. Плагин Jenkins Ansible: https://wiki.jenkins.io/display/JENKINS/Ansible+Plugin

ИЛИ

  1. Классическая оболочка - выполнение типа работы. Добавьте шаги сборки вручную, включая git checkout.

Если вы ограничены в ресурсах сервера, тот же сервер Jenkins может также содержать Git (scm-manager), хотя существует дополнительная угроза безопасности, если один из компьютеров разработчика заражен. Вы можете решить эту проблему, отключив сервер Jenkins от Интернета и локально разрешив зависимости Ansible.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.