RDS przez AWS SSM

Twoja instancja RDS nie ma publicznego endpointu.
Sięgnij po nią przez AWS SSM, bez bastionu.

AgentsRoom otwiera do Twojej bazy sesję przekierowania portów AWS Session Manager i przez nią podłącza swojego klienta SQL. Sesja uruchamia aws ssm start-session z dokumentem AWS-StartPortForwardingSessionToRemoteHost, autoryzowana profilem AWS skonfigurowanym już na Twojej maszynie.

Baza zostaje w swojej prywatnej podsieci, grupa bezpieczeństwa pozostaje zamknięta, a nic nowego nie zostaje wystawione do internetu. Zmienia się tylko to, że wreszcie możesz ją odpytać, a razem z Tobą agent AI do kodowania, w trybie tylko do odczytu.

Przekierowanie portów SSM
Bez publicznego endpointu
AgentsRoom
127.0.0.1 : port wybrany przez system
aws ssm start-session
AWS-StartPortForwardingSessionToRemoteHost
Zarządzany węzełi-0a1b2c3d4e5f
RDS MySQL
prywatna podsieć : 3306
Rezerwowanie wolnego portu loopback
Tylko loopback, nigdy sieć lokalnaBez przychodzącego SSH, bez publicznego endpointu

Jak AgentsRoom sięga po instancję RDS w prywatnej podsieci przez AWS Systems Manager, nie otwierając niczego na internet.

Ten układ jest na tyle powszechny, że aż nudny, i na tyle uciążliwy, że potrafi kosztować całe popołudnie. Instancja Amazon RDS siedzi w prywatnej podsieci. Nie ma publicznego endpointu. Jej grupa bezpieczeństwa przyjmuje ruch z aplikacji i z niczego więcej. W całym tym VPC nie ma nigdzie otwartego portu SSH dla ruchu przychodzącego, bo ktoś postąpił słusznie i go zamknął. A teraz musisz zajrzeć do trzech wierszy, żeby zrozumieć błąd.

AWS Systems Manager Session Manager rozwiązuje już kwestię transportu. Zarządzany węzeł EC2 wewnątrz VPC potrafi przekierować lokalny port na Twojej maszynie do trzeciego hosta, który jest dla niego osiągalny, a instancja RDS w prywatnej podsieci jest dokładnie takim hostem. Dokument, który to robi, to AWS-StartPortForwardingSessionToRemoteHost, a polecenie to aws ssm start-session. Nic egzotycznego, nic do zainstalowania na bazie.

AgentsRoom uruchamia to polecenie za Ciebie i podpina na drugim końcu klienta SQL. Raz wybierasz instancję, region i profil, przypinasz do tego połączenie z bazą, a od tej chwili otwarcie bazy to jedno kliknięcie. Sesję autoryzuje Twój własny profil AWS albo logowanie SSO, więc dla samego przeskoku nie jest przechowywany żaden klucz ani żadne hasło.

Zwykłe obejścia zawsze coś kosztują

Trzy odpowiedzi na ten sam problem i cena, jaką każda z nich każe zapłacić.

Host bastionu do utrzymania

Maszyna przeskokowa w publicznej podsieci to serwer, który łatasz, monitorujesz, opłacasz i w końcu o nim zapominasz. Niesie ze sobą otwarty port SSH dla ruchu przychodzącego, listę autoryzowanych kluczy rozjeżdżającą się wraz z rotacją ludzi i grupę bezpieczeństwa, którą od otwarcia na cały świat dzieli jedna nieuważna edycja. Istnieje tylko po to, żeby ktoś mógł od czasu do czasu sięgnąć po bazę.

VPN dla pytania o trzy wiersze

Klient VPN wpuszcza całą Twoją maszynę do sieci po to, żeby odpowiedzieć na pytanie o trzy wiersze. Trzeba go wdrożyć, rozdystrybuować, odnawiać i odbierać, kłóci się z resztą Twojej łączności, a na laptopie krążącym między sieciami to on psuje się pierwszy. Większość zespołów, które go mają, i tak trzyma obok bastion.

Dane logowania rozsyłane w kopiach

