แนะนำข้อมูลพื้นฐาน Amazon VPC Lattice

แนะนำข้อมูลพื้นฐาน Amazon VPC Lattice

นี่เป็นบทความที่มีเนื้อหาดัดแปลงมาจากบทความภาษาญี่ปุ่นของ Classmethod, Inc. ในหัวข้อ AWS入門ブログリレー2024〜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

Untitled_60__New_Diagram_-_Cacoo-1-640x319

ด้วยส่วนประกอบเหล่านี้ คุณจะสามารถเข้าถึง resource ที่อยู่ใน target group ได้จาก resource ที่อยู่ใน VPC ที่เชื่อมกับ service network โดยเป็นการสื่อสารทางเดียวที่ไม่สามารถส่ง request จาก resource ที่อยู่ใน target group ไปยัง resource ที่อยู่ใน VPC ที่เชื่อมกับ target group

Service Network

Untitled_60__New_Diagram_-_Cacoo-2-640x319

service network ทำหน้าที่เป็น Hub สำหรับเชื่อมต่อ VPC กับ service ต่างๆ โดยที่เราสามารถเชื่อม VPC กับ service ได้สูงสุด 50 รายการต่อ 1 service network (สามารถขอเพิ่มลิมิตได้)

ในทางกลับกัน VPC สามารถเชื่อมกับเพียง 1 service network เท่านั้น เพราะว่าเราไม่สามารถเชื่อม VPC หลายตัวกับ service network ได้ จึงควรเชื่อม service network กับ service ที่จำเป็น

นอกจากนี้ยังสามารถตั้งค่า Security และ Log ได้ ซึ่งในส่วนนี้เราจะอธิบายเพิ่มเติมทีหลัง

Service

Untitled_60__New_Diagram_-_Cacoo-3-640x318

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 ได้เลย

lattice

นอกจากนี้ยังสามารถตั้งค่า Security และ Log ได้เช่นเดียวกับ service network

Target Group

Untitled_60__New_Diagram_-_Cacoo-4-640x319

ในส่วนของ Target Group เราจะตั้งค่า action ที่ปลายทางของ forwarding rule สำหรับ Service Listener ซึ่งเป็นส่วนที่มีกลไกลการทำงานคล้ายๆกับ ALB

Resource ที่สามารถเป็นเป้าหมายของ Target Group ได้มีดังนี้
・Instance
・IP
・Lambda
・Internal ALB

รายละเอียดเพิ่มเติมเกี่ยวกับเงื่อนไขต่างๆสามารถตรวจสอบได้ที่เอกสารของ AWS

https://docs.aws.amazon.com/vpc-lattice/latest/ug/target-groups.html

