Trong bài viết này, chúng ta sẽ tìm hiểu về Bastion Host và cách thiết lập nó để truy cập vào các Linux EC2 instance private trên AWS. Bastion Host là một máy tính được thiết kế đặc biệt để quản lý các instance hoặc database private được đặt trên private subnet mà không cần giao tiếp với internet. Bastion Host được đặt trong public subnet của AWS VPC và hoạt động như một "gateway of login" giữa thế giới bên ngoài và các private subnets.
Mục đích của việc đặt bastion host trong public subnet là để bảo mật quá trình đăng nhập vào ứng dụng của bạn và dữ liệu được lưu trữ trong private instance. Bằng cách này, các nỗ lực đăng nhập từ bên ngoài không thể kết nối trực tiếp đến các private instance, mà chỉ có thể kết nối qua bastion host trong public subnet của VPC.
Các bước triển khai
Hãy đi sâu vào từng bước triển khai cho bastion host.
Bước 1: Tạo các private instance với resource đã chọn (Bastion Host) qua SSH.
Trước tiên, bạn cần tạo một private instance trên private subnet, trong security group mà bạn đã chọn trước đó. Sau đó, bạn sẽ cần thiết lập rule inbound cho SG Bastion Host trong SG private instance của bạn trên cổng 22. Điều này cho phép private instance kết nối thông qua bastion host.
Sau khi tạo private instance, bạn cần tải xuống khóa ssh pem để có thể đăng nhập vào private instance. Kiểm tra trạng thái của private instance.
Bước 2: Tạo bastion host trên public subnet với resource đã lựa chọn (Your Public IP).
Trong bước này, chúng ta sẽ tạo bastion host trên public subnet, cho phép giao tiếp với internet bên ngoài. Sử dụng AMI Amazon Linux 2 để thiết lập bastion host.
Sau khi tạo bastion host, bạn sẽ thấy hai instance (private instance & bastion host) đang chạy trên subnet tương ứng.
Bước 3: Đăng nhập vào private instance thông qua bastion host (sử dụng ssh)
Trước khi đăng nhập, xem lại thông tin về các instance (Public DNS & IP Address). Bạn có thể đăng nhập vào private instance qua bastion host bằng hai cách: sử dụng SSH Proxy Command hoặc sử dụng SSH Config File.
Sau khi nhận được thông tin về các instance, áp dụng lệnh SSH proxy để đăng nhập trực tiếp vào private instance thông qua bastion host.
$ ssh -i private-key.pem ec2-user@192.168.3.225 -o ProxyCommand="ssh -W %h:%p -i bastion-key.pem ec2-user@ec2-3-208-93-134.compute-1.amazonaws.com"
Bước 4: Đăng nhập vào private instance thông qua bastion host (thêm ssh configuration trong file ssh config)
Ngoài cách sử dụng SSH Proxy Command, bạn cũng có thể đăng nhập vào private instance thông qua bastion host bằng cách tạo một SSH Config File. Tạo tệp cấu hình SSH tại ~/.ssh/config
và thêm nội dung sau:
Host private-instance
Hostname 192.168.3.225
IdentityFile /Users/phyominhtun/Desktop/private-key.pem
ForwardAgent yes
User ec2-user
ProxyCommand ssh -W %h:%p -i /Users/phyominhtun/Desktop/bastion-key.pem ec2-user@ec2-3-208-93-134.compute-1.amazonaws.com
Sau khi đã điền đầy đủ cấu hình vào tệp cấu hình, bạn có thể sử dụng lệnh SSH để đăng nhập trực tiếp vào private instance.
$ ssh private-instance
Bạn có thể thấy rằng bạn đã đăng nhập thành công vào private instance thông qua bastion host.
Tổng kết
Mô hình Bastion Host là lựa chọn phổ biến trong nhiều dự án thực tế. Nó đảm bảo an toàn cho các tài nguyên của bạn khỏi các truy cập từ bên ngoài. Lưu ý rằng việc thiết lập bastion host chỉ cho phép đăng nhập từ bên ngoài (Internet) vào VPC của bạn. Nếu muốn truy cập ra ngoài (Internet) từ VPC Private Network, bạn có thể sử dụng NAT Gateway.
Tài liệu tham khảo: