Triển khai kết nối API tại chỗ lightweight bằng cách sử dụng proxy lưu lượng đảo ngược

Bài đăng này sẽ khám phá việc sử dụng proxy đảo ngược ứng dụng nhẹ như một giải pháp cho kết nối đa điểm hoặc đa cloud, kết nối cấp API cho các trường hợp AWS Direct Connect hoặc VPN có thể không thiết thực. Sau đó, chúng tôi sẽ trình bày một giải pháp mẫu và giải thích cách nó giải quyết những thách thức điển hình liên quan đến không gian này.

Xác định vấn đề

Các nhà cung cấp ISV lớn và các nhà cung cấp tích hợp thường cần có tích hợp cấp API giữa hệ thống dựa trên cloud trung tâm và một số API tại chỗ. Các trường hợp sử dụng có thể bao gồm từ sáng kiến tái cấu trúc/hiện đại hóa đến giao tiếp với các ứng dụng tại chỗ cũ, không có đường dẫn di chuyển trực tiếp lên cloud.

Cách tiếp cận điển hình là sử dụng VPN hoặc Direct Connect, vì chúng có thể mang lại lợi ích đáng kể về độ trễ và bảo mật. Tuy nhiên, chúng không phải lúc nào cũng thực tế trong các tình huống liên quan đến các hệ thống đa nguồn được triển khai bởi các nhóm hoặc các tổ chức khác nhau có thể có những ràng buộc đáng kể về ngân sách, quy trình hoặc thời hạn.

Giải pháp ý tưởng

Một tùy chọn giải quyết nhu cầu kết nối là proxy ứng dụng đảo ngược, có thể được triển khai dưới dạng tệp thực thi nhẹ trên chương trình phụ trợ tại chỗ. Tác nhân được triển khai cục bộ có thể giao tiếp với máy chủ proxy trên AWS bằng cách sử dụng mẫu giao tiếp ngược. Điều này có nghĩa là tác nhân sẽ thiết lập kết nối gửi đi tới proxy và nó cũng sẽ sử dụng kết nối đó để nhận các yêu cầu gửi đến. Hình 1 mô tả một kiến trúc mẫu sử dụng mẫu proxy đảo ngược sử dụng Amazon API Gateway.

Hình 1. Đảo ngược proxy ứng dụng

Ưu điểm của cách tiếp cận này bao gồm dễ triển khai (tác nhân thực thi thả vào) và -cấu hình. Vì proxy đảo ngược hướng kết nối ứng dụng bắt nguồn từ các máy chủ tại chỗ, tường lửa cục bộ không cần phải cấu hình lại để mở các cổng bổ sung cần thiết cho việc triển khai proxy truyền thống.

Hiện thực hoá giải pháp trên AWS

Chúng tôi đã xây dựng một giải pháp định tuyến lưu lượng truy cập mẫu dựa trên Inverting Proxy and Agent mã nguồn mở gốc của Ian Maddox, Jason Cooke và Omar Janjur. Giải pháp được viết bằng Go và tận dụng nhiều dịch vụ AWS để cung cấp thêm khả năng đo từ xa, bảo mật và khả năng phát hiện nhằm giải quyết các nhu cầu chung của khách hàng doanh nghiệp.

Giải pháp bao gồm một proxy đảo ngược và một tác nhân chuyển tiếp. Proxy đảo ngược được triển khai trên AWS dưới dạng tệp thực thi độc lập chạy trên Amazon Elastic Compute Cloud (EC2) và chịu trách nhiệm chuyển tiếp lưu lượng truy cập đến tác nhân. Tác nhân có thể được triển khai dưới dạng tệp nhị phân hoặc vùng chứa trong hệ thống tại chỗ mục tiêu.

Khi bắt đầu, tác nhân sẽ thiết lập kết nối gửi đi với ứng dụng máy chủ cục bộ và proxy. Sau khi được thiết lập, proxy sẽ sử dụng nó ngược lại để chuyển tiếp tất cả các yêu cầu của khách hàng đến thông qua tác nhân và đến ứng dụng phụ trợ. Kết nối được bảo mật bằng Transport Layer Security (TLS) để bảo vệ thông tin liên lạc giữa máy khách và proxy cũng như giữa tác nhân và ứng dụng phụ trợ.

