Назад | Перейти на главную страницу

Как подключиться к базе данных AWS RDS (развернутой в VPC) с помощью клиента SQL?

Я новичок в AWS и пытаюсь настроить и инициализировать экземпляр RDS. Поскольку у меня есть недавно созданная учетная запись, она не поддерживает EC2-Classic, что (насколько я понимаю) означает, что мой экземпляр RDS должен быть развернутым в частной подсети в VPC. Однако после создания экземпляра RDS как я могу подключиться к нему из внешнего мира? Я понимаю, что могу подключиться к нему из общедоступных подсетей в моем VPC, поэтому мои серверы приложений смогут без проблем использовать БД. Однако я хочу иметь возможность сказать: запустить Squirrel или какой-либо другой клиент с графическим интерфейсом для инициализации схемы или добавить столбцы и таблицы по мере роста моего приложения. Как я могу это сделать, если требуется жить в частной подсети?

Одно из решений (но не единственное!) - использовать так называемый Bastion Host. Bastion Host - это сервер со сверхмалым энергопотреблением, который находится в вашей общедоступной подсети и является единственным сервером, который разрешает входящие SSH-соединения.

Этот сервер должен быть тщательно защищен, и в зависимости от вашего уровня паранойи существует несколько методов, которые вы можете использовать, чтобы скрыть тот факт, что этот сервер вообще прослушивает SSH-соединения. См., Например, http://www.portknocking.org/view/details. Конечно, вам не нужно усиливать его только для подключения к вашему экземпляру RDS.

В любом случае вы можете настроить правила группы безопасности EC2 следующим образом:

  • Группа безопасности хоста Bastion разрешает порт 22 только с вашего локального IP-адреса (поэтому вы можете подключиться к нему по SSH, но никто другой не может)
  • Группа безопасности RDS разрешает входящие подключения к базе данных через порт X (зависит от вашей базы данных) только с хоста Bastion

Между прочим, вы можете получить доступ «только с хоста 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 обязательно определите следующее:

  1. имя пользователя
  2. пароль
  3. имя базы данных
  4. номер порта

Мне также пришлось создать группу безопасности для 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