Rozwiązanie awaryjne, po które sięgają wszyscy, jest gorsze : endpoint i hasło lądują w wiadomości na czacie, we współdzielonej notatce, w skrypcie wrzuconym przez przypadek do repozytorium albo w prompcie wysłanym do agenta AI. Dostęp rozlewa się po miejscach, których nikt nie śledzi, a odebranie go później oznacza rotację danych logowania i nadzieję, że każda kopia zniknęła.

Od prywatnej instancji RDS do zbioru wyników

Cztery kroki, raz wykonane, a potem to już jedno kliknięcie.

01

Zapisz połączenie AWS SSM

W menedżerze połączeń dodaj połączenie i ustaw jego transport na AWS SSM. Podajesz identyfikator instancji zarządzanego węzła EC2, który sięga po bazę (i-0123456789abcdef0), swój profil AWS oraz region. Nie ma pola na hasło ani pola na klucz, bo sesję autoryzują dane logowania AWS obecne już na Twojej maszynie.

02

Dodaj bazę i sięgnij po nią przez to połączenie

Dodaj połączenie MySQL albo MariaDB, wpisując endpoint RDS jako host, a do tego port, użytkownika i nazwę bazy. W polu Połącz przez wybierz zapisane przed chwilą połączenie AWS SSM zamiast Połączenia bezpośredniego. To cała konfiguracja : endpoint pozostaje prywatny, grupa bezpieczeństwa pozostaje zamknięta.

03

AgentsRoom otwiera sesję

Kiedy otwierasz połączenie, AgentsRoom prosi system operacyjny o wolny port loopback, a następnie uruchamia aws ssm start-session z dokumentem AWS-StartPortForwardingSessionToRemoteHost, przekazując endpoint RDS jako host, port bazy jako portNumber i zarezerwowany port jako localPortNumber. Czeka, aż ten port faktycznie przyjmie połączenie TCP, zanim uzna tunel za gotowy, więc klient nigdy nie łączy się za wcześnie.

04

Odpytaj ją sam albo pozwól agentowi

Konsola SQL łączy się z 127.0.0.1 na przekierowanym porcie i zachowuje się jak każde inne połączenie : przeglądarka schematu, jedno polecenie naraz, ograniczone zbiory wyników. Agent AI do kodowania może odpytać to samo połączenie przez MCP, tylko do odczytu, nigdy nie dostając hasła. Zamknięcie połączenia ubija razem z nim proces sesji.

Co faktycznie się uruchamia

Polecenie, które uruchamia AgentsRoom

Nie ma tu żadnego własnościowego protokołu i nic nie jest reimplementowane w JavaScript. AgentsRoom uruchamia AWS CLI jako proces potomny, przekazując argumenty bezpośrednio, a nie przez powłokę, i czyta jego wyjście. Jeśli kiedykolwiek otwierałeś sesję przekierowania portów ręcznie, to jest ta sama linijka, którą już znasz.

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

Identyfikator instancji, endpoint, region i profil pochodzą z zapisanego przez Ciebie połączenia. Port lokalny wybiera system operacyjny w chwili otwarcia.

Przekierowanie do samego zarządzanego węzła, zamiast do bazy stojącej za nim, to ten sam dokument z host=localhost. Dlatego jeden typ połączenia obsługuje zarówno bazę w prywatnej podsieci, jak i usługę działającą na instancji, z którą się łączysz.

Wymagania wstępne

Co musi być spełnione, zanim to zadziała

AgentsRoom steruje Twoją konfiguracją AWS, nie zastępuje jej. Pięć rzeczy musi być na miejscu i są to dokładnie te same, których Session Manager wymaga sam z siebie.

  • AWS CLI na Twojej maszynie

    AgentsRoom wywołuje binarkę aws bezpośrednio. Jeśli aws ssm start-session działa w Twoim terminalu, zadziała i tutaj.

  • Wtyczka session-manager-plugin

    Session Manager potrzebuje swojej wtyczki zainstalowanej obok CLI. Bez niej sesja kończy się natychmiast, a AgentsRoom pokazuje Ci błąd wypisany przez CLI, zamiast wisieć w oczekiwaniu.

  • Działający profil AWS albo logowanie SSO

    Autoryzacja pochodzi z Twoich własnych danych logowania, przekazywanych jako --profile i --region. AgentsRoom przechowuje nazwę profilu i region, nigdy klucz, nigdy sekret.

  • Zarządzany węzeł w VPC

    Instancja EC2 zarejestrowana w Systems Manager, z działającym SSM Agent i profilem instancji, który zezwala na sesję. To przez ten węzeł przechodzi ruch, a on sam nie potrzebuje żadnego własnego portu przychodzącego.

  • Droga z węzła do bazy danych

    Grupa bezpieczeństwa bazy musi przyjmować ruch z węzła na porcie bazy, a Twoja polityka IAM musi zezwalać na ssm:StartSession z tym dokumentem. Nic więcej w VPC nie musi się zmieniać.

Co tunel robi, a czego robić odmawia

Właściwości, które decydują o tym, czy taką konfigurację można bezpiecznie zostawić na laptopie.

Wyłącznie loopback

Przekierowany port jest przypięty do 127.0.0.1 i do niczego więcej. Baza osiągana w ten sposób nigdy nie jest ponownie wystawiana w sieci lokalnej, więc Wi-Fi w kawiarni nie zamienia Twojego laptopa w otwarte proxy do produkcji.

Port wybrany przez system

AgentsRoom prosi system operacyjny o wolny port i przekazuje go sesji. Nie ma stałego portu do odgadnięcia, nie ma nic do rezerwowania z góry i nie ma kolizji z niczym, co akurat uruchomiłeś.

Gotowe znaczy gotowe

Tunel zostaje uznany za otwarty dopiero wtedy, gdy lokalny port faktycznie przyjmie połączenie TCP, a jeśli nigdy tego nie zrobi, poddaje się, pokazując błąd wypisany przez CLI. Żadnego arbitralnego czekania, żadnego klienta łączącego się z portem, który jeszcze nie nasłuchuje.

Żadnego klucza ani hasła dla samego przeskoku

Sesję SSM autoryzuje Twój profil AWS albo sesja SSO. AgentsRoom przechowuje identyfikator instancji, nazwę profilu i region, czyli nic, co mógłby odtworzyć ktoś, kto przeczytał tę konfigurację.

Baza pozostaje tylko do odczytu

Połączenie z bazą jest po utworzeniu tylko do odczytu. Zapis wymaga uczynienia tego konkretnego połączenia zapisywalnym oraz wyraźnego potwierdzenia, a połączenie oznaczone jako produkcyjne mówi o tym głośno właśnie w tym potwierdzeniu.

Jedno polecenie na wywołanie

Każde wywołanie niesie dokładnie jedno polecenie, więc nic nie chowa się za średnikiem, a zbiory wyników są ograniczane, żeby szerokie zapytanie nie zalało okna ani kontekstu agenta.

Dlaczego to mniej dostępu, a nie więcej

Tunel brzmi jak dziura i ten odruch jest słuszny : większość sposobów sięgania po prywatną bazę faktycznie poszerza powierzchnię ataku. Ten ją zawęża. Po stronie bazy nic nie zostaje otwarte, w całym VPC nie powstaje żaden port przychodzący, a zarządzany węzeł nie potrzebuje własnego nasłuchu SSH. Ruch wychodzi z węzła do usługi Systems Manager, a Twoja maszyna spotyka go właśnie tam.

Autoryzacja zostaje tam, gdzie Twoja organizacja już nią zarządza. Sesję przyznaje Twoja tożsamość AWS, przez profil albo logowanie SSO skonfigurowane już na maszynie, co oznacza, że jest logowana jak każda inna sesja Session Manager, odbierana w dniu, w którym odbierana jest ta tożsamość, i ograniczana polityką IAM, a nie tym, kto akurat trzyma klucz. AgentsRoom przechowuje identyfikator instancji, nazwę profilu i region : nic z tego nie jest danymi logowania.

Po stronie bazy obowiązują dokładnie te same zabezpieczenia, co przy każdym innym połączeniu w AgentsRoom. Domyślnie tylko do odczytu, jedno polecenie na wywołanie, ograniczone zbiory wyników i flaga produkcji, która utwardza potwierdzenie zapisu. Agent AI odpytujący przez MCP dostaje zbiór wyników, a nigdy hasło, a narzędzie, którym odpytuje, odrzuca wszystko poza odczytem, niezależnie od tego, na co połączenie pozwala człowiekowi.

