1. Mở đầu

Session Manager là một chức năng nằm trong dịch vụ System Manager của AWS, nó cho phép ta quản lý một cách bảo mật các truy cập tới các server.

Với việc sử dụng Session Manager, bạn sẽ có được những ưu điểm sau đây mà các cách làm truyền thống không có:

  • Không cần phải mở cổng 22 cho giao thức SSH nên bảo mật hơn.
  • Có thể cấu hình để kết nối không cần đi ra ngoài internet nên bảo mật hơn.
  • Không cần quản lý private key của server để kết nối SSH.
  • Quản lý tập trung được user bằng việc sử dụng AWS IAM.
  • Truy cập tới server một cách dễ dàng và đơn giản bằng một click chuột.
  • Thời gian truy cập nhanh chóng hơn các phương thức truyền thống như SSH
  • Hỗ trợ nhiều hệ điều hành khác nhau như Linux, Window, MacOS
  • Log lại được các phiên kết nối và các câu lệnh đã thực thi trong lúc kết nối tới server.

 

Với những ưu điểm trên, bạn có thể sử dụng Session Manager thay vì sử dụng kỹ thuật Bastion host giúp chúng ta tiết kiệm được thời gian và tiền bạc khi quản lý server Bastion.

(Cách sử dụng Bastion host thì bạn xem ở bài viết https://blog.daovanhung.com/post/su-dung-bastion-host-trong-aws)

 

2. Các bước thực hiện

System Manager hoạt động bằng cách system manager agent (SSM Agent) được cài đặt trong server sẽ gửi kết nối tới System Manager và duy trì kết nối đó. SSM Agent gửi kết nối tới System Manager thông qua giao thức https ở cổng 443.

Vì vậy, để sử dụng được System Manager, bạn cần đảm bảo 2 thứ sau:

  • Cài đặt SSM Agent vào mỗi server
  • Mở cổng TCP 443 tới System Manager.

Để cài đặt được SSM Agent vào server, bạn lại phải cần SSH vào server đó để cài đặt, làm thế khiến chúng ta lại phải mở cổng SSH 22 mất hay sao?

 

Các bước thực hiện sẽ như sau:

  • Bước 1: Tạo một EC2 instance trong public subnet và mở cổng SSH 22 như thông thường.
  • Bước 2: Truy cập vào instance trên thông qua SSH và cài đặt SSM Agent.
  • Bước 3: Từ instance đó tạo một AMI để có một instance image cài đặt sẵn SSM Agent.
  • Bước 4: Xoá instance đã tạo.
  • Bước 5: Mỗi khi tạo một EC2 instance mới, ta sẽ tạo từ AMI phía trên. EC2 instance mới này sẽ không cần mở cổng SSH 22 nữa.
  • Bước 6: Gán IAM Role cho EC2 instance để nó có thể giao tiếp được với System Manager.

 

Bước 1, 2, 3, 4 mình sẽ không trình bày ở đây vì nó là kiến thức cơ bản, bạn có thể dễ dàng thực hiện được.

Ở bước 2, cách cài đặt SSM Agent thì bạn xem ở https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html 

Ở bước 3, giả sử AMI cài đặt sẵn SSM Agent của mình có tên là hungdv-ssm-image:

SSM image

Ở bước 6, mình sẽ tạo IAM Role với tối thiểu một IAM policy như sau:

IAM role for ssm

Bạn có thể tìm hiểu thêm cách tạo IAM Role cho SSM tại https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html

 

Dưới đây mình trình bày chi tiết cách làm ở bước 5 đối với 2 loại instance là public instance và private instance.

3. Cách làm với public instance

  • Đầu tiên bạn cần tạo một security group có outbound cho phép TCP 443 tới 0.0.0.0/0, không cần inbound nào hết. Lưu ý là bạn phải tạo SG này trước khi tạo EC2 instance. Nếu bạn đã có sẵn SG này rồi thì thôi:

SG Outbound cho SSM instance

SG Inbound của SSM instance

  • Tạo public instance từ hungdv-ssm-image: Mình để instance này trong public subnet, có public IP và IAM Role mình đã tạo

Tạo SSM instance trong public subnet

Bạn next tiếp tục và chọn Security group mới vừa tạo phía trên. Sau khi thành công mình có public instance với public IP và có SG như  sau:

public SSM instance

 

public SSM instance

 

  • Sau khi tạo xong public instance, bạn vào AWS System Manager -> chọn tab Managed Instances để thấy instance đó đã xuất hiện:

public instance trong SSM

 

  • Ở đây, bạn chọn tab Session Manager và chọn Start Session:

Start session SSM

 

  • Chọn instance và ấn Start session để truy cập vào instance:

Start session SSM

Terminal sẽ xuất hiện trên trình duyệt cho mình:

terminal in ssm

 

Ở trên, mình đã trình bày cách kết nối vào public instance mà không cần mở cổng SSH 22, giúp cho bảo mật tốt hơn, tránh mọi sự tấn công tới cổng SSH.

Một nhược điểm của cách làm trên là ta phải mở Security Group outbound ở cổng 443 ra ngoài internet. Vì là public instance nên có thể sẽ không vấn đề gì nhưng nếu bạn muốn bảo mật hơn nữa, bạn có thể khoá cổng 443 ra ngoài internet mà vẫn sử dụng được Session Manager. Cách làm này mình sẽ trình bày ở phần private instance dưới đây:

 

4. Cách làm với private instance

Đối với private instance nằm trong private subnet, không có public IP, không có internet gateway nên không thể đi ra ngoài internet.

Với loại instance này, cách làm truyền thống là ta sẽ sử dụng kỹ thuật Bastion host tốn nhiều chi phí và công sức, nhưng ở đây mình sẽ trình bày cách sử dụng Session Manager với loại này.

Cơ bản là private instance vẫn phải mở cổng TCP 443 tới System Manager, nhưng ở đây bí kíp là ta không cho kết nối đó đi ra ngoài internet mà chỉ cho đi trong chính VPC của mình, nên đảm bảo được vấn đề bảo mật.

Để làm được điều đó, ta phải đưa endpoint của System Manager vào trong VPC, nghĩa là sử dụng VPC interface endpoint:

VPC endpoint trong session manager

VPC interface endpoint được gắn với subnet nên cách làm này không những với private subnet mà còn có thể làm với public subnet, nghĩa là với public subnet, bạn hoàn toàn có thể không cho tcp 443 đi ra ngoài internet.

Cách làm như sau:

4.1. Tạo VPC endpoint

  • Đầu tiên bạn cần một Security Group cho phép tcp 443 đi vào, SG này được VPC endpoint sử dụng để nhận kết nối từ instance:

VPC Endpoint SG Inbound with ssm

và không cần outbound:

VPC endpoint SG outbound with ssm

  • Vào VPC -> Endpoints và tạo VPC Interface Endpoint cho dịch vụ ssm như sau:

VPC endpoint for ssm

Service Name chọn dịch vụ ssm (tương ứng với region của bạn).

Subnets chọn subnet bạn muốn kết nối tới EC2 instance trong đó, ví dụ của mình là privateSubnet1.

 

Tiếp theo, Security group sẽ chọn SG mà ta mới tạo phía trên, Policy để cho đơn giản thì mình để là Full Access, bạn muốn hạn chế quyền tới VPC endpoint này thì chọn Custom và sửa cho tương ứng:

SG of ssm

Sau khi tạo xong, ta có VPC endpoint:

VPC endpoint for ssm

  • Ở trên, ta đã tạo xong VPC endpoint cho dịch vụ ssm, ta cần tạo thêm 2 VPC endpoint nữa cho các dịch vụ ssmmessages và ec2messagnes: Cách làm tương tự như trên

vpc endpoint for ssmmessages and ec2messages

4.2. Tạo private instance

  • Bạn tạo một Security Group có outbound là TCP 443 đi trong VPC của mình, không cần inbound gì.
  • Từ hungdv-ssm-image, khởi tạo một private instance nằm trong private subnet có kết nối tới VPC endpoint mới tạo ở trên, không có public IP, chọn IAM Role đã tạo ở phần đầu:

Tạo private instance với ssm

Next tiếp và chọn Security Group ở trên để được private instance như sau:

private instance with ssm

 

security group như sau: 172.31.0.0/16 là dải CIDR VPC của mình 

SG của private instance với ssm

 

  • Vào System Manager -> chọn tab Session Manager -> Ấn Start Session và thấy private instance  xuất hiện là đã thành công:

private instance trong ssm

 

  • Ấn Start session để vào thử private instance:ssm vào private instance

 

Như bạn thấy, private instance của mình không có public IP, không cho phép giao tiếp với internet nhưng mình vẫn có thể truy cập vào nó mà không cần sử dụng Bastion Host.

 

Link tham khảo:

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

https://aws.amazon.com/premiumsupport/knowledge-center/ec2-systems-manager-vpc-endpoints/