AWS WAF คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS
สวัสดีครับทุกคน อาชิซาวะ ครับ
รายการนี้จะเขียนเกี่ยวกับ AWS ปี 2022 ฉบับเบื้องต้น โดยฝ่าย Consulting ของบริษัทเราเอง
นี่เป็นบทความที่จะมาเล่าเกี่ยวกับเนื้อหา AWS Service มาเล่าใหม่อีกครั้งว่ามีอะไรถูกอัพเดทอะไรบ้างแล้ว
แบบละเอียด/เจาะลึกตั้งแต่เบสิกพร้อมคำอธิบาย โดยเหล่าสมาชิกที่เคยเขียนบทความเหล่านี้มาแล้ว
เหมาะสำหรับผู้ที่ต้องการเริ่มเรียนเกี่ยวกับ AWS หรือผู้ที่ใช้งาน AWS อยู่แล้ว
แต่ต้องการหาความรู้ใหม่ว่าปี 2022 มีการอัพเดทอะไรบ้าง หากคุณใช่บุคคลเหล่านี้
ทางผู้เขียนก็หวังว่าบทความนี้จะเป็นประโยชน์สำหรับคุณครับ
งั้นก็ไปเริ่มกันเลยครับ Theme ในวันนี้คือ "AWS WAF" ครับ
ก่อนเริ่ม
ในบทความนี้จะครอบคลุมหัวข้อต่อไปนี้
- อธิบายเกี่ยวกับ AWS WAF(v2)
- อธิบายเกี่ยวกับแต่ละ Resource
- วิธีการเริ่มใช้งาน
- ค่าใช้จ่าย
และไม่ครอบคลุมหัวข้อต่อไปนี้
- WAF ทั่วๆไป
- ข้อแตกต่างระหว่าง AWS WAF(v1) กับ AWS WAF(v2)
เนื้อหาในบทความนี้จะเป็น AWS WAF v2 เป็นหลัก อาจจะมีบางส่วนที่ AWS WAF Classic(v1) ไม่รองรับ จึงเรียนมาให้ทราบครับ
AWS WAF คืออะไร
AWS WAF คือ WAF(Web Application Firewall) ที่ AWS เป็นคนให้บริการครับ
โดยทำหน้าที่ตรวจสอบ HTTP(S) Request ที่เข้ามายัง AWS Service ต่อไปนี้
- Amazon CloudFront
- Amazon API Gateway
- Application Load Balancer
- AWS AppSync
จาก ไฟร์วอลล์เว็บแอปพลิเคชัน - AWS WAF - Amazon Web Services (AWS) ทำให้เราทราบว่า AWS WAF มีข้อดีดั่งต่อไปนี้
- เพิ่มการป้องกันแบบคล่องตัวจากการโจมตีเว็บ
- ป้องกันการโจมตีจาก DDoS
- บันทึกเวลาด้วยกฎที่มีการจัดการ
- ปรับปรุงการแสดงผลการรับส่งข้อมูลเว็บ
- การติดตั้งใช้งานและบำรุงรักษาได้ง่าย
- ติดตาม บล็อก หรือจำกัดบอตอย่างง่ายดาย
- ความปลอดภัยที่ผสานเข้ากับวิธีที่คุณพัฒนาแอปพลิเคชัน
(ข้อความด้านบนยกมาจากในเว็บ)
และนอกจากนี้ AWS WAF ยังเป็น AWS managed service ที่มีข้อดีในการใช้ที่เป็น Serverless ที่เชื่อถือได้ และ เป็น WAF ที่ดีเยี่ยมในด้าน Scalability
อธิบายเกี่ยวกับ Resource แต่ละชนิด
ในบทนี้เราจะอธิบายเกี่ยวกับ Resource แต่ละชนิด ที่ใช้ใน AWS WAF ครับ
Web Acl
Web Acl คือ Resource แรกที่เราจะสร้างขึ้นเมื่อเริ่มใช้ AWS WAF
บริการของ AWS ที่เกี่ยวข้องกับ Web Acl จะได้รับการคุ้มครอง
Rule หรือ Rule Group ที่สร้างใน Web Acl จะเป็นเกณฑ์ประเมินการเข้าเชื่อมต่อกับบริการของ AWS ที่เกี่ยวข้องกับ Web Acl
ตอนที่สร้าง Web Acl มี 5 อย่างใหญ่ๆที่เราจำเป็นต้องคิด ได้แก่
- Resource type
- Default action
- Sample request
- Log output settings
- WCU (WebAcl Capacity Unit)
ซึ่งจะอธิบายต่อไปนี้ครับ
Resource type
Resource type คือ การกำหนดชนิดของ AWS Service ที่ได้รับการติด Tag ให้ได้รับการคุ้มครองจาก Web Acl
โดยมี 2 ชนิดต่อไปนี้
- CloudFront distributions
- Regional resources
อธิบายง่ายๆคือ จะกำหนดว่าเป็น Web Acl สำหรับ CloudFront หรือจะเป็น Web Acl สำหรับ Regional(นอกจาก CloudFront)
ในกรณีที่เลือก Regional resources จำเป็นต้องเลือก Region ที่จะวาง Web Acl
Web Acl จะไม่คุ้มครอง AWS Service นอกเหนือจาก Region ที่เลือก
ในกรณีที่เลือก CloudFront distributions จะเป็น Global Region
Web Acl จะคุ้มครอง CloudFront distributions ทุกๆ Region
Default action
Default action จะทำการตัดสินใจว่าทำยังไงกับการเขื่อมต่อที่ไม่ได้ถูกกำหนดใน Rule ที่อธิบายไว้ด้านล่างนี้
โดยสามารถเลือกได้ 2 ชนิดต่อไปนี้
- ALLOW
- BLOCK
ส่วนควรจะเลือกแบบไหนนั้นก็ดูได้จาก แนวคิดการออกแบบของ WAF ด้านล่างนี้
- ในกรณีที่เลือก ALLOW ทุกการเข้าเชื่อมต่อไปยัง Resource ที่ได้รับการคุ้มครอง โดยพื้นฐานแล้วจะได้รับอนุญาต
เฉพาะการเชื่อมต่อที่ตรงตามเงื่อนไขที่กำหนดไว้ใน Rule เท่านั้น จะไม่ได้รับอนุญาต ให้เข้าถึง
หรือจะให้พูดอีกอย่างคือ เป็น WAF ที่จำเป็นต้องมีBlackList
- ในกรณีที่เลือก BLOCK ทุกการเข้าเชื่อมต่อไปยัง Resource ที่ได้รับการคุ้มครอง โดยพื้นฐานแล้วจะไม่ได้รับอนุญาต
เฉพาะการเชื่อมต่อที่ตรงตามเงื่อนไขที่กำหนดไว้ใน Rule เท่านั้น จะได้รับอนุญาต ให้เข้าถึง
หรือจะให้พูดอีกอย่างคือ เป็น WAF ที่จำเป็นต้องมีWhiteList
Sample request
Sample request คือ Features ที่จะแสดงให้เห็น Request ที่ส่งไปยัง Resource ที่อยู่ในเป้าหมายการคุ้มครอง บน AWS Management Console โดยสามารถดูได้มากสุด 3 ชั่วโมงที่ผ่านมา
จะสามารถดู History Request ที่ส่งเข้ามาได้แบบนี้ครับ
โดย Option นี้ ไม่เสียค่าใช้จ่าย ถ้าไม่ติดอะไรแนะนำให้เปิดไว้ครับ
Log output settings
Logs ของ WAF สามารถส่งไปยัง AWS Service ต่อไปนี้ได้
- CloudWatch Logs
- S3
- Kinesis Firehose
แต่ก่อนการจะส่ง Logs ไปยัง CloudWatch Logs, S3 จำเป็นต้องผ่าน Kinesis Firehose ก่อน แต่จากการอัพเดทในเดือน 11 ปี 2021 ทำให้สามารถส่งโดยตรงได้แล้ว
Logs ที่บันทึกถ้าเปิดดูเฉยๆจะดูอ่านยาก ผมแนะนำให้ใช้ CloudWatch Logs Insight หรือ Amazon Athena เพื่อ วิเคราะห์ข้อมูลจะช่วยให้อ่านง่ายขึ้นครับ
นอกจากนี้ โดยพื้นฐานแล้วเราจะบันทึก Logs ไว้ทุกอย่าง แต่ถ้าเป็นห่วงเรื่องขนาดไฟล์ที่ได้จากการบันทึก เราสามารถกรอง(Filter) Log output ได้ด้วยครับ
มีทั้งการกรองแค่ Logs ที่ Block หรือ ที่นับเท่านั้น ซึ่งสามารถดูได้ที่บทความด้านล่างครับ
(บทความภาษาญี่ปุ่น แต่มีเมนูเป็นภาษาอังกฤษอธิบาย สามารถกดตามได้เลยครับ)
WCU (WebAcl Capacity Unit)
WCU จะทำการแสดงผล ที่ AWS WAF คำนวณและควบคุม OS Resource ที่จำเป็นต้องใช้ในการดำเนินการ Rule, Rule Group หรือ Web Acl
ถ้าเป็น Rule ง่ายๆที่ไม่ค่อยใช้กำลังประมวลผล จะมี WCU น้อย
ถ้าเป็น Rule ที่ซับซ้อนที่ใช้กำลังประมวลผลเยอะ จะมี WCU มาก
ยกตัวอย่างเช่น ถ้าเป็น กฎตามด้านล่างก็จะเป็น WCU ตามนี้ครับ
- Rule ที่อนุญาตให้มีการสื่อสารจาก Set IP เฉพาะ = 1WCU
- Rule ทั่วไปที่ใช้กับเว็บแอปพลิเคชันที่รวมอยู่ใน AWS managed rules
Core rule set
= 700 WCU
ข้อจำกัดของ WCU Default จะอยู่ที่ 1500 WCU(สำหรับทุกๆ WebAcl) แต่เราสามารถยื่นขอเพิ่มขีดจำกัด WCU กับ AWS ได้ที่Services Quotas
ที่อยู่ใน AWS Management Console
ก็มีเพียงแค่นี้ครับกับ WebAcl
Rule
Rule ใน AWS WAF นั้นหมายถึง เกณฑ์ที่ Web Acl จะประเมินการเข้าถึง
ถ้าเราใช้ Rule ทำหน้าที่ตรวจสอบ HTTP(S) Web Request ตามด้านล่างต่อไปนี้ แล้วจะกำหนดวิธีการจัดการ
- สคริปต์ที่มีแนวโน้มว่าจะเป็นอันตราย เช่น cross-site scripting (XSS)
- IP Address หรือ Range ของ Address จากที่เกิด Request
- ประเทศหรือที่ตั้งทางภูมิศาสตร์ที่เกิด Request
- ความยาวของส่วนที่ระบุของ Request เช่น query string
โดยในกฎนั้นมีลำดับความสำคัญ โดย Web Acl จะประเมิน Request จาก Rule ที่มีลำดับความสำคัญสูงสุด
Rule Action
ใน Rule จะมี Rule Action ที่จะเป็นพารามิเตอร์ที่ระบุสิ่งที่ต้องทำกับ Request หากตรงตามเงื่อนไขที่กำหนดไว้ใน Rule
โดย Rule Action มีทั้งหมด 4 ชนิด
- COUNT
- เป็นการนับ Request แต่ไม่ได้ตัดสินใจว่าจะอนุญาตหรือบล็อก Request
- ALLOW
- เป็นการอนุญาต Request
- BLOCK
- เป็นการบล็อก Request
- CAPTCHA
- เป็นการใช้ CAPTCHA เช็ค Request
COUNT, ALLOW, BLOCK ก็คือการทำตามที่เขียนไว้ ส่วน CAPTCHA สามารถดูรายละเอียดเพิ่มเติมได้ที่
หรือถ้าอยากเห็นภาพว่าเป็นยังไง มีบทความภาพญี่ปุ่นให้ดูกันได้ด้านล่างนี้ครับ
ลักษณะการทำงานในแต่ละพื้นฐานถูกตั้งค่าไว้สำหรับ Rule Action
- Terminating actions
- หากการดำเนินการนี้ได้รับการประเมิน การประเมินครั้งต่อๆไปที่มีลำดับความสำคัญต่ำกว่าจะหยุดลง
- Non-terminating actions
- หากการดำเนินการนี้ได้รับการประเมิน การดำเนินการนั้นจะได้รับการประเมินต่อไป
สามารถตรวจสอบแต่ละ Action ได้ว่าเป็น Terminating action แบบไหนได้ที่ตารางด้านล่างครับ
ชื่อ Action | Terminating action | หมายเหตุ |
---|---|---|
COUNT | non-terminating actions | |
ALLOW | terminating actions | |
BLOCK | terminating actions | |
CAPTCHA | non-terminating actions or terminating actions |
จะเป็น terminating actions แบบไหน ขึ้นอยู่กับ CAPTCHA Token |
นอกจากนี้ เรายังสามารถ Custom Action ของ Action ในแต่ละ Rule ได้ด้วยครับ
ยกตัวอย่างเช่น ให้แทรก Custom header ตอน COUNT
ก็จบเพียงแค่นี้ครับกับ Rule
Rule Group
Rule Group คือ Rule set ที่สามารถนำมาใช้ใหม่ได้ ที่สามารถเพิ่มใน Web Acl ได้
Rule Group มี 2 ชนิดต่อไปนี้
- Managed Rules
- Your own rules
โดยมีความแตกต่างกันดังนี้ครับ
Managed Rules
Managed Rules คือ Rule Group ที่สร้าง หรือ ควบคุมโดย AWS หรือ Rule Groups Collection ที่สร้าง หรือ ควบคุมโดย businesses selling ที่ AWS Marketplace.
Rule Group ที่ได้รับการจัดการโดย AWS สามารถใช้ได้ฟรียกเว้นบางตัว (ต้องเสียค่าธรรมเนียมการใช้งาน AWS WAF ตามปกติ)
Managed rule group ที่มีขายบน AWS Marketplace จะสามารถซื้อและสมัครใช้งานผ่าน Marketplace(จำเป็นต้องมีค่าสมัครสมาชิกซึ่งค่าใช้จ่ายส่วนนี้ไม่เกี่ยวกับค่าธรรมเนียมการใช้งานปกติของ AWS WAF)
Managed rule group ที่ลักษณะเด่น 2 ข้อ ต่อไปนี้
- อัพเดทอัตโนมัติ
- Managed rule group จะได้รับการอัพเดตโดยอัตโนมัติอย่างสม่ำเสมอโดยผู้ดูแลระบบแต่ละคน แต่ก็สามารถตั้งค่าให้ไม่อัพเดท แล้วใช้รุ่นที่ระบุได้
- จำกัดการเข้าถึง Rule ของ Managed rule group
- ผู้ใช้งานไม่สามารถตรวจสอบรายละเอียของ Rule ที่อยู่ใน Managed rule group ได้
ยกตัวอย่างเช่น ตัวอย่าง Managed rule group ของ AWS ด้านล่างนี้
- Core rule set (CRS)
- Rule ที่ใช้กันทั่วไปสำหรับเว็บแอปพลิเคชัน รวมถึงช่องโหว่ที่มีความเสี่ยงสูงซึ่งมักเกิดขึ้นบ่อยๆ เช่น OWASP Top 10
- Known bad inputs
- Rule ที่บล็อกรูปแบบ Request ที่เกี่ยวข้องกับการแสวงหาประโยชน์และการค้นพบช่องโหว่ที่ทราบว่าไม่ถูกต้อง
- Admin protection
- Rule ที่บล็อกการเข้าถึงจากภายนอกไปยังหน้าผู้ดูแลระบบที่เผยแพร่อยู่
และยังมี Managed rule group ของ AWS อื่นๆ อีก สามารถดูได้ที่
Your own rules
Rule Group ที่ User เป็นคนสร้างเองครับ
Rule Group ที่สร้างขึ้นสามารถเพิ่ม Rule ได้เหมือนกับ Web Acl
ในการสร้าง Rule Group จำเป็นต้องระบุความจุสูงสุดของ WCU ที่ไม่สามารถเปลี่ยนแปลงได้
สำหรับ Rule Group ก็มีเพียงเท่านี้ครับ
วิธีการเริ่มใช้งาน
เมื่อตั้ง Rule ที่เกี่ยวข้องกับการบล็อกการเข้าถึง จำเป็นต้องดำเนินการ 2-3 ขั้นตอน เพื่อเริ่มต้นใช้งาน AWS WAF
โดยจะมีการอธิบายในบทนี้
โดยให้เริ่มขั้นตอนต่อไปนี้
- สร้าง Resource สำหรับ AWS WAF
- การทำงานใน Count Mode
- การเปลี่ยนไปยัง Block Mode
1. สร้าง Resource สำหรับ AWS WAF
ก่อนอื่นให้เราสร้าง Resource พวก WebAcl, Rule Group, Rule แล้วตั้งค่า output traffic ของ WAF ให้เสร็จ
ตอนที่สร้าง ให้ตั้งค่า Default Action ของ Web Acl เป็น Allow ส่วน Action ของ Rule, Rule Group ให้เป็น Count
2. การทำงานใน Count Mode
เชื่อมโยง Resource ที่ได้รับการป้องกันกับ Web Acl ที่สร้างขึ้น
ในขณะนี้ หากการตั้งค่า Web Acl และ Rule ถูกตั้งค่าให้บล็อก Request อาจจะทำให้เกิด WAF false positives
ซึ่งอาจะไปบล็อก Request ปกติได้
ดังนั้น ในขั้นแรก ให้เราใช้งานในโหมดที่ไม่บล็อก Request(=COUNT mode)
ใน COUNT mode จะไม่บล็อก Request แต่ถ้าเกิดมี Request ถูกบล็อก จะแสดงนับขึ้นใน Logs ครับ
หลังจากการใช้งานสองสามวันทำการ ให้วิเคราะห์บันทึกเพื่อดูว่ามีการนับ Request หรือไม่
ถ้ามีการนับเกิดขึ้น ให้แก้ไขหรือเพิ่ม Rule และปรับเพื่อไม่ให้มีการเข้าถึงปกติที่ตรวจพบอย่างไม่ถูกต้อง
3. การเปลี่ยนไปยัง Block Mode
เมื่อการเข้าถึงแบบปกติไม่ถูกนับแล้ว ให้เปลี่ยนไปใช้ BLOCK mode
ขั้นตอนนี้ให้ตั้งค่า Default Action ของ Web Acl, Rule, RuleGroup ให้เปลี่ยนเป็น Block เท่าที่จำเป็นได้เลย
หลังจากเปลี่ยนแล้ว หากตรวจไม่พบการเข้าถึงแบบปกติ ก็จะถือการติดตั้ง WAF จะเสร็จสมบูรณ์ครับ
ค่าใช้จ่าย
ค่าใช้จ่ายของ AWS WAF มีการคิดแบบนี้ครับ
จำนวนของ WebAcl(1 WebAcl ต่อ 5.00USD แบบรายเดือน) + ค่าธรรมเนียมการใช้ Rule(1 Rule ต่อ 1.00USD แบบรายเดือน) + จำนวน Request(1ล้าน Accress ต่อ 0.60USD)
กรณีที่ WebAcl: 1 อัน, Rule: 5 อัน, จำนวน Request: 2 ล้านครั้ง
จะมีค่าใช้จ่าย 11.20USD ซึ่งถือว่าถูกมากๆครับ
(1 * 5.00USD) + (5 * 1.00USD) + (2 * 0.60USD) = 11.20USD
ทิ้งท้าย
เป็นยังไงกันบ้างครับ กับ AWS WAF ในบทความนี้เป็นเนื้อของ AWS WAF(v2) เป็นหลัก
ซึ่งในปัจจุบันก็ไม่มีใครใช้ AWS WAF(v1) แล้ว(เนื้อหายังใหม่อยู่นั่นเอง) ซึ่งก็น่าจะเป็นบทความที่ตอบโจทย์สำหรับคนที่อยากเรียนรู้ รู้จักเกี่ยวกับ AWS WAF ว่ามีเป็น Service อะไร ใช้ทำอะไร
ทางผู้เขียนก็หวังว่าบทความนี้จะทำให้คุณได้รู้เพิ่มเกี่ยวกับ AWS WAF ไม่มากก็น้อยกันนะครับ
แล้วเจอกันใหม่ในบทความหน้าครับ ขอบคุณครับ
บทความต้นฉบับ
AWS再入門2022 AWS WAF編 | DevelopersIO