Я новичок в AWS и пытаюсь настроить и инициализировать экземпляр RDS. Поскольку у меня есть недавно созданная учетная запись, она не поддерживает EC2-Classic, что (насколько я понимаю) означает, что мой экземпляр RDS должен быть развернутым в частной подсети в VPC. Однако после создания экземпляра RDS как я могу подключиться к нему из внешнего мира? Я понимаю, что могу подключиться к нему из общедоступных подсетей в моем VPC, поэтому мои серверы приложений смогут без проблем использовать БД. Однако я хочу иметь возможность сказать: запустить Squirrel или какой-либо другой клиент с графическим интерфейсом для инициализации схемы или добавить столбцы и таблицы по мере роста моего приложения. Как я могу это сделать, если требуется жить в частной подсети?
Одно из решений (но не единственное!) - использовать так называемый Bastion Host. Bastion Host - это сервер со сверхмалым энергопотреблением, который находится в вашей общедоступной подсети и является единственным сервером, который разрешает входящие SSH-соединения.
Этот сервер должен быть тщательно защищен, и в зависимости от вашего уровня паранойи существует несколько методов, которые вы можете использовать, чтобы скрыть тот факт, что этот сервер вообще прослушивает SSH-соединения. См., Например, http://www.portknocking.org/view/details. Конечно, вам не нужно усиливать его только для подключения к вашему экземпляру RDS.
В любом случае вы можете настроить правила группы безопасности EC2 следующим образом:
Между прочим, вы можете получить доступ «только с хоста Bastion», указав частный IP-адрес вашего хоста Bastion или указав имя группы безопасности, которое использует хост Bastion.
Теперь у вас есть два варианта:
ВАРИАНТ №1: Настройте переадресацию локального порта как часть вашего SSH-соединения
Например, если вы используете OS X или Linux, подключитесь по SSH к хосту-бастиону и настройте перенаправление локальных портов с помощью:
ssh -l <bastion-host-username> -L <local-port-you-connect-to>:<rds-private-ip>:<rds:listening-port> <bastion-host-public-ip>
Допустим, вы подключаетесь к Postgres с хоста Bastion на базе Ubuntu. Это могло бы выглядеть так:
ssh -l ubuntu -L 5432:<rds-private-ip>:5432 <bastion-host-public-ip>
Ваш локальный компьютер теперь прослушивает порт 5432
и перенаправит любое из этих подключений на <bastion-host-public-ip>
который, в свою очередь, отправит его в порт 5432
на <rds-private-ip>
ВАРИАНТ № 2: Найдите эту функцию в своем клиенте базы данных
Я знаю, что DBVisualizer это поддерживает. Насчет Белки я не уверен. По сути, вместо того, чтобы вручную настраивать переадресацию локального порта с помощью SSH, ваш клиент SQL обрабатывает это за вас.
Это сработало для меня. Убедитесь, что у вас есть клиент psql установлен локально.
psql --host=myAwsDbEndpointUrl.ciqykqusf0nv.us-west-1.rds.amazonaws.com --port=5432 --username=myUserName --password --dbname=myDbName
При создании экземпляра db на aws обязательно определите следующее:
Мне также пришлось создать группу безопасности для VPC, в котором находилась база данных. После ее создания убедитесь, что ваш экземпляр db использует ее для своей группы безопасности. В группе безопасности действуют следующие правила:
inbound--> type:PostgreSQL, protocol:TCP port range:5432, source:0.0.0.0/0
outbound--> type:All Traffic, protocol:All, port range:all, destination:0.0.0.0/0