MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách bảo mật cơ sở dữ liệu nguồn mở của bạn với ClusterControl

Bảo mật là một trong những khía cạnh quan trọng nhất của việc chạy cơ sở dữ liệu. Cho dù bạn là nhà phát triển hay DBA, nếu bạn đang quản lý cơ sở dữ liệu, bạn có trách nhiệm bảo vệ dữ liệu của mình và bảo vệ dữ liệu khỏi bất kỳ hình thức truy cập trái phép nào. Thực tế đáng tiếc là nhiều tổ chức không bảo vệ dữ liệu của họ, như chúng ta đã thấy từ làn sóng tấn công ransomware MongoDB mới vào tháng 9 năm 2017. Trước đó, chúng tôi đã xuất bản một blog về cách bảo mật cơ sở dữ liệu MongoDB.

Trong bài đăng trên blog này, chúng tôi sẽ xem xét cách bảo mật cơ sở dữ liệu của bạn bằng ClusterControl. Tất cả các tính năng được mô tả ở đây đều có trong phiên bản 1.5.1 của ClusterControl (phát hành vào ngày 23 tháng 12 năm 2017). Xin lưu ý rằng một số tính năng chỉ có sẵn cho một số loại cơ sở dữ liệu nhất định.

Mã hóa sao lưu

ClusterControl 1.5.1 đã giới thiệu một tính năng mới được gọi là mã hóa sao lưu. Tất cả các bản sao lưu được mã hóa đều được đánh dấu bằng biểu tượng ổ khóa bên cạnh:

Bạn có thể sử dụng tính năng này trên tất cả các phương pháp sao lưu (mysqldump, xtrabackup, mongodump, pg_dump) được hỗ trợ bởi ClusterControl. Để bật mã hóa, chỉ cần bật công tắc "Bật mã hóa" khi lên lịch hoặc tạo bản sao lưu. ClusterControl tự động tạo khóa để mã hóa bản sao lưu. Nó sử dụng thuật toán mã hóa AES-256 (CBC) và thực hiện mã hóa ngay lập tức trên máy chủ mục tiêu. Lệnh sau đây cho thấy một ví dụ về cách ClusterControl thực hiện sao lưu mysqldump:

$ mysqldump --defaults-file=/etc/my.cnf --flush-privileges --hex-blob --opt --no-create-info --no-data --triggers --routines --events --single-transaction --skip-comments --skip-lock-tables --skip-add-locks --databases db1 | gzip -6 -c | openssl enc -aes-256-cbc -pass file:/var/tmp/cmon-094508-e0bc6ad658e88d93.tmp | socat - TCP4:192.168.55.170:9999'

Bạn sẽ gặp lỗi sau nếu bạn cố gắng giải nén một bản sao lưu được mã hóa mà không giải mã nó trước bằng khóa thích hợp:

$ gunzip mysqldump_2018-01-03_175727_data.sql.gz
gzip: mysqldump_2018-01-03_175727_data.sql.gz: not in gzip format

Khóa được lưu trữ bên trong cơ sở dữ liệu ClusterControl và có thể được truy xuất từ ​​tệp cmon_backup.metadata cho một bộ sao lưu cụ thể. Nó sẽ được ClusterControl sử dụng khi thực hiện khôi phục. Mã hóa các bản sao lưu rất được khuyến khích, đặc biệt khi bạn muốn bảo mật các bản sao lưu của mình bên ngoài trang web như lưu trữ chúng trên đám mây.

Mã hóa máy khách-máy chủ MySQL / PostgreSQL

Ngoài việc làm theo các bước bảo mật được khuyến nghị trong quá trình triển khai, bạn có thể tăng độ tin cậy của dịch vụ cơ sở dữ liệu của mình bằng cách sử dụng mã hóa SSL máy khách-máy chủ. Sử dụng ClusterControl, bạn có thể thực hiện thao tác này với thao tác đơn giản và nhấp chuột:

Sau đó, bạn có thể truy xuất các khóa và chứng chỉ đã tạo trực tiếp từ máy chủ ClusterControl trong / var / lib / cmon / ca đường dẫn để thiết lập kết nối an toàn với các máy khách cơ sở dữ liệu. Tất cả các khóa và chứng chỉ có thể được quản lý trực tiếp trong Quản lý khóa, như được mô tả ở dưới.

Mã hóa sao chép cơ sở dữ liệu

Lưu lượng sao chép trong Cụm Galera có thể được kích hoạt chỉ với một cú nhấp chuột. ClusterControl sử dụng khóa mặc định 2048-bit và chứng chỉ được tạo trên nút ClusterControl, được chuyển đến tất cả các nút Galera:

Khởi động lại cụm là cần thiết. ClusterControl sẽ thực hiện thao tác khởi động lại theo chu kỳ, thực hiện từng nút một. Bạn sẽ thấy biểu tượng ổ khóa màu xanh lục bên cạnh máy chủ cơ sở dữ liệu (Galera cho biết mã hóa Bản sao Galera, trong khi SSL cho biết mã hóa máy khách-máy chủ) trong lưới Máy chủ của trang Tổng quan sau khi mã hóa được bật:

Tất cả các khóa và chứng chỉ có thể được quản lý trực tiếp trong Quản lý khóa, như được mô tả ở dưới.

Quản lý khóa

Tất cả các khóa và chứng chỉ đã tạo có thể được quản lý trực tiếp từ giao diện người dùng ClusterControl. Quản lý khóa cho phép bạn quản lý chứng chỉ SSL và khóa có thể được cấp phép trên các cụm của bạn:

Nếu chứng chỉ đã hết hạn, bạn có thể chỉ cần sử dụng giao diện người dùng để tạo chứng chỉ mới với khóa thích hợp và Tổ chức phát hành chứng chỉ (CA) hoặc nhập khóa và chứng chỉ hiện có vào máy chủ ClusterControl.

Cố vấn An ninh

Cố vấn là các chương trình nhỏ chạy trong ClusterControl. Họ thực hiện các nhiệm vụ cụ thể và đưa ra lời khuyên về cách giải quyết các vấn đề trong các lĩnh vực như hiệu suất, bảo mật, quản lý nhật ký, cấu hình, không gian lưu trữ và các lĩnh vực khác. Mỗi cố vấn có thể được lập lịch giống như một công việc cron và chạy như một tệp thực thi độc lập trong giao diện người dùng ClusterControl. Nó cũng có thể được chạy thông qua máy khách dòng lệnh ClusterControl 's9s'.

ClusterControl cho phép hai cố vấn bảo mật cho các hệ thống dựa trên MySQL:

  • Truy cập từ bất kỳ máy chủ nào ('%') - Xác định tất cả người dùng sử dụng máy chủ ký tự đại diện từ bảng hệ thống mysql và cho phép bạn kiểm soát nhiều hơn những máy chủ nào có thể kết nối với máy chủ.
  • Kiểm tra số lượng tài khoản không có mật khẩu - Xác định tất cả người dùng không có mật khẩu trong bảng hệ thống mysql.

Đối với MongoDB, chúng tôi có các cố vấn sau:

  • Đã bật xác thực MongoDB - Kiểm tra xem phiên bản MongoDB có đang chạy với chế độ xác thực được bật hay không.
  • Kiểm tra ủy quyền - Kiểm tra xem người dùng MongoDB có được ủy quyền với vai trò quá dễ dãi để kiểm soát quyền truy cập hay không.

Để biết thêm chi tiết về cách ClusterControl thực hiện kiểm tra bảo mật, bạn có thể xem mã nguồn giống JavaScript của cố vấn trong Manage -> Developer Studio . Bạn có thể xem kết quả thực hiện từ trang Cố vấn:

Nhiều giao diện mạng

Có nhiều NIC trên máy chủ cơ sở dữ liệu cho phép bạn tách lưu lượng cơ sở dữ liệu khỏi lưu lượng quản lý. Một mạng được sử dụng bởi các nút cơ sở dữ liệu để giao tiếp với nhau và mạng này không được tiếp xúc với bất kỳ mạng công cộng nào. Mạng còn lại được ClusterControl sử dụng cho mục đích quản lý. ClusterControl có thể triển khai một thiết lập đa mạng như vậy. Hãy xem xét sơ đồ kiến ​​trúc sau:

Để nhập cụm cơ sở dữ liệu trên vào ClusterControl, người ta sẽ chỉ định địa chỉ IP chính của máy chủ cơ sở dữ liệu. Sau đó, có thể chọn mạng quản lý cũng như mạng dữ liệu:

ClusterControl cũng có thể hoạt động trong môi trường không cần truy cập Internet, với cơ sở dữ liệu được cách ly hoàn toàn khỏi mạng công cộng. Phần lớn các tính năng sẽ hoạt động tốt. Nếu máy chủ lưu trữ ClusterControl được cấu hình với Internet, nó cũng có khả năng sao chép kho lưu trữ của nhà cung cấp cơ sở dữ liệu cho các máy chủ cơ sở dữ liệu không có internet. Chỉ cần đi tới Cài đặt (menu trên cùng) -> Kho lưu trữ -> Tạo Kho lưu trữ Mới và đặt các tùy chọn để phù hợp với môi trường máy chủ cơ sở dữ liệu mục tiêu:

Quá trình phản chiếu có thể mất khoảng 10 đến 20 phút tùy thuộc vào kết nối internet, bạn sẽ thấy mục mới trong danh sách sau này. Sau đó, bạn có thể chọn kho lưu trữ này thay thế khi mở rộng quy mô hoặc triển khai một cụm mới mà không cần máy chủ cơ sở dữ liệu phải có bất kỳ kết nối Internet nào (lưu ý rằng cả kho lưu trữ ngoại tuyến của hệ điều hành).

Quản lý người dùng MySQL

Hệ thống đặc quyền MySQL đảm bảo rằng tất cả người dùng chỉ có thể thực hiện các hoạt động mà họ được phép. Việc cấp quyền là rất quan trọng vì bạn không muốn cấp cho tất cả người dùng quyền truy cập hoàn toàn vào cơ sở dữ liệu của mình, nhưng bạn cần người dùng có các quyền cần thiết để chạy các truy vấn và thực hiện các tác vụ hàng ngày.

ClusterControl cung cấp một giao diện người dùng tương tác để quản lý các đặc quyền và lược đồ cơ sở dữ liệu. Nó hợp nhất các tài khoản trên tất cả các máy chủ MySQL trong cụm và đơn giản hóa quá trình cấp. Bạn có thể dễ dàng hình dung người dùng cơ sở dữ liệu, vì vậy bạn tránh mắc lỗi.

Như bạn có thể thấy trong ảnh chụp màn hình ở trên, ClusterControl đã xóa bỏ các đặc quyền không cần thiết nếu bạn chỉ muốn cấp cho người dùng một cơ sở dữ liệu (shopdb). "Yêu cầu SSL?" chỉ được bật nếu mã hóa SSL máy khách / máy chủ được bật trong khi các hộp kiểm đặc quyền quản trị bị vô hiệu hóa hoàn toàn nếu một cơ sở dữ liệu cụ thể được xác định. Bạn cũng có thể kiểm tra câu lệnh GRANT đã tạo ở cuối trình hướng dẫn, để xem câu lệnh mà ClusterControl sẽ thực thi để tạo người dùng này. Trình trợ giúp này trông khá đơn giản, nhưng việc tạo người dùng và cấp đặc quyền có thể dễ xảy ra lỗi.

ClusterControl cũng cung cấp danh sách người dùng không hoạt động cho tất cả các nút cơ sở dữ liệu trong cụm, hiển thị các tài khoản chưa được sử dụng kể từ lần khởi động lại máy chủ cuối cùng:

Điều này cảnh báo cho quản trị viên về những tài khoản không cần thiết đang tồn tại và điều đó có thể gây hại cho máy chủ. Bước tiếp theo là xác minh xem các tài khoản không còn hoạt động hay không và bạn có thể chỉ cần sử dụng tùy chọn "Bỏ người dùng đã chọn" để xóa chúng. Đảm bảo rằng bạn có đủ hoạt động cơ sở dữ liệu để đảm bảo danh sách được tạo bởi ClusterControl là chính xác. Thời gian hoạt động của máy chủ càng lâu càng tốt.

Luôn cập nhật

Để sử dụng trong sản xuất, bạn rất nên cài đặt các gói liên quan đến cơ sở dữ liệu từ kho lưu trữ của nhà cung cấp. Đừng dựa vào kho lưu trữ hệ điều hành mặc định, nơi các gói thường đã lỗi thời. Nếu bạn đang chạy trong môi trường cụm như Galera Cluster hoặc thậm chí MySQL Replication, bạn luôn có lựa chọn vá hệ thống với thời gian chết tối thiểu.

ClusterControl hỗ trợ nâng cấp luân phiên phiên bản nhỏ tự động cho MySQL / MariaDB chỉ với một cú nhấp chuột. Chỉ cần đi tới Quản lý -> Nâng cấp -> Nâng cấp và chọn phiên bản chính thích hợp cho cụm đang chạy của bạn. Sau đó, ClusterControl sẽ thực hiện nâng cấp, trên một nút tại một thời điểm. Nút sẽ bị dừng, sau đó phần mềm sẽ được cập nhật và sau đó nút sẽ được khởi động lại. Nếu một nút không nâng cấp được, quá trình nâng cấp sẽ bị hủy bỏ và quản trị viên sẽ được thông báo. Nâng cấp chỉ nên được thực hiện khi có ít lưu lượng truy cập nhất có thể trên cụm.

Các nâng cấp phiên bản chính (ví dụ:từ MySQL 5.6 lên MySQL 5.7) cố ý không được tự động hóa. Các nâng cấp lớn thường yêu cầu gỡ cài đặt các gói hiện có, đây là một nhiệm vụ rủi ro để tự động hóa. Việc lập kế hoạch và kiểm tra cẩn thận là cần thiết cho những loại nâng cấp như vậy.

Bảo mật cơ sở dữ liệu là một khía cạnh quan trọng của việc vận hành cơ sở dữ liệu của bạn trong quá trình sản xuất. Từ tất cả các sự cố mà chúng tôi thường xuyên đọc được trên tin tức (và có lẽ còn nhiều sự cố khác không được công khai), rõ ràng là có những nhóm đang bận rộn với mục đích xấu. Vì vậy, hãy đảm bảo rằng cơ sở dữ liệu của bạn được bảo vệ tốt.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $ không phải Nhà điều hành đường ống tổng hợp

  2. Trường hợp cho chỉ số băm MongoDB

  3. Cập nhật tài liệu con chứa trong một mảng có trong tài liệu MongoDB

  4. Tổng hợp MongoDB với trình điều khiển Java

  5. Về MongoDB, Tại sao chúng tôi sử dụng nó? Thuật ngữ và triển khai của MongoDB