của Eric Johnson | vào ngày 15 tháng 12 năm 2022 | trong Amazon API Gateway, Serverless
Bài blog này được viết bởi Thomas Moore, Kiến trúc sư Giải pháp Cấp cao, và Josh Hart, Kiến trúc sư Giải pháp Cấp cao.
Amazon API Gateway cho phép các nhà phát triển tạo ra các REST API riêng tư chỉ có thể truy cập từ một mạng riêng ảo (VPC). Giao thông đến API riêng tư sử dụng kết nối an toàn và không rời khỏi mạng lưới AWS, nghĩa là AWS cô lập nó khỏi internet công cộng. Điều này làm cho các điểm cuối API riêng tư của API Gateway là lựa chọn phù hợp cho việc xuất bản các API nội bộ, chẳng hạn như các API được sử dụng bởi việc giao tiếp giữa các microservice phía sau.
Trong kiến trúc microservice, nơi mà nhiều nhóm xây dựng và quản lý các thành phần, thì các tài khoản AWS khác nhau thường tiêu thụ các điểm cuối API riêng tư.
Bài blog này sẽ chỉ ra cách một dịch vụ có thể tiêu thụ một điểm cuối API Gateway riêng tư được xuất bản trong một tài khoản AWS khác một cách an toàn thông qua AWS PrivateLink.
Tiêu thụ điểm cuối riêng tư của API Gateway qua các tài khoản khác nhau thông qua AWS PrivateLink.
Bài blog này đề cập đến việc tiêu thụ các điểm cuối của API Gateway giữa các tài khoản khác nhau. Để tiết lộ các tài nguyên giữa các tài khoản khác nhau đằng sau một API Gateway, vui lòng đọc bài blog đã tồn tại này.
Overview
Để truy cập các điểm cuối riêng tư của API Gateway, bạn phải tạo một điểm cuối VPC giao diện (được đặt tên là execute-api) bên trong VPC của bạn. Điều này tạo ra một kết nối AWS PrivateLink giữa VPC của tài khoản AWS của bạn và VPC dịch vụ API Gateway. Kết nối PrivateLink cho phép lưu lượng chảy qua không gian địa chỉ IP riêng tư mà không cần đi qua internet.
PrivateLink cho phép truy cập vào các điểm cuối riêng tư của API Gateway trong các tài khoản AWS khác nhau, mà không cần VPC peering, kết nối VPN hoặc AWS Transit Gateway. Một điểm cuối execute-api duy nhất được sử dụng để kết nối với bất kỳ API Gateway nào, bất kể tài khoản AWS đích API Gateway ở đâu. Chính sách tài nguyên kiểm soát các điểm cuối VPC nào có quyền truy cập vào điểm cuối riêng tư của API Gateway. Điều này làm cho kiến trúc giữa các tài khoản trở nên đơn giản hơn, không cần có định tuyến phức tạp hoặc kết nối giữa các VPC.
Sơ đồ dưới đây cho thấy cách các điểm cuối VPC giao diện trong một tài khoản tiêu dùng tạo ra một kết nối PrivateLink trở lại VPC của tài khoản dịch vụ API Gateway. Chính sách tài nguyên được áp dụng cho API riêng tư xác định xem điểm cuối VPC nào có thể truy cập vào API. Vì lí do này, rất quan trọng để đảm bảo rằng chính sách tài nguyên là chính xác để ngăn chặn việc truy cập không cố ý từ các điểm cuối VPC của tài khoản AWS khác.
Trong ví dụ này, chính sách tài nguyên từ chối tất cả các kết nối đến điểm cuối riêng tư của API trừ khi điều kiện aws:SourceVpce khớp với vpce-1a2b3c4d trong tài khoản A. Điều này có nghĩa là các kết nối từ các điểm cuối VPC execute-api khác bị từ chối. Để cho phép truy cập từ tài khoản B, thêm vpce-9z8y7x6w vào chính sách tài nguyên. Tham khảo tài liệu để biết về các khóa điều kiện khác bạn có thể sử dụng trong các chính sách tài nguyên của API Gateway.
Để hiểu rõ hơn về cách hoạt động của các liên kết VPC, hãy đọc Understanding VPC links in Amazon API Gateway private integrations.
Các phần sau sẽ bao gồm ba mẫu kiến trúc để tiêu thụ các điểm cuối riêng tư của API Gateway giữa các tài khoản:
- API Gateway khu vực đến API Gateway riêng tư
- Hàm Lambda gọi API Gateway trong một tài khoản khác
- Microservice container gọi API Gateway trong một tài khoản khác bằng cách sử dụng mTLS
API Gateway khu vực đến API Gateway riêng tư qua các tài khoản (cross-account)
Khi xây dựng các microservices trong các tài khoản AWS khác nhau, các điểm cuối riêng tư của API Gateway thường được sử dụng để cho phép giao tiếp giữa các dịch vụ. Đôi khi một phần của các điểm cuối này phải được tiết lộ công khai để người dùng cuối sử dụng. Một mẫu cho điều này là có một API Gateway công khai trung tâm, hoạt động như cửa ra phía trước cho nhiều điểm cuối riêng tư của API Gateway. Điều này cho phép quản lý trung tâm về xác thực, ghi nhật ký và giám sát.
Sơ đồ dưới đây mô tả cách đạt được điều này bằng cách sử dụng một liên kết VPC. Các liên kết VPC cho phép bạn kết nối các tích hợp API Gateway với các tài nguyên riêng tư bên trong một VPC. Điểm cuối giao diện VPC của API Gateway là tài nguyên VPC mà bạn muốn kết nối, vì đây là định tuyến lưu lượng đến các điểm cuối riêng tư của API Gateway trong các tài khoản AWS khác nhau.
Liên kết VPC yêu cầu sử dụng một Network Load Balancer (NLB). Nhóm mục tiêu của NLB trỏ đến các địa chỉ IP riêng tư của điểm cuối VPC, thường là một cho mỗi Khu vực Có sẵn. Kiểm tra sức khỏe của nhóm mục tiêu phải xác nhận rằng dịch vụ API Gateway đang hoạt động. Bạn có thể sử dụng đường dẫn /ping đã đặt trước của API Gateway cho việc này, nó sẽ trả về mã trạng thái HTTP 200 khi dịch vụ lành mạnh.
Hàm Lambda gọi API Gateway riêng tư giữa các tài khoản (cross-account)
Yêu cầu phổ biến khác là cho các hàm AWS Lambda gọi các điểm cuối riêng tư của API Gateway giữa các tài khoản khác nhau. Điều này cho phép giao tiếp giữa các dịch vụ trong kiến trúc microservice.
Sơ đồ dưới đây mô tả cách đạt được điều này bằng cách sử dụng các điểm cuối giao diện cho Lambda, cho phép truy cập vào các tài nguyên riêng tư bên trong VPC của bạn. Điều này cho phép Lambda truy cập vào điểm cuối VPC của API Gateway và do đó, các điểm cuối riêng tư của API Gateway trong một tài khoản khác.
Khác với ví dụ trước đó, không có NLB hoặc liên kết VPC nào được yêu cầu. Chính sách tài nguyên trên API Gateway riêng tư phải cho phép truy cập từ điểm cuối VPC trong tài khoản mà hàm Lambda tiêu thụ được.
Do hàm Lambda có một tệp đính kèm VPC, nó sẽ sử dụng phân giải DNS từ bên trong VPC. Điều này có nghĩa là nếu bạn chọn tùy chọn Enable Private DNS Name khi tạo điểm cuối VPC giao diện cho API Gateway thì điểm cuối https://{restapi-id}.execute-api.{region}.amazonaws.com sẽ tự động phân giải thành các địa chỉ IP riêng tư. Lưu ý rằng cấu hình DNS này có thể chặn truy cập từ các điểm cuối API khu vực và được tối ưu hóa từ lề từ bên trong VPC. Để biết thêm thông tin, vui lòng tham khảo bài viết trung tâm kiến thức.
Gọi API Gateway riêng tư giữa các tài khoản với mutual TLS (mTLS)
Các khách hàng hoạt động trong các ngành công nghiệp được quy định, như ngân hàng mở (open banking), thường phải triển khai mutual TLS (mTLS) để truy cập các API của họ một cách an toàn. Điều này cũng tốt cho các ứng dụng Internet of Things (IoT) để xác thực thiết bị bằng cách sử dụng chứng chỉ số.
API Gateway khu vực (Regional API Gateway) có hỗ trợ tự nhiên cho mTLS, nhưng hiện tại, API Gateway riêng tư không hỗ trợ mTLS, do đó bạn phải chấm dứt mTLS trước khi đến API
Gateway. Một mẫu là triển khai một dịch vụ proxy trong tài khoản sản xuất (producer account) giải quyết bước mTLS handshake, chấm dứt mTLS và proxy yêu cầu đến API Gateway riêng tư qua HTTPS thông thường.
Sơ đồ dưới đây mô tả cách sử dụng kết hợp của PrivateLink, một proxy dựa trên NGINX, và API Gateway riêng tư để triển khai mTLS và tiêu thụ API riêng tư qua các tài khoản khác nhau.
Trong sơ đồ kiến trúc này, Amazon ECS Fargate được sử dụng để chứa nhiệm vụ container chạy máy chủ proxy NGINX. Proxy này xác thực chứng chỉ được truyền từ khách hàng kết nối trước khi chuyển kết nối đến API Gateway thông qua điểm cuối VPC execute-proxy. Cấu hình NGINX mẫu dưới đây cho thấy cách dịch vụ proxy mTLS hoạt động bằng cách sử dụng các thiết lập ssl_verify_client và ssl_client_certificate để xác minh chứng chỉ của khách hàng kết nối, và proxy_pass để chuyển tiếp yêu cầu đến API Gateway.
| server { listen 443 ssl; ssl_certificate /etc/ssl/server.crt; ssl_certificate_key /etc/ssl/server.key; ssl_protocols TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5; ssl_client_certificate /etc/ssl/client.crt; ssl_verify_client on; location / { proxy_pass https://{api-gateway-endpoint-api}; } } |
Khách hàng kết nối phải cung cấp chứng chỉ của khách hàng khi kết nối đến API thông qua dịch vụ điểm cuối VPC :
| curl –key client.key –cert client.crt –cacert server.crt https://{vpc-endpoint-service-url} |
Sử dụng quy tắc nhóm bảo mật VPC trên cả điểm cuối VPC và proxy NGINX để ngăn khách hàng tránh qua bỏ điểm cuối mTLS và kết nối trực tiếp đến điểm cuối API Gateway.
Kết luận
Bài viết này khám phá ba giải pháp để tiêu thụ API Gateway riêng tư qua các tài khoản AWS khác nhau. Một thành phần chính của tất cả các giải pháp là điểm cuối giao diện VPC. Sử dụng Điểm cuối VPC & PrivateLink, bạn có thể tiêu thụ tài nguyên một cách an toàn và thậm chí cả các microservices của riêng bạn qua các tài khoản AWS. Để biết thêm chi tiết, hãy đọc bài viết Enabling New SaaS Strategies with AWS PrivateLink.