Giải pháp này sử dụng một ID phụ trợ duy nhất và thẻ vai trò/người dùng IAM để xác định các máy chủ phụ trợ khác nhau và kiểm soát quyền truy cập vào các proxy. ID phụ trợ được chuyển dưới dạng tham số dòng lệnh cho tác nhân. Tác nhân kiểm tra tài khoản IAM hoặc vai trò IAM mà Amazon EC2 đang chạy đối với thẻ “AllowedBackends”. Thẻ chứa danh sách ID phụ trợ được phân tách bằng dấu phẩy mà tác nhân được phép truy cập. Kết nối chỉ được thiết lập nếu ID phụ trợ được cung cấp khớp với một trong các giá trị trong danh sách được phân tách bằng dấu phẩy.

Giải pháp hỗ trợ tích hợp gốc với AWS Cloud Map để cho phép tự động phát hiện các điểm cuối API từ xa. Khi bắt đầu và sau khi các kiểm tra kiểm soát truy cập IAM được xác thực thành công, tác nhân có thể đăng ký các điểm cuối phụ trợ trong Bản đồ đám mây AWS bằng cách sử dụng tên dịch vụ được cung cấp và ID vùng tên dịch vụ.

Tác nhân proxy đảo ngược có thể thu thập phép đo từ xa và tự động xuất bản nó lên Amazon CloudWatch bằng cách sử dụng không gian tên tùy chỉnh. Điều này bao gồm số lượng và mã phản hồi HTTP từ ứng dụng máy chủ được ID phụ trợ tổng hợp.

Để có danh sách đầy đủ các tùy chọn, tính năng và cấu hình được hỗ trợ, hãy sử dụng tham số dòng lệnh –help  với cả tệp thực thi tác nhân và proxy.

Cho phép triển khai proxy có tính linh hoạt cao

Đối với các tình huống của môi trường production yêu cầu tính sẵn sàng cao, hãy triển khai một cặp proxy đảo ngược kết nối với một cặp tác nhân được triển khai trên các phiên bản EC2 riêng biệt. Sau đó, toàn bộ cấu hình được đặt sau Application Load Balancer để cung cấp một điểm duy nhất để truy cập, cân bằng tải và kiểm tra tình trạng. Hình 2 cho thấy một thiết lập có khả năng linh hoạt cao cho các khối lượng công việc quan trọng.

Hình 2. Sơ đồ triển khai có tính linh hoạt cao cho proxy đảo ngược

Ngoài ra, đối với khối lượng công việc của môi trường production trong đời thực xử lý dữ liệu nhạy cảm, chúng tôi khuyên bạn nên làm theo các best practices về bảo mật và khả năng phục hồi cho Amazon EC2.

Triển khai và vận hành giải pháp

Giải pháp bao gồm một ứng dụng máy chủ Node.js demo đơn giản để mô phỏng kết nối với proxy đảo ngược. Một nhóm bảo mật hạn chế sẽ được sử dụng để mô phỏng trung tâm dữ liệu tại chỗ.

Các bước triển khai:

1. Tạo máy chủ Amazon EC2 “backend” bằng Linux 2, free-tier AMI. Đảm bảo rằng Cổng 443 (cổng đến cho ứng dụng máy chủ mẫu) bị chặn truy cập từ bên ngoài thông qua nhóm bảo mật thích hợp.

2. Kết nối bằng cách sử dụng SSH vào các bản cập nhật chạy máy chủ đích.

sudo yum update -y

3. Cài đặt các công cụ phát triển và phần phụ thuộc:

sudo yum groupinstall "Development Tools" -y

4. Cài đặt Golang:

sudo yum install golang -y

5. Cài đặt node.js.

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

. ~/.nvm/nvm.sh

nvm install 16

6. Sao chép inverting proxy GitHub repository sang phiên bản EC2 “backend”.

7. Từ thư mục inverting-proxy, xây dựng ứng dụng bằng cách chạy:

mkdir /home/ec2-user/inverting-proxy/bin

