การปกป้อง API ของคุณ

การพัฒนาแอปพลิเคชันบน AWS

Ricardo Sueiras

Principal Technologist

การรักษาความปลอดภัย API บน AWS

 

securing api

  • การรักษาความปลอดภัย API เป็นสิ่งสำคัญสำหรับแอปแบบ cloud-native
  • API เปิดเผยฟังก์ชันทางธุรกิจที่สำคัญ
  • API มักเป็นจุดเข้าสาธารณะสู่ระบบ back-end
  • API Gateway ช่วยให้เปิดเผย API ได้อย่างปลอดภัย
การพัฒนาแอปพลิเคชันบน AWS

Authorization และ Authentication

 

authnauthz

  • แนวคิดหลัก 2 ประการ:
  • Authentication: การยืนยันตัวตน (คุณคือใคร)
  • Authorization: การอนุญาตสิทธิ์ (คุณทำอะไรได้บ้าง)
การพัฒนาแอปพลิเคชันบน AWS

IAM authorization

 

iam

  • API Gateway ใช้ IAM สำหรับ authentication และ authorization ได้
  • รักษาความปลอดภัยด้วย Signature Version 4 (SigV4)
  • ไคลเอนต์ต้องลงนามทุก request
  • API Gateway ตรวจสอบลายเซ็นก่อนประมวลผล
  • IAM policy ควบคุมว่าแต่ละ identity เรียกใช้อะไรได้บ้าง
  • เหมาะที่สุดสำหรับการสื่อสารระหว่างบริการ AWS
การพัฒนาแอปพลิเคชันบน AWS

Amazon Cognito authorizers

  • Cognito ยืนยันตัวตนผู้ใช้ด้วย JSON Web Tokens (JWTs)
  • กรณีใช้งานทั่วไป: mobile app, web app, และกระบวนการล็อกอิน
  • รองรับ federated identities
  • ทำงานร่วมกับผู้ให้บริการภายนอก เช่น Google, Apple และ Facebook
  • ผู้ให้บริการองค์กรผ่าน SAML หรือ OIDC
  • ตรวจสอบ JWT โดยตรง ไม่ต้องเขียนโค้ด authorizer เอง

 

cogauthz

การพัฒนาแอปพลิเคชันบน AWS

Lambda authorizers

  • Lambda function รันลอจิก authorization แบบกำหนดเองของคุณ
  • ส่งคืน IAM policy สำหรับอนุญาตหรือปฏิเสธการเข้าถึง
  • ใช้เพื่อตรวจสอบ token แบบกำหนดเอง
  • เชื่อมต่อกับผู้ให้บริการ identity ภายนอก
  • บังคับใช้กฎที่กำหนดเองได้อย่างอิสระ

 

lambda authorizer

การพัฒนาแอปพลิเคชันบน AWS

Lambda authorizers

  • ตัวอย่าง: ตรวจสอบ JWT จากผู้ให้บริการอย่าง Auth0
  • เมื่อ request เข้ามา API Gateway จะเรียก authorizer
  • ฟังก์ชันตรวจสอบ token แล้วส่งคืน IAM policy
  • Policy ตัดสินการเข้าถึง: อนุญาตหรือปฏิเสธ
  • หากอนุญาต request จะถูกส่งต่อไปยัง back-end
  • หากปฏิเสธ API Gateway จะส่ง 401 กลับทันที

 

lambda authorizer

การพัฒนาแอปพลิเคชันบน AWS

เลือก authorizer แบบไหนดี

 

choosing which authorizer

  • เลือก Cognito สำหรับแอปที่มีผู้ใช้งานโดยตรง
  • มีระบบสมัคร ล็อกอิน และตรวจสอบ token สำเร็จรูป
  • ไม่ต้องเขียนโค้ดเพิ่มเติม
  • เลือก Lambda เมื่อต้องการลอจิกแบบกำหนดเอง
  • เหมาะสำหรับผู้ให้บริการ identity บุคคลที่สาม
  • หรือกฎที่เกินขอบเขตที่ Cognito รองรับ
การพัฒนาแอปพลิเคชันบน AWS

การ cache ของ authorizer

 

caching authz

  • ผลลัพธ์ของ authorizer จะถูก cache ไว้
  • ช่วยลด latency และต้นทุนสำหรับ endpoint ที่ถูกเรียกบ่อย
  • ปรับค่า TTL ของ cache ได้
  • ช่วงค่าอยู่ที่ 0 ถึง 3600 วินาที
  • ค่าเริ่มต้นคือ 300 วินาที
  • ตั้ง TTL เป็น 0 เพื่อปิดการใช้งาน cache
