Hướng Dẫn Sử Dụng AWS Client VPN Để Kết Nối RDS Private Từ Máy Local Một Cách An Toàn Chuyên mục Devops 2025-04-08 0 Lượt xem 0 Lượt thích 0 Bình luận
Trong môi trường thực tế, việc đặt RDS vào private subnet là một best practice bảo mật nhằm giới hạn truy cập trực tiếp từ internet. Tuy nhiên, khi developer cần kết nối từ local để phát triển, test hoặc debug, điều này lại trở thành rào cản.
👉 Trong bài viết trước, mình đã hướng dẫn cách dùng EC2 làm Bastion Host + SSH Tunnel để truy cập RDS private.
🚀 Còn trong bài viết này, chúng ta sẽ cùng tìm hiểu cách triển khai AWS Client VPN, giúp dev kết nối toàn bộ máy local vào private VPC, từ đó có thể truy cập RDS và các resource khác như đang ở trong cùng mạng nội bộ — không cần tunnel, không cần mở port, không cần dùng EC2 làm proxy.
💡 Lợi ích khi dùng AWS Client VPN
-
✅ Không cần Bastion Host.
-
✅ Bảo mật cao (xác thực SSL, mutual authentication).
-
✅ Có thể kiểm soát quyền truy cập theo user hoặc IP.
-
✅ Dễ mở rộng cho nhiều dev trong team.
-
✅ Truy cập nhiều dịch vụ private trong VPC (không chỉ RDS).
📦 Tình huống giả định:
-
RDS nằm trong private subnet (VPC CIDR: 10.0.0.0/16)
-
Developer đang làm việc từ máy local ở nhà hoặc công ty.
-
Muốn connect đến RDS bằng code (Laravel, Python, Node.js, v.v.)
🛠️ Các bước triển khai AWS Client VPN
✅ Bước 1: Tạo certificate với EasyRSA
AWS Client VPN sử dụng SSL (OpenVPN protocol), bạn cần tạo certificate:
-
Cài EasyRSA:
git clone https://github.com/OpenVPN/easy-rsa.git
cd easy-rsa/easyrsa3
./easyrsa init-pki
./easyrsa build-ca nopass
-
Tạo server & client cert:
./easyrsa build-server-full server nopass
./easyrsa build-client-full client1 nopass
File tạo ra:
ca.crt
server.crt, server.key
client1.crt, client1.key
✅ Bước 2: Import certificate lên ACM (AWS Certificate Manager)
Upload server cert:
aws acm import-certificate \
--certificate fileb://server.crt \
--private-key fileb://server.key \
--certificate-chain fileb://ca.crt
Ghi lại ARN của certificate để dùng ở bước sau.
✅ Bước 3: Tạo AWS Client VPN Endpoint
Vào VPC > Client VPN Endpoints > Create Client VPN Endpoint.
-
Client CIDR: 10.10.0.0/22 (IP cấp cho máy local khi kết nối)
-
Server cert ARN: lấy từ ACM ở bước trên
-
Auth: Mutual authentication
-
Client cert ARN: client1 (import ACM tương tự bước 2 nếu cần)
-
Port: 443 (TCP)
-
Protocol: TCP
⚠️ Tip: Nếu muốn auth theo user thay vì cert, bạn có thể dùng Active Directory hoặc SAML (VD: AWS SSO, Google Workspace...).
✅ Bước 4: Associate VPN với subnet trong VPC
-
Chọn 1 subnet trong VPC chứa RDS (có route tới RDS)
-
Vào tab Association > Associate Subnet
✅ Bước 5: Thêm Route và Authorization Rules
-
Route Table:
-
Destination: 10.0.0.0/16 (CIDR VPC)
-
Target: subnet đã associate
-
-
Authorization Rules:
-
Destination: 10.0.0.0/16
-
Access: Allow to all users
-
✅ Bước 6: Download cấu hình và kết nối từ local
-
Vào tab Client Configuration > bấm Download.
-
Cài app AWS VPN Client (macOS/Windows) hoặc dùng OpenVPN.
-
Import file .ovpn.
-
Kết nối.
🔌 Bước 7: Kết nối tới RDS bằng code
Sau khi VPN đã kết nối, bạn có thể trỏ code vào RDS private endpoint như sau:
DB_HOST=rds-private.xxxxxx.ap-southeast-1.rds.amazonaws.com
DB_PORT=5432
DB_USERNAME=your_user
DB_PASSWORD=your_pass
Rồi chạy:
php artisan migrate
# hoặc bất kỳ câu lệnh connect DB nàoNếu muốn chắc chắn, bạn có thể ping, telnet hoặc psql để test kết nối.
✅ Ưu – Nhược điểm
Ưu điểm | Nhược điểm |
---|---|
Không cần mở port, không cần EC2 | Thiết lập ban đầu phức tạp hơn |
Kết nối bảo mật cao (SSL VPN) | Cần ACM và quản lý cert |
Có thể mở rộng cho nhiều user | Tốn chi phí vận hành VPN endpoint |
Truy cập được cả VPC, không chỉ RDS | - |
🔒 Gợi ý bảo mật
-
Dùng SAML hoặc Directory Service để quản lý quyền truy cập theo user.
-
Giới hạn CIDR VPN chỉ vừa đủ (/22 hoặc /24).
-
Monitor kết nối VPN bằng CloudWatch.
📌 Kết luận
AWS Client VPN là một giải pháp chuyên nghiệp, bảo mật cao và phù hợp với các tổ chức muốn:
-
Cho phép dev/test/staging truy cập hệ thống nội bộ.
-
Không muốn phụ thuộc vào Bastion Host.
-
Muốn mở rộng khả năng truy cập từ xa (remote team).
💬 Nếu bạn đang phát triển ứng dụng trong môi trường private trên AWS, thì đây là một công cụ không thể thiếu để đảm bảo cả bảo mật và tiện lợi.
Bình luận (0)