RDS через AWS SSM

У вашего инстанса RDS нет публичного адреса.
Доберитесь до него через AWS SSM, без бастиона.

AgentsRoom открывает к вашей базе сессию проброса портов AWS Session Manager и подключает через неё свой SQL-клиент. Сессия запускается командой aws ssm start-session с документом AWS-StartPortForwardingSessionToRemoteHost и авторизуется AWS-профилем, уже настроенным на вашей машине.

База остаётся в своей приватной подсети, security group остаётся закрытой, и наружу не выставляется ничего нового. Меняется одно: вы наконец можете делать к ней запросы, и ИИ-агент для кодинга тоже, только на чтение.

Проброс портов SSM
Без публичного адреса
AgentsRoom
127.0.0.1 : порт выбирает ОС
aws ssm start-session
AWS-StartPortForwardingSessionToRemoteHost
Управляемый узелi-0a1b2c3d4e5f
RDS MySQL
приватная подсеть : 3306
Резервируем свободный порт loopback
Только loopback, никогда локальная сетьНи входящего SSH, ни публичного адреса

Как AgentsRoom добирается до инстанса RDS в приватной подсети через AWS Systems Manager, ничего не открывая в интернет.

Ситуация настолько частая, что стала скучной, и настолько неудобная, что съедает полдня. Инстанс Amazon RDS стоит в приватной подсети. Публичного адреса у него нет. Его security group принимает трафик от приложения и больше ни от кого. Входящего порта SSH нет нигде в этом VPC, потому что кто-то поступил правильно и закрыл его. А теперь вам нужно посмотреть три строки, чтобы понять баг.

AWS Systems Manager Session Manager уже решает задачу транспорта. Управляемый узел EC2 внутри VPC умеет пробрасывать локальный порт вашей машины к третьему хосту, до которого сам достаёт, а инстанс RDS в приватной подсети: это ровно такой хост. Делает это документ AWS-StartPortForwardingSessionToRemoteHost, а команда называется aws ssm start-session. Ничего экзотического, и на саму базу ставить нечего.

AgentsRoom выполняет эту команду за вас и подключает к другому концу SQL-клиент. Вы один раз выбираете инстанс, регион и профиль, привязываете к ним подключение к базе, и дальше открыть эту базу: один клик. Сессию авторизует ваш собственный AWS-профиль или вход через SSO, поэтому для самого перехода не хранится ни ключ, ни пароль.

У любого привычного обходного пути есть своя цена

Три ответа на одну и ту же задачу, и то, во что обходится каждый.

Бастион-хост, который надо обслуживать

Промежуточный хост в публичной подсети: это сервер, который вы патчите, мониторите, оплачиваете и в итоге забываете. На нём висит входящий порт SSH, список авторизованных ключей, расползающийся по мере прихода и ухода людей, и security group в одном неосторожном изменении от того, чтобы открыться всему миру. И существует всё это лишь для того, чтобы кто-то иногда мог дойти до базы.

VPN ради вопроса на три строки

Клиентский VPN засовывает всю вашу машину внутрь сети, чтобы ответить на вопрос про три строки. Его нужно развернуть, раздать, продлевать и отзывать, он конфликтует с остальной вашей связностью, а на ноутбуке, кочующем между сетями, ломается первым. Большинство команд, у которых он есть, всё равно держат рядом бастион.

Учётные данные, разошедшиеся по копиям

Запасной вариант, к которому все скатываются, ещё хуже : адрес и пароль оказываются в сообщении чата, в общей заметке, в скрипте, закоммиченном по случайности, или в промпте, отправленном ИИ-агенту. Доступ расползается туда, где его никто не считает, а отозвать его потом означает ротацию учётных данных и надежду, что все копии исчезли.

От закрытого инстанса RDS до готовой выборки

Четыре шага, один раз, а дальше один клик.

01

Сохраните подключение AWS SSM

В менеджере подключений добавьте подключение и выберите транспорт AWS SSM. Укажите ID управляемого узла EC2, который достаёт до базы (i-0123456789abcdef0), ваш AWS-профиль и регион. Полей для пароля и для ключа здесь нет, потому что сессию авторизуют учётные данные AWS, уже лежащие на вашей машине.

02

Добавьте базу и направьте её через это подключение

Добавьте подключение MySQL или MariaDB, указав адрес RDS как хост, порт, пользователя и базу. В поле «Доступ через» выберите только что сохранённое подключение AWS SSM вместо прямого подключения. Это вся настройка : адрес остаётся приватным, security group остаётся закрытой.

03

AgentsRoom открывает сессию

