Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Bảo mật cơ sở dữ liệu - Mã hóa sao lưu trong quá trình vận chuyển &lúc nghỉ ngơi

Bảo mật dữ liệu của bạn là một trong những nhiệm vụ quan trọng nhất mà chúng ta nên ưu tiên. Sự xuất hiện của các quy định yêu cầu tuân thủ bảo mật như GDPR, HIPAA, PCI DSS hoặc PHI yêu cầu dữ liệu của bạn phải được lưu trữ an toàn hoặc truyền qua mạng.

Trong ClusterControl, chúng tôi đánh giá cao tầm quan trọng của bảo mật và cung cấp một số tính năng để bảo mật truy cập cơ sở dữ liệu và dữ liệu được lưu trữ. Một trong những cách đó là bảo mật các bản sao lưu cơ sở dữ liệu của bạn, cả khi ở chế độ nghỉ và khi đang chuyển. Đang chuyển tiếp là khi bản sao lưu đang được chuyển qua internet hoặc mạng từ nguồn đến đích của nó, trong khi ở chế độ nghỉ là khi dữ liệu được lưu trữ trên bộ lưu trữ liên tục. Trong blog này, chúng tôi sẽ chỉ cho bạn cách bạn có thể sử dụng ClusterControl để mã hóa dữ liệu sao lưu của bạn ở trạng thái nghỉ và khi đang chuyển.

Mã hóa trong quá trình vận chuyển

Khi quản lý các bản sao lưu thông qua ClusterControl, sử dụng mysqldump hoặc Percona Xtrabackup / Mariabackup được quản lý theo mặc định mà không có mã hóa khi truyền qua dây. Tuy nhiên, việc sử dụng TLS / SSL để mã hóa truyền dữ liệu được MySQL / MariaDB / Percona Server hỗ trợ, Percona Xtrabackup cũng vậy, cung cấp các tùy chọn SSL khi gọi lệnh.

ClusterControl mặc định bật SSL khi bạn triển khai một cụm nhưng nó không có quyền kiểm soát để chuyển đổi ngay lập tức và làm cho dữ liệu của bạn được mã hóa qua dây trong quá trình tạo bản sao lưu. Bạn có thể xem các blog trước đây của chúng tôi để biết cách tiếp cận thủ công bằng ClusterControl khi tạo cụm của bạn hoặc sử dụng cách cũ để thiết lập thủ công TLS / SSL trong MySQL.

Trong ClusterControl, khi bạn triển khai một cụm, bạn có thể kiểm tra tab bảo mật hoặc biểu tượng này .

Nhấp vào Nút sẽ cho phép bạn thay thế chứng chỉ hiện đang được ClusterControl sử dụng hoặc triển khai trong quá trình triển khai cụm. Bạn có thể kiểm tra blog này "Đã cập nhật:Trở thành DBA ClusterControl - Quản lý khóa SSL và mã hóa dữ liệu MySQL trong quá trình vận chuyển" mà chúng tôi đã chỉ ra cách chúng tôi xử lý các khóa. Về cơ bản, bạn có thể đi qua điều hướng bên trái của ClusterControl và nhấp vào “Quản lý khóa”.

Dưới đây là ví dụ về Quản lý khóa trong đó bạn có thể tạo và nhập các khóa hiện có của mình.

Khi tạo bản sao lưu bằng cách sử dụng mysqldump làm bản sao lưu hợp lý của bạn, để mã hóa dữ liệu của bạn, hãy đảm bảo rằng bạn đã đặt tùy chọn SSL cho phù hợp.

Tiếp theo là gì?

Vì chúng tôi có các chứng chỉ đã tạo nên chúng tôi cần kích hoạt và thiết lập SSL cho phù hợp. Để đảm bảo điều này, bạn có thể kiểm tra thông qua dấu nhắc lệnh ClusterControl hoặc mysql. Xem hình ảnh bên dưới:

hoặc bạn cũng có thể kiểm tra trong tab Hiệu suất và nhấp vào Biến DB như bên dưới:

Hãy lưu ý rằng có thể mất một khoảng thời gian để điền vào trong Biến hiệu suất -> DB. Vì vậy, nếu bạn muốn kiểm tra thủ công, bạn có thể sử dụng dấu nhắc lệnh mysql giống như bên dưới:

Việc xác định ssl_cipher của bạn có thể tăng cường bảo mật hơn. Có một danh sách các bộ mật mã nếu bạn chạy HIỂN THỊ TRẠNG THÁI TOÀN CẦU NHƯ ‘Ssl_cipher_list’ \ G hoặc kiểm tra tại đây. Bộ mật mã là sự kết hợp của các thuật toán xác thực, mã hóa và mã xác thực tin nhắn (MAC). Chúng được sử dụng trong quá trình thương lượng cài đặt bảo mật cho kết nối TLS / SSL cũng như để truyền dữ liệu an toàn.

Vì ClusterControl sẽ chạy mysqldump cục bộ vào máy chủ đó, nên thêm các tham số sau (xem bên dưới) trong tệp cấu hình MySQL của bạn (/etc/my.cnf, /etc/mysql/my.cnf, /usr/etc/my.cnf, ~ /.my.cnf) sẽ mã hóa bất kỳ hành động nào đối với kết xuất SQL. Xem bên dưới:

[mysqldump]
socket=/var/lib/mysql/mysql.sock
max_allowed_packet = 512M
host=127.0.0.1
ssl-cert=/var/lib/mysql/client-cert.pem
ssl-key=/var/lib/mysql/client-key.pem

Bạn có thể thử theo dõi bằng tcpdump và bạn có thể thấy bên dưới so sánh với lớp không được mã hóa và được mã hóa bằng TLS.

Với TLS / SSL:

Không có TLS / SSL:

Khi sử dụng Percona XtraBackup hoặc Mariabackup trong ClusterControl, không có hỗ trợ TLS / SSL vào thời điểm này khi sao lưu được truyền qua mạng. Nó sử dụng socat về cơ bản chỉ mở một cổng vào một nút khác như một phương tiện giao tiếp.

ví dụ:

[21:24:46]: 192.168.10.20: Launching ( ulimit -n 256000 && LC_ALL=C /usr/bin/mariabackup --defaults-file=/etc/my.cnf --backup --galera-info --parallel 1 --stream=xbstream --no-timestamp | gzip -6 - | socat - TCP4:192.168.10.200:9999 ) 2>&1.
[21:24:46]: 192.168.10.20: The xtrabackup version is 2.4.12 / 2004012.
[21:24:46]: 192.168.10.20:3306: Checking xtrabackup version.
[21:24:46]: 192.168.10.20: Streaming backup to 192.168.10.200
[21:24:46]: 192.168.10.200: Netcat started, error log is in '192.168.10.200:/tmp/netcat.log'.
[21:24:43]: 192.168.10.200: Starting socat -u tcp-listen:9999,reuseaddr stdout > /home/vagrant/backups/BACKUP-71/backup-full-2018-11-12_132443.xbstream.gz 2>/tmp/netcat.log.

Nếu bạn cần lớp bảo mật trong quá trình truyền tải, bạn có thể thực hiện việc này theo cách thủ công bằng cách sử dụng tùy chọn --ssl * trong khi gọi lệnh. Kiểm tra hướng dẫn sử dụng Percona XtraBackup tại đây để biết thêm thông tin. Chúng tôi vẫn khuyên bạn nên lấy chứng chỉ / khóa của mình từ tổ chức phát hành chứng chỉ đã đăng ký.

Ngoài ra, sử dụng ClusterControl, bạn có thể mã hóa dữ liệu của mình trước khi gửi qua mạng, các gói được gửi không phải là dữ liệu thô mà là dữ liệu được mã hóa. Mặc dù, mã hóa phụ thuộc vào trạng thái nghỉ, chúng ta sẽ thảo luận trong phần tiếp theo về điều này.

Mã hóa At-Rest

Trong ClusterControl, khi tạo bản sao lưu, bạn có tùy chọn mã hóa dữ liệu của mình. Xem bên dưới:

Khi được mã hóa, ClusterControl sẽ sử dụng “Tiêu chuẩn mã hóa nâng cao” AES-256-CBC. Xem bản ghi mẫu bên dưới:

[22:12:49]: 192.168.10.30: Launching ( ulimit -n 256000 && LC_ALL=C /usr/bin/mariabackup --defaults-file=/etc/my.cnf --backup --galera-info --parallel 1 --stream=xbstream --no-timestamp | gzip -6 - | openssl enc -aes-256-cbc -pass file:/var/tmp/cmon-002471-32758-24c456ca6b087837.tmp | socat - TCP4:192.168.10.200:9999 ) 2>&1.

