Instance RDS của bạn không có endpoint công khai.
Hãy chạm tới nó qua AWS SSM, không cần bastion.
AgentsRoom mở một phiên chuyển tiếp cổng AWS Session Manager tới cơ sở dữ liệu của bạn và nối trình khách SQL của mình qua đó. Phiên chạy aws ssm start-session với tài liệu AWS-StartPortForwardingSessionToRemoteHost, được cấp quyền bởi hồ sơ AWS đã cấu hình sẵn trên máy của bạn.
Cơ sở dữ liệu vẫn nằm trong mạng con riêng của nó, security group vẫn đóng, và không có gì mới bị phơi ra internet. Điều thay đổi là cuối cùng bạn cũng truy vấn được nó, và một agent AI lập trình cũng vậy, ở chế độ chỉ đọc.
Cách AgentsRoom chạm tới một instance RDS trong mạng con riêng thông qua AWS Systems Manager, mà không mở bất cứ thứ gì ra internet.
Kiểu thiết lập này phổ biến đến mức nhàm chán, và phiền toái đến mức ngốn của bạn cả một buổi chiều. Một instance Amazon RDS nằm trong mạng con riêng. Nó không có endpoint công khai. Security group của nó chỉ nhận lưu lượng từ ứng dụng, ngoài ra không nhận gì khác. Chẳng có cổng SSH đi vào nào ở bất cứ đâu trong VPC đó, vì đã có người làm đúng và đóng nó lại. Vậy mà giờ đây bạn lại cần nhìn ba hàng dữ liệu để hiểu một lỗi.
AWS Systems Manager Session Manager đã giải quyết sẵn phần vận chuyển. Một node EC2 được quản lý nằm trong VPC có thể chuyển tiếp một cổng cục bộ trên máy bạn tới một host thứ ba mà nó chạm tới được, và một instance RDS trong mạng con riêng đúng là như vậy. Tài liệu làm việc đó là AWS-StartPortForwardingSessionToRemoteHost, còn câu lệnh là aws ssm start-session. Không có gì lạ lẫm, không có gì phải cài lên cơ sở dữ liệu.
AgentsRoom chạy câu lệnh đó thay bạn và đặt một trình khách SQL ở đầu bên kia. Bạn chọn instance, region và hồ sơ một lần, gắn một kết nối cơ sở dữ liệu vào đó, và từ lúc ấy mở cơ sở dữ liệu này chỉ còn là một cú nhấp. Phiên được cấp quyền bởi chính hồ sơ AWS hay lần đăng nhập SSO của bạn, nên không có khóa và không có mật khẩu nào được lưu cho riêng chặng nhảy đó.
Những lối đi vòng quen thuộc đều có cái giá của nó
Ba câu trả lời cho cùng một vấn đề, và cái giá mà mỗi câu bắt bạn trả.
Một máy chủ bastion phải bảo trì
Một jump box đặt trong mạng con công khai là một máy chủ mà bạn phải vá, phải giám sát, phải trả tiền rồi cuối cùng sẽ quên. Nó mang theo một cổng SSH đi vào, một danh sách khóa được phép cứ trôi dạt theo người vào người ra, và một security group chỉ cách chuyện mở toang ra thế giới đúng một lần chỉnh sửa bất cẩn. Nó tồn tại chỉ để thỉnh thoảng có ai đó chạm tới được một cơ sở dữ liệu.
Một VPN cho một câu hỏi ba hàng dữ liệu
Một VPN phía máy khách đưa cả chiếc máy của bạn vào bên trong mạng chỉ để trả lời một câu hỏi về ba hàng dữ liệu. Nó phải được cấp phát, phân phối, gia hạn rồi thu hồi, nó xung đột với phần còn lại trong kết nối mạng của bạn, và trên một chiếc laptop di chuyển qua nhiều mạng thì nó là mảnh hỏng đầu tiên. Phần lớn các nhóm đã có VPN vẫn giữ thêm một bastion bên cạnh.
Thông tin đăng nhập bị sao chép khắp nơi
Phương án mà ai cũng quay về lại còn tệ hơn : endpoint và mật khẩu kết thúc trong một tin nhắn chat, một ghi chú dùng chung, một script bị commit nhầm, hay một prompt gửi cho một agent AI. Quyền truy cập lan ra những nơi không ai theo dõi, và thu hồi nó về sau nghĩa là xoay vòng một thông tin đăng nhập rồi hy vọng mọi bản sao đều đã biến mất.
Từ một instance RDS riêng tư đến một tập kết quả
Bốn bước, làm một lần, sau đó chỉ còn một cú nhấp.
Lưu một kết nối AWS SSM
Trong trình quản lý kết nối, thêm một kết nối và đặt phương thức vận chuyển của nó thành AWS SSM. Bạn đưa cho nó ID instance của một node EC2 được quản lý có thể chạm tới cơ sở dữ liệu (i-0123456789abcdef0), hồ sơ AWS của bạn và region. Không có ô mật khẩu và cũng không có ô khóa, vì phiên được cấp quyền bởi thông tin đăng nhập AWS vốn đã có sẵn trên máy của bạn.
Thêm cơ sở dữ liệu và chạm tới nó qua kết nối đó
Thêm một kết nối MySQL hoặc MariaDB với endpoint RDS làm host, kèm port, user và cơ sở dữ liệu. Ở trường Reach through, chọn kết nối AWS SSM bạn vừa lưu thay vì Direct connection. Toàn bộ cấu hình chỉ có vậy : endpoint vẫn riêng tư, security group vẫn đóng.
AgentsRoom mở phiên
Khi bạn mở kết nối, AgentsRoom xin hệ điều hành một cổng loopback còn trống, rồi khởi chạy aws ssm start-session với tài liệu AWS-StartPortForwardingSessionToRemoteHost, truyền endpoint RDS làm host, cổng cơ sở dữ liệu làm portNumber và cổng đã giữ chỗ làm localPortNumber. Nó chờ tới khi cổng đó thực sự chấp nhận một kết nối TCP rồi mới tuyên bố đường hầm đã sẵn sàng, nên trình khách không bao giờ kết nối quá sớm.
Truy vấn nó, hoặc để một agent truy vấn
Bảng điều khiển SQL kết nối tới 127.0.0.1 trên cổng đã chuyển tiếp và hoạt động như mọi kết nối khác : trình duyệt lược đồ, mỗi lần một câu lệnh, tập kết quả có giới hạn. Một agent AI lập trình truy vấn được chính kết nối đó qua MCP, ở chế độ chỉ đọc, mà không bao giờ nhận mật khẩu. Đóng kết nối là tiến trình của phiên cũng tắt theo.
Câu lệnh mà AgentsRoom khởi chạy
Ở đây không có giao thức độc quyền nào và cũng không có gì được viết lại bằng JavaScript. AgentsRoom khởi chạy AWS CLI như một tiến trình con, với các tham số được truyền thẳng chứ không đi qua một shell, rồi đọc đầu ra của nó. Nếu bạn từng tự tay mở một phiên chuyển tiếp cổng, đây chính là dòng lệnh bạn đã quen.
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-1ID instance, endpoint, region và hồ sơ đều lấy từ kết nối bạn đã lưu. Cổng cục bộ do hệ điều hành chọn vào lúc mở.
Chuyển tiếp tới chính node được quản lý, thay vì tới một cơ sở dữ liệu nằm phía sau nó, vẫn là tài liệu đó với host=localhost. Đó là lý do cùng một kiểu kết nối bao trùm được cả một cơ sở dữ liệu trong mạng con riêng lẫn một dịch vụ đang chạy trên chính instance mà bạn đang kết nối tới.
Những gì phải đúng thì nó mới chạy được
AgentsRoom điều khiển thiết lập AWS của bạn chứ không thay thế nó. Năm thứ phải sẵn sàng, và đó đúng là năm thứ mà bản thân Session Manager vốn đã cần.
AWS CLI trên máy của bạn
AgentsRoom gọi thẳng tệp nhị phân aws. Nếu aws ssm start-session chạy được trong terminal của bạn thì nó cũng chạy được ở đây.
Plugin session-manager-plugin
Session Manager cần plugin của nó được cài bên cạnh CLI. Không có plugin, phiên thoát ra ngay lập tức và AgentsRoom hiển thị cho bạn đúng lỗi mà CLI in ra thay vì treo cứng.
Một hồ sơ AWS hoặc một lần đăng nhập SSO còn hoạt động
Quyền được cấp từ chính thông tin đăng nhập của bạn, truyền vào dưới dạng --profile và --region. AgentsRoom lưu tên hồ sơ và region, không bao giờ lưu một khóa, không bao giờ lưu một bí mật.
Một node được quản lý trong VPC
Một instance EC2 đã đăng ký với Systems Manager, đang chạy SSM Agent, kèm một instance profile cho phép mở phiên. Đó là node mà lưu lượng đi xuyên qua, và bản thân nó không cần một cổng đi vào nào.
Một đường đi từ node tới cơ sở dữ liệu
Security group của cơ sở dữ liệu phải chấp nhận lưu lượng từ node trên cổng cơ sở dữ liệu, và chính sách IAM của bạn phải cho phép ssm:StartSession với tài liệu đó. Ngoài ra không có gì khác trong VPC phải thay đổi.
Đường hầm làm được gì, và nó từ chối làm gì
Những đặc tính quyết định việc để nguyên cấu hình này trên một chiếc laptop có an toàn hay không.
Chỉ loopback
Cổng được chuyển tiếp chỉ gắn vào 127.0.0.1, không gắn vào gì khác. Một cơ sở dữ liệu chạm tới theo cách này không bao giờ bị phát lại ra mạng cục bộ, nên một mạng Wi-Fi quán cà phê không biến laptop của bạn thành một proxy mở dẫn thẳng vào sản xuất.
Một cổng do hệ điều hành chọn
AgentsRoom xin hệ điều hành một cổng còn trống rồi giao nó cho phiên. Không có cổng cố định nào để đoán, không có gì phải giữ chỗ trước, và không đụng độ với bất cứ thứ gì khác mà bạn đang chạy.
Sẵn sàng là thật sự sẵn sàng
Đường hầm chỉ được coi là xong khi cổng cục bộ thực sự chấp nhận một kết nối TCP, và nếu điều đó không bao giờ xảy ra thì nó dừng lại kèm đúng lỗi mà CLI in ra. Không có một lệnh chờ tùy tiện nào, không có trình khách nào kết nối vào một cổng còn chưa lắng nghe.
Không khóa, không mật khẩu cho chặng nhảy
Phiên SSM được cấp quyền bởi hồ sơ AWS hay phiên SSO của bạn. AgentsRoom lưu ID instance, tên hồ sơ và region, và không lưu bất cứ thứ gì mà người đọc được cấu hình đó có thể đem phát lại.
Cơ sở dữ liệu vẫn ở chế độ chỉ đọc
Một kết nối cơ sở dữ liệu lúc tạo ra là chỉ đọc. Một lần ghi đòi hỏi chính kết nối đó được cho phép ghi cùng một xác nhận rõ ràng, và một kết nối được đánh dấu là sản xuất sẽ nói to điều đó ra trong lời xác nhận ấy.
Mỗi lần gọi một câu lệnh
Mỗi lần gọi mang đúng một câu lệnh, nên không có gì nấp sau một dấu chấm phẩy, và tập kết quả bị giới hạn để một truy vấn rộng không thể làm ngập một cửa sổ hay ngữ cảnh của một agent.
Vì sao đây là ít quyền truy cập hơn, chứ không phải nhiều hơn
Nghe tới đường hầm là thấy giống một cái lỗ, và phản xạ đó không sai : phần lớn các cách chạm tới một cơ sở dữ liệu riêng tư đúng là mở rộng bề mặt tấn công. Cách này thì thu hẹp nó lại. Không có gì được mở ra ở phía cơ sở dữ liệu, không có cổng đi vào nào được tạo ra ở bất cứ đâu trong VPC, và node được quản lý cũng không cần một trình lắng nghe SSH nào của riêng nó. Lưu lượng đi ra từ node tới dịch vụ Systems Manager, còn máy của bạn gặp nó ở đó.
Việc cấp quyền vẫn nằm đúng nơi tổ chức của bạn vốn đã quản lý nó. Phiên được cấp bởi danh tính AWS của bạn, thông qua hồ sơ hay lần đăng nhập SSO đã cấu hình sẵn trên máy, nghĩa là nó được ghi log như mọi phiên Session Manager khác, bị thu hồi đúng ngày danh tính đó bị thu hồi, và bị giới hạn phạm vi bởi một chính sách IAM chứ không phải bởi việc ai đang tình cờ giữ một cái khóa. AgentsRoom lưu ID instance, tên hồ sơ và region : không thứ nào trong đó là một thông tin đăng nhập.
Ở phía cơ sở dữ liệu, các rào chắn vẫn đúng là những rào chắn mà mọi kết nối AgentsRoom đều có. Chỉ đọc theo mặc định, mỗi lần gọi một câu lệnh, tập kết quả có giới hạn, và một cờ sản xuất siết chặt lời xác nhận trước khi ghi. Một agent AI truy vấn qua MCP nhận về một tập kết quả chứ không bao giờ nhận mật khẩu, và công cụ nó dùng để truy vấn từ chối mọi thứ ngoài một lần đọc, bất kể kết nối đó cho phép một con người làm gì.
Chỉ MySQL và MariaDB, và PostgreSQL không nằm trong số đó
Trình khách cơ sở dữ liệu nói giao thức wire của MySQL, nên các engine chạy được là MySQL và MariaDB. Trên RDS, điều đó nghĩa là RDS for MySQL, RDS for MariaDB và các bản Aurora tương thích MySQL. RDS for PostgreSQL và Aurora PostgreSQL không được hỗ trợ, SQL Server, Oracle, MongoDB hay SQLite cũng vậy. Bạn xứng đáng biết điều đó trước khi tải chứ không phải sau khi tải.
Bản thân lớp vận chuyển SSM không phụ thuộc vào engine, vì nó chuyển tiếp một cổng TCP. Thứ còn thiếu với PostgreSQL là trình khách nằm bên trên, chứ không phải đường hầm nằm bên dưới. Engine nào tới lượt tiếp theo là do những gì mọi người yêu cầu quyết định, nên nếu thiếu cái của bạn, hãy nói rõ đó là cái nào trên backlog công khai và nó sẽ được tính.
Yêu cầu engine cơ sở dữ liệu của bạnMột agent cũng truy vấn được nó, ở chế độ chỉ đọc
Một khi kết nối đã tồn tại, một agent AI lập trình dùng được nó qua AgentsRoom MCP bằng cách gọi tên. db_list trả về các kết nối đã lưu cùng siêu dữ liệu của chúng, db_schema đi qua các lược đồ, các bảng và các cột mà không cần một dòng SQL, db_query chạy một câu lệnh và trả về các hàng đã bị giới hạn, còn db_connection_new đề xuất một cơ sở dữ liệu chưa được lưu bằng cách điền sẵn biểu mẫu để bạn xem lại rồi lưu.
AgentsRoom tự mở phiên SSM khi agent yêu cầu, nên agent không bao giờ cầm một thông tin đăng nhập AWS, một mật khẩu cơ sở dữ liệu hay một số cổng. Thứ đi ngược trở về là một tập kết quả. db_query chỉ đọc bất kể kết nối cho phép gì, và quy tắc đó nằm trong ứng dụng desktop chứ không nằm trong tiến trình MCP, nên nó vẫn giữ nguyên ngay cả khi agent bị dụ đòi thứ khác.
Đó chính là toàn bộ lý do phải làm việc này cho tử tế. Một agent đang gỡ lỗi trên một bản sao sản xuất nằm trong mạng con riêng đọc được đúng những hàng giải thích lỗi, mà không có đường nào để thay đổi chúng, không có thông tin đăng nhập nào để rò rỉ vào ngữ cảnh của nó, và không có cách nào chạm tới cơ sở dữ liệu đó một khi ứng dụng đã đóng.
Câu hỏi thường gặp
Làm sao tôi kết nối tới một instance RDS không có endpoint công khai?
Qua một phiên chuyển tiếp cổng AWS SSM. Lưu một kết nối AWS SSM trỏ tới một node EC2 được quản lý có thể chạm tới cơ sở dữ liệu, rồi tạo kết nối MySQL hoặc MariaDB với endpoint RDS làm host và chọn kết nối SSM đó ở trường Reach through. AgentsRoom mở phiên bằng aws ssm start-session và nối trình khách SQL vào cổng loopback đã chuyển tiếp. Cơ sở dữ liệu vẫn không có endpoint công khai nào và security group của nó không hề thay đổi.
AgentsRoom dùng tài liệu SSM nào?
AWS-StartPortForwardingSessionToRemoteHost, với host đặt bằng endpoint của cơ sở dữ liệu, portNumber đặt bằng cổng cơ sở dữ liệu và localPortNumber đặt bằng cổng loopback đã giữ chỗ trên máy của bạn. Tài liệu đó chuyển tiếp qua node được quản lý tới một host thứ ba, đúng là trường hợp của một instance RDS trong mạng con riêng. Chuyển tiếp tới chính node đó cũng là tài liệu này với host=localhost.
Tôi có còn cần một máy chủ bastion không?
Không. Session Manager thay thế jump box trong trường hợp sử dụng này : node được quản lý không cần cổng SSH đi vào và không cần IP công khai, lưu lượng rời node đi ra phía dịch vụ Systems Manager, còn máy của bạn tham gia phiên từ bên ngoài. Không có danh sách khóa nào phải bảo trì và không có mạng con công khai nào phải để mắt tới.
Tôi cần cài những gì trên máy của mình?
AWS CLI và session-manager-plugin, cộng thêm một hồ sơ AWS hay một lần đăng nhập SSO còn hoạt động. AgentsRoom gọi thẳng tệp nhị phân aws, nên nếu aws ssm start-session chạy được trong terminal của bạn thì nó cũng chạy được ở đây. Nếu thiếu plugin, phiên thoát ra ngay lập tức và AgentsRoom hiển thị cho bạn đúng lỗi mà CLI in ra thay vì treo cứng ở một lời nhắc vô hình.
AgentsRoom có lưu một khóa AWS cho việc này không?
Không. Phiên được cấp quyền bởi thông tin đăng nhập AWS đã cấu hình sẵn trên máy của bạn, truyền cho CLI dưới dạng --profile và --region. AgentsRoom lưu ID instance, tên hồ sơ và region, những thứ không phải là thông tin đăng nhập. Mật khẩu cơ sở dữ liệu lại là chuyện khác : nó nằm trong kho được mã hóa qua keychain của hệ điều hành, và nó không bao giờ được trả về cho một agent AI.
Đường hầm dùng cổng cục bộ nào, và ai chạm tới được nó?
Hệ điều hành chọn một cổng còn trống vào lúc mở, và đường hầm chỉ gắn cổng đó vào 127.0.0.1. Không thứ gì trên mạng cục bộ chạm tới được nó, và cũng không có cổng cố định nào để đoán. Đường hầm chỉ được coi là sẵn sàng khi cổng đó thực sự chấp nhận một kết nối TCP, và nó được đóng lại cùng với kết nối.
Cách này có chạy với RDS for PostgreSQL không?
Không. Trình khách cơ sở dữ liệu chỉ hỗ trợ MySQL và MariaDB, nên trên RDS điều đó nghĩa là RDS for MySQL, RDS for MariaDB và các bản Aurora tương thích MySQL. RDS for PostgreSQL và Aurora PostgreSQL hôm nay chưa được hỗ trợ, SQL Server, Oracle, MongoDB hay SQLite cũng vậy. Bản thân đường hầm SSM chỉ chuyển tiếp một cổng TCP và không quan tâm tới engine : thứ còn thiếu là trình khách nằm bên trên nó. Hãy yêu cầu một engine trên backlog công khai và nó sẽ được tính.
Tôi có chuyển tiếp tới chính instance EC2 thay vì tới một cơ sở dữ liệu được không?
Được. Vẫn là tài liệu đó với host=localhost, nên một dịch vụ đang lắng nghe trên node được quản lý cũng chạm tới được theo đúng cách ấy. Chính kết nối AWS SSM đó còn mở được một phiên terminal thông thường trên instance này, và đó là cách bạn chạy một agent CLI trên một máy hoàn toàn không có cổng SSH đi vào.
Một agent AI có truy vấn được cơ sở dữ liệu qua đường hầm không?
Được, ở chế độ chỉ đọc. Agent gọi tên một kết nối đã lưu qua AgentsRoom MCP, ứng dụng mở phiên SSM và tự chạy câu lệnh, và chỉ có tập kết quả đi ngược trở về. Agent không bao giờ nhận hồ sơ AWS, thông tin đăng nhập của endpoint hay mật khẩu cơ sở dữ liệu, còn db_query từ chối mọi thứ ngoài một lần đọc, bất kể kết nối đó cho phép một con người làm gì.
Có thể bạn cũng thích
Kết nối cơ sở dữ liệu
Lưu các kết nối MySQL và MariaDB của bạn, chạm tới một cơ sở dữ liệu trong mạng con riêng qua đường hầm SSH hoặc một phiên AWS SSM, và để các agent AI truy vấn nó qua MCP. Chỉ đọc theo mặc định, mỗi lần gọi một câu lệnh, tập kết quả có giới hạn, và mật khẩu không bao giờ tới tay agent.
Kết nối SSH
Lưu các kết nối SSH của bạn, mở terminal tích hợp qua SSH và chạy Claude Code, Codex hoặc Antigravity CLI trực tiếp trên máy chủ từ xa hay VPS của bạn. Xác thực bằng khóa SSH hoặc mật khẩu, hồ sơ kết nối theo từng dự án, không cần ứng dụng SSH riêng.
Trình quản lý bí mật
Lưu khóa API, token và mật khẩu trong keychain của hệ điều hành, tham chiếu chúng bằng {{secret:NAME}} trong lệnh dev và trong môi trường của agent, rồi để AgentsRoom phân giải lúc khởi chạy. Agent chỉ thấy tên, không bao giờ thấy giá trị, và không có gì được đồng bộ lên máy chủ.
Đội Tàu Từ Xa
Chạy các tác nhân lập trình Claude, Codex và Antigravity trên mọi máy Mac bạn sở hữu, và mời đồng đội hợp tác trên cùng một tác nhân trong thời gian thực. Máy tính văn phòng, máy tính ở nhà, máy chủ xây dựng, dự án nhóm chia sẻ: tất cả trong một cái nhìn thống nhất, được mã hóa đầu cuối.
Truy vấn cơ sở dữ liệu mà không ai chạm tới được
Tải AgentsRoom, lưu một kết nối AWS SSM, trỏ một cơ sở dữ liệu MySQL hay MariaDB vào đó, và truy vấn instance RDS riêng tư của bạn mà không cần bastion, không cần VPN và không cần một mật khẩu dùng chung.
Ứng dụng đồng hành: theo dõi agent khi đi đường
Sử dụng Claude, Codex, Antigravity CLI hoặc nhà cung cấp AI khác.
Gửi lỗi và yêu cầu thẳng vào backlog công khai của bạn.
Một cái nhìn về AgentsRoom đang hoạt động.