Когда вы открываете подключение, AgentsRoom просит у операционной системы свободный порт loopback, затем запускает aws ssm start-session с документом AWS-StartPortForwardingSessionToRemoteHost, передавая адрес RDS как host, порт базы как portNumber и зарезервированный порт как localPortNumber. Туннель считается готовым только после того, как этот порт действительно примет TCP-соединение, поэтому клиент никогда не подключается слишком рано.

04

Делайте запросы сами или дайте агенту

SQL-консоль подключается к 127.0.0.1 на проброшенный порт и ведёт себя как любое другое подключение : обзор схемы, один запрос за раз, ограниченная выдача. ИИ-агент для кодинга может делать запросы к тому же подключению через MCP, только на чтение, ни разу не получив пароль. Закрытие подключения убивает вместе с ним и процесс сессии.

Что выполняется на самом деле

Команда, которую запускает AgentsRoom

Никакого собственного протокола здесь нет, и ничего не переписано на JavaScript. AgentsRoom запускает AWS CLI дочерним процессом, передавая аргументы напрямую, а не через shell, и читает его вывод. Если вы хоть раз открывали сессию проброса портов руками, эта строка вам уже знакома.

aws ssm start-session \
  --target i-0a1b2c3d4e5f \
  --document-name AWS-StartPortForwardingSessionToRemoteHost \
  --parameters host=acme-prod.abc123.eu-west-1.rds.amazonaws.com,\
               portNumber=3306,localPortNumber=54321 \
  --profile acme-prod --region eu-west-1

ID инстанса, адрес, регион и профиль берутся из сохранённого вами подключения. Локальный порт выбирает операционная система в момент открытия.

Проброс на сам управляемый узел, а не на базу за ним, делается тем же документом с host=localhost. Поэтому один тип подключения покрывает и базу в приватной подсети, и сервис, работающий на инстансе, к которому вы подключились.

Что нужно заранее

Что должно быть готово, чтобы это заработало

AgentsRoom управляет вашей настройкой AWS, но не заменяет её. На месте должны быть пять вещей, и это те же пять, которые Session Manager требует сам по себе.

  • AWS CLI на вашей машине

    AgentsRoom вызывает бинарник aws напрямую. Если aws ssm start-session работает в вашем терминале, значит работает и здесь.

  • Плагин session-manager-plugin

    Session Manager требует, чтобы рядом с CLI был установлен его плагин. Без него сессия завершается сразу, и AgentsRoom показывает вам ошибку, которую напечатал CLI, вместо того чтобы зависнуть.

  • Рабочий AWS-профиль или вход через SSO

    Права приходят из ваших собственных учётных данных, переданных как --profile и --region. AgentsRoom хранит имя профиля и регион, никогда ключ и никогда секрет.

  • Управляемый узел внутри VPC

    Инстанс EC2, зарегистрированный в Systems Manager, с запущенным SSM Agent и профилем инстанса, который разрешает сессию. Через этот узел идёт трафик, и собственного входящего порта ему не нужно.

  • Путь от узла до базы

    Security group базы должна принимать трафик от узла на порт базы, а ваша IAM-политика должна разрешать ssm:StartSession с этим документом. Больше ничего в VPC менять не придётся.

Что туннель делает и чего он делать отказывается

Свойства, от которых зависит, безопасно ли оставить всё это настроенным на ноутбуке.

Только loopback

Проброшенный порт слушает на 127.0.0.1 и больше нигде. База, доступная таким способом, никогда не публикуется заново в локальной сети, поэтому Wi-Fi в кофейне не превращает ваш ноутбук в открытый прокси до production.

Порт выбирает ОС

AgentsRoom просит у операционной системы свободный порт и отдаёт его сессии. Фиксированный порт угадывать не нужно, резервировать заранее нечего, и конфликта с тем, что у вас уже запущено, не будет.

Готово значит готово

Туннель считается поднятым только тогда, когда локальный порт реально принимает TCP-соединение, а если этого так и не произошло, сдаётся с той ошибкой, которую напечатал CLI. Никаких произвольных пауз и никакого клиента, стучащегося в порт, который ещё не слушает.

Ни ключа, ни пароля для перехода

Сессию SSM авторизует ваш AWS-профиль или сессия SSO. AgentsRoom хранит ID инстанса, имя профиля и регион, и ничего такого, что мог бы переиграть тот, кто прочитал эту конфигурацию.

База остаётся только на чтение

Подключение к базе создаётся в режиме только чтения. Для записи нужно сделать это конкретное подключение доступным для записи и подтвердить операцию явно, а подключение, помеченное как production, говорит об этом в подтверждении во весь голос.

Один запрос за вызов

Каждый вызов несёт ровно один запрос, поэтому за точкой с запятой ничего не спрячется, а объём выдачи ограничен, чтобы широкий запрос не завалил ни окно, ни контекст агента.

Почему это меньше доступа, а не больше

