การสิ้นสุด SSL และเซสชันแบบยึดติด
ถ่ายภาระ TLS ที่ตัวจัดสรรภาระงานโดยใช้ใบรับรอง ACM และเปิดใช้เซสชันแบบยึดติดเมื่อการประมวลผลที่มีสถานะต้องการให้ไคลเอนต์เชื่อมกับเป้าหมายเดิม
การสิ้นสุด SSL และเซสชันแบบยึดติด เป็นบทเรียน AWS Solutions Architect ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AWS Solutions Architect และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน
การยุติ SSL/TLS ที่ตัวจัดสรรภาระ
การยุติ SSL/TLS หมายถึงตัวจัดสรรภาระถอดรหัสทราฟฟิก HTTPS ขาเข้า ตรวจสอบคำขอ HTTP แบบข้อความธรรมดา (เพื่อใช้ตัดสินใจกำหนดเส้นทาง) แล้วเลือกเข้ารหัสคำขออีกครั้งก่อนส่งต่อไปยังแบ็กเอนด์ เมื่อการยุติเกิดขึ้นที่ ALB เซิร์ฟเวอร์แอปพลิเคชันสามารถรับทราฟฟิก HTTP ที่ไม่ได้เข้ารหัสจากตัวจัดสรรภาระได้ ทำให้การกำหนดค่าแบ็กเอนด์ง่ายขึ้น
การยุติที่ตัวจัดสรรภาระช่วยลดภาระ CPU ของเซิร์ฟเวอร์แอปพลิเคชัน (ไม่ต้องทำ TLS handshake สำหรับแต่ละการเชื่อมต่อ) เปิดให้กำหนดเส้นทางตามเนื้อหาได้ (ซึ่งต้องอ่านส่วนหัว HTTP) และรวมศูนย์การจัดการ certificate
การผสานรวม AWS Certificate Manager (ACM)
AWS Certificate Manager (ACM) จัดเตรียม จัดการ และต่ออายุ certificate SSL/TLS โดยไม่มีค่าใช้จ่ายเพิ่มเติม ALB และ NLB ผสานรวมกับ ACM โดยตรง คุณเพียงเลือก certificate ของ ACM ในการกำหนดค่า HTTPS listener แล้วตัวจัดสรรภาระจะนำ certificate นั้นไปแสดงแก่ไคลเอ็นต์ที่เชื่อมต่อ
ระบบจะ ต่ออายุ certificate ของ ACM โดยอัตโนมัติ ก่อนหมดอายุ จึงไม่ต้องต่ออายุด้วยตนเองและไม่เกิดการหยุดทำงานเนื่องจาก certificate หมดอายุ สำหรับ certificate สาธารณะ ACM จะตรวจสอบความเป็นเจ้าของโดเมนผ่านการตรวจสอบ DNS (ระเบียน CNAME ใน Route 53) หรือการตรวจสอบทางอีเมล สำหรับการใช้งานภายใน ACM Private CA สามารถออก certificate ส่วนตัวได้
# Request a public certificate in ACM
aws acm request-certificate \
--domain-name api.example.com \
--subject-alternative-names '*.example.com' \
--validation-method DNS \
--region us-east-1
# Create an HTTPS listener using the ACM certificate
aws elbv2 create-listener \
--load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:123456789:loadbalancer/app/my-alb/abc \
--protocol HTTPS \
--port 443 \
--ssl-policy ELBSecurityPolicy-TLS13-1-2-2021-06 \
--certificates CertificateArn=arn:aws:acm:us-east-1:123456789:certificate/cert-id \
--default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-tg/xyzServer Name Indication (SNI)
SNI (Server Name Indication) คือส่วนขยายของ TLS ที่ช่วยให้ที่อยู่ IP เดียว (และดังนั้นจึงรวมถึง ALB หรือ NLB listener เดียว) ให้บริการ certificate TLS หลายใบสำหรับชื่อโดเมนที่แตกต่างกันได้ ไคลเอ็นต์จะใส่ชื่อโฮสต์ที่ต้องการเข้าถึงไว้ในข้อความ TLS ClientHello จากนั้นตัวจัดสรรภาระจะเลือก certificate ที่เหมาะสม
ALB รองรับ SNI ในตัว คุณสามารถแนบ certificate ของ ACM หลายใบกับ HTTPS listener เดียวได้ ALB จะเลือก certificate ที่ถูกต้องโดยอัตโนมัติตามชื่อโฮสต์ SNI ของไคลเอ็นต์ วิธีนี้ไม่จำเป็นต้องมี listener หรือตัวจัดสรรภาระแยกสำหรับแต่ละโดเมน ทำให้สามารถโฮสต์เสมือนด้วย SSL ได้อย่างแท้จริง
# Add a second certificate to an existing HTTPS listener (SNI)
aws elbv2 add-listener-certificates \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc/lis456 \
--certificates CertificateArn=arn:aws:acm:us-east-1:123456789:certificate/second-cert-idนโยบายความปลอดภัย SSL
ALB และ NLB รองรับ นโยบายความปลอดภัย SSL ที่กำหนดค่าได้ โดยควบคุมเวอร์ชันโปรโตคอล TLS และชุดรหัสลับที่ตัวจัดสรรภาระยอมรับจากไคลเอ็นต์ AWS มีนโยบายที่กำหนดไว้ล่วงหน้า (เช่น ELBSecurityPolicy-TLS13-1-2-2021-06) ซึ่งจะได้รับการอัปเดตเมื่อค้นพบช่องโหว่ใหม่
ข้อกำหนดด้านการปฏิบัติตามมาตรฐานอาจกำหนดเวอร์ชัน TLS ที่ต้องใช้: PCI-DSS 3.2.1 กำหนดให้ใช้ TLS 1.2 เป็นอย่างต่ำ มาตรฐานสมัยใหม่จำนวนมากแนะนำให้ปิดใช้งาน TLS 1.0 และ 1.1 โดยสิ้นเชิง ใช้นโยบายที่ไม่รวมโปรโตคอลที่เลิกใช้แล้วและชุดรหัสลับที่อ่อนแอ และควรเลือกนโยบายที่รองรับ TLS 1.3 เพื่อให้มีการรักษาความลับแบบส่งต่อและประสิทธิภาพที่ดี
# List available SSL policies
aws elbv2 describe-ssl-policies \
--query 'SslPolicies[*].{Name:Name,TLSVersions:SslProtocols}' \
--output tableการเข้ารหัสตั้งแต่ต้นทางถึงปลายทางเทียบกับการยุติการเข้ารหัส
แนวทาง TLS บน ALB มีอยู่สองรูปแบบที่แตกต่างกัน:
- การยุติ SSL (พบได้บ่อยที่สุด): ALB ถอดรหัสที่ตัวจัดสรรภาระ แล้วส่งต่อ HTTP แบบข้อความธรรมดาไปยังเป้าหมาย เรียบง่าย เปิดให้ตรวจสอบเพื่อกำหนดเส้นทาง และลดการใช้ CPU ของเซิร์ฟเวอร์ แต่ทราฟฟิกแบ็กเอนด์ภายใน VPC จะไม่ได้รับการเข้ารหัส
- TLS ตั้งแต่ต้นทางถึงปลายทาง: ALB ถอดรหัส แล้วเข้ารหัสอีกครั้งก่อนส่งต่อไปยังเป้าหมาย (ใช้ HTTPS ระหว่าง ALB กับเป้าหมาย) ใช้ CPU มากกว่าและต้องมี certificate บนเป้าหมาย แต่ช่วยให้มั่นใจว่าทราฟฟิกภายใน VPC ได้รับการเข้ารหัส เหมาะกับสถานการณ์ที่มีข้อกำหนดด้านการปฏิบัติตามมาตรฐานอย่างเข้มงวด
สำหรับ NLB ในโหมดส่งผ่าน TLS: NLB จะไม่ถอดรหัสเลย แต่ส่งต่อ TCP ดิบไปยังเป้าหมาย ซึ่งเป็นผู้จัดการ TLS เอง เซิร์ฟเวอร์แอปพลิเคชันจะจัดการ certificate ของตนเอง
เซสชันแบบติดหนึบ: คืออะไรและมีไว้เพื่ออะไร
เซสชันแบบติดหนึบ (เรียกอีกอย่างว่า การยึดเซสชัน) ทำให้มั่นใจว่าคำขอทั้งหมดจากไคลเอ็นต์เดียวกันจะถูกส่งไปยังเป้าหมายเดิมภายในกลุ่มเป้าหมายอย่างสม่ำเสมอ จำเป็นสำหรับแอปพลิเคชันแบบมีสถานะที่จัดเก็บข้อมูลเซสชันไว้ในหน่วยความจำของเซิร์ฟเวอร์แต่ละเครื่อง (แทนที่จะเก็บไว้ในแคชที่ใช้ร่วมกัน เช่น ElastiCache)
หากไม่มีเซสชันแบบติดหนึบ ตัวจัดสรรภาระแบบไร้สถานะอาจส่งคำขอที่ 1 ไปยังเซิร์ฟเวอร์ A (ซึ่งเก็บเซสชันไว้) และคำขอที่ 2 ไปยังเซิร์ฟเวอร์ B (ซึ่งไม่มีข้อมูลเซสชัน) ทำให้ผู้ใช้ดูเหมือนถูกออกจากระบบหรือสูญเสียสิ่งของในตะกร้า เซสชันแบบติดหนึบจะผูกไคลเอ็นต์ไว้กับเป้าหมายเฉพาะตลอดระยะเวลาของเซสชัน
การทำให้ติดหนึบด้วยคุกกี้บน ALB
ALB รองรับคุกกี้สำหรับเซสชันแบบติดหนึบสองประเภท:
- การทำให้ติดหนึบตามระยะเวลา (คุกกี้ที่ LB สร้าง): ALB จะสร้างคุกกี้ชื่อ
AWSALB(สำหรับ ALB) และกำหนดระยะเวลาหมดอายุ คุกกี้จะมีข้อมูลอ้างอิงที่เข้ารหัสไว้สำหรับเป้าหมาย ไคลเอ็นต์จะส่งคุกกี้นี้ในการส่งคำขอครั้งถัดไป - การทำให้ติดหนึบตามแอปพลิเคชัน: ใช้คุกกี้ที่แอปพลิเคชันสร้างไว้แล้ว ALB จะอ่านชื่อคุกกี้ที่คุณระบุ สร้างข้อมูลที่เข้ารหัสในคุกกี้ของตนเอง และใช้ข้อมูลดังกล่าวกำหนดเส้นทางแบบติดหนึบ โดยยังคงคุกกี้เดิมของแอปพลิเคชันไว้
กำหนดค่าการทำให้ติดหนึบแยกตามกลุ่มเป้าหมายได้ โดยกำหนดระยะเวลาตั้งแต่ 1 วินาทีถึง 7 วัน
# Enable duration-based sticky sessions on a target group
aws elbv2 modify-target-group-attributes \
--target-group-arn arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-tg/xyz \
--attributes \
Key=stickiness.enabled,Value=true \
Key=stickiness.type,Value=lb_cookie \
Key=stickiness.lb_cookie.duration_seconds,Value=86400ข้อเสียของเซสชันแบบติดหนึบ
แม้เซสชันแบบติดหนึบจะแก้ปัญหาแอปพลิเคชันแบบมีสถานะได้ แต่ก็มีข้อแลกเปลี่ยนดังนี้:
- การกระจายภาระไม่สม่ำเสมอ: เป้าหมายบางตัวอาจได้รับทราฟฟิกมากกว่า หากไคลเอ็นต์บางรายใช้งานอย่างต่อเนื่องผิดปกติ ซึ่งทำให้สูญเสียประโยชน์ของการจัดสรรภาระ
- ข้อจำกัดด้านการปรับขนาด: หากเป้าหมายที่ติดหนึบเกิดปัญหา เซสชันจะขาดช่วง ไคลเอ็นต์ต้องเริ่มเซสชันใหม่กับเป้าหมายใหม่ และสูญเสียข้อมูลเซสชันในหน่วยความจำ
- ความยืดหยุ่นลดลง: เซสชันแบบติดหนึบทำให้ระบายการเชื่อมต่อและยุติอินสแตนซ์ได้ยากขึ้นระหว่างเหตุการณ์ลดขนาด
แนวทางปฏิบัติที่ดีคือ กำจัดความจำเป็นของเซสชันแบบติดหนึบด้วยการย้ายสถานะเซสชันไปจัดเก็บภายนอกใน ElastiCache หรือ DynamoDB วิธีนี้ทำให้แอปพลิเคชันเป็นแบบไร้สถานะอย่างแท้จริง และรองรับการปรับขนาดในแนวนอนได้เต็มที่
NLB TLS Listener และการส่งผ่าน
NLB รองรับ TLS listener บนพอร์ต 443 (หรือพอร์ตใดก็ได้) สำหรับการยุติ TLS เช่นเดียวกับ ALB NLB จะถอดรหัสทราฟฟิก เข้ารหัสอีกครั้งได้ตามต้องการ และส่งต่อไปยังเป้าหมาย อีกทางเลือกหนึ่งคือ NLB สามารถ ส่งผ่านทราฟฟิก TCP ที่เข้ารหัสโดยไม่ถอดรหัส หากคุณกำหนดค่า TCP listener ในโหมดนี้ เซิร์ฟเวอร์แอปพลิเคชันจะจัดการ TLS ตั้งแต่ต้นทางถึงปลายทาง
การยุติ TLS ของ NLB ร่วมกับ ACM ให้ประโยชน์ด้านการจัดการ certificate เช่นเดียวกับ ALB แต่ไม่มีฟีเจอร์ในระดับ HTTP ใช้การยุติ TLS ของ NLB เมื่อต้องการ IP แบบคงที่ร่วมกับการยุติ TLS หรือเมื่อโปรโตคอลแบ็กเอนด์ไม่ใช่ HTTP (เช่น โปรโตคอล TCP แบบกำหนดเอง)
การโต้ตอบระหว่างการระบายการเชื่อมต่อกับเซสชันแบบติดหนึบ
เมื่อเป้าหมายที่ติดหนึบถูกยกเลิกการลงทะเบียน (เช่น ระหว่างการลดขนาดของ Auto Scaling) การระบายการเชื่อมต่อจะช่วยให้คำขอที่กำลังดำเนินการเสร็จสมบูรณ์ อย่างไรก็ตาม คำขอใหม่จากไคลเอ็นต์แบบติดหนึบที่ยังมีคุกกี้ AWSALB ของเป้าหมายที่กำลังระบายอยู่ จะถูกกำหนดให้ไปยังเป้าหมายใหม่โดยอัตโนมัติ และคุกกี้การทำให้ติดหนึบของไคลเอ็นต์นั้นจะถูกทำให้ใช้ไม่ได้
การทำงานร่วมกันระหว่างความล่าช้าในการยกเลิกการลงทะเบียนกับการทำให้คุกกี้ใช้ไม่ได้ ช่วยให้การเปลี่ยนผ่านเป็นไปอย่างราบรื่น: คำขอที่มีอายุการใช้งานยาวนานจะดำเนินการจนเสร็จ ส่วนคำขอใหม่จากไคลเอ็นต์เหล่านั้นจะถูกกำหนดเส้นทางใหม่ไปยังเป้าหมายที่มีสถานะดีอย่างราบรื่น โดยผู้ใช้ปลายทางไม่เห็นว่าเกิดข้อผิดพลาด
แนวทางปฏิบัติที่ดีสำหรับการจัดการ SSL และเซสชัน
แนวทางปฏิบัติที่ดีที่เกี่ยวข้องกับการสอบ:
- ใช้ certificate ของ ACM เพื่อให้ต่ออายุโดยอัตโนมัติ ห้ามจัดการ certificate บนตัวจัดสรรภาระด้วยตนเอง
- ใช้นโยบายความปลอดภัย TLS 1.2+ และปิดใช้งาน TLS 1.0/1.1 เพื่อให้เป็นไปตาม PCI/HIPAA
- เลือกใช้ สถาปัตยกรรมแบบไร้สถานะ (จัดเก็บเซสชันใน ElastiCache/DynamoDB) แทนเซสชันแบบติดหนึบ
- ใช้ SNI บน ALB เพื่อให้บริการหลายโดเมนจาก listener เดียว โดยไม่ต้องมี certificate หลายใบบนตัวจัดสรรภาระแยกกัน
- สำหรับข้อกำหนดด้านการปฏิบัติตามมาตรฐานอย่างเข้มงวด (ข้อมูลภายใน VPC ต้องเข้ารหัส): ใช้ กลุ่มเป้าหมาย HTTPS ที่มี TLS ตั้งแต่ต้นทางถึงปลายทาง ไม่ใช่เพียงการยุติที่ตัวจัดสรรภาระ
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจแนวคิด AWS Solutions Architect (SAA-C03) จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า การยุติ ALB SSL/TLS ด้วย certificate ของ ACM มีการต่ออายุโดยอัตโนมัติและรองรับ SNI สำหรับหลายโดเมน นโยบายความปลอดภัย SSL จะควบคุมเวอร์ชัน TLS และชุดรหัสลับ เพื่อการปฏิบัติตามมาตรฐาน และ เซสชันแบบติดหนึบจะกำหนดเส้นทางผู้ใช้ไปยังเป้าหมายเดิมสำหรับแอปพลิเคชันแบบมีสถานะ แต่ควรเปลี่ยนไปจัดเก็บสถานะเซสชันภายนอกใน ElastiCache บทถัดไป เราจะศึกษา Auto Scaling Groups และเทมเพลตการเปิดใช้งาน
คำถามที่พบบ่อย
บทเรียน “การสิ้นสุด SSL และเซสชันแบบยึดติด” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การสิ้นสุด SSL และเซสชันแบบยึดติด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AWS Solutions Architect ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การสิ้นสุด SSL และเซสชันแบบยึดติด”
ถ่ายภาระ TLS ที่ตัวจัดสรรภาระงานโดยใช้ใบรับรอง ACM และเปิดใช้เซสชันแบบยึดติดเมื่อการประมวลผลที่มีสถานะต้องการให้ไคลเอนต์เชื่อมกับเป้าหมายเดิม คุณปฏิบัติ AWS Solutions Architect ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AWS Solutions Architect หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AWS Solutions Architect บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การสิ้นสุด SSL และเซสชันแบบยึดติด” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AWS Solutions Architect นี้ได้ไหม
ได้ บทเรียน AWS Solutions Architect ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ALB เทียบกับ NLB เทียบกับ GLB: ควรใช้แบบใด
- กลุ่มเป้าหมายและการตรวจสอบสถานะ
- กฎผู้รับฟังและการกำหนดเส้นทางตามเส้นทาง
- การสิ้นสุด SSL และเซสชันแบบยึดติด