Kéo cập nhật, không đẩy
Khi bạn mở rộng quy mô, sẽ không thể thực hiện cập nhật đẩy cho tất cả các sản phẩm của bạn.
- Bạn sẽ phải theo dõi từng khách hàng, mỗi người có thể có cấu hình tường lửa khác nhau.
- Bạn sẽ phải tạo các kết nối đến thông qua tường lửa của khách hàng, yêu cầu chuyển tiếp cổng hoặc một số cơ chế tương tự khác. Đây là một rủi ro bảo mật cho khách hàng của bạn
Thay vào đó, hãy để các sản phẩm của bạn 'kéo' các bản cập nhật của chúng theo định kỳ và sau đó bạn có thể thêm phía máy chủ dung lượng bổ sung khi bạn phát triển.
Làm sao?
Vấn đề này đã được giải quyết, như bạn đề xuất. Đây là một số cách tiếp cận tôi có thể nghĩ ra.
- bằng cách sử dụng apt : Sử dụng hệ thống apt tích hợp với danh sách nguồn và PPA tùy chỉnh. Làm cách nào để thiết lập PPA?
- Con: Trừ khi bạn sử dụng dịch vụ lưu trữ công cộng như launchpad, Thiết lập hệ thống đóng gói apt PPA + của riêng bạn không dành cho người yếu tim.
- bằng ssh : Tạo khóa công khai SSH cho mỗi sản phẩm và sau đó thêm khóa của thiết bị đó vào máy chủ cập nhật của bạn. Sau đó, chỉ cần có phần mềm của bạn
rsync
/ scp
các tập tin cần thiết.
- Con: Phải theo dõi (và sao lưu!) Tất cả các khóa công khai cho mỗi sản phẩm bạn gửi đi.
- Pro : An toàn hơn so với tải xuống thô, vì các thiết bị duy nhất có thể truy cập các bản cập nhật sẽ là những thiết bị có khóa công khai được cài đặt.
tải về thô + kiểm tra chữ ký :
- Đăng một tệp cập nhật đã ký ở đâu đó (Amazon S3, máy chủ FTP, v.v.)
- Sản phẩm của bạn kiểm tra định kỳ tệp cập nhật sẽ được thay đổi, sau đó tải xuống / xác minh chữ ký.
- Con : Tùy thuộc vào cách bạn triển khai điều này, các tệp có thể được truy cập công khai (điều này có thể giúp sản phẩm của bạn dễ dàng đảo ngược kỹ thuật và hack hơn)
ansible : Ansible là một công cụ tuyệt vời để quản lý các cấu hình hệ thống. Nó ở trong vương quốc của con rối / đầu bếp, nhưng không có tác nhân (sử dụng trăn) và được thiết kế để trở nên bình dị. Nếu việc triển khai phần mềm của bạn sẽ yêu cầu một tập lệnh bash phức tạp, tôi sẽ sử dụng một công cụ như thế này để làm cho nó ít phức tạp hơn để thực hiện các cập nhật của bạn.
Tất nhiên, có nhiều cách khác để làm điều này .. Nhưng nó đưa tôi đến một điểm quan trọng.
Ký / xác nhận cập nhật của bạn!
Bất kể bạn làm gì, bắt buộc bạn phải có một cơ chế để đảm bảo rằng bản cập nhật của bạn không bị giả mạo. Người dùng độc hại có thể mạo danh máy chủ cập nhật của bạn trong bất kỳ cấu hình nào ở trên. Nếu bạn không xác nhận bản cập nhật của bạn, hộp của bạn là nhiều dễ dàng hơn để hack và nhận được vào.
Một cách tốt để làm điều này là ký các tệp cập nhật của bạn. Bạn sẽ phải duy trì chứng chỉ (hoặc trả tiền cho ai đó để làm như vậy), nhưng bạn sẽ có thể cài đặt dấu vân tay của mình trên mỗi thiết bị trước khi bạn gửi chúng để họ có thể từ chối các bản cập nhật đã bị giả mạo.
Bảo mật vật lý
Tất nhiên, nếu ai đó có quyền truy cập vật lý vào việc triển khai của khách hàng, họ có thể dễ dàng chiếm lấy máy chủ. Nhưng ít nhất họ không thể tấn công các triển khai khác! Bảo mật vật lý có khả năng là trách nhiệm của khách hàng của bạn.
Nếu bạn có thể chờ đợi, hãy tưởng tượng điều gì sẽ xảy ra nếu bạn sử dụng mạng OpenVPN lớn để cập nhật ... Sau đó, họ có thể sử dụng máy chủ bị xâm nhập để tấn công mọi trường hợp trên VPN
Bảo vệ
Dù bạn làm gì, bảo mật cần được xây dựng ngay từ đầu. Đừng cắt góc ở đây - Cuối cùng bạn sẽ hối tiếc nếu bạn làm thế.
Bảo mật hoàn toàn hệ thống cập nhật này nằm ngoài phạm vi của bài đăng này và tôi thực sự khuyên bạn nên thuê một nhà tư vấn nếu bạn hoặc ai đó trong nhóm của bạn không am hiểu về lĩnh vực này. Nó đáng giá từng xu.