Thay vì tập trung vào thuật ngữ công nghệ, sẽ cung cấp câu trả lời khái quát và sử dụng thuật ngữ container container.
Các container chỉ chạy những gì nó phải chạy, giả sử mọi thứ không xác định là không đáng tin cậy, vì vậy những gì chỉ tồn tại trong container chỉ trong vòng đời của container, vì vậy sửa đổi mã trong cơ sở dữ liệu để kiểm tra sẽ là cách tiếp cận tương tự trong VM (hộp cát) hoặc container (docker) và sự khác biệt lớn nhất là mức tiêu thụ tài nguyên kn và thời gian để cung cấp VM so với việc quay các container / pod trong vài giây cho ứng dụng.
Thêm chi tiết:
Part1_ Từ quan điểm ứng dụng
Các container rất quan trọng khi đến với thế giới khoa học dữ liệu từ các điểm sau:
Ở đây có Cloudera với Cloudera Data Science Workbench và Anaconda với Anaconda Enterprise, cả hai đều sử dụng container để có thể mang lại kết quả nhanh chóng cho doanh nghiệp và triển khai dễ dàng các mô hình từ dev đến QA và cuối cùng là sản xuất.
Tại sao tuyên bố cuối cùng quan trọng? là có tính di động từ dev đến prod mà không có bất kỳ thay đổi nào đối với môi trường và không có chi phí DevOps để vận hành.
Part2_ Từ quan điểm bảo mật
Một ưu điểm bảo mật nổi tiếng là bảo mật hệ điều hành máy chủ tách biệt với vùng chứa, nghĩa là được vá tách rời, vá hệ điều hành máy chủ sẽ không ảnh hưởng đến ứng dụng được chứa của bạn (chúng tôi gặp sự cố bao nhiêu lần khi chúng tôi vá hệ điều hành và ảnh hưởng đến ứng dụng và dịch vụ trong HĐH đó (đường dẫn, cổng, dịch vụ, v.v.)?
- Ví dụ: nếu bạn có mã độc
library
trên ứng dụng / mã của mình thì phần mềm độc hại đó sẽ chỉ tồn tại trên vùng chứa đó trong thời gian container tồn tại, các container sẽ chạy như điểm cuối mọi lúc và không thấy trường hợp nào phát tán phần mềm độc hại vào mạng
- giám sát một nút chứa là mạnh mẽ và bạn có thể đặt tiện ích bổ sung hoặc dịch vụ để giám sát các hành vi của ứng dụng hoặc nút và sẽ chỉ sao chép nút / vùng chứa mới và chỉ dựa trên tệp cấu hình.
So sánh VM với container: Với container là một câu chuyện khác, bạn hãy quan tâm đến HĐH tách biệt với container (container là nhiệm vụ riêng khi bảo mật được đặt ra).
Docker bảo mật cung cấp thông tin chi tiết của các điểm bảo mật chính.
Các tiêu chuẩn và tuân thủ Docker cung cấp một danh sách đầy đủ các tuân thủ và tiêu chuẩn bảo mật có sẵn cho các container.
"Docker container với một hồ sơ seccomp được chế tạo tốt (chặn các cuộc gọi hệ thống không mong muốn) cung cấp bảo mật gần tương đương với một trình ảo hóa."
Chia sẻ thư mục . Với các thùng chứa, bạn có thể chia sẻ thư mục bằng cách thiết lập gắn kết được chia sẻ và vì Docker / kernel thực thi các quyền tệp được sử dụng bởi các container, hệ thống khách không thể bỏ qua các hạn chế đó. Điều này rất quan trọng đối với người dùng và ứng dụng Khoa học dữ liệu vì trong công ty được sử dụng hầu hết dữ liệu nhạy cảm / bị hạn chế và có nhiều lớp bảo mật hoặc hạn chế, một cách tiếp cận để giải quyết vấn đề bảo mật này là sử dụng VDI hoặc VM với nhóm AD tại chỗ để hạn chế / chia sẻ quyền truy cập dữ liệu và trở nên có vấn đề và tốn kém để duy trì và phân bổ tài nguyên.
Khi bắt đầu gỡ lỗi các ứng dụng hoặc HĐH với tất cả các dịch vụ và nhật ký được tạo, tôi nghĩ rằng các container đang chiến thắng và phát triển theo cách tiếp cận NLP: Một tiện ích xử lý ngôn ngữ tự nhiên thử nghiệm (NLP) cũng được đưa vào, để đọc lại các tường thuật bảo mật.
Ở đây tôi sẽ trích dẫn Jianing Guo từ Google: VM được cập nhật và bảo mật đúng cách cung cấp cách ly mức quy trình áp dụng cho cả các ứng dụng thông thường cũng như khối lượng công việc của container và khách hàng có thể sử dụng các mô-đun bảo mật Linux để hạn chế hơn nữa bề mặt tấn công của bộ chứa. Ví dụ, Kubernetes, một hệ thống điều phối container cấp sản xuất nguồn mở, hỗ trợ tích hợp riêng với AppArmor, Seccomp và SELinux để áp đặt các hạn chế đối với các tòa nhà tiếp xúc với các container. Kubernetes cũng cung cấp công cụ bổ sung để hỗ trợ thêm cách ly container. PodSecurityPolicy cho phép khách hàng áp đặt các hạn chế đối với những gì khối lượng công việc có thể làm hoặc truy cập ở cấp độ Nút. Đối với khối lượng công việc đặc biệt nhạy cảm đòi hỏi cách ly mức VM,
Trên hết, cụm kubernetes có các tính năng bảo mật bổ sung:
- Sử dụng Bảo mật lớp vận chuyển (TLS) cho tất cả lưu lượng API
- Xác thực API
- Ủy quyền API
- Dễ dàng khắc phục các lỗi bảo mật và giảm thiểu tác động đến ứng dụng / môi trường so với VM hoặc kim loại Bare chuyên dụng.
Part3_ CIS điểm chuẩn cho container cứng : Docker & Kubernetes
.
Bước đầu tiên làm cho các container an toàn hơn là chuẩn bị máy chủ được lên kế hoạch sử dụng để thực hiện các khối lượng công việc có chứa. Bằng cách đảm bảo máy chủ chứa container và tuân theo các thực tiễn tốt nhất về bảo mật cơ sở hạ tầng sẽ xây dựng một nền tảng vững chắc và an toàn để thực hiện khối lượng công việc được đóng gói.
Luôn cập nhật về cập nhật Docker, lỗ hổng trong phần mềm.
Có một thư mục dành riêng cho các tệp liên quan đến Docker và phân bổ dung lượng vừa đủ để xem các container chạy (đường dẫn mặc định /var/lib/docker
nhưng thay đổi thành điểm gắn kết khác và giám sát ở cấp độ HĐH bằng cách sử dụng auditd
hoặc aide services
cho bất kỳ thay đổi hoặc kích thước / khối lượng công việc không mong muốn nào, hãy giữ nhật ký và cấu hình theo nhu cầu.
Lưu ý: Phần tốt nhất step 2
là với máy ảo, bạn cần theo dõi nhiều vị trí hơn cho dự án khoa học dữ liệu của mình (thư viện ở vị trí khác nhau, nhiều phiên bản gói, vị trí / đường dẫn cho ngay cả python, chạy cron jobs or systemd
để đảm bảo một số quy trình chạy, ghi nhật ký tất cả các bản ghi vv nhưng với các thùng chứa là một điểm duy nhất cho tất cả các công việc này để chạy và chỉ giám sát một đường dẫn thay vì nhiều đường dẫn).
Xác minh tất cả thời gian người dùng vào docker
nhóm để bạn ngăn chặn unauthorized elevated access
vào hệ thống (Docker cho phép chia sẻ thư mục giữa máy chủ Docker và bộ chứa khách mà không giới hạn quyền truy cập của bộ chứa), vì vậy hãy xóa mọi người dùng không tin cậy khỏi docker
nhóm và không tạo một ánh xạ của các thư mục nhạy cảm frim máy chủ để khối lượng container. Ở đây tôi sẽ nói sử dụng một người dùng riêng cho việc cài đặt và các tác vụ trong thùng chứa cụ thể "KHÔNG BAO GIỜ sử dụng root
cho các container chạy chỉ dành riêng PID
cho nhiệm vụ này (sẽ có quyền truy cập cao nhưng sẽ dựa trên nhiệm vụ, tôi sử dụng trọng lực cho cụm và khi cài đặt Tôi KHÔNG BAO GIỜ sử dụng root).
Kiểm tra tất cả các hoạt động của Docker daemon (lưu ý rằng sẽ chiếm không gian các bản ghi trong "thế giới" được đóng gói, vì vậy hãy chuẩn bị phân vùng riêng với không gian phù hợp để giữ các bản ghi và cấu hình cần thiết (xoay và định kỳ để lưu trữ các bản ghi).
Kiểm tra tất cả các tệp Docker và docker.service, trong vv, var và những gì khác có thể áp dụng được.
Hạn chế tất cả các giao tiếp giữa các container, Liên kết các container cụ thể với nhau cần giao tiếp (tốt nhất sẽ là tạo một mạng tùy chỉnh và chỉ tham gia các container cần giao tiếp với mạng tùy chỉnh đó). Cách tiếp cận cứng này sẽ ngăn chặn việc tiết lộ thông tin ngoài ý muốn và không mong muốn cho các container khác.
Tất cả các ứng dụng trong cơ sở hạ tầng được đóng gói phải được định cấu hình hoặc ít nhất là phải có ứng dụng Encryp All Sensitive Information
(điều này rất quan trọng đối với Nhà khoa học dữ liệu vì hầu hết thời gian chúng tôi đăng nhập vào nền tảng để lấy dữ liệu, kể cả sensitive data
cho công ty.
Có tùy chọn để mã hóa tất cả thông tin nhạy cảm trong quá cảnh.
Chỉ sử dụng cụ thể được phê duyệt Ports, Protocols and Services
, VM có bề mặt mở hơn khi chạy ứng dụng / dự án, với các thùng chứa bạn chỉ định những gì sẽ được sử dụng và không thắc mắc cho tất cả các cổng, protocls và dịch vụ khác chạy ở cấp độ HĐH để bảo vệ hoặc giám sát, điều này không giảm thiểu "attack surface"
.
Thông tin nhạy cảm được lưu trữ trên các hệ thống được mã hóa ở phần còn lại và không yêu cầu cơ chế xác thực thứ cấp, không được tích hợp vào hệ điều hành, để truy cập thông tin.
Không cho phép được kích hoạt Operating System Anti-Exploitation Features/Deploy Anti-Exploit Technologies
: chẳng hạn như Data Execution Prevention(DEP)
hoặc Address Space Layout Randomization (ASLR)
.
Sự khác biệt bảo mật đơn giản tốt nhất giữa VM và Container là: khi cập nhật hoặc chạy dự án, bạn không cần quyền truy cập nâng cao để thực hiện trên toàn bộ VM hoặc mạng, bạn chỉ chạy như một người dùng được xác định và nếu truy cập nâng cao thì chỉ tồn tại cho thời gian của container và không được chia sẻ trên máy chủ (ở đây có thư viện Khoa học dữ liệu cài đặt, cập nhật, thực thi mã dự án, v.v.).
Phần 4_ Thêm tài nguyên (trên đầu các liên kết được tích hợp trong Phần1-3) liên quan đến các bộ chứa cho Khoa học dữ liệu:
- Khoa học dữ liệu trên docker
- Conda, Docker và Kubernetes: Tương lai dựa trên nền tảng đám mây của khoa học dữ liệu (được tài trợ bởi Anaconda)
- https://devbloss.nvidia.com/making-data-science-teams-productive-kubernetes-rapids/
- Tại sao các nhà khoa học dữ liệu yêu Kubernetes
- Một cuốn sách rất hay để hiểu cách sử dụng docker cho Data Science: Docker for Data Science: Xây dựng cơ sở hạ tầng dữ liệu có thể mở rộng và mở rộng xung quanh máy chủ Notebook Jupyter .