🤖 AI vẫn chưa thể thay thế mình đâu, bạn có thể khám phá những gì mình đang làm tại đây!

Quản lý EC2 Private Instance với AWS Systems Manager (SSM)

K
Võ Cao Kỳ

2025/10/15

Bạn đã bao giờ mệt mỏi với việc quản lý Bastion Host hay lo lắng về bảo mật mỗi khi mở cổng SSH cho các server trong hệ thống?

Có một cách tốt hơn nhiều để làm điều đó! Hãy gặp gỡ AWS Systems Manager Session Manager - "phao cứu sinh" cho việc kết nối đến các EC2 instance một cách an toàn và không cần headache.

Thay vì phải "vẽ đường" cho hacker bằng cách mở cổng 22 ra Internet, hay vật lộn với việc duy trì một Bastion Host phức tạp, Session Manager mang đến một giải pháp thanh lịch và bảo mật hơn rất nhiều.

1. Thiết lập Cơ sở hạ tầng Mạng (VPC & Subnet)

Chúng ta cần một môi trường mạng cơ bản để chứa EC2 Instance.

1.1. Tạo VPC và Private Subnet

  • Tạo VPC: Tạo một Virtual Private Cloud (VPC) mới (ví dụ: 10.0.0.0/16).
  • Tạo Private Subnet: Trong VPC vừa tạo, tạo một hoặc nhiều Private Subnet (ví dụ: 10.0.1.0/24, 10.0.2.0/24).

💡 Mẹo:

Lưu ý quan trọng: Private Subnet phải được liên kết với một Route Table không có đường dẫn đến Internet Gateway (IGW). DNS settings của VPC phải Enable DNS hostnames

1.2. Tạo Route Table

  • Tạo Route Table (Private-RT): Tạo một Route Table mới và liên kết nó với các Private Subnet vừa tạo.
  • Cấu hình Route: Route Table này chỉ nên có route mặc định trỏ đến Local (nội bộ VPC), không có route 0.0.0.0/0 trỏ ra IGW (Internet Gateway).

VPC và Private Subnet

2. Thiết lập Bảo mật Mạng (Security Group)

Tạo một Security Group để kiểm soát lưu lượng truy cập qua các VPC Endpoint.

2.1. Tạo Security Group cho VPC Endpoints

  • Tạo Security Group (SG-SSM-Endpoint): Tạo một Security Group mới trong VPC của bạn.
  • Cấu hình Inbound (Vào):
    • Type: HTTPS
    • Port Range: 443
    • Source: CIDR Block của Private Subnet hoặc VPC của bạn, nếu bạn có nhiều Private Subnet (ví dụ: 10.0.0.0/16). Điều này cho phép EC2 Instance trong Subnet giao tiếp với Endpoint.
  • Cấu hình Outbound (Ra):
    • Type: All Traffic
    • Destination: 0.0.0.0/0 (Hoặc chỉ giới hạn ở các dải IP của AWS). Cần thiết cho giao tiếp ra bên ngoài.

Đây là bước quan trọng nhất. Chúng ta tạo các Interface Endpoint để cho phép EC2 Instance trong Private Subnet giao tiếp với dịch vụ SSM của AWS mà không cần đi qua Internet.

3.1. Tạo Interface Endpoints

  • Truy cập Console VPC > Endpoints.
  • Tạo 3 Interface Endpoints với VPC của bạn vừa tạo (thay bằng khu vực của bạn, ở đây mình sử dụng: ap-southeast-1):
    • com.amazonaws.ap-southeast-1.ssm
    • com.amazonaws.ap-southeast-1.ssmmessages (Cần thiết cho truyền tải dữ liệu phiên Shell)
    • com.amazonaws.ap-southeast-1.ec2messages
  • Cấu hình Endpoints:
    • VPC: Chọn VPC đã tạo.
    • Subnets: Chọn Private Subnet đã tạo.
    • Security Group: Gán SG-SSM-Endpoint (đã tạo ở bước 2).

