Bảo mật EC2 instance với Bastion Host

Trong bài viết hôm nay, chúng ta tìm hiểu về bastion host và cách thiết lập nó để truy cập các Linux EC2 instance private trên AWS nhé mọi người. Trước khi bắt đầu đi sâu vào tìm hiểu, chúng ta cần hiểu rõ khái niệm “Bastion Host là gì”. Bastion Host là a special-purpose

Trong bài viết hôm nay, chúng ta tìm hiểu về bastion host và cách thiết lập nó để truy cập các Linux EC2 instance private trên AWS nhé mọi người.

Trước khi bắt đầu đi sâu vào tìm hiểu, chúng ta cần hiểu rõ khái niệm “Bastion Host là gì”.

Bastion Hosta special-purpose compute (máy tính có mục đích đặc biệt) để quản lý instance hoặc database private được đặt trên private subnet (mà không cần giao dịch với internet). Bastion Host được đặt trong public subnet của AWS VPC (Virtual Private Cloud) và hoạt động như một “gateway of login” giữa thế giới bên ngoài vào các private subnets.

Mục đích của việc đặt bastion host bên trong public subnet là để bảo mật việc đăng nhập vào ứng dụng của bạn và dữ liệu được lưu trữ trong private instance. Các nỗ lực đăng nhập bên ngoài không thể kết nối trực tiếp đến các private instances. Nó 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 việc triển khai từng bước cho bastion host nhé mn.

STEP 1: Tạo các private instance với resource đã chọn (Bastion Host) qua SSH.

STEP 2 – Tạo bastion host trên public subnet với resource đã lựa chọn (Your Public IP).

STEP 3 – (Đăng nhập vào private instance thông qua bastion host) Xác thực kết nối đến private instance thông qua bastion host bằng lệnh ssh proxy.

STEP 4 – (Thay thế việc đăng nhập vào private instance thông qua bastion host) Sử dụng tệp cấu hình ssh để đăng nhập vào private instance thông qua bastion host.

Step 1 — Tạo private instance với nguồn resource bảo mật đã được chọn

Trước tiên, tạo một private instance trên private subnet trong security group mà mình đã lựa chọn từ trước. Tiếp theo đó chúng ta sẽ phải setting rule inbound cho SG bastion host trong private instance SG của chúng ta trên cổng 22 (như hình bên dưới). Việc setting này có nghĩa là private instance có thể được connect thông qua bastion host.

Sau khi tạo private instance, chúng ta cần tải xuống khóa ssh pem để có thể đăng nhập private instance.

Chúng ta kiểm tra qua status của private instance nhé.

Sau khi private instance được chạy thành công trên private subnet, chúng ta sẽ chuyển sang bước tiếp theo là bước tạo bastion host.

Step 2— Tạo bastion host trên public subnet

Trong bước này, chúng ta sẽ tạo bastion host trên public subnet, có thể giao tiếp được với internet bên ngoài. Tại thời điểm này, chúng ta sẽ sử dụng AMI Amazon Linux 2 để thiết lập bastion host.

Để tạo bastion host, chúng ta sẽ follow theo các bước từ bảng điều khiển trên AWS của mn nha.

Thông thường, bastion host instance chỉ được sử dụng thấp cho các mục đích quản trị, đó là lý do tại sao bạn có thể chọn phiên bản t2.micro.

Thiết lập và tạo tương tự ở trên private instance, chúng ta cần tạo bastion host và tải khóa ssh pem xuống máy tính của bạn.

Sau khi tạo bastion host, chúng ta có thể thấy hai instance (Private instance & bastion host) đang chạy trên subnet tương ứng.

Bước tiếp theo, chúng ta sẽ đăng nhập và kiểm tra các thiết lập từ máy tính để bàn (hoặc) laptop.

Step 3 — Đăng nhập vào private instance thông qua bastion host (sử dụng ssh)

Bước này là bước chúng ta có thể kiểm tra các cài đặt trên bastion và private instance đã chính xác hay chưa bằng cách đăng nhập vào chúng. Việc đăng nhập vào private instance qua bastion host có hai cách:

  • Login with SSH Proxy Command.
  • Login with SSH Config File.

Trước khi bắt đầu login, chúng ta cần xem lại thông tin instance của mình (Public DNS & IP Address)

Bastion Host Public URL = ec2–3–208–93–134.compute-1.amazonaws.com Private Instance IP = 192.168.3.225

Sau khi chúng ta nhận được thông tin về các instance, chúng ta cần áp dụng lệnh SSH proxy để đăng nhập trực tiếp vào private instance thông qua bastion host. Để sử dụng với phương pháp này, chúng ta sẽ thực hiện câu lệnh sau trên terminal

$ ssh -i private-key.pem [email protected] -o ProxyCommand="ssh -W %h:%p -i bastion-key.pem [email protected]"

Chúng ta có thể thấy việc login vào private instance qua bastion host thành công nếu các cấu hình mà chúng ta thực hiện ở trên chính xác.

$ ssh -i private-key.pem [email protected] -o ProxyCommand="ssh -W %h:%p -i bastion-key.pem [email protected]"
Last login: Thu Jan  9 17:49:38 2020 from ip-192-168-1-248.ec2.internal
__|  __|_  )
_|  (     /   Amazon Linux 2 AMI
___|___|___|
https://aws.amazon.com/amazon-linux-2/
[[email protected] ~]$ ip a | grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.3.225/24 brd 192.168.3.255 scope global dynamic eth0

Step 4 — Login vào private instance thông qua bastion host (thêm ssh configuration trong file ssh config)

Như tôi đã đề cập ở trên, chúng ta có một cách khác để đăng nhập private instance thông qua bastion với tệp cấu hình ssh. Bạn có thể tạo tệp cấu hình SSH theo đường dẫn ~ / .ssh / config và điền nội dung bên dưới.

$ vim ~/.ssh/config
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 [email protected]

Phần cấu hình này có thể đăng nhập vào bastion host để chuyển tiếp đến private instance trực tiếp từ máy local của bạn. Sau khi fill đầy đủ cấu hình vào tệp cấu hình, chúng ta nhập lệnh ssh để đăng nhập trực tiếp vào private instance.

$ ssh private-instance
Last login: Thu Jan  9 17:56:04 2020 from ip-192-168-1-248.ec2.internal
__|  __|_  )
_|  (     /   Amazon Linux 2 AMI
___|___|___|
https://aws.amazon.com/amazon-linux-2/
[[email protected] ~]$

Bạn có thể thấy chúng ta đã đăng nhập thành công trực tiếp vào private instance bằng cách nhảy qua bastion host.

Tổng kết

Trải qua một vài dự án thực tế, thì mô hình này được hầu hết các dự án lựa chọn. Nó đảm bảo an toàn cho các tài nguyên của chúng ta từ các truy cập bên ngoài.

Xin lưu ý rằng việc thiết lập bastion host chỉ để đăng nhập từ bên ngoài (Internet) vào VPC của mọi người. Nếu muốn truy cập ra ngoài (Internet) từ VPC Private Network, chúng ta có thể sử dụng NAT Gateway.

Tài liệu tham khảo

https://phyominhtun.medium.com/securing-private-linux-ec2-instance-with-bastion-host-5a4d5dd7a266

https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html

https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