
แนะนำข้อมูลพื้นฐาน Amazon VPC Lattice
ภาพรวมของ VPC Lattice
VPC Lattice เป็นบริการ Reverse Proxy สำหรับ VPC ที่ช่วยให้สามารถสื่อสารข้าม VPC ได้
โดยบริการนี้สามารถรองรับ HTTP, HTTPS และ gRPC และอนุญาตการเข้าถึง แม้ว่า CIDR ของ VPC ของผู้ใช้และ VPC ของผู้ให้บริการจะทับซ้อนกันก็ตาม
นอกจากนี้คุณยังสามารถสร้างการเชื่อมต่อข้ามบัญชีได้อีกด้วย
อย่างไรก็ตาม Lattice ไม่สามารถรองรับการสื่อสารข้ามรีเจี้ยนได้ ควรพิจารณาบริการอื่นอย่าง AWS Transit Gateway
ส่วนประกอบสำคัญของ VPC Lattice
มีส่วนประกอบหลัก 3 ส่วน คือ Service Network, Service และ Target Group
ด้วยส่วนประกอบเหล่านี้ คุณจะสามารถเข้าถึง resource ที่อยู่ใน target group ได้จาก resource ที่อยู่ใน VPC ที่เชื่อมกับ service network โดยเป็นการสื่อสารทางเดียวที่ไม่สามารถส่ง request จาก resource ที่อยู่ใน target group ไปยัง resource ที่อยู่ใน VPC ที่เชื่อมกับ target group
Service Network
service network ทำหน้าที่เป็น Hub สำหรับเชื่อมต่อ VPC กับ service ต่างๆ โดยที่เราสามารถเชื่อม VPC กับ service ได้สูงสุด 50 รายการต่อ 1 service network (สามารถขอเพิ่มลิมิตได้)
ในทางกลับกัน VPC สามารถเชื่อมกับเพียง 1 service network เท่านั้น เพราะว่าเราไม่สามารถเชื่อม VPC หลายตัวกับ service network ได้ จึงควรเชื่อม service network กับ service ที่จำเป็น
นอกจากนี้ยังสามารถตั้งค่า Security และ Log ได้ ซึ่งในส่วนนี้เราจะอธิบายเพิ่มเติมทีหลัง
Service
Service คือ resource เป้าหมายที่ resource จากภายใน VPC ต้องการเข้าถึง โดยการเข้าถึง service จะต้องเข้าถึงโดยใช้ domain ของ service นั้น
Service เป็น resource ที่มีลักษณะคล้ายกับ ALB มาก โดยที่คุณจะกำหนด Listener และมอบหมาย Action ต่างๆให้เป็นไปตาม Rules แต่จะมีความแตกต่างกับ ALB ตรงที่คุณสามารถตั้งค่า Action ให้ forward request ไปที่ Target Group หรือส่ง 404 response กลับไปเท่านั้น
การตั้งค่า custom domain สามารถทำได้เฉพาะตอนที่สร้าง service เท่านั้น
ทางทีมญี่ปุ่นได้ลองตั้งค่า Custom Domain สามารถดูรายละเอียดได้ที่บล็อกด้านล่าง
Amazon VPC Latticeにカスタムドメインを設定する (Japanese)
แม้ว่าจะใช้ default domain เราสามารถใช้ certificate ที่สร้างโดย Lattice ได้และสามารถใช้งานการสื่อสาร HTTPS ได้เลย
นอกจากนี้ยังสามารถตั้งค่า Security และ Log ได้เช่นเดียวกับ service network
Target Group
ในส่วนของ Target Group เราจะตั้งค่า action ที่ปลายทางของ forwarding rule สำหรับ Service Listener ซึ่งเป็นส่วนที่มีกลไกลการทำงานคล้ายๆกับ ALB
Resource ที่สามารถเป็นเป้าหมายของ Target Group ได้มีดังนี้
・Instance
・IP
・Lambda
・Internal ALB
รายละเอียดเพิ่มเติมเกี่ยวกับเงื่อนไขต่างๆสามารถตรวจสอบได้ที่เอกสารของ AWS
(English))
สามารถเลือก Protocol version ได้ดังนี้
・HTTP/1.1
・HTTP/2
・gRPC
สำหรับ resource ที่เพิ่มไว้ใน Target Group จำเป็นจะต้องตั้งค่า inbound rule ของ security group ให้อนุญาต protocol ที่จะใช้ในการเชื่อมต่อเข้ามายัง resource ดังกล่าว และในขั้นตอนการตั้งค่า inbound rule นี้ source ที่เราต้องอนุญาตคือ prefix list ของ VPC Lattice ไม่ใช่ Resource ต้นทาง
สำหรับการตั้งค่า Security Group สามารถดูวิธีการได้จากบล็อกที่ทางทีมญี่ปุ่นได้ทดลองด้านล่างนี้ได้
(Japanese)
Security
ในส่วนของความปลอดภัยของ Lattice นั้นสามารถควบคุมได้หลายเลเยอร์ แม้แต่ในเอกสารของ AWS ก็มีการกล่าวถึง
VPC Lattice provides a framework that you can use to implement a defense strategy at multiple layers of the network. The first layer is the combination of service, resource configuration, VPC association, and VPC endpoint of type service network.
ยกข้อความมาจาก : What is Amazon VPC Lattice? (English)
แปลไทยโดย AI
VPC Lattice มอบเฟรมเวิร์กที่คุณสามารถใช้เพื่อปรับใช้กลยุทธ์การป้องกันที่หลายเลเยอร์ของเครือข่าย เลเยอร์แรกคือการผสมผสานระหว่าง service การกำหนดค่า resource การเชื่อมโยง VPC และ VPC endpoint ของประเภท service network
การเชื่อมโยง service กับ vpc
ก่อนอื่นอยากจะตรวจสอบการเชื่อมโยงของ VPC กับ service ที่อยู่ในเลเยอร์แรกก่อน
ในการเชื่อมโยง VPC กับ service นี้จะอธิบายในส่วนของการตั้งค่าที่ service network
ถ้า VPC กับ service network ไม่เชื่อมกันอยู่ resource ใน VPC จะไม่สามารถแอคเซส resource ที่ตั้งค่าไว้ใน target group ได้
และในขณะเดียวกัน ถ้า service network กับ service ไม่เชื่อมกันอยู่ resource ใน VPC จะไม่สามารถแอคเซส resource ที่ตั้งค่าไว้ใน target group ได้เช่นกัน
หากเลือกที่จะไม่เชื่อมกันในลักษณะนี้ เราจะสามารถจำกัดเส้นทางการเชื่อมต่อให้แคบลงได้
อธิบายแบบ 1:1 อาจจะเข้าใจยาก ในบล็อกนี้จะลองทำแบบ 1:2 ดู
ในกรณีที่ต้องการเส้นทางจาก VPC ฝั่งผู้ใช้งานไปยัง resource ของ target groupA ที่ตั้งค่าไว้ภายใต้ ServiceA เท่านั้น
เราสามารถตั้งค่าการเชื่อมโยงระหว่าง service network และ ServiceA เท่านั้น และจำกัดเส้นทางให้แคบได้ลงได้เพื่อไม่ให้แอคเซสถึง target groupB ที่อยู่ภายใต้ ServiceB
ด้วยความที่เราสามารถเลือกได้ว่าจะเชื่อมต่อหรือไม่ ทำให้ง่ายในการจำกัดปลายทางของการเชื่อมต่อ
Security Group
เราสามารถตั้งค่า Security Group ของการเชื่อมต่อกับ VPC แต่ละตัวได้
การตั้งค่า Security Group ทำให้สามารถจำกัด resource ที่สามารถแอคเซส Lattice ภายใน VPC ได้
ข้อควรระวัง :เนื่องจากเป็นการควบคุมแอคเซสระหว่าง VPC และ service network ไม่สามารถควบคุมแอคเซสของแต่ละ Service ได้
IAM Policy
สามารถตั้งค่าการตรวจสอบสิทธิ์ IAM สำหรับแต่ละ service network และ service ในฐานะ IAM Policy ได้
สามารถกำหนดค่าได้ทั้งบน service network และ service หรือจะตั้งค่าไว้ที่ใดที่นึงได้ ในกรณีที่ตั้งค่าไว้ทั้งบน service Network และ service การสื่อสารจะได้การอนุญาตหากมีการยอมรับความถูกต้องของทั้งสองรายการ
กล่าวอีกนัยหนึ่งว่าการสื่อสารจะถูกปฏิเสธหากการรับรองความถูกต้องฝั่งใดฝั่งนึงล้มเหลว
ในกรณีที่ตั้งค่าเพียงฝั่งเดียว หากมีการอนุญาต Policy ที่ตั้งค่าไว้ทั้งสองฝั่งจะสามารถสื่อสารกันได้และฝั่งที่ไม่มีการตั้งต่าจะได้รับการอนุญาตโดยอัตโนมัติ
สำหรับการตั้งค่า Policy แนะนำให้ตั้งค่าเฉพาะ Guardrail แบบหลวม ๆ ไว้ที่ Service Network แล้วค่อยตั้ง security rule ของแต่ละ Service แบบละเอียดอีกที
อีกทั้ง การใช้งาน IAM Policy ทำให้เราสามารถควบคุมเรื่อง Security ได้ละเอียดอย่างที่ไม่สามารถทำได้กับการตั้งค่า Security Group ที่ VPC กับ Service
ในการตรวจสอบ IAM โดยพื้นฐานแล้วจำเป็นต้องมี SigV4 Signature ที่ฝั่ง client สามารถตรวจสอบข้อกำหนดต่างๆได้ลิงก์ด้านล่างนี้
(English)
ทางทีมญี่ปุ่นได้ลองตั้งค่า IAM Policy สามารถดูรายละเอียดได้ที่บล็อกด้านล่าง
Amazon VPC LatticeでIAM認証を使って通信元を制限してみた (Japanese)
ตัวอย่างการดีไซน์ Lattice ที่มี Security
ในส่วนนี้อยากจะแนะนำ 2 ตัวอย่างการดีไซน์ที่อิงตาม Security ของแต่ละเลเยอร์ที่ได้อธิบายไปก่อนหน้านี้
ตัวอย่างดีไซน์ที่ใช้ประโยชน์จากการเชื่อมของ Service และ VPC
อันดับแรก จะแนะนำดีไซน์ที่ใช้ประโยชน์จากการเชื่อมของ Service และ VPC
หากเรามีเงื่อนไข เช่น การแอคเซสที่เฉพาะเจาะจงของ Service และ Resource ใน VPC จะไม่สามารถอ้างอิงจากดีไซน์นี้ได้
แต่สามารถอ้างอิงได้จากตัวอย่างดีไซน์ที่ใช้ IAM Policy
ดีไซน์นี้ออกแบบมาเพื่อใช้กับ Service Network ขนาดเล็กที่ไม่ค่อยมีการใช้งานร่วมกัน
โดยพื้นฐานแล้วเราจะสร้าง Service Network 1:1 กับ VPC ตามผังด้านล่างนี้ แอคเซสจะถูกควบคุมโดยการเชื่อมโยง Service ที่จำเป็นจาก VPC นั้นๆ
นอกจากนี้ยังสามารถใช้ Security Group ได้ด้วยหากต้องการควบคุมแอคเซส Lattice ที่ resource ภายใน VPC
ข้อดี
- เข้าใจได้ง่ายเนื่องจากเป็นการเชื่อมต่อเฉพาะเส้นทางที่จำกัดไว้เท่านั้น
- ไม่จำเป็นต้องปรับปรุงแอปฯในการ signing เนื่องจากใช้การตั้งค่า IAM Authen
ข้อเสีย
- เพราะมีการสร้าง Service Network จำนวนมาก อาจจะยากในการกำหนดขอบเขต
- ไม่สามารถควบคุมโดยละเอียด เช่น ไม่สามารถตั้งค่าให้ resource ใน VPC ของฝั่งผู้ใช้บริการสามารถเข้าถึง service แค่บางตัวเท่านั้นได้
ตัวอย่างดีไซน์ที่ใช้ประโยชน์จากการรับรองความถูกต้อง IAM
ต่อไป เราจะแนะนำตัวอย่างดีไซน์ที่ใช้ประโยชน์จากการรับรองความถูกต้อง IAM
ดีไซน์นี้ออกแบบมาเพื่อ Service Network ขนาดใหญ่ที่ใช้ร่วมกัน
วาง Service Network ในฐานะ Hub ในบัญชีที่ใช้ดูแล network เหมือนไดอะแกรมด้านล่าง กำหนด policy ของแต่ละ service และควบคุมการเข้าถึง
・ข้อดี
・สามารถจัดการ Service Network ได้จากส่วนกลาง ทำให้ง่ายต่อการแบ่งขอบเขตความรับผิดชอบ
・สามารถควบคุมอย่างลงรายละเอียดได้ เช่น ควบคุมการเข้าถึง resource ของ service โดยเฉพาะ
・ข้อเสีย
・จำเป็นต้องใช้ลายเซ็น SigV4 ยกเว้นวิธีการกำหนด resource บางอย่าง
・ยิ่งขนาดใหญ่เท่าไหร่ นโยบายการตรวจสอบสิทธิ์ IAM ที่กำหนดไว้บนที่ฝั่ง Service ก็จะซับซ้อนมากขึ้นเท่านั้น
การเก็บLog
สามารถกำหนดค่าการเก็บ Log ได้ใน Service Network และ Service
คุณสามารถเลือกจากปลายทางการจัดส่งได้ 3 ที่ : S3, CloudWatch Logs และ Kinesis Data Firehose
Enable access logs using the console
You can enable access logs for a service network, a service, or a resource configuration during creation. You can also enable access logs after you create a service network, service, or resource configuration as described in the following procedure.
To create a basic service using the console
(abbreviation)
5.Add a delivery destination for your access logs as follows:
・Select CloudWatch Log group and choose a log group. To create a log group, choose Create a log group in CloudWatch.
・Select S3 bucket and enter the S3 bucket path, including any prefix. To search your S3 buckets, choose Browse S3.
・Select Kinesis Data Firehose delivery stream and choose a delivery stream. To create a delivery stream, choose Create a delivery stream in Kinesis.
อ้างอิงจาก Enable access logs (English)
รายการที่สามารถรับได้จากการเก็บLogจะเหมือนกันสำหรับทั้ง Service Network และ Service และสามารถรับรายการดังต่อไปนี้ได้
{
"hostHeader": "example.com",
"sslCipher": "-",
"serviceNetworkArn": "arn:aws:vpc-lattice:us-west-2:123456789012:servicenetwork/svn-1a2b3c4d",
"resolvedUser": "Unknown",
"authDeniedReason": "null",
"requestMethod": "GET",
"targetGroupArn": "arn:aws:vpc-lattice:us-west-2:123456789012:targetgroup/tg-1a2b3c4d",
"tlsVersion": "-",
"userAgent": "-",
"serverNameIndication": "-",
"destinationVpcId": "vpc-0abcdef1234567890",
"sourceIpPort": "178.0.181.150:80",
"targetIpPort": "131.31.44.176:80",
"serviceArn": "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-1a2b3c4d",
"sourceVpcId": "vpc-0abcdef1234567890",
"requestPath": "/billing",
"startTime": "2023-07-28T20:48:45Z",
"protocol": "HTTP/1.1",
"responseCode": 200,
"bytesReceived": 42,
"bytesSent": 42,
"duration": 375,
"requestToTargetDuration": 1,
"responseFromTargetDuration": 1,
"grpcResponseCode": 1
}
Access logs for Amazon VPC Lattice(English)
การเชื่อมต่อข้ามบัญชี
VPC Lattice สามารถใช้ RAM เพื่อสร้างการเชื่อมต่อข้ามบัญชีโดยการแชร์ Service Network หรือ Service ต่างๆได้
เมื่อแชร์ resource ของ Lattice ใน RAM คุณมีแค่สิทธิ์เชื่อมต่อเท่านั้นโดยไม่สามารถเปลี่ยนแปลงเนื้อหาของการตั้งค่าต่างๆได้
ขอบเขตของการเชื่อมโยงจะแตกต่างกันออกไป เดี๋ยวเราจะมาดูวิธีการจัดการกัน
เมื่อทำการแชร์ Service
เมื่อทำการแชร์ Service จะสามารถตั้งค่า action ได้ดังนี้
・vpc-lattice:CreateServiceNetworkServiceAssociation (เชื่อม Service Network กับ Service)
ในการแชร์ service สามารถเชื่อมกับ service network ได้เท่านั้น
ไม่สามารถ register target group เข้ากับ service ที่อยู่คนละบัญชีได้ ดังนั้น target group และ service จะต้องอยู่ในบัญชีเดียวกัน
เมื่อทำการแชร์ Service Network
เมื่อทำการแชร์ Service Network จะสามารถตั้งค่า action ได้ดังนี้
・vpc-lattice:CreateServiceNetworkServiceAssociation(เชื่อม Service Network กับ Service)
・vpc-lattice:CreateServiceNetworkVpcAssociation(เชื่อม Service Network กับ VPC)
เมื่อมีการแชร์ Service Network จะสามารถเชื่อมโยงกับ Service และ VPC ได้
ค่าเริ่มต้นของการใช้สิทธิ์การจัดการการเข้าถึงจะอนุญาตให้ดำเนินการสองอย่างนี้ได้
เมื่อมีการแชร์ Service Network จะสามารถสร้างการเชื่อมโยงได้ 2 ประเภท ดังนั้นจึงต้องระวังการสร้างการเชื่อมต่อที่ไม่คาดคิด
โดยเฉพาะ หากคุณจะแชร์ Service Network ด้วยความตั้งใจที่จะเชื่อมโยง Service เราขอแนะนำให้คุณตั้งค่าค่าสิทธิ์การจัดการลูกค้าเพื่ออนุญาตการเชื่อมโยง Service เท่านั้น
ในกรณีที่เกิดการอนุญาตให้มีการเชื่อมโยง VPC ที่ไม่คาดคิด และไม่ได้กำหนดค่าการตรวจสอบ IAM Policy อย่างถูกต้องสำหรับ Service Network หรือ Service VPC ที่เชื่อมโยงจะสามารถเข้าถึงแต่ละ Service ที่เชื่อมโยงกับ Service Network ได้
ค่าใช้จ่าย
ค่าใช้จ่ายสำหรับการใช้งานบน "รีเจี้ยนสิงคโปร์" ที่ปรากฎ ณ เดือนมีนาคม 2025
(Thai)
การกำหนดราคาขึ้นอยู่กับโครงสร้างของ Service ปริมาณ data และ request ที่ได้รับการประมวลผลโดย Service
ค่าใช้จ่ายคงที่
ค่าบริการที่จะถูกเรียกเก็บในช่วงเวลาที่มีการใช้งาน service
สำหรับการใช้งานบนรีเจี้ยนสิงคโปร์จะอยู่ที่ 0.0325 USD ต่อชั่วโมง
หากเราใช้ติดต่อกัน 1 เดือน(30 วัน)จะคิดค่าใช้จ่ายได้ประมาณ 23.4 USD
ไม่มีค่าใช้จ่ายสำหรับการใช้งาน service network
ค่าใช้จ่ายไม่คงที่
ค่าใช้จ่ายที่ไม่คงที่เกิดจากค่าบริการที่คิดตามปริมาณ data ที่ประมวลผลโดย service และ จำนวน request
ปริมาณ data ที่ประมวลผลโดย service คือ ผลรวมของปริมาณ data ที่ได้จาก request ไปที่ service และปริมาณ data ที่ได้ response จาก service
สำหรับการใช้งานบนรีเจี้ยนสิงคโปร์จะอยู่ที่ 0.0325 USD/GB
หากเราประมวลผล data 100GB ผ่าน service จะมีค่าใช้จ่ายประมาณ 3.25 USD
โดยปกติเราจะโดนคิดค่าใช้งานจากจำนวน request ที่คุณได้รับจาก service เป็นหลัก
สามารถ request สูงสุด 300,000 รายการต่อชั่วโมงได้โดยไม่มีค่าใช้จ่าย และจะมีการเรียกเก็บค่าใช้จ่ายหากเกิน 300,000 รายการ
สำหรับการใช้งานบนรีเจี้ยนสิงคโปร์จะอยู่ที่ 0.13 USD
หากเรามีรายการ request1.3 ล้านครั้งในหนึ่งชั่วโมง จะมีค่าใช้จ่ายประมาณ 0.13 USD
บทความอ้างอิง
What is Amazon VPC Lattice? (English)
Access logs for Amazon VPC Lattice (English)
ราคาค่าบริการ Amazon VPC Lattice (Thai)
บทความต้นฉบับ
【AWS入門ブログリレー2024〜Amazon VPC Lattice編〜 (Japanese)