Chọn authorizer cho API Gateway

Sử dụng AWS Security dành cho Developer

Rahul Singh

Technical Product Manager

Kiểm tra trước khi mã của bạn chạy

Cuộc gọi đi qua authorizer của API Gateway trước khi vào mã của bạn; nếu bị từ chối sẽ trả về 401.

Đậu: yêu cầu đến được mã của bạn

Rớt: 401 unauthorized, mã của bạn không chạy

Sử dụng AWS Security dành cho Developer

Ai thực hiện kiểm tra

Ba authorizer để chọn
  1. IAM auth (AWS_IAM): AWS kiểm tra chữ ký

Một dãy dọc trên trục từ AWS thực hiện kiểm tra đến bạn tự kiểm tra. Chỉ thẻ đầu tiên được tô: IAM auth, nơi AWS kiểm tra chữ ký.

Sử dụng AWS Security dành cho Developer

Ai thực hiện kiểm tra

Ba authorizer để chọn
  1. IAM auth (AWS_IAM): AWS kiểm tra chữ ký
  2. Cognito authorizer (COGNITO_USER_POOLS): AWS xác minh token
    • Chữ ký, iss, aud, exp

Cùng dãy dọc với hai thẻ được tô: IAM auth, nơi AWS kiểm tra chữ ký, và Cognito authorizer, nơi AWS xác minh token.

Sử dụng AWS Security dành cho Developer

Ai thực hiện kiểm tra

Ba authorizer để chọn
  1. IAM auth (AWS_IAM): AWS kiểm tra chữ ký
  2. Cognito authorizer (COGNITO_USER_POOLS): AWS xác minh token
    • Chữ ký, iss, aud, exp
  3. Lambda authorizer: hàm của bạn trả về allow hoặc deny
    • Cho các token không phải Cognito

Ba authorizer xếp hạng từ AWS kiểm tra đến bạn tự kiểm tra: IAM auth nơi AWS kiểm tra chữ ký, Cognito authorizer nơi AWS xác minh token, và Lambda authorizer nơi bạn tự viết kiểm tra.

Sử dụng AWS Security dành cho Developer

Chọn đúng "cửa" cho bên gọi

 

Bên gọi quyết định

 

  • Dịch vụ nội bộ: đã có thông tin xác thực AWS

Hàng đầu tiên trong ba hàng ánh xạ từ bên gọi tới authorizer: dịch vụ nội bộ ghép với IAM auth.

Sử dụng AWS Security dành cho Developer

Chọn đúng "cửa" cho bên gọi

 

Bên gọi quyết định

 

  • Dịch vụ nội bộ: đã có thông tin xác thực AWS
  • Người dùng ứng dụng: mang token Cognito

Hai hàng trong ba hàng ánh xạ: dịch vụ nội bộ ghép với IAM auth, và người dùng ứng dụng ghép với Cognito authorizer.

Sử dụng AWS Security dành cho Developer

Chọn đúng "cửa" cho bên gọi

 

Bên gọi quyết định

 

  • Dịch vụ nội bộ: đã có thông tin xác thực AWS
  • Người dùng ứng dụng: mang token Cognito
  • Ứng dụng đối tác: có logic ủy quyền riêng

Ba bên gọi được ghép với authorizer phù hợp: dịch vụ nội bộ với IAM auth, người dùng ứng dụng với Cognito authorizer, và ứng dụng đối tác với Lambda authorizer.

Sử dụng AWS Security dành cho Developer

Chú ý loại API

REST API

  • Đủ cả ba authorizer, thêm resource policies
  • API key, giới hạn theo khách, xác thực yêu cầu, WAF

Thẻ so sánh cho REST API, tích chọn IAM auth, Cognito user pool authorizer, Lambda authorizer, và resource policy. Thẻ HTTP API bên cạnh chưa được điền.

Sử dụng AWS Security dành cho Developer

Chú ý loại API

REST API

  • Đủ cả ba authorizer, thêm resource policies
  • API key, giới hạn theo khách, xác thực yêu cầu, WAF

 

HTTP API

  • JWT authorizer, hỗ trợ mọi OIDC issuer
  • Không có resource policies; rẻ và nhanh hơn

Hai thẻ so sánh authorizer mỗi loại API hỗ trợ: REST API có thêm resource policies, còn HTTP API thay Cognito authorizer bằng JWT authorizer và không có resource policies.

