Using API Gateway for Authorization and Authentication
Bài tóm tắt Expedia 2018 2. Tăng trưởng Độ khó: Dễ
Expedia · 2018 · 2. Tăng trưởng · Độ khó: Dễ — bài gốc
Một bài trong series về một ứng dụng NodeJS (Koa) chạy trên Fargate của một team Expedia; phần lớn bài là template CloudFormation. Ghi chú này giữ phần quyết định thiết kế.
Bối cảnh
- Yêu cầu duy nhất: phải có xác thực/phân quyền và không được "tĩnh" (username/password cứng gửi kèm mọi request). Đã cân nhắc Passport (phổ biến với NodeJS) và tự viết (tác giả từng làm ở dự án khác và khuyên đừng làm).
- Muốn một thứ không phải tự giữ cho khoẻ, nên chọn API Gateway; nhưng lúc đó API Gateway không đứng trước được tài nguyên nằm trong VPC.
Thay đổi chính
- Hoãn nhưng giữ hình dạng: ứng dụng còn chạy trong lab, chưa ra internet, nên tạm chưa làm; nhưng chốt nguyên tắc rằng xác thực/phân quyền phải do một thành phần đứng trước ứng dụng đảm nhận, không nhúng vào code ứng dụng, để sau này đổi sang API Gateway dễ.
- Cuối 2017 AWS ra Network Load Balancer, mở đường cho API Gateway tới tài nguyên trong VPC qua VPC Link (bắt buộc phải có NLB, theo bài). Cấu hình: NLB nội bộ, target group kiểu
ip(cần cho Fargate), API Gateway regional với route yêu cầu SigV4 rồi proxy về NLB. - Ứng dụng giữ vai trò trả mã HTTP đúng cho từng tình huống nên API Gateway chỉ cần chuyển request/response qua lại. Mọi thứ khai báo bằng CloudFormation theo
Stage(dev, staging…); bootstrap định nghĩa route bằng cách dựng trên console rồi export Swagger, vì một số tuỳ chọn (CORS) không có cờ tương ứng trong CloudFormation.
Vì sao
- Theo tác giả: không muốn bảo trì sức khoẻ của một hệ xác thực tự viết; giữ xác thực ở lớp ngoài ứng dụng là thứ cho phép trì hoãn lựa chọn công cụ mà không phải viết lại code.
Bài học cho SWE
- Khi công cụ mong muốn chưa dùng được, vẫn có thể chốt vị trí của trách nhiệm (lớp đứng trước ứng dụng) để thay công cụ sau mà ứng dụng không đổi.
- Xác thực ở gateway và phân quyền chi tiết trong service là hai việc khác nhau; bài này chỉ chuyển phần đầu ra gateway (so với cách tách chi tiết hơn ở Netflix 2021).
Liên quan
#API Gateway#Authentication#Authorization#SigV4#Network Load Balancer#VPC Link#Fargate#CloudFormation
Được nhắc tới trong
Chủ đề (1)
Công ty (1)