Bảo vệ API của bạn

Phát triển ứng dụng trên AWS

Ricardo Sueiras

Principal Technologist

Bảo mật API trên AWS

 

bảo mật api

  • Bảo mật API là tối quan trọng cho ứng dụng cloud-native.
  • Chúng phơi lộ các chức năng nghiệp vụ nhạy cảm.
  • Thường là điểm vào công khai tới hệ thống back-end.
  • API Gateway giúp bạn công khai API một cách an toàn.
Phát triển ứng dụng trên AWS

Authorization và authentication

 

xác thực và phân quyền

  • Hai khái niệm chính:
  • Authentication: bạn là ai.
  • Authorization: bạn được phép làm gì.
Phát triển ứng dụng trên AWS

Ủy quyền bằng IAM

 

iam

  • API Gateway có thể dùng IAM cho authentication và authorization.
  • Bảo vệ API bằng Signature Version 4 (SigV4).
  • Client ký mọi yêu cầu.
  • API Gateway xác thực chữ ký trước khi xử lý.
  • Chính sách IAM kiểm soát mỗi danh tính được gọi gì.
  • Tốt cho giao tiếp dịch vụ-đến-dịch vụ trong AWS.
Phát triển ứng dụng trên AWS

Bộ cấp quyền Amazon Cognito

  • Cognito xác thực người dùng bằng JSON Web Tokens (JWT).
  • Trường hợp dùng phổ biến: ứng dụng di động, web, quy trình đăng nhập.
  • Hỗ trợ danh tính liên kết (federated).
  • Hoạt động với nhà cung cấp ngoài như Google, Apple, Facebook.
  • Nhà cung cấp doanh nghiệp qua SAML hoặc OIDC.
  • Xác thực JWT gốc, không cần authorizer tùy chỉnh.

 

cogauthz

Phát triển ứng dụng trên AWS

Lambda authorizers

  • Hàm Lambda chạy logic ủy quyền tùy chỉnh của bạn.
  • Trả về chính sách IAM cho phép hoặc từ chối truy cập.
  • Dùng để xác thực token tùy chỉnh.
  • Tích hợp với nhà cung cấp danh tính bên ngoài.
  • Áp dụng các quy tắc riêng của bạn.

 

lambda authorizer

Phát triển ứng dụng trên AWS

Lambda authorizers

  • Ví dụ: xác thực JWT từ nhà cung cấp như Auth0.
  • Yêu cầu đến và API Gateway gọi authorizer.
  • Hàm xác thực token và trả về chính sách IAM.
  • Chính sách quyết định truy cập: cho phép hoặc từ chối.
  • Nếu cho phép, yêu cầu được chuyển đến back-end.
  • Nếu từ chối, API Gateway trả về 401 ngay lập tức.

 

lambda authorizer

Phát triển ứng dụng trên AWS

Nên dùng authorizer nào

 

chọn authorizer

  • Chọn Cognito cho ứng dụng hướng người dùng.
  • Cung cấp quản lý đăng ký, đăng nhập, và xác thực token.
  • Không cần mã tùy chỉnh.
  • Chọn Lambda khi cần logic tùy chỉnh.
  • Tốt cho nhà cung cấp danh tính bên thứ ba.
  • Hoặc quy tắc vượt ngoài khả năng của Cognito.
Phát triển ứng dụng trên AWS

Bộ nhớ đệm cho authorizer

 

bộ nhớ đệm ủy quyền

  • Phản hồi của authorizer được lưu vào bộ nhớ đệm.
  • Giảm độ trễ và chi phí cho endpoint truy cập thường xuyên.
  • TTL của cache có thể cấu hình.
  • Từ 0 đến 3600 giây.
  • Mặc định là 300 giây.
  • Đặt TTL = 0 sẽ tắt bộ nhớ đệm.
Phát triển ứng dụng trên AWS

Chính sách tài nguyên của API Gateway

 

chính sách tài nguyên

  • Định nghĩa chính sách để kiểm soát ai có thể truy cập API.
  • Hạn chế theo tài khoản AWS.
  • Hạn chế theo dải địa chỉ IP.
  • Hạn chế theo VPC.
  • Giúp khóa chặt API nội bộ và giảm lộ diện.
Phát triển ứng dụng trên AWS

Mã hóa

  • API Gateway mặc định hỗ trợ endpoint HTTPS với TLS.
  • HTTPS mã hóa dữ liệu trên đường truyền giữa client và gateway.
  • Tích hợp với AWS Certificate Manager (ACM).
  • ACM đơn giản hóa quản lý chứng chỉ cho tên miền tùy chỉnh.
  • Chứng chỉ cho tên miền tùy chỉnh là miễn phí.
  • TUYỆT ĐỐI không công khai API qua HTTP không mã hóa.

 

mã hóa

Phát triển ứng dụng trên AWS

Mutual TLS (mTLS)

 

  • API Gateway hỗ trợ mutual TLS (mTLS).
  • Xác thực client bằng chứng chỉ.
  • Yêu cầu cấu hình tên miền.
  • Phổ biến cho giao tiếp máy-với-máy.
  • Hai bên xác minh danh tính của nhau.

 

mtls

Phát triển ứng dụng trên AWS

Giới hạn tốc độ và throttling cho API

  • Throttling bảo vệ hệ thống back-end.
  • Cải thiện độ tin cậy của API.
  • Không có nó, dịch vụ back-end có thể quá tải.
  • Rate limit kiểm soát số yêu cầu/giây ổn định.
  • Burst limit cho phép tăng đột biến tạm thời.
  • Vượt giới hạn sẽ trả về 429 Too Many Requests.

 

giới hạn tốc độ

Phát triển ứng dụng trên AWS

Chống các khai thác phổ biến

 

waf

  • Gắn AWS WAF vào API Gateway.
  • Chặn yêu cầu độc hại trước khi đến API của bạn.
  • Ngăn chặn cố gắng SQL injection.
  • Ngăn chặn cross-site scripting (XSS).
  • Chặn lưu lượng từ dải IP độc hại đã biết.
Phát triển ứng dụng trên AWS

Usage plan và API key

 

usage plans

  • Kiểm soát cách client sử dụng API của bạn.
  • Cấu hình hạn ngạch yêu cầu.
  • Đặt rate limit.
  • Thiết lập các gói đăng ký.
  • Gán giới hạn tiêu thụ theo từng client.
Phát triển ứng dụng trên AWS

Chia sẻ tài nguyên khác nguồn (CORS)

 

CORS

  • CORS cho phép trình duyệt gọi API khác nguồn.
  • Nếu không, yêu cầu hợp lệ từ trình duyệt có thể bị chặn.
  • CORS quá mở là rủi ro bảo mật.
  • Tránh Access-Control-Allow-Origin: * ở môi trường production.
  • Luôn giới hạn CORS cho các nguồn tin cậy.
Phát triển ứng dụng trên AWS

Header CORS và yêu cầu preflight

  • Yêu cầu OPTIONS preflight chạy trước yêu cầu thật.
  • Xác nhận API cho phép truy cập khác nguồn.
  • API Gateway thêm các header phản hồi CORS cần thiết.
  • Với Non-Proxy integration, hệ thống tự xử lý.
  • Với Proxy integration, Lambda của bạn phải trả về header CORS.
  • Lambda của bạn cũng phải xử lý OPTIONS preflight.

 

CORS headers

Phát triển ứng dụng trên AWS

Cùng luyện tập nào!

Phát triển ứng dụng trên AWS

Preparing Video For Download...