(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 สามารถดูวิธีการได้จากบล็อกที่ทางทีมญี่ปุ่นได้ทดลองด้านล่างนี้ได้

https://dev.classmethod.jp/articles/use-prefix-lists-for-security-grouops-of-vpc-lattice/

(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 ได้

VPC disconnect with service network

และในขณะเดียวกัน ถ้า service network กับ service ไม่เชื่อมกันอยู่ resource ใน VPC จะไม่สามารถแอคเซส resource ที่ตั้งค่าไว้ใน target group ได้เช่นกัน

service disconnect with service network

หากเลือกที่จะไม่เชื่อมกันในลักษณะนี้ เราจะสามารถจำกัดเส้นทางการเชื่อมต่อให้แคบลงได้

อธิบายแบบ 1:1 อาจจะเข้าใจยาก ในบล็อกนี้จะลองทำแบบ 1:2 ดู

ในกรณีที่ต้องการเส้นทางจาก VPC ฝั่งผู้ใช้งานไปยัง resource ของ target groupA ที่ตั้งค่าไว้ภายใต้ ServiceA เท่านั้น
เราสามารถตั้งค่าการเชื่อมโยงระหว่าง service network และ ServiceA เท่านั้น และจำกัดเส้นทางให้แคบได้ลงได้เพื่อไม่ให้แอคเซสถึง target groupB ที่อยู่ภายใต้ ServiceB

Untitled_62__New_Diagram_-_Cacoo-640x544

ด้วยความที่เราสามารถเลือกได้ว่าจะเชื่อมต่อหรือไม่ ทำให้ง่ายในการจำกัดปลายทางของการเชื่อมต่อ

Security Group

เราสามารถตั้งค่า Security Group ของการเชื่อมต่อกับ VPC แต่ละตัวได้

secuirty group1

การตั้งค่า Security Group ทำให้สามารถจำกัด resource ที่สามารถแอคเซส Lattice ภายใน VPC ได้

Untitled_61__New_Diagram_-_Cacoo-1-640x287

ข้อควรระวัง :เนื่องจากเป็นการควบคุมแอคเซสระหว่าง VPC และ service network ไม่สามารถควบคุมแอคเซสของแต่ละ Service ได้

Untitled_62__New_Diagram_-_Cacoo-1-640x548

IAM Policy

สามารถตั้งค่าการตรวจสอบสิทธิ์ IAM สำหรับแต่ละ service network และ service ในฐานะ IAM Policy ได้

Untitled_49__New_Diagram_-_Cacoo-640x283

สามารถกำหนดค่าได้ทั้งบน service network และ service หรือจะตั้งค่าไว้ที่ใดที่นึงได้ ในกรณีที่ตั้งค่าไว้ทั้งบน service Network และ service การสื่อสารจะได้การอนุญาตหากมีการยอมรับความถูกต้องของทั้งสองรายการ

Untitled_50__New_Diagram_-_Cacoo-640x326

กล่าวอีกนัยหนึ่งว่าการสื่อสารจะถูกปฏิเสธหากการรับรองความถูกต้องฝั่งใดฝั่งนึงล้มเหลว

Untitled_51__New_Diagram_-_Cacoo-640x316

ในกรณีที่ตั้งค่าเพียงฝั่งเดียว หากมีการอนุญาต Policy ที่ตั้งค่าไว้ทั้งสองฝั่งจะสามารถสื่อสารกันได้และฝั่งที่ไม่มีการตั้งต่าจะได้รับการอนุญาตโดยอัตโนมัติ

Untitled_53__New_Diagram_-_Cacoo-640x294

สำหรับการตั้งค่า Policy แนะนำให้ตั้งค่าเฉพาะ Guardrail แบบหลวม ๆ ไว้ที่ Service Network แล้วค่อยตั้ง security rule ของแต่ละ Service แบบละเอียดอีกที

อีกทั้ง การใช้งาน IAM Policy ทำให้เราสามารถควบคุมเรื่อง Security ได้ละเอียดอย่างที่ไม่สามารถทำได้กับการตั้งค่า Security Group ที่ VPC กับ Service

Untitled_37__New_Diagram_-_Cacoo-640x375

ในการตรวจสอบ IAM โดยพื้นฐานแล้วจำเป็นต้องมี SigV4 Signature ที่ฝั่ง client สามารถตรวจสอบข้อกำหนดต่างๆได้ลิงก์ด้านล่างนี้

https://docs.aws.amazon.com/vpc-lattice/latest/ug/auth-policies.html
(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 นั้นๆ

Untitled_64__New_Diagram_-_Cacoo-640x553

นอกจากนี้ยังสามารถใช้ Security Group ได้ด้วยหากต้องการควบคุมแอคเซส Lattice ที่ resource ภายใน VPC

ข้อดี

  • เข้าใจได้ง่ายเนื่องจากเป็นการเชื่อมต่อเฉพาะเส้นทางที่จำกัดไว้เท่านั้น
  • ไม่จำเป็นต้องปรับปรุงแอปฯในการ signing เนื่องจากใช้การตั้งค่า IAM Authen

ข้อเสีย

  • เพราะมีการสร้าง Service Network จำนวนมาก อาจจะยากในการกำหนดขอบเขต
  • ไม่สามารถควบคุมโดยละเอียด เช่น ไม่สามารถตั้งค่าให้ resource ใน VPC ของฝั่งผู้ใช้บริการสามารถเข้าถึง service แค่บางตัวเท่านั้นได้

ตัวอย่างดีไซน์ที่ใช้ประโยชน์จากการรับรองความถูกต้อง IAM

ต่อไป เราจะแนะนำตัวอย่างดีไซน์ที่ใช้ประโยชน์จากการรับรองความถูกต้อง IAM

ดีไซน์นี้ออกแบบมาเพื่อ Service Network ขนาดใหญ่ที่ใช้ร่วมกัน

วาง Service Network ในฐานะ Hub ในบัญชีที่ใช้ดูแล network เหมือนไดอะแกรมด้านล่าง กำหนด policy ของแต่ละ service และควบคุมการเข้าถึง

design2

・ข้อดี
・สามารถจัดการ 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 ได้เท่านั้น

ram shariing

ไม่สามารถ 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 ram shariing

ค่าเริ่มต้นของการใช้สิทธิ์การจัดการการเข้าถึงจะอนุญาตให้ดำเนินการสองอย่างนี้ได้

เมื่อมีการแชร์ Service Network จะสามารถสร้างการเชื่อมโยงได้ 2 ประเภท ดังนั้นจึงต้องระวังการสร้างการเชื่อมต่อที่ไม่คาดคิด
โดยเฉพาะ หากคุณจะแชร์ Service Network ด้วยความตั้งใจที่จะเชื่อมโยง Service เราขอแนะนำให้คุณตั้งค่าค่าสิทธิ์การจัดการลูกค้าเพื่ออนุญาตการเชื่อมโยง Service เท่านั้น

ในกรณีที่เกิดการอนุญาตให้มีการเชื่อมโยง VPC ที่ไม่คาดคิด และไม่ได้กำหนดค่าการตรวจสอบ IAM Policy อย่างถูกต้องสำหรับ Service Network หรือ Service VPC ที่เชื่อมโยงจะสามารถเข้าถึงแต่ละ Service ที่เชื่อมโยงกับ Service Network ได้

Untitled_67__New_Diagram_-_Cacoo-960x628

ค่าใช้จ่าย

ค่าใช้จ่ายสำหรับการใช้งานบน "รีเจี้ยนสิงคโปร์" ที่ปรากฎ ณ เดือนมีนาคม 2025

https://aws.amazon.com/th/vpc/lattice/pricing/?nc1=f_ls

(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)

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.