Sử dụng AWS Security dành cho Developer

Authorizer có trí nhớ

Có cache để tiết kiệm thời gian

  • Lần gọi đầu: authorizer chạy
  • Các lần sau: đọc kết quả đã cache

Lần gọi đầu chạy authorizer và ghi allow vào cache với thời gian sống; lần gọi sau đọc allow từ cache mà không chạy lại authorizer.

Sử dụng AWS Security dành cho Developer

Authorizer có trí nhớ

Có cache để tiết kiệm thời gian

  • Lần gọi đầu: authorizer chạy
  • Các lần sau: đọc kết quả đã cache

 

Cache TTL

  • authorizerResultTtlInSeconds: mặc định 300s, tối đa 3600s
  • Bằng 0 sẽ tắt cache

Lần gọi đầu chạy authorizer và ghi allow vào cache với thời gian sống; lần gọi sau đọc allow từ cache mà không chạy lại authorizer.

Sử dụng AWS Security dành cho Developer

Allow trong cache có thể sống lâu hơn quyền thật

Dòng thời gian hai làn. Làn quyền chuyển từ hợp lệ sang bị thu hồi tại điểm thu hồi, trong khi làn allow đã cache vẫn cho phép sau điểm đó; vùng sau khi thu hồi được tô bóng.

Ngay lúc bạn thu hồi

  • Quyền: bị thu hồi tức thì
  • Allow đã cache: vẫn còn hiệu lực
Sử dụng AWS Security dành cho Developer

Allow trong cache có thể sống lâu hơn quyền thật

Cùng dòng thời gian hai làn với vùng giữa điểm thu hồi và hết TTL được tô, đánh dấu vẫn được phép: quyền đã bị thu hồi nhưng allow trong cache vẫn cho truy cập.

Khoảng thời gian ở giữa

  • Quyền đã mất, cache chưa biết
  • Truy cập kéo dài đến khi TTL hết hạn
Sử dụng AWS Security dành cho Developer

Allow trong cache có thể sống lâu hơn quyền thật

Cùng dòng thời gian với mũi tên qua vùng tô cho thấy TTL ngắn hơn sẽ hết hạn sớm hơn và thu hẹp khoảng thời gian quyền đã thu hồi vẫn cho truy cập.

Kiểm soát khoảng này

  • Dùng TTL ngắn khi cần thu hồi nhanh
  • TTL 0 cho các route nhạy cảm nhất
Sử dụng AWS Security dành cho Developer

Có người gọi bỏ qua cửa chính

Bên thứ ba bên trong tài khoản của bạn

  • Giả định một role do bạn tạo
  • Bạn trao role ARN cho họ

Nhà cung cấp giám sát nằm giữa hai hộp khách hàng phía trên và role của bạn phía dưới. Hộp của bạn chuyển role ARN xuống cho nhà cung cấp, bên này giả định role của bạn. Hộp khách hàng thứ hai bị làm mờ, chưa tham gia câu chuyện.

Sử dụng AWS Security dành cho Developer

Có người gọi bỏ qua cửa chính

Bên thứ ba bên trong tài khoản của bạn

  • Giả định một role do bạn tạo
  • Bạn trao role ARN cho họ

Role ARN không phải bí mật

Vấn đề "confused deputy"

Hộp khách hàng thứ hai giờ đã kích hoạt, tô đỏ, và trao role ARN của bạn như thể của họ. Hai mũi tên từ nhà cung cấp giám sát đi xuống role của bạn, mỗi khách một cuộc gọi, và không có gì phân biệt được chúng.

Sử dụng AWS Security dành cho Developer

Có người gọi bỏ qua cửa chính

Bên thứ ba bên trong tài khoản của bạn

  • Giả định một role do bạn tạo
  • Bạn trao role ARN cho họ

Role ARN không phải bí mật

Vấn đề "confused deputy"

Cách khắc phục: sts:ExternalId

  • Nhà cung cấp tạo một mã cho mỗi khách hàng
  • Trust policy của bạn yêu cầu khớp mã

Role của bạn giờ yêu cầu external ID bằng 12345. Cuộc gọi mang 12345 đến được role, còn cuộc gọi mang 99999 bị chặn bởi dấu X đỏ trước khi tới.

Sử dụng AWS Security dành cho Developer

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

Sử dụng AWS Security dành cho Developer

Preparing Video For Download...