AWS Thai Blog
วิธีการตรวจสอบและ optimize การใช้งาน public IPv4 address บน AWS
ในวันที่ 28 กรกฎาคม 2023 AWS ได้มีประกาศการเปลี่ยนแปลงสำหรับการใช้งาน public IPv4 address โดยจะเริ่มต้นใช้งานตามประกาศตั้งแต่วันที่ 1 กุมภาพันธ์ 2024 ในบทความนี้จะรวบรวมและแนะนำฟีเจอร์ใหม่ๆที่จะมาช่วยในการตรวจสอบและติดตาม public IPv4 address ทั้งที่มีการใช้งาน และไม่ถูกใช้งานอยู่ เพื่อให้สามารถประเมินค่าใช้จ่ายที่จะเกิดขึ้นในอนาคตได้ รวมถึงสามารถนำมาช่วยในการทำ optimization ได้อีกด้วย เพื่อให้คุณสามารถเห็นภาพมากขึ้นว่าการเปลี่ยนแปลงดังกล่าวจะส่งผลกับค่าใช้จ่ายของคุณอย่างไรบ้างนั้น AWS ได้เพิ่ม usage type ใหม่ใน AWS Cost and Usage Report (CUR) ที่จะให้รายละเอียดของการใช้งาน public IPv4 address ของคุณ นอกเหนือจากนี้ เรายังมีการให้บริการ Public IP Insights ซึ่งเป็นฟีเจอร์ใหม่ของ Amazon VPC IP Address Management (IPAM) ซึ่งจะช่วยให้การติดตาม, วิเคราะห์, และตรวจสอบการใช้งาน public IPv4 address ทำได้ง่ายยิ่งขึ้น และสุดท้ายบทความนี้จะแชร์เกี่ยวกับ common best practice สำหรับการใช้งาน public IPv4 address และการ optimization ด้วยค่ะ
ก่อนอื่นเรามาเริ่มต้นทำความรู้จักกับ AWS public IPv4 address ทั้งสี่ประเภท รวมถึงปัจจัยที่มีผลต่อการเปลี่ยนแปลงดังกล่าวกันก่อนค่ะ
ประเภทของ AWS public IPv4 addresses
AWS จะแบ่ง public IPv4 address เป็น 4 ประเภทได้แก่ Amazon EC2 public IPv4 addresses, Amazon-owned Elastic IP addresses, service managed public IPv4 addresses, และ Bring Your Own IPs (BYOIP) โดยในการเปลี่ยนแปลงดังกล่าวมีผลกับ public IPv4 address ทุกประเภท ยกเว้น BYOIP
- Amazon Elastic Compute Cloud (EC2) public IPv4 addresses: เมื่อคุณ launch EC2 instance ใน default Amazon Virtual Private Cloud (VPC), หรือใน subnet ที่ได้มีการตั้งค่า auto-assign public IP address เอาไว้ instance เหล่านั้นจะได้รับ public IPv4 address จาก Amazon pool อัตโนมัติ ซึ่ง public IPv4 address เหล่านั้นจะไม่ได้ถูก associate หรือผูกติดอยู่กับ AWS account ของคุณ ดังนั้นเมื่อ EC2 instance ถูก stop, hibernate, หรือ terminate public IPv4 address เหล่านั้นก็จะถูก disassociate ออกจาก instance และคืนกลับเข้า Amazon address pool ซึ่งไม่สามารถนำกลับมาใช้ได้อีก เมื่อคุณเปิด EC2 instance อีกครั้ง ก็จะได้รับ IPv4 address ชุดใหม่ คุณสามารถศึกษารายละเอียดเพิ่มเติมได้ที่ EC2 public IPv4
- Elastic IP addresses: Elastic IP address คือ public IPv4 address ที่คุณสามารถ allocate ไปยัง AWS account ของคุณ ทำให้คุณสามารถเลือกจัดการได้ว่าจะ associate Elastic IP address นั้นกับ resource ใดใน VPC รวมถึงสามารถ disassociate และ reassociate ได้โดยไม่ต้องคืน IP address นั้นกลับเข้า Amazon pool
- Service managed public IPv4 addresses: สำหรับ AWS managed services อื่นๆ นอกเหนือจาก Amazon EC2 เช่น Elastic Load Balancing, Amazon VPC NAT Gateway, Amazon RDS หรือ AWS Global Accelerators จะใช้ public IPv4 จาก Amazon-owned pool ซึ่งเมื่อมีการตั้งค่าเพื่อให้ใช้งานผ่านอินเตอร์เน็ต หรือ deploy service เหล่านี้ใน subnet ที่เปิดค่า auto-assign public IP นั้น service เหล่านี้ก็จะได้รับแจก public IPv4 address โดยอัตโนมัติ นอกเหนือจาก service ที่กล่าวไปข้างต้นคุณสามารถค้นหา AWS Service ที่ใช้งาน public IP address เพิ่มเติมได้จากเอกสารนี้ค่ะ
- BYOIP addresses: สำหรับการใช้งาน IPv4 address ที่เป็นของคุณนั้นไม่มีค่าใช้จ่ายเพิ่มเติม คุณสามารถนำ public IPv4 address ชุดที่ใช้งานอยู่บน on-premise network มาใช้งานบน AWS account ได้ โดยสามารถตั้งค่า BYOIP address pool ให้ใช้งานกับ EC2 โดยตรง หรือใช้งานผ่าน Amazon VPC IPAM ซึ่งเมื่อใช้งาน BYOIP คุณก็ยังคงเป็นเจ้าของ IP address ชุดนั้น และยังสามารถควบคุม advertisement status บนอินเตอร์เน็ตได้เช่นเดิม คุณสามารถใช้งาน Public IPv4 address จาก BYOIP pool กับ AWS service ต่างๆ เช่น EC2 instance, NAT Gateway หรือ AWS Global Accelerator ได้ โดยไม่มีค่าใช้จ่ายเพิ่มเติม
Identifying and Analyzing Public IPv4 usage
สำหรับการตรวจสอบว่าปัจจุบันคุณมีการใช้งาน public IPv4 อยู่จำนวนเท่าไหร่ และมีการใช้งานกับ resouce ไหนบ้างนั้น คุณสามารถเลือกใช้งานเครื่องมือด้านล่างนี้ในการตรวจสอบค่ะ
1. Cost and Usage Report (CUR)
Cost and Usage Report เป็นเครื่องมือที่จะช่วยคุณในการติดตามค่าใช้งานและการใช้งาน service ต่างๆบน AWS ซึ่งสำหรับการตรวจสอบและประเมินค่าใช้จ่ายสำหรับ public IPv4 นั้น คุณสามารถเลือกตรวจสอบจาก usage type ที่เกี่ยวข้องดังนี้:
- PublicIPv4:IdleAddress: แสดงข้อมูลการใช้งาน public IPv4 address ทั้งหมดที่อยู่ในสถานะ Idle ใน AWS account ของคุณ
- PublicIPv4:InUseAddress: แสดงข้อมูลการใช้งาน public IPv4 address ทั้งหมดที่อยู่ในสถานะ in-use โดยแยกตาม AWS resource รวมถึง EC2 public IPv4 addresses, Elastic IP addresses, และ service managed public IPv4 addresses ทั้งนี้ในหัวข้อดังกล่าวจะไม่รวม BYOIPs เนื่องจากการใช้งาน BYOIP address นั้นไม่มีค่าใช้จ่าย
2. Public IP Insights
Public IP Insights เป็นหนึ่งในฟีเจอร์ของ Amazon VPC IP Address Manager (IPAM) ที่จะช่วยให้คุณสามารถมอนิเตอร์, วิเคราะห์และตรวจสอบการใช้งาน Public IPv4 address ที่คุณใช้งานอยู่ได้โดยไม่มีค่าใช้จ่าย โดย Public IP Insights จะช่วยแสดงรายละเอียดดังต่อไปนี้
- Resource และ service ใดที่กำลังใช้งาน public IPv4 address โดยจะแสดงรายละเอียด public IPv4 address ตามประเภทของ IP ได้แก่ Amazon-owned Elasitc IP, service managed IP, EC2 public IP และ Bring Your Own IP (BYOIP) address ภาพด้านล่างนี้ (figure 1) แสดง dashboard ของ Public IP Insights ที่บอกจำนวนการใช้งาน public IPv4 address ทั้งหมด และแจกแจงรายละเอียดตามประเภทและ association status
Figure 1: แสดง dashboard ของ Public IP insights บน Amazon VPC IP Address Manager (IPAM) console
- รายละเอียดของ public IPv4 address เช่น AWS account ID ที่เป็นเจ้าของ IP ดังกล่าว, network interface ID และ instance ID ที่ใช้งานอยู่ รวมถึง security group ของ public IPv4 ดังกล่าว ซึ่งข้อมูลนี้จะช่วยให้คุณสามารถประเมินหรือพิจารณาทางเลือกอื่นๆ เพื่อปรับเปลี่ยนให้ใช้งาน public IPv4 ได้อย่างมีประสิทธิภาพมากขึ้น จากภาพตัวอย่างด้านล่าง (figure 2) แสดง รายละเอียดของ public IPv4 address ซึ่งเป็น EC2 public IP และแสดง network interface ID, instance ID รวมถึง security group ที่เกี่ยวข้องด้วย
Figure 2: แสดง รายละเอียดของ public IPv4 address
นอกเหนือจากนี้ Public IP insights นั้นสามารถช่วยให้เราตรวจสอบการใช้งาน public IPv4 ในทุกๆ region ที่เราใช้งาน รวมถึงถ้ามีการตั้งค่า AWS Organization ก็สามารถตรวจสอบการใช้งานในทุกๆ AWS account ที่อยู่ภายใต้ AWS Organization ได้อีกด้วยค่ะ
เทคนิคสำหรับการ Optimize การใช้งาน Public IPv4
ลำดับถัดไปเราจะมาพูดถึงเทคนิคสำหรับการ optimize การใช้งาน Public IPv4 กันค่ะ
1. Isolate and optimize auto-assign public IPv4 address
Auto-assign public IPv4 address เป็นอีกหนึ่งฟีเจอร์ใน subnet และในระดับ instance ที่ช่วยให้ง่ายในการสร้าง public resources แค่เพียง enable ฟีเจอร์นี้ AWS ก็จะ assign public IPv4 ให้กับ resource ต่างๆที่อยู่ในใน subnet หรือ ให้กับ EC2 instance อัตโนมัติ
แต่อย่างไรก็ดี บาง resource ก็ไม่จำเป็นต้องใช้งาน public IPv4 address เช่น workload ที่อยู่ใน private subnet หรือ ไม่มีการเรียกใช้งานจากอินเตอร์เน็ตโดยตรง เป็นต้น ดังนั้นเราจึงควรพิจารณา disable auto-assign public IPv4 address เพื่อป้องกันการใช้งาน public IPv4 address อย่างเกินความจำเป็น โดยคุณสามารถ disable ในระดับ subnet ได้ตามภาพด้านล่าง (Figure 3)
และเนื่องจาก subnet ใน default VPC จะถูก enable auto-assign public IPv4 address อัตโนมัติ ดังนั้นเราจึงแนะนำว่าควรพิจารณา disable auto-assign public IPv4 address ที่ subnet ใน default VPC เช่นกัน
Figure 3: แสดงภาพการตั้งค่า auto-assign public IPv4 addresses
สำหรับในกรณีที่ไม่สามารถ disable auto-assign public IPv4 address ในระดับ subnet ได้ คุณสามารถพิจารณาเปลี่ยนการตั้งค่า auto-assign public IPv4 address ได้ในขั้นตอนของการสร้าง instance ตามที่แสดงในภาพด้านล่าง (figure 4) ซึ่งจะช่วยให้คุณสามารถควบคุมและจัดการการแจก public IPv4 addresses ให้กับ resource ได้อย่างละเอียดมากยิ่งขึ้น
Figure 4: แสดงการตั้งค่า disable auto-assign public IPv4 ในขั้นตอนของการสร้าง Amazon EC2 instance
2. ใช้ Public IPv4 เท่าที่จำเป็น
ตรวจสอบว่า resource ใดจำเป็นต้อง deploy ใน public subnet และต้องมี public IPv4 addess เป็นของตัวเอง ซึ่งบาง resource เช่น database หรือ containter service สามารถ deploy ลงใน private subnet และไม่เปิดให้เข้าถึงจากอินเตอร์เน็ตได้โดยตรง ซึ่งจะช่วยในการ optimize การใช้งาน public IPv4 address ที่จะ associate กับ resource ของคุณได้
แต่หากพบว่า resource ของคุณมีการใช้งาน public IPv4 address อยู่ และต้องการลบ public IPv4 address ออกจาก resource ของคุณทางเราได้รวบบทความบางส่วนที่แนะนำวิธีการลบ public IPv4 ออกจาก resouce ของคุณด้านล่างนี้ค่ะ
- วิธีการลบ auto-assigned public IPv4 address ออกจาก EC2 instance
- วิธีการ disassociate Elastic IP address จาก EC2 instance
- วิธีการ release Elastic IP address จาก AWS Account
- วิธีการย้าย Amazon RDS DB instance จาก public subnet ไปยัง private subnet ภายใน VPC เดียวกัน
- วิธีการตั้งค่า Amazon Redshift Private Cluster
- วิธีการปิด public access สำหรับ AWS DMS replication DB instance
ทั้งนี้การดำเนินการเปลี่ยนแปลงการตั้งค่าใดๆ คุณควรจะพิจารณาถึงผลกระทบก่อนดำเนินการ ดังนั้นเราจึงแนะนำว่าคุณควรจะตรวจสอบให้มั่นใจว่า public IPv4 ของ resouce ของคุณ ไม่มีการใช้งานจริง, ประเมินผลกระทบของการเปลี่ยนแปลง, และทดสอบการเปลี่ยนแปลงให้ดีก่อนดำเนินการจริงที่ production environment ค่ะ
3. Optimize remote Connectivity for IT Admins
สำหรับการ remote access ไปยัง Amazon EC2 instance ที่อยู่ใน VPC นั้น เรายังมีเครื่องมีให้คุณเลือกใช้งาน ทำให้คุณสามารถ remote access ไปยัง EC2 instance ของคุณได้ โดยไม่จำเป็นต้องใช้ public IP address ดังนี้
- Amazon EC2 Instance Connect (EIC) Endpoints คือเครื่องมือที่ช่วยให้คุณสามารถ connect ไปยัง EC2 instance ได้ โดยไม่จำเป็นต้องใช้งาน public IPv4 address อีกทั้งยังไม่จำเป็นต้องตั้งค่า Internet Gateway (IGW) ใน VPC และไม่ต้องติดตั้ง agent ภายในเครื่อง EC2 instance อีกด้วย โดย EIC Endpoint จะทำงานร่วมกับ AWS Management Console และ AWS Command Line Interface (AWS CLI) เพื่อช่วยในการสร้าง connection ไปยัง EC2 instance ซึ่งนอกจากจะช่วยให้คุณสามารถ optimize การใช้งาน public IPv4 แล้ว ยังช่วยทำให้ security posture ของ resource ดีขึ้นอีกด้วย สำหรับรายละเอียดเพิ่มเติมคุณสามารถศึกษาได้จากบทความนี้ Secure Connectivity from Public to Private: Introducing EC2 Instance Connect Endpoint ค่ะ
- AWS Systems Manager Session Manager เป็นอีกเครื่องมีที่ช่วยให้คุณสามารถเข้าถึง EC2 instance ได้โดยที่ไม่จำเป็นต้องใช้งาน public IP address, ไม่ต้องเปิด inbound port สำหรับ SSH หรือ remote PowerShell และไม่จำเป็นต้อง SSH key อีกด้วย โดยวิธีการทำงาน Session Manager จะคุยกับ instance ของเราผ่านตัว SSM Agent ที่ถูกติดตั้งอยู่เพื่อสร้าง tunnel ที่เข้ารหัสไปยัง instance ดังนั้นหากต้องการใช้งาน Session Manager เพื่อจัดการ EC2 instance ก็จะต้องติดตั้ง SSM Agent และ จัดการ IAM role ให้มีสิทธิเพียงพอในการใช้งาน สำหรับรายละเอียดเพิ่มเติม คุณสามารถศึกษาได้จากบทความนี้ค่ะ AWS Systems Manager Session Manager for Shell Access to EC2 Instances
4. Centralized Internet Egress Traffic
สำหรับ outbound traffic ออกสู่อินเตอร์เน็ต การใช้ NAT gateway สามารถช่วยให้คุณ optimize การใช้งาน public IPv4 address ได้ โดย NAT gateway จะช่วยแปลง IP address ของเครื่องต้นทาง (Source NAT) ทำให้ resource ที่อยู่ใน private subnet สามารถเข้าถึง internet ได้ผ่าน public IP address ของ NAT Gateway นอกเหนือจากนี้ NAT gateway ยังสามารถรองรับการ scale ได้ถึง 100 Gbps และ 10 ล้านแพ็กเกตต่อวินาทีในหนึ่ง Availability Zone อีกด้วย
อย่างไรก็ดีการใช้งาน NAT gateway นั้นก็จะต้องพิจารณาจาก architecture, รูปแบบ traffic ของ workload นั้นๆ รวมถึงค่าใช้จ่ายสำหรับ NAT gateway ร่วมด้วย
5. Optimize Internet Facing Applications
สำหรับ inbound traffic จาก internet คุณสามารถเลือกใช้งาน Elastic Load Balancing ไม่ว่าจะเป็น Application Load Balancer (ALB) หรือ Network Load Balancer (NLB) เพื่อช่วยเพิ่ม availability และ performance ให้กับ workload ในขณะเดียวกันก็ยังช่วย optimize การใช้งาน public IPv4 อีกด้วย และเนื่องจาก ALB นั้นรองรับการทำ host-based routing และ path-based routing ทำให้เราสามารถใช้งาน ALB เพียงหนึ่งตัวร่วมกันหลายๆ application ได้ ซึ่งจะช่วยในการ optimize การใช้งาน public IPv4 ได้โดยเฉพาะอย่างยิ่ง containerized application คุณสามารถศึกษาเพิ่มเติมได้จากบทความด้านล่างนี้
- How To Expose Multiple Applications on Amazon EKS Using a Single Application Load Balancer
- Using AWS Application Load Balancer path-based routing to combine Amazon ECS launch types
อย่างไรก็ดีการเลือกว่าจะใช้ Elastic Load Balancer นั้นก็จะต้องพิจารณาจาก architecture และ รูปแบบ traffic ของ workload นั้นๆด้วย
และทั้งหมดนี้ก็คือก็คือเทคนิคต่างๆที่เรารวบรวมมาเพื่อใช้ในการ optimize การใช้งาน public IPv4 address ซึ่งการ optimize ที่ดีนั้นไม่ใช่เป็นงานที่ทำครั้งเดียวแล้วจบ เราควรจะต้องเริ่มจากการออกแบบ architecture ที่ดี เลือกใช้งาน resource ให้เหมาะสมกับงาน และหมั่นตรวจสอบและทบทวนการใช้งานอย่างสม่ำเสมอเพื่อให้เราสามารถใช้งานได้อย่างคุ้มค่าที่สุดค่ะ