Czego nie obsługujemy

Tylko MySQL i MariaDB, a PostgreSQL nie jest jednym z nich

Klient bazy danych mówi protokołem sieciowym MySQL, więc działające silniki to MySQL i MariaDB. Na RDS oznacza to RDS for MySQL, RDS for MariaDB oraz edycje zgodne z Aurora MySQL. RDS for PostgreSQL i Aurora PostgreSQL nie są obsługiwane, podobnie jak SQL Server, Oracle, MongoDB czy SQLite. Masz prawo wiedzieć o tym przed pobraniem, a nie po nim.

Sam transport SSM jest niezależny od silnika, bo przekierowuje port TCP. Dla PostgreSQL brakuje klienta na wierzchu, a nie tunelu pod spodem. O tym, który silnik będzie następny, decyduje to, o co proszą ludzie, więc jeśli brakuje Twojego, napisz który na publicznym backlogu, a zostanie policzony.

Poproś o swój silnik bazy danych
Agenci AI + prywatne bazy danych

Agent też może ją odpytać, tylko do odczytu

db_listdb_schemadb_querydb_connection_new

Gdy połączenie już istnieje, agent AI do kodowania może z niego korzystać przez AgentsRoom MCP, wskazując je po nazwie. db_list zwraca zapisane połączenia i ich metadane, db_schema przechodzi po schematach, tabelach i kolumnach bez linijki SQL, db_query uruchamia jedno polecenie i zwraca ograniczoną liczbę wierszy, a db_connection_new proponuje bazę, której jeszcze nie zapisałeś, wypełniając wstępnie formularz, który sprawdzasz i zapisujesz.

AgentsRoom sam otwiera sesję SSM, gdy agent o to poprosi, więc agent nigdy nie dotyka danych logowania AWS, hasła do bazy ani numeru portu. Z powrotem wraca zbiór wyników. db_query jest tylko do odczytu, niezależnie od tego, na co pozwala połączenie, a ta reguła żyje w aplikacji desktopowej, a nie w procesie MCP, więc obowiązuje nawet wtedy, gdy ktoś namówi agenta, żeby poprosił o coś innego.

Na tym właśnie polega zrobienie tego porządnie. Agent debugujący na replice produkcyjnej w prywatnej podsieci czyta wiersze, które tłumaczą błąd, i nie ma żadnej drogi, żeby je zmienić, żadnych danych logowania, które mogłyby wyciec do jego kontekstu, ani żadnego sposobu, żeby sięgnąć po tę bazę po zamknięciu aplikacji.

FAQ

Jak połączyć się z instancją RDS, która nie ma publicznego endpointu?

Przez sesję przekierowania portów AWS SSM. Zapisz połączenie AWS SSM wskazujące zarządzany węzeł EC2, który sięga po bazę, a potem utwórz połączenie MySQL albo MariaDB z endpointem RDS jako hostem i wybierz to połączenie SSM w polu Połącz przez. AgentsRoom otwiera sesję poleceniem aws ssm start-session i podłącza klienta SQL do przekierowanego portu loopback. Baza nie zyskuje żadnego publicznego endpointu, a jej grupa bezpieczeństwa pozostaje bez zmian.

Którego dokumentu SSM używa AgentsRoom?

AWS-StartPortForwardingSessionToRemoteHost, z host ustawionym na endpoint bazy, portNumber ustawionym na port bazy i localPortNumber ustawionym na port loopback zarezerwowany na Twojej maszynie. Ten dokument przekierowuje przez zarządzany węzeł do trzeciego hosta, czyli dokładnie do takiego przypadku, jakim jest instancja RDS w prywatnej podsieci. Przekierowanie do samego węzła to ten sam dokument z host=localhost.

Czy nadal potrzebuję hosta bastionu?

Nie. Session Manager zastępuje maszynę przeskokową w tym zastosowaniu : zarządzany węzeł nie potrzebuje ani przychodzącego portu SSH, ani publicznego IP, ruch wychodzi z węzła w stronę usługi Systems Manager, a Twoja maszyna dołącza do sesji z zewnątrz. Nie ma listy kluczy do utrzymania ani publicznej podsieci do pilnowania.

