2016-12-21 17 views
5

Có thể đây là một câu hỏi lạ (Tôi mới sử dụng Microservices). Nhưng tôi đang tìm một số thông tin về cách tiến hành với điều này. Không cần phải là mùa xuân cụ thể, nhưng đó là khuôn khổ tôi đang sử dụng tại thời điểm này.Không cho phép cuộc gọi trực tiếp tới Microservices. Chỉ cho phép thông qua API Gateway

Ví dụ: phép nói rằng chúng ta có hai Microservices

a) http://myurlfortesting.com:8085/api/rest/serviceone

b) http://myurlfortesting.com:8090/api/rest/servicetwo

và chúng tôi đã thiết lập mùa xuân Zuul (đóng vai trò như các API Gateway) với các quy tắc sau đó trở đi cuộc gọi đến:

/phần còn lại/một ->http://myurlfortesting.com:8085/api/rest/serviceone

/phần còn lại/hai ->http://myurlfortesting.com:8090/api/rest/servicetwo

Câu hỏi đặt ra ... Có cách nào để ngăn chặn người dùng truy cập trực tiếp các dịch vụ nêu tại A và B (chỉ cho phép những người đi qua API Gateway)?

Điều này có thể được thực hiện với Springs Zuul (Đóng vai trò là Cổng API) bằng cách thiết lập một số bộ lọc bổ sung hoặc chúng tôi thiết lập bộ lọc trong các điểm cuối của Microservices không?

Thậm chí muốn biết có cách nào thậm chí không xử lý các cuộc gọi trực tiếp trên các điểm cuối Microservices không đi qua API Gateway hay không.

Có thể điều này được giải quyết với các quy tắc cụ thể của máy chủ và không liên quan gì đến Spring?

Rất cám ơn,

/D

+0

Tôi sẽ xem xét thiết lập tường lửa. – Henry

+0

Điểm cuối Zuul của bạn có đang chạy trên một cổng khác trên máy chủ không? Giả sử rằng bạn có tường lửa tại chỗ, bạn có thể hạn chế lưu lượng gửi đến máy chủ đến các cổng mà các điểm cuối Zuul của bạn được tiếp xúc và không cho phép bất kỳ ai truy cập trực tiếp vào cổng của microservices. –

+0

@RiaanNel Điểm cuối đang chạy trên một cổng khác trên máy chủ. Điều này có thể được thực hiện với một số cách khác (không có tường lửa) Lập trình không? – Dimman

Trả lời

3

Giả sử bạn có tường lửa tại chỗ, bạn có thể hạn chế lưu lượng gửi đến máy chủ đến cổng mà điểm cuối Zuul của bạn được hiển thị và không cho phép bất kỳ ai truy cập trực tiếp vào cổng của microservices.

Nếu bạn muốn tránh thực hiện tuyến đường tường lửa, bạn có thể buộc các điểm cuối kiểm tra tiêu đề HTTP cụ thể hoặc thứ gì đó được thiết lập bởi Zuul trước khi chuyển tiếp yêu cầu, nhưng điều đó sẽ bị hack và dễ phá vỡ. Dựa trên kinh nghiệm quá khứ của tôi, cách "đúng" sẽ là thực hiện điều này thông qua tường lửa. Ứng dụng của bạn phải chịu trách nhiệm đối phó với các yêu cầu. Tường lửa của bạn phải chịu trách nhiệm quyết định ai có thể đạt điểm cuối cụ thể.

0

Chúng tôi đang sử dụng jHipster-Gateway cho cùng một mục đích:

Look HERE cho kiến ​​trúc chi tiết hơn.

+0

Đã xem nhanh, không thấy cách nó sẽ giải quyết được việc chặn các cuộc gọi điểm cuối trực tiếp của tôi. – Dimman

2

Nói chung, tình huống như vậy được xử lý bằng cách triển khai máy chủ OAuth thích hợp trong đó chỉ cổng API của bạn sẽ xử lý xác thực mã thông báo. Mọi cuộc gọi trực tiếp tới microservice sẽ không có trao đổi mã thông báo thích hợp và do đó các yêu cầu sẽ bị hủy bỏ.

Trong trường hợp, bạn đã triển khai các dịch vụ vi mô của mình trên bất kỳ đám mây nào thì bạn có thể đạt được điều này bằng cách lộ lộ các tuyến đến chỉ cổng API. Và có, chặn tường lửa, danh sách trắng IP là một số cách khác để hạn chế quyền truy cập vào các dịch vụ nhỏ của bạn.

Các vấn đề liên quan