Máy khách cơ sở dữ liệu cục bộ và RDS riêng tư: vì sao kết nối hết thời gian chờ
Một máy khách cục bộ không tới được thực thể RDS riêng tư vì ba lý do riêng biệt. Hãy kiểm tra DNS chia tách, tuyến đường và bằng chứng của nhóm bảo mật trước khi thay đổi bất cứ điều gì.
Laptop của một lập trình viên hết thời gian chờ khi kết nối tới điểm cuối RDS riêng tư, trong khi cùng thông tin đăng nhập đó hoạt động từ một máy chủ bastion. Không có gì bị sập. Đường đi giữa laptop đó và cơ sở dữ liệu thiếu một trong ba thứ: một tên phân giải được, một tuyến đường mang lưu lượng, hoặc một quy tắc nhóm bảo mật cho phép nguồn mà cơ sở dữ liệu thực sự thấy. Tìm ra thứ nào còn thiếu trước khi thay đổi hai thứ kia.
Đọc thất bại ở đúng tầng
Hết thời gian chờ không phải một lỗi duy nhất. Một tên không phân giải được sẽ thất bại trước khi gói tin rời máy. Một địa chỉ không có tuyến đường đẩy gói tin vào hố đen. Một cổng bị lọc tạo ra sự chờ đợi trông giống hệt máy chủ sai. Thực hiện các bước theo thứ tự và dừng ở bước đầu tiên thất bại.
dig +short db.internal.example
nc -vz db.internal.example 5432
Nếu tên trả về địa chỉ công khai, hoặc không trả về gì, thì đường hầm chưa phải là vấn đề.
Nếu tên phân giải được và bài kiểm tra cổng bị treo, hãy so sánh địa chỉ bạn đã phân giải với địa chỉ mà cơ sở dữ liệu báo cáo. Một điểm cuối được quản lý có thể phân giải thành địa chỉ riêng bên trong VPC và không thành gì hữu ích bên ngoài, và một địa chỉ sao chép từ lần tra cứu cũ sẽ trỏ tới máy chủ không còn phản hồi.
Tách đường hầm khỏi tuyến đường
Kết nối VPN máy khách không tự động định tuyến mọi dải riêng. Hồ sơ mang các tuyến đường mà dịch vụ đẩy xuống, và máy khách có thể chỉ cài một số trong đó. Xem máy khách đã thực sự thêm những dải nào và địa chỉ cơ sở dữ liệu có nằm trong một dải đó không.
ip route get 10.20.40.15
ip addr show tun0
Một tuyến đường trỏ tới giao diện đường hầm là cần thiết; nó chưa đủ, vì phía bên kia vẫn phải chấp nhận lưu lượng.
Hồ sơ đường hầm chia tách là nguồn thường gặp của thất bại nửa vời này. Chúng hoạt động cho ứng dụng mà hồ sơ được thiết kế và để dải cơ sở dữ liệu nằm ngoài đường hầm, tạo ra đúng kiểu hết thời gian chờ mà tường lửa sẽ tạo ra.
Khớp nhóm bảo mật với nguồn thật
Nhóm bảo mật của RDS cho phép nguồn, không phải người. Tùy kiến trúc, nguồn có thể là nhóm máy khách VPN, địa chỉ riêng của một bastion, hoặc một địa chỉ NAT mà lưu lượng được dịch sang. Đọc quy tắc và nguồn gói tin thực tế cùng lúc.
aws ec2 describe-security-groups --group-ids sg-0123456789abcdef0 \
--query 'SecurityGroups[].IpPermissions'
Một quy tắc cho địa chỉ nhà của một laptop là vấn đề bảo trì, không phải thiết kế truy cập.
Khi có VPN máy khách hoặc cổng NAT trên đường đi, cơ sở dữ liệu có thể thấy địa chỉ của bộ dịch thay vì địa chỉ đường hầm của lập trình viên. Đó là lý do một quy tắc sao chép từ cấu hình bastion đang chạy có thể thất bại với laptop: hai đường đi đến từ những nguồn khác nhau dù cả hai trông như nội bộ.
Chọn con đường hẹp thay vì rộng
Khi một lập trình viên cần một cơ sở dữ liệu, chuyển tiếp dựa trên phiên thường rẻ hơn để vận hành so với một đường hầm mạng đầy đủ. Máy khách cục bộ kết nối tới cổng được chuyển tiếp, và thành phần từ xa tạo kết nối cơ sở dữ liệu từ bên trong mạng.
ssh -N -L 5432:db.internal.example:5432 bastion.internal.example
Giữ nguyên việc xác minh TLS trong thiết kế đó. Máy khách vẫn nên xác thực chứng chỉ máy chủ với tên mà nó mong đợi; một cổng chuyển tiếp cục bộ không phải lý do để tắt xác minh, và tắt nó sẽ che giấu đúng vấn đề danh tính đáng để bắt.
Lựa chọn giữa đường hầm đầy đủ và chuyển tiếp hẹp là quyết định về phạm vi, không phải về màn kịch bảo mật.
Để lại một con đường có thể lặp lại
Ghi lại tên điểm cuối thay vì địa chỉ đã phân giải, dải nguồn mà nhóm bảo mật cho phép, và vai trò cơ sở dữ liệu mà lập trình viên dùng. Ba sự thật này giải thích phần lớn các thất bại sau này mà không cần gọi điện. Thêm cả phiên bản hồ sơ máy khách, vì thay đổi hồ sơ có thể bỏ một tuyến đường mà bản cũ mang theo.
Sau đó thử trường hợp phủ định một lần: một máy khách nằm ngoài nguồn đã duyệt vẫn phải bị từ chối.
Một cơ sở dữ liệu riêng chỉ hoạt động cho người đã thiết lập nó không phải truy cập riêng tư; đó là một ngoại lệ không được ghi lại đang chờ bị phát hiện lại. Viết con đường ra, và lập trình viên tiếp theo sẽ thừa kế một phương pháp thay vì một bí ẩn.