Co muszę mieć zainstalowane na swojej maszynie?

AWS CLI i session-manager-plugin, a do tego działający profil AWS albo logowanie SSO. AgentsRoom wywołuje binarkę aws bezpośrednio, więc jeśli aws ssm start-session działa w Twoim terminalu, zadziała i tutaj. Jeśli brakuje wtyczki, sesja kończy się natychmiast, a AgentsRoom pokazuje Ci błąd wypisany przez CLI, zamiast wisieć na niewidocznym pytaniu.

Czy AgentsRoom przechowuje do tego klucz AWS?

Nie. Sesję autoryzują dane logowania AWS skonfigurowane już na Twojej maszynie, przekazywane do CLI jako --profile i --region. AgentsRoom przechowuje identyfikator instancji, nazwę profilu i region, które nie są danymi logowania. Hasło do bazy to osobna sprawa : leży w sejfie zaszyfrowane przez pęk kluczy Twojego systemu i nigdy nie wraca do agenta AI.

Którego portu lokalnego używa tunel i kto może się do niego dostać?

System operacyjny wybiera wolny port w chwili otwarcia, a tunel przypina go wyłącznie do 127.0.0.1. Nic w sieci lokalnej nie może się do niego dostać i nie ma stałego portu do odgadnięcia. Tunel zostaje uznany za gotowy dopiero wtedy, gdy ten port faktycznie przyjmie połączenie TCP, i jest zamykany razem z połączeniem.

Czy to działa z RDS for PostgreSQL?

Nie. Klient bazy danych obsługuje wyłącznie MySQL i MariaDB, więc na RDS oznacza to RDS for MySQL, RDS for MariaDB oraz edycje zgodne z Aurora MySQL. RDS for PostgreSQL i Aurora PostgreSQL nie są dziś obsługiwane, podobnie jak SQL Server, Oracle, MongoDB czy SQLite. Sam tunel SSM przekierowuje port TCP i silnik go nie obchodzi : brakuje klienta na wierzchu. Poproś o silnik na publicznym backlogu, a zostanie policzony.

Czy mogę przekierować do samej instancji EC2 zamiast do bazy danych?

Tak. To ten sam dokument z host=localhost, więc usługa nasłuchująca na zarządzanym węźle jest osiągalna w ten sam sposób. To samo połączenie AWS SSM otwiera też zwykłą sesję terminala na tej instancji, i właśnie tak uruchamia się agenta CLI na maszynie, która w ogóle nie ma przychodzącego portu SSH.

Czy agent AI może odpytać bazę przez tunel?

Tak, tylko do odczytu. Agent wskazuje zapisane połączenie przez AgentsRoom MCP, aplikacja otwiera sesję SSM i sama wykonuje polecenie, a z powrotem wraca wyłącznie zbiór wyników. Agent nigdy nie dostaje profilu AWS, danych logowania do endpointu ani hasła do bazy, a db_query odrzuca wszystko poza odczytem, niezależnie od tego, na co to połączenie pozwala człowiekowi.

Może Cię też zainteresować

Odpytaj bazę, do której nikt nie może się dostać

Pobierz AgentsRoom, zapisz połączenie AWS SSM, wskaż mu bazę MySQL albo MariaDB i odpytuj swoją prywatną instancję RDS bez bastionu, bez VPN i bez współdzielonego hasła.

Za darmoPobierz

Aplikacja towarzyszaca: monitoruj agentów w podrozy

Użyj Claude, Codex, Antigravity CLI lub innego dostawcy AI.

Zainstaluj rozszerzenie
Chrome Web Store

Wysyłaj bugi i prośby bezpośrednio do swojego publicznego backlogu.

Spojrzenie na AgentsRoom w akcji.

Wiele projektów
Multi-provider
Wielu agentów
Status na żywo
Diff i commit
Aplikacja mobilna
Podgląd na żywo
Zespoły agentów
Testy w przeglądarce
Dev oparta na backlogu
Biblioteka promptów
Biblioteka umiejętności
Zobacz wszystkie funkcje