AWS WAF คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS

นี่เป็นบทความแปล ที่มีเนื้อหามาจากบทความภาษาญี่ปุ่นของ Classmethod, Inc. ในหัวข้อ「AWS再入門2022 AWS WAF編」 หากผู้อ่านสนใจอ่านเนื้อหาต้นฉบับสามารถอ่านได้ที่ลิ้งค์ "บทความต้นฉบับ" ด้านล่าง เนื้อหาในบทความนี้การอธิบายบางอย่างจะถูกปรับให้เข้าใจง่ายขึ้นทำให้แตกต่างจากต้นฉบับในบางจุด
2022.06.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

สวัสดีครับทุกคน อาชิซาวะ ครับ

รายการนี้จะเขียนเกี่ยวกับ 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

โดยจะมีการอธิบายในบทนี้

โดยให้เริ่มขั้นตอนต่อไปนี้

  1. สร้าง Resource สำหรับ AWS WAF
  2. การทำงานใน Count Mode
  3. การเปลี่ยนไปยัง 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

บทความที่เกี่ยวข้อง