export GOPATH=/home/ec2-user/inverting-proxy/bin

make

8. Từ thư mục /simple-server, chạy ứng dụng mẫu – appTLS trong background (xem hướng dẫn bên dưới). Lưu ý: để kích hoạt SSL, bạn sẽ cần tạo khóa mã hóa và các tệp chứng thực (server.crt và server.key) và đặt chúng trong thư mục máy chủ đơn giản.

npm install

node appTLS &

Example app listening at https://localhost:443

Xác nhận rằng ứng dụng đang chạy bằng cách sử dụng ps -ef | grep node:

ec2-user  1700 30669  0 19:45 pts/0 00:00:00 node appTLS

ec2-user  1708 30669  0 19:45 pts/0 00:00:00 grep --color=auto node

9. Đối với máy chủ Amazon EC2 phụ trợ, hãy điều hướng đến cài đặt bảo mật của Amazon EC2 và tạo vai trò IAM cho ví dụ. Giữ quyền mặc định và thêm thẻ “AllowedBackends” với ID phụ trợ làm giá trị thẻ (ID phụ trợ có thể là bất kỳ chuỗi nào phù hợp với thông số ID phụ trợ ở Bước 13).

10. Tạo máy chủ Amazon EC2 proxy bằng Linux AMI trong mạng con công cộng và kết nối bằng cách sử dụng SSH trong Amazon EC2 khi trực tuyến. Sao chép nội dung của thư mục bin từ tác nhân EC2 hoặc sao chép kho lưu trữ và làm theo hướng dẫn xây dựng ở trên (Bước 2-7).

Lưu ý: tác nhân sẽ thiết lập kết nối đi đến proxy; mở cổng thích hợp (443) trong nhóm bảo mật Amazon EC2 proxy. Máy chủ proxy cần có thể truy cập được bằng Amazon EC2 phụ trợ và máy trạm khách của bạn, vì bạn sẽ sử dụng trình duyệt cục bộ của mình để kiểm tra ứng dụng.

11. Để kích hoạt mã hóa TLS trên các kết nối đến proxy, bạn sẽ cần tạo và tải lên chứng chỉ và khóa cá nhân (server.crt và server.key) vào thư mục bin của triển khai proxy.

12. Điều hướng đến thư mục /bin của proxy đảo ngược và khởi động proxy bằng cách chạy:

sudo ./proxy –port 443 -tls

2021/12/19 19:56:46 Listening on [::]:443

13. Sử dụng SSH để kết nối với máy chủ Amazon EC2 phụ trợ và định cấu hình tác nhân proxy đảo ngược. Điều hướng đến thư mục /bin trong kho lưu trữ được sao chép và chạy lệnh bên dưới, thay thế các chuỗi chữ hoa bằng các giá trị thích hợp.

Lưu ý: dấu gạch chéo bắt buộc sau URL DNS proxy.

./proxy-forwarding-agent -proxy https://YOUR_PROXYSERVER_PUBLIC_DNS/ -backend SampleBackend-host localhost:443 -scheme https

14. Sử dụng trình duyệt cục bộ của bạn để điều hướng đến DNS công cộng của máy chủ proxy (https://YOUR_PROXYSERVER_PUBLIC_DNS). Bạn sẽ thấy phản hồi sau từ ứng dụng phụ trợ mẫu của mình:

Hello World!

Kết luận

Proverting proxy là một mẫu linh hoạt, nhẹ có thể được sử dụng để định tuyến lưu lượng API trong các tình huống hỗn hợp và đa đám mây không tầm thường không yêu cầu kết nối có độ trễ thấp. Nó cũng có thể được sử dụng để bảo mật các điểm cuối hiện có, cấu trúc lại các ứng dụng cũ và cho phép hiển thị các phần phụ trợ kế thừa. Giải pháp mẫu mà chúng tôi đã trình bày chi tiết có thể được tùy chỉnh để tạo ra các triển khai độc đáo và cung cấp tích hợp đường cơ sở bên ngoài với nhiều dịch vụ AWS.


Bài được dịch từ bài viết trên AWS Blogs, bạn có thể xem bài viết gốc tại đây.

Leave a comment