วิธีจัดการ EC2 instance ที่อยู่ใน private Subnet ด้วย Systems Manager

EC2 ไม่แสดงขึ้นใน SSM, Managed instance, Fleet instance แก้ยังไง บทความนี้มีคำตอบ
2023.07.06

ปัญหาที่เกิดขึ้น

EC2 instance ที่อยู่ใน private subnet ไม่แสดงในหน้าต่างของ SSM Fleet Manager

วิธีแก้ปัญหา

การจัดการ EC2 ที่อยู่ใน private subnet ที่ไม่สามารถเชื่อมต่ออินเตอร์เน็ตด้วย SSM จำเป็นต้องทำการตั้งค่าต่อไปนี้

  • จำเป็นต้อง installed SSM agent ใน EC2 instance
  • EC2 instance ต้องมี IAM Role ที่อนุญาตให้เชื่อมต่อโดย SSM ได้
  • ต้องตั้งค่า VPC endpoint ไว้

โดยครั้งนี้ เราได้ลองสร้าง EC2 instance ขึ้นใน private subnet แล้วลองทำให้แสดงขึ้นในหน้าต่างของ SSM Fleet Manager ดูครับ
โดยเราจะใช้ Amazon Linux 2 EC2 instance ครับ

① ตรวจสอบว่า EC2 instance ได้ทำการเปิดการใช้งาน SSM Agent อยู่หรือไม่

เมื่อเราทำการล็อกอิน EC2 instance แล้วให้ใช้คำสั่งด้านล่างนี้เพื่อตรวจสอบว่าทำงานอยู่
ถ้าขึ้นว่า active (running) ก็คือเปิดใช้งานอยู่ครับ

$ sudo systemctl status amazon-ssm-agent
● amazon-ssm-agent.service - amazon-ssm-agent
   Loaded: loaded (/usr/lib/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2023-06-15 07:35:20 UTC; 1h 1min ago
 Main PID: 3204 (amazon-ssm-agen)
   CGroup: /system.slice/amazon-ssm-agent.service
           └─3204 /usr/bin/amazon-ssm-agent
(ย่อ)

สำหรับ OS อื่น สามารถตรวจสอบเอกสารวิธีการตรวจสอบได้ ที่นี่ ครับ

ถ้า SSM Agent ไม่ได้ติดตั้งใน EC2 instance ให้เราทำการติดตั้งครับ

② ทำการติด IAM Role ที่อนุญาตให้เชื่อมต่อโดย SSM ให้กับ EC2 instance

เราสามารถทำขั้นตอนนี้ได้ผ่าน AWS Management Console

ทำการเลือก EC2 instance จาก EC2 Dashboard แล้วทำการติด IAM Role โดยเลือก [Actions]→[Security]→[Modify IAM role]

เราจะทำการติด Role ตามภาพด้านล่างนี้
สำหรับท่านที่มี IAM Role เตรียมไว้แล้ว ให้เลือก IAM Role ครับ สำหรับท่านที่ไม่มีให้เลือก「Create new IAM role」เพื่อสร้าง IAM Role ใหม่ครับ

IAM Role ที่เราเตรียมไว้ หรือที่จะสร้างใหม่ จะต้องใส่ Policy AmazonSSMManagedInstanceCore เข้าไปครับครับ

AmazonSSMManagedInstanceCore คือ Policy ที่เป็นทำให้ instance สามารถใช้งาน service core function ของ Systems Manager ได้ครับ

หากเราต้องการใช้งาน Systems Manager ในรูปแบบอื่น อาจจะจำเป็นต้องมี Policy อื่นด้วยครับ แต่สำหรับการทดลองนี้มีแค่ AmazonSSMManagedInstanceCore ก็เพียงพอครับ สำหรับ Policy อื่นๆที่เกี่ยวกับ SSM สามารดูได้เอกสารด้านล่างนี้

(อ้างอิง) Step 1: Configure instance permissions for Systems Manager

③ สร้าง VPC Endpoint สำหรับ SSM

ในหน้าต่าง VPC Dashboard ให้เราคลิก [Endpoints] จาก navigation pane(เมนูทางด้านข้าง) แล้วสร้าง VPC Endpoint([Create endpoint]) ครับ

สำหรับครั้งนี้ จำเป็นต้องสร้าง VPC Endpoint อย่างน้อย 3 อันครับ

  • com.amazonaws.region.ssm
  • com.amazonaws.region.ec2messages
  • com.amazonaws.region.ssmmessages

ก่อนอื่นให้เราสร้าง com.amazonaws.region.ssm ก่อนครับ

โดยใน Service category ให้เราเลือก「AWS services」ครับ

ใน「Services」ให้เราทำการค้นหาคำว่า ssm แล้วเลือก com.amazonaws.region.ssm ครับ

แล้วเลือก「VPC」กับ「Subnet」(「Subnet」ให้เลือก private subnet) และทำการตรวจสอบว่าทำการเปิดการใช้งาน「Enable DNS name」แล้ว

แล้วเลือก Security group หรือ สร้าง Security group ใหม่

ทำการตั้งค่า Security Group inbound rule ตามการตั้งค่าด้านล่างนี้

  • Type: HTTPS 443
  • Source: VPC IPv4 CIDR ที่เราสร้างขึ้น

ต่อไปให้เราทำการเพิ่ม com.amazonaws.region.ec2messages/com.amazonaws.region.ssmmessages เหมือนกับที่ทำมาตามด้านบนนี้
พอทำเสร็จหมดแล้ว เราจะได้แบบด้านล่างนี้ครับ

ในตรงนี้ ตอนที่ผมสร้าง VPC Endpoint อันแรก เกิด error ขึ้นผมเลยขอมาแชร์ให้ดู เผื่อจะเป็นประโยชน์ครับ

โดยวิธีแก้ให้เราไปเลือก VPC ของเรามีปัญหา แล้วเลือก [Actions] → [Edit VPC settings]

แล้วให้เราเปิดการใช้งาน [Enable DNS hostnames] แล้วกด [Save] ครับ

* เพื่อความชัวร์ให้เปิดการใช้งาน [Enable DNS resolution] ด้วยก็ดีครับ

เมื่อเราลองสร้าง VPC Endpoint อีกรอบจะเห็นว่าสามารถสร้างได้แล้วโดยไม่เกิด error อะไร

④ ทำการตรวจสอบว่า EC2 instance ที่เราสร้างขึ้นแสดงอยู่ใน Fleet Manager

ทำการเปิด [Fleet instance] จาก navigation pane(เมนูทางด้านข้าง) ของ Systems Manager Console
ในหน้าต่าง Fleet instance จะเห็น EC2 ที่เราสร้างขึ้นแสดงอยู่

โดยในการแสดงผลอาจจะใช้เวลาอยู่บ้าง กรุณารอสักครู่

บทความอ้างอิง

Manage private EC2 instances without internet access using Systems Manager | AWS re:Post (English)

AWS Systems Manager (SSM) คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS ในปี 2022 | DevelopersIO

การใช้งาน SSM เชื่อมต่อเข้า EC2 Instance โดยไม่ต้องมี Inbound | DevelopersIO

บทความต้นฉบับ

プライベートサブネットにあるEC2インスタンスを Systems Manager で管理する | DevelopersIO (Japanese)