SSM Interface Endpoint

4. Thiết lập Quyền truy cập (IAM Role và Policy)

Cần cấp quyền cho cả máy chủ EC2 và người dùng truy cập.

4.1. Tạo IAM Role cho EC2 Instance (Máy chủ)

  • Tạo IAM Role (EC2-SSM-Role): Chọn AWS Service > EC2 > EC2 Role for AWS Systems Manager làm trường hợp sử dụng.
  • Gán Policy: Gắn AWS Managed Policy sau (tự động): AmazonSSMManagedInstanceCore
  • Gán Role: Gắn EC2-SSM-Role này vào EC2 Instance Private của bạn. Đây là quyền để SSM Agent hoạt động và giao tiếp với dịch vụ SSM.

4.2. Cấu hình IAM Policy cho Người dùng (Quản trị viên)

  • Tạo IAM Policy (User-SSM-Policy): Tạo một Custom Policy cho phép người dùng khởi tạo phiên:
index.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:StartSession",
        "ssm:DescribeSessions",
        "ssm:TerminateSession"
      ],
      "Resource": "*"
    }
  ]
}
  • Tạo IAM Group và Gán Policy:
    • Tạo IAM Group (SSM-Admins): Tạo một Group mới.
    • Gán User-SSM-Policy: Gắn chính sách vừa tạo vào Group này.
    • Gán User: Đảm bảo IAM User của bạn (ví dụ: vocaoky) là thành viên của Group này.

IAM Group và Policy

5. Tạo và cấu hình EC2 Instance

Bây giờ chúng ta sẽ tạo máy chủ trong mạng riêng tư và gán các cấu hình bảo mật.

  • Launch Instance: Truy cập Console EC2 và chọn Launch Instance.
  • Chọn AMI: Chọn một AMI có SSM Agent được cài đặt sẵn (ví dụ: Amazon Linux 2 AMI hoặc các AMI Windows Server mới nhất).
  • Cấu hình Mạng:
    • VPC: Chọn VPC đã tạo.
    • Subnet: Chọn Private Subnet đã tạo.
    • Auto-assign Public IP: Chọn Disable (Bắt buộc để đảm bảo tính riêng tư).
  • Cấu hình IAM:
    • IAM instance profile: Chọn EC2-SSM-Role đã tạo ở bước 4. Bước này rất quan trọng.
  • Cấu hình Security Group:
    • SG Instance: Gán Security Group đã tạo ở bước 2

💡 Mẹo:

Bạn có thể kiểm tra kết nối của SSM tại Systems Manager > Fleet Manager

Managed nodes

6. Kết nối và Kiểm tra

Sau khi Instance đã khởi động và SSM Agent kết nối thành công qua VPC Endpoints, bạn có thể kiểm tra kết nối:

index.sh
# Thay i-xxxxxxxxxxxxxxxxx bằng Instance ID của bạn
ssh -o "ProxyCommand=aws ssm start-session \
  --profile personal \
  --target i-xxxxxxxxxxxxxxxxx \
  --document-name AWS-StartSSHSession \
  --parameters portNumber=22" \
  -i your-key.pem \
  ec2-user@<Private IPv4 addresses>

Cảm ơn tài liệu tham khảo từ 💓


Lưu ý: Tất cả các bài viết trên blog này được viết dựa trên kinh nghiệm cá nhân và quá trình tìm hiểu của mình. Mình hy vọng chúng có thể giúp ích cho bạn trong công việc và học tập, nhưng hãy xem đây như một nguồn tham khảo thay vì hướng dẫn tuyệt đối. Công nghệ luôn thay đổi, mỗi dự án có những đặc thù riêng, vì vậy bạn nên kiểm tra, thử nghiệm và điều chỉnh cho phù hợp với nhu cầu thực tế. Nếu có góp ý hay câu hỏi, đừng ngần ngại chia sẻ nhé!

Copyright © 2025 Vo Cao Ky

Cảm ơn Nuxt.js, ShadcnUI đã giúp mình build website này.