Рубрики
Uncategorized

Развертывание хоста бастиона в AWS использует облачность

Обзор в этом посте в блоге мы собираемся поговорить о том, что такое хост Бастиона и почему мы … Теги с техникой, безопасностью, дежопами.

В этом посте в блоге мы собираемся поговорить о том, что такое Host Bastion и зачем нам нужен один. После этого мы собираемся развернуть доказательство концепции с использованием AWS CloudFormation.

Хотя трудиться очень обескуражен, иногда нам нужно SSH в пример, чтобы сделать какую-то отладку. В результате нам нужно разоблачить этот экземпляр всего Интернета, и это Нет Буэно Отказ Один из способов предотвращения этого — это реализовать хост бастиона.

Хост Bastion — это сервер, целью которого является предоставление доступа к частной сети от внешней сети, такой как Интернет.

Идея реализации этого способна уменьшить поверхность атаки нашей инфраструктуры, выполняя 2 вещи:

  1. Удаление экземпляров приложений (также может быть экземпляром базы данных) или другими серверами, которые не должны быть открыты для всего мира.
  2. Возможность укреплена одной машиной (бастион), а не каждый другой сервер в нашей инфраструктуре. Итак, в этом случае M̶O̶R̶e̶ меньше Merrier.

Еще одна выгода, что хост-бастион может иметь вход, чтобы предотвратить отказ Отказ Это работает, потому что инженеры имеют собственную ключевую пару. В результате вы можете отслеживать, что Алиса и Боб делали во время их последней сессии.

Идея состоит в том, что наш инженер на звонке будет SSH Ее путь в экземпляр приложения через хост Бастиона. Чтобы воспроизвести эту настройку, нам нужно развернуть 15+ ресурсов AWS, но давайте сосредоточимся на те, которые находятся на диаграмме:

VPC.

Нам нужен один, чтобы мы могли создать виртуальную сеть, где будут работать наши экземпляры

Частная подсеть

Нам нужна сеть, которая может получить только внутренний трафик (нам нужен только частный IP-адрес)

Общественная подсеть

Нам нужна сеть, которая может получать трафик из Интернета (нам нужен публичный IP-адрес)

Группа безопасности Bastion (SG)

Нам нужно, чтобы убедиться, что экземпляр Host Bastion может получать трафик из порта 22 (SSH).

Приложение SG.

Нам нужно убедиться, что наш экземпляр приложения может получать трафик с нашего Bastion Host SG.

Bastion Host (EC2)

Нам нужен сервер, который мы можем использовать в качестве ведущего бастиона

Экземпляр приложения (EC2)

Нам нужен сервер, который не подвергается воздействию Интернета

Вы можете найти соответствующие файлы в Github Отказ

Предварительные условия

  • Убедитесь, что у вас есть Аккаунт AWS.
  • Убедитесь, что у вас есть пользователь с соответствующими ролями
  • Создать ключевую пару в US-East-1 Зона доступности. Мы будем использовать ключи для подключения к нашему экземпляру.

Main.yml.

Мы можем разделить этот файл на 3 раздела:

  • Параметры : Где мы импортируем переменные из Deploy.sh (Подробнее об этом идет дальше) Таким образом, мы можем использовать их с атрибутами наших ресурсов.
  • Ресурсы : Где мы определяем все ресурсы AWS, которые нам нужны для этой настройки.
  • Вывод : Если все идет по плану, мы хотим импортировать IP-адреса из наших созданных экземпляров.

Помните: хотя это простое настройка, нам нужно как минимум 15 AWS ресурсов, чтобы сделать желаемую работу реализации. Например, нам нужен интернет-шлюз, поэтому наш экземпляр Bastion может говорить с Интернетом, и нам нужен таблица маршрута для прямого сетевого трафика.

Настройте варс

# deploy.sh
STACK_NAME=bastion-poc  
REGION=us-east-1  
CLI_PROFILE=  
EC2_INSTANCE_TYPE=t2.micro  
KEY_NAME=

Запустите скрипт развертывания

В этом скрипте мы настроили наши учетные данные, и мы запускаем команду для развертывания Main.yml Шаблон к AWS. Если все идет хорошо, вы должны ожидать, что 2 IP-адреса: один из экземпляра Bastion (Public) и один из экземпляра приложения (Private).

Перейдите к вашему терминалу и запустите следующее:

./deploy.sh

Примечание: если вы хотите отладить или увидеть, что произошло, перейдите к соответствующему Стек облака в консоли AWS.

Конфигурация файла конфигурации SSH

Теперь, когда у нас есть наша реализация, мы готовы молиться демонстрационным богам и проверить нашу реализацию. Но до ssh’ing Куда угодно, нам нужно сделать еще одну вещь.

Перейти к ~/.ssh/config и добавьте следующие хосты:

...

### The Bastion Host  
Host bastion-host-poc  
 HostName   
 User ec2-user  
 Port 22  
 IdentityFile ~/.ssh/\### The App Host  

### The App Host  
Host app-host-poc  
 HostName   
 User ec2-user  
 IdentityFile ~/.ssh/  
 ProxyJump bastion-host-poc

Твой путь в

Если все прошло хорошо (и если мы молимся на демо-богов), мы должны быть в состоянии SSH к экземпляру приложения.

Перейти к своему терминалу и SSH внутрь:

ssh app-host-poc

Вуаля. Вы находитесь внутри машины, которая работает в частной подсети. Разве это не круто?

Помните, это просто доказательство концепции. Например, экземпляр приложения все еще может отправлять трафик на весь мир (вы действительно хотите этого?). Аналогично, экземпляр Бастиона еще не затвердевал.

Реализация бастиона может быть полезна для ваших текущих процессов, особенно если У вас есть некоторые экземпляры, подверженные миру и/или вы хотите контролировать Кто может SSH в вашу инфраструктуру.

Хотя у вас, вероятно, у вас есть более сложная установка, хост-бастион может быть правильным решением для вас, и это может быть KickStart вашей реализации.

Также опубликовано Середина .

Ресурсы

Пары ключей Amazon EC2 и экземпляры Linux

Как записывать сеансы SSH, установленные через хост бастиона

Диаграммы были сделаны с использованием: https://www.planttext.com/

Оригинал: «https://dev.to/sergiodn/deploying-a-bastion-host-in-aws-using-cloudformation-k9c»