การพัฒนาแอปพลิเคชันบน AWS

Resource policy ของ API Gateway

 

resource policies

  • กำหนด policy เพื่อควบคุมการเข้าถึง API
  • จำกัดตาม AWS account
  • จำกัดตามช่วง IP address
  • จำกัดตาม VPC
  • ช่วยปิดกั้น API ภายในและลดการเปิดเผยข้อมูล
การพัฒนาแอปพลิเคชันบน AWS

การเข้ารหัส

  • API Gateway รองรับ HTTPS endpoint พร้อม TLS โดยค่าเริ่มต้น
  • HTTPS เข้ารหัสข้อมูลระหว่างไคลเอนต์และ gateway
  • เชื่อมต่อกับ AWS Certificate Manager (ACM) ได้
  • ACM ช่วยจัดการ certificate สำหรับ custom domain
  • Certificate สำหรับ custom domain ไม่มีค่าใช้จ่าย
  • ห้ามเปิดเผย API ผ่าน HTTP ที่ไม่มีการเข้ารหัสเด็ดขาด

 

encryption

การพัฒนาแอปพลิเคชันบน AWS

Mutual TLS (mTLS)

 

  • API Gateway รองรับ mutual TLS (mTLS)
  • ยืนยันตัวตนไคลเอนต์ด้วย certificate
  • ต้องกำหนดค่า domain name
  • ใช้กันทั่วไปในการสื่อสารระหว่างเครื่อง (machine-to-machine)
  • ทั้งสองฝ่ายตรวจสอบ identity ซึ่งกันและกัน

 

mtls

การพัฒนาแอปพลิเคชันบน AWS

API throttling และ rate limiting

  • Throttling ปกป้องระบบ back-end
  • ช่วยเพิ่มความเสถียรของ API
  • หากไม่มี back-end อาจรับโหลดเกินกำลัง
  • Rate limit ควบคุมจำนวน request ต่อวินาทีในสภาวะปกติ
  • Burst limit อนุญาตให้รับ traffic ที่เพิ่มขึ้นชั่วคราวได้
  • หากเกินขีดจำกัดจะได้รับ 429 Too Many Requests

 

throttling

การพัฒนาแอปพลิเคชันบน AWS

การป้องกันช่องโหว่ทั่วไป

 

waf

  • เชื่อม AWS WAF เข้ากับ API Gateway
  • บล็อก request ที่เป็นอันตรายก่อนถึง API
  • ป้องกันการโจมตีแบบ SQL injection
  • ป้องกัน cross-site scripting (XSS)
  • บล็อก traffic จาก IP range ที่เป็นอันตราย
การพัฒนาแอปพลิเคชันบน AWS

Usage plan และ API key

 

usage plans

  • ควบคุมวิธีที่ไคลเอนต์ใช้งาน API
  • กำหนด request quota
  • ตั้งค่า rate limit
  • กำหนดระดับการสมัครใช้งาน
  • กำหนดขีดจำกัดการใช้งานต่อไคลเอนต์
การพัฒนาแอปพลิเคชันบน AWS

Cross-Origin Resource Sharing (CORS)

 

CORS

  • CORS ให้เบราว์เซอร์ส่ง request ข้าม origin ไปยัง API ได้
  • หากไม่มี request ที่ถูกต้องจากเบราว์เซอร์อาจถูกบล็อก
  • CORS ที่กำหนดกว้างเกินไปเป็นความเสี่ยงด้านความปลอดภัย
  • หลีกเลี่ยงการใช้ Access-Control-Allow-Origin: * ใน production
  • ควรจำกัด CORS เฉพาะ origin ที่เชื่อถือได้เสมอ
การพัฒนาแอปพลิเคชันบน AWS

CORS header และ preflight request

  • request OPTIONS แบบ preflight จะทำงานก่อน request จริง
  • เพื่อยืนยันว่า API อนุญาตการเข้าถึงข้าม origin
  • API Gateway เพิ่ม CORS response header ที่จำเป็น
  • สำหรับ Non-Proxy integration ระบบจัดการให้อัตโนมัติ
  • สำหรับ Proxy integration Lambda ต้องส่งคืน CORS header เอง
  • Lambda ต้องจัดการ preflight OPTIONS ด้วยเช่นกัน

 

CORS headers

การพัฒนาแอปพลิเคชันบน AWS

มาฝึกกันเถอะ!

การพัฒนาแอปพลิเคชันบน AWS

Preparing Video For Download...