Слово «туннель» звучит как дыра, и рефлекс верный : большинство способов добраться до закрытой базы действительно расширяют поверхность атаки. Этот её сужает. На стороне базы ничего не открывается, входящий порт не появляется нигде в VPC, а управляемому узлу не нужен собственный слушатель SSH. Трафик уходит с узла наружу к сервису Systems Manager, и ваша машина встречается с ним там.

Права остаются там, где ваша организация ими и так управляет. Сессию выдаёт ваша AWS-личность, через профиль или вход по SSO, уже настроенные на машине, а значит она логируется как любая другая сессия Session Manager, отзывается в тот же день, когда отзывают эту личность, и ограничена IAM-политикой, а не тем, у кого случайно оказался ключ. AgentsRoom хранит ID инстанса, имя профиля и регион : ничто из этого не является учётными данными.

На стороне базы работают те же ограничители, что и у любого подключения в AgentsRoom. По умолчанию только чтение, один запрос за вызов, ограниченная выдача и пометка production, которая ужесточает подтверждение записи. ИИ-агент, делающий запрос через MCP, получает выборку и никогда пароль, а инструмент, которым он делает запрос, отклоняет всё, кроме чтения, что бы это подключение ни позволяло человеку.

Что не поддерживается

Только MySQL и MariaDB, и PostgreSQL в их число не входит

Клиент баз данных говорит по сетевому протоколу MySQL, поэтому работают движки MySQL и MariaDB. На RDS это означает RDS for MySQL, RDS for MariaDB и издания Aurora, совместимые с MySQL. RDS for PostgreSQL и Aurora PostgreSQL не поддерживаются, как и SQL Server, Oracle, MongoDB и SQLite. Об этом честнее узнать до скачивания, а не после.

Сам транспорт SSM к движку безразличен, ведь он просто пробрасывает TCP-порт. Для PostgreSQL не хватает клиента поверх него, а не туннеля под ним. Какой движок появится следующим, решают запросы пользователей, поэтому если вашего нет, напишите какой именно в публичном бэклоге, и он будет учтён.

Запросить свой движок баз данных
ИИ-агенты + закрытые базы

Агент тоже может делать запросы, только на чтение

db_listdb_schemadb_querydb_connection_new

Как только подключение создано, ИИ-агент для кодинга может пользоваться им через AgentsRoom MCP, называя его по имени. db_list возвращает сохранённые подключения и их метаданные, db_schema обходит схемы, таблицы и колонки без единой строки SQL, db_query выполняет один запрос и возвращает ограниченную выборку, а db_connection_new предлагает базу, которая ещё не сохранена, заранее заполняя форму, которую вы проверяете и сохраняете.

Сессию SSM AgentsRoom открывает сам, когда агент об этом просит, поэтому агент никогда не держит в руках ни учётные данные AWS, ни пароль от базы, ни номер порта. Обратно уходит выборка. db_query работает только на чтение, что бы ни позволяло подключение, и это правило живёт в десктоп-приложении, а не в MCP-процессе, поэтому оно держится, даже если агента уговорили попросить что-то другое.

Ради этого всё и делалось по-человечески. Агент, который разбирается с багом на production-реплике в приватной подсети, читает строки, объясняющие ошибку, и при этом не имеет ни способа их изменить, ни учётных данных, которые могли бы утечь в его контекст, ни возможности добраться до этой базы после закрытия приложения.

Частые вопросы

Как подключиться к инстансу RDS, у которого нет публичного адреса?

Через сессию проброса портов AWS SSM. Сохраните подключение AWS SSM, указывающее на управляемый узел EC2, который достаёт до базы, затем создайте подключение MySQL или MariaDB с адресом RDS в качестве хоста и выберите это SSM-подключение в поле «Доступ через». AgentsRoom открывает сессию командой aws ssm start-session и подключает SQL-клиент к проброшенному порту loopback. Публичного адреса у базы не появляется, и её security group остаётся прежней.

Какой документ SSM использует AgentsRoom?

AWS-StartPortForwardingSessionToRemoteHost : в нём host задан адресом базы, portNumber портом базы, а localPortNumber портом loopback, зарезервированным на вашей машине. Этот документ пробрасывает трафик через управляемый узел к третьему хосту, а инстанс RDS в приватной подсети: ровно такой случай. Проброс на сам узел делается тем же документом с host=localhost.

Нужен ли мне всё ещё бастион-хост?

Нет. Для этого сценария Session Manager заменяет промежуточный хост : управляемому узлу не нужны ни входящий порт SSH, ни публичный IP, трафик уходит с узла к сервису Systems Manager, а ваша машина присоединяется к сессии снаружи. Нет ни списка ключей, который надо вести, ни публичной подсети, за которой надо приглядывать.

Что должно быть установлено на моей машине?

AWS CLI и session-manager-plugin, плюс рабочий AWS-профиль или вход через SSO. AgentsRoom вызывает бинарник aws напрямую, поэтому если aws ssm start-session работает в вашем терминале, работает и здесь. Если плагина нет, сессия завершается сразу, и AgentsRoom показывает вам ошибку, которую напечатал CLI, вместо того чтобы зависнуть на невидимом запросе.

Хранит ли AgentsRoom ключ AWS ради этого?

Нет. Сессию авторизуют учётные данные AWS, уже настроенные на вашей машине и переданные в CLI как --profile и --region. AgentsRoom хранит ID инстанса, имя профиля и регион, а это не учётные данные. Пароль от базы: отдельная история. Он лежит в хранилище, зашифрованном связкой ключей вашей ОС, и никогда не возвращается ИИ-агенту.

Какой локальный порт использует туннель и кто может до него достучаться?

Свободный порт выбирает операционная система в момент открытия, и туннель привязывает его только к 127.0.0.1. Из локальной сети до него не добраться, и фиксированного порта, который можно угадать, нет. Туннель считается готовым лишь после того, как этот порт действительно примет TCP-соединение, и закрывается вместе с подключением.

Работает ли это с RDS for PostgreSQL?

Нет. Клиент баз данных поддерживает только MySQL и MariaDB, то есть на RDS это RDS for MySQL, RDS for MariaDB и издания Aurora, совместимые с MySQL. RDS for PostgreSQL и Aurora PostgreSQL сегодня не поддерживаются, как и SQL Server, Oracle, MongoDB и SQLite. Сам туннель SSM пробрасывает TCP-порт и о движке ничего не знает : не хватает именно клиента поверх него. Попросите нужный движок в публичном бэклоге, и он будет учтён.

Можно ли пробросить порт до самого инстанса EC2, а не до базы?

Да. Это тот же документ с host=localhost, поэтому сервис, слушающий на управляемом узле, доступен точно так же. То же подключение AWS SSM открывает и обычную терминальную сессию на этом инстансе : так вы запускаете агентский CLI на машине, у которой вообще нет входящего порта SSH.

Может ли ИИ-агент делать запросы к базе через туннель?

Да, только на чтение. Агент называет сохранённое подключение через AgentsRoom MCP, приложение само открывает сессию SSM и выполняет запрос, а обратно уходит только выборка. Агент никогда не получает ни AWS-профиль, ни учётные данные к адресу базы, ни её пароль, а db_query отклоняет всё, кроме чтения, что бы это подключение ни позволяло человеку.

Вам также может понравиться

Подключения к базам данных

Сохраняйте подключения к MySQL и MariaDB, добирайтесь до базы в приватной подсети через SSH-туннель или сессию AWS SSM и дайте ИИ-агентам делать запросы через MCP. По умолчанию только чтение, один запрос за вызов, ограниченная выдача, и пароль до агента не доходит.

SSH-подключения

Сохраняй свои SSH-подключения, открывай встроенный терминал по SSH и запускай Claude Code, Codex или Antigravity CLI прямо на удалённом сервере или VPS. Авторизация по SSH-ключу или паролю, профили подключений для каждого проекта, отдельный SSH-клиент не нужен.

Менеджер секретов

Храните API-ключи, токены и пароли в связке ключей операционной системы, ссылайтесь на них через {{secret:NAME}} в dev-командах и окружениях агентов, а AgentsRoom подставит значение при запуске. Агенты видят имена, но не значения, и ничего не уходит на сервер.

Удаленный флот

Запускайте агентов кодирования Claude, Codex и Antigravity на каждом Mac, который у вас есть, и приглашайте коллег для совместной работы над одними и теми же агентами в реальном времени. Офисный компьютер, домашний компьютер, сервер сборки, совместные проекты команды : все в одном едином, сквозном зашифрованном представлении.

Делайте запросы к базе, до которой никто не достаёт

Скачайте AgentsRoom, сохраните подключение AWS SSM, направьте через него базу MySQL или MariaDB и делайте запросы к своему закрытому инстансу RDS без бастиона, без VPN и без общего пароля.

БесплатноСкачать

Приложение-компаньон: следите за агентами на ходу

Используйте Claude, Codex, Antigravity CLI или другого поставщика AI.

Установить расширение
Chrome Web Store

Отправляйте баги и запросы прямо в ваш публичный бэклог.

Взгляд на AgentsRoom в действии.

Мульти-проекты
Мульти-провайдер
Мульти-агенты
Статус онлайн
Diff и коммиты
Мобильное приложение
Live-превью
Команды агентов
Тесты в браузере
Разработка от backlog
Библиотека промптов
Библиотека навыков
Все функции