Nếu bạn đang lưu trữ bản sao lưu của mình vào đám mây, chẳng hạn với AWS S3, S3 cung cấp ba chế độ mã hóa phía máy chủ (SSE) khác nhau. Đây là SSE-S3, SSE-C hoặc SSE-KMS. Amazon có các tính năng SSE tuyệt vời để cung cấp khả năng xử lý mã hóa dữ liệu ở trạng thái còn lại. Bạn có thể bắt đầu ở đây giải quyết cách S3 sử dụng AWS KMS. Nếu bạn đang di chuyển bản sao lưu của mình sang bộ lưu trữ dựa trên khối lượng hoặc khối, AWS cũng có mã hóa EBS bằng cách sử dụng AWS KMS. Bạn có thể xem qua đây để biết thêm thông tin về điều này.

Microsoft Azure cũng có các tính năng thú vị khi xử lý dữ liệu ở chế độ nghỉ. Kiểm tra trang về “Mã hóa dịch vụ lưu trữ Azure để biết dữ liệu ở trạng thái yên tâm”. Azure xử lý các khóa trong Azure Key Vault, giống như AWS KMS. Để được mã hóa dữ liệu của Google, bạn có thể kiểm tra tại đây.

Khi lưu trữ các bản sao lưu dữ liệu tại chỗ, bạn có thể sử dụng LUKS (Thiết lập khóa hợp nhất Linux) với sự kết hợp của crypt hoặc dmcrypt. Tôi sẽ không thảo luận về điều này trên blog này nhưng đây là một nguồn tốt để xem:Mã hóa MySQL ở phần còn lại - Phần 1 (LUKS). Để biết thêm thông tin về mã hóa đĩa, trang ArchLinux này “Mã hóa đĩa” là một nguồn tuyệt vời để bắt đầu.

Quan trọng nhất, trong khi dữ liệu của bạn đã được mã hóa ở trạng thái nghỉ và đang chuyển, hãy luôn xác minh rằng bản sao lưu của bạn hoạt động. Bản sao lưu chưa được kiểm tra không phải là bản sao lưu nếu nó không hoạt động khi cần khôi phục. Việc lưu trữ bản sao lưu của bạn cũng như trong khi mã hóa phải được giải mã mà không gặp bất kỳ sự cố nào, do đó, các khóa của bạn phải được lưu trữ riêng tư và theo cách an toàn nhất có thể. Ngoài ra, việc thêm mã hóa vào dữ liệu của bạn cũng như mã hóa InnoDB hoặc SST (dành cho Galera) sẽ tăng cường bảo mật hơn, nhưng chúng tôi sẽ không đề cập đến những điều này trong blog này.

Kết luận

Mã hóa dữ liệu sao lưu ở chế độ nghỉ và khi đang chuyển là các thành phần quan trọng để tuân thủ PHI, HIPAA, PCI DSS hoặc GDPR, để đảm bảo rằng dữ liệu nhạy cảm được truyền qua dây hoặc được lưu trên đĩa không thể đọc được bởi bất kỳ người dùng hoặc ứng dụng nào mà không có khóa hợp lệ. Một số quy định tuân thủ như PCI DSS và HIPAA yêu cầu dữ liệu ở trạng thái nghỉ phải được mã hóa trong suốt vòng đời dữ liệu.

Ở đây, chúng tôi chỉ ra cách ClusterControl cung cấp các tùy chọn này cho người dùng cuối. Tuy nhiên, tuân thủ là một nhiệm vụ rất lớn, liên quan đến nhiều lĩnh vực khác nhau. Các quy định cũng được cập nhật thường xuyên và các quy trình / công cụ cũng cần được cập nhật tương ứng. Chúng tôi liên tục cải thiện các khu vực khác nhau trong ClusterControl để tạo điều kiện tuân thủ. Chúng tôi muốn biết suy nghĩ của bạn về điều này và cách chúng tôi có thể cải thiện.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để tạo các tệp ngôn ngữ Codeigniter từ cơ sở dữ liệu?

  2. MySQL:ALTER IGNORE TABLE đưa ra vi phạm ràng buộc về tính toàn vẹn

  3. lựa chọn nhanh một hàng ngẫu nhiên từ một bảng lớn trong mysql

  4. Làm cách nào để tạo một chuỗi trong MySQL?

  5. Truyền trực tuyến tập hợp kết quả lớn với MySQL