วิธีจัดการ EC2 instance ที่อยู่ใน private Subnet ด้วย Systems Manager
ปัญหาที่เกิดขึ้น
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)