Kiểm tra bảo mật là điều bắt buộc ở tất cả các công ty để bảo vệ dữ liệu và tránh mọi vi phạm bảo mật có thể xảy ra, nhưng nó cũng là một công việc tốn thời gian vì bạn cần phải kiểm tra rất nhiều thứ theo định kỳ. Kết quả là, nói chung, các công ty tuân theo danh sách kiểm tra bảo mật và định cấu hình mọi thứ để che đậy nó, nhưng họ không có kiểm tra bảo mật. Bạn có thể nói, “Nếu mọi thứ đang hoạt động tốt, hãy cứ giữ nguyên như vậy”. Thực ra, bạn không thể tin rằng các chính sách bảo mật mà bạn đang định cấu hình bây giờ sẽ hữu ích trong tương lai và sẽ không có gì thay đổi ảnh hưởng đến chúng. Giải pháp cho việc này có thể là tự động hóa các kiểm tra bảo mật này hoặc có cách thực hiện định kỳ theo cách thân thiện với người dùng.
Trong blog này, chúng ta sẽ xem cách thực hiện các Kiểm tra bảo mật khác nhau cho PostgreSQL và tự động hóa chúng bằng ClusterControl.
Bạn cần làm gì để thực hiện kiểm tra bảo mật trên PostgreSQL?
Hãy xem xét một số điều quan trọng nhất cần kiểm tra vì mục đích bảo mật trong cơ sở dữ liệu PostgreSQL:
-
Truyền thông:Giao tiếp trong tất cả các hệ thống của bạn phải được mã hóa và bạn phải hạn chế lưu lượng truy cập chỉ đến từ các nguồn đã biết để giảm nguy cơ truy cập trái phép vào dữ liệu của bạn.
-
Truy cập Cơ sở dữ liệu:Bạn cần hạn chế cả truy cập vật lý và từ xa vào cơ sở dữ liệu của mình. Quyền truy cập từ xa có thể bị hạn chế bằng cách chỉ cho phép kết nối từ các nguồn đã biết cho mỗi người dùng hoặc thậm chí sử dụng kết nối SSH hoặc VPN.
-
Tài khoản Người dùng:Có nhiều cách để cải thiện bảo mật cho tài khoản người dùng của bạn trong PostgreSQL, chẳng hạn như xóa người dùng không hoạt động , chỉ cấp các đặc quyền cần thiết, v.v.
-
Cài đặt và cấu hình:Có một số thay đổi cần thực hiện để bảo mật cài đặt PostgreSQL của bạn, chẳng hạn như chỉ cài đặt những thứ cần thiết gói, thay đổi thông tin đăng nhập và cấu hình mặc định, v.v.
-
Kiểm tra và Ghi nhật ký:Các câu lệnh ghi nhật ký có thể giúp bạn phát hiện hoặc tránh các vấn đề bảo mật nếu bạn nắm bắt chúng kịp thời . Bạn có thể sử dụng cơ sở ghi nhật ký PostgreSQL tiêu chuẩn, nhưng bạn cũng có thể sử dụng tiện ích mở rộng như pgAudit để ghi nhật ký chi tiết hơn.
-
Nâng cấp:Giữ cho hệ điều hành và cơ sở dữ liệu của bạn luôn cập nhật bằng cách áp dụng các bản vá và nâng cấp bảo mật.
-
Giám sát Truy vấn:Bạn nên kiểm tra lưu lượng truy cập để phát hiện các truy vấn bất thường hoặc các cuộc tấn công DoS.
-
Giám sát:Để biết trạng thái của hệ thống, bạn cần phải có một hệ thống giám sát tốt. Điều này có thể hữu ích để tìm các vấn đề bảo mật hoặc thậm chí để tránh chúng.
Bây giờ chúng ta biết những gì cần kiểm tra, hãy xem xét một tùy chọn để tự động hóa các tác vụ này - ClusterControl.
Kiểm tra Bảo mật cho PostgreSQL với ClusterControl
Đối với Kiểm tra Bảo mật PostgreSQL, ClusterControl là một lựa chọn tốt vì nó là một hệ thống quản lý và giám sát giúp bạn triển khai, quản lý, giám sát và mở rộng cơ sở dữ liệu của mình từ giao diện thân thiện với người dùng. Nó hỗ trợ các công nghệ cơ sở dữ liệu nguồn mở hàng đầu và bạn có thể tự động hóa nhiều tác vụ cơ sở dữ liệu mà bạn phải thực hiện thường xuyên như thêm và mở rộng các nút mới, chạy sao lưu và khôi phục, v.v.
Hãy xem cách bạn có thể thực hiện các kiểm tra bảo mật đã đề cập trước đó bằng cách sử dụng ClusterControl.
Thông tin liên lạc
Trong phần bảo mật (ClusterControl -> Chọn tab Cụm -> Bảo mật), bạn có thể bật Mã hóa SSL để mã hóa các kết nối giữa máy khách và máy chủ.
Quyền truy cập từ ClusterControl đến các nút cũng được bảo mật bằng cách sử dụng SSH không cần mật khẩu với một cặp khóa.
Truy cập Cơ sở dữ liệu
Bạn có thể hạn chế quyền truy cập vào cơ sở dữ liệu PostgreSQL của mình bằng cách sửa đổi tệp cấu hình pg_hba.conf từ Giao diện người dùng ClusterControl (ClusterControl -> Chọn Cụm -> Quản lý -> Cấu hình). Bằng cách này, bạn có thể chỉ định các tùy chọn sau:
-
Loại:Các tùy chọn được sử dụng nhiều nhất ở đây là "cục bộ" cho ổ cắm miền Unix và "máy chủ lưu trữ" cho một ổ cắm TCP / IP đơn giản hoặc được mã hóa SSL, nhưng có các tùy chọn khác như "hostssl" và hơn thế nữa.
-
Cơ sở dữ liệu:Nó có thể là "all", "sameuser", "samerole", "replication", a tên cơ sở dữ liệu hoặc danh sách tên cơ sở dữ liệu được phân tách bằng dấu phẩy.
-
Người dùng:Có thể là "tất cả", tên người dùng, tên nhóm có tiền tố là "+", hoặc danh sách được phân tách bằng dấu phẩy.
-
Địa chỉ:Tên máy chủ hoặc địa chỉ IP và mặt nạ CIDR.
-
Phương pháp:Được sử dụng nhiều nhất ở đây là "tin cậy", "từ chối", "md5", "danh tính" và "ngang hàng", nhưng có nhiều tùy chọn hơn như "scram-sha-256" hoặc "ldap".
Ví dụ:
# TYPE DATABASE USER ADDRESS METHOD
host all admindb 10.10.10.121/32 md5
Tài khoản Người dùng
Bạn có thể quản lý người dùng cơ sở dữ liệu của mình từ Giao diện người dùng ClusterControl (ClusterControl -> Chọn Cụm -> Quản lý -> Quản lý Người dùng). Bạn có thể tạo người dùng mới hoặc chỉnh sửa và xóa những người dùng hiện có, đồng thời chỉ định các đặc quyền tương ứng cho họ.
Cài đặt và Cấu hình
Bạn có thể triển khai một cụm PostgreSQL mới hoặc nhập một cụm hiện có. Với cụm PostgreSQL của bạn được thêm vào ClusterControl, bạn có thể quản lý cấu hình hiện tại (ClusterControl -> Chọn cụm -> Quản lý -> Cấu hình), hoặc thậm chí thêm các nút mới vào cụm.
Trong quá trình triển khai, bạn có thể sửa đổi cấu hình cơ sở dữ liệu như cổng cơ sở dữ liệu hoặc thông tin đăng nhập và sau đó ClusterControl sẽ chỉ cài đặt các gói cần thiết để triển khai cụm mới của bạn.
Kiểm toán và Ghi nhật ký
Bạn có thể kiểm tra đăng nhập PostgreSQL tiêu chuẩn trong Giao diện người dùng ClusterControl (ClusterControl -> Chọn Cụm -> Nhật ký -> Nhật ký Hệ thống) hoặc thậm chí bật tiện ích mở rộng pgAudit từ ClusterControl và kiểm tra đăng nhập kiểm tra ở cùng một nơi .
Nâng cấp
Trong trường hợp nâng cấp nhỏ, bạn có thể sử dụng ClusterControl cho tác vụ này. Bạn có thể truy cập giao diện người dùng và chạy nâng cấp (ClusterControl -> Chọn Cụm -> Quản lý -> Nâng cấp) hoặc sử dụng Báo cáo hoạt động ClusterControl “Nâng cấp gói”, để nhận các gói có sẵn qua email hoặc kiểm tra chúng trong Giao diện người dùng ClusterControl.
Giám sát Truy vấn
Trong phần giám sát truy vấn, bạn có thể tìm các truy vấn hàng đầu, truy vấn đang chạy, ngoại lệ truy vấn và thống kê truy vấn để theo dõi lưu lượng cơ sở dữ liệu của bạn.
Giám sát
ClusterControl cho phép bạn giám sát các máy chủ của mình trong thời gian thực với một tập hợp các trang tổng quan được xác định trước để phân tích một số chỉ số phổ biến nhất.
ClusterControl cho phép bạn tùy chỉnh các biểu đồ có sẵn trong cụm và bạn có thể kích hoạt tính năng giám sát dựa trên tác nhân để tạo ra các trang tổng quan chi tiết hơn.
Bạn cũng có thể tạo cảnh báo, thông báo cho bạn về các sự kiện trong cụm của bạn hoặc tích hợp với các dịch vụ khác nhau như PagerDuty hoặc Slack.
Báo cáo Hoạt động
Nếu bạn không muốn truy cập vào giao diện người dùng ClusterControl để kiểm tra trạng thái của các cụm của mình, bạn có thể tạo hoặc lập lịch Báo cáo hoạt động.
Báo cáo Hoạt động cung cấp cho bạn thông tin về trạng thái cơ sở dữ liệu của bạn, bạn có thể sử dụng thông tin này để kiểm tra môi trường của mình. Các báo cáo này bao gồm các kiểm tra khác nhau và giải quyết các nhiệm vụ DBA hàng ngày khác nhau. Ý tưởng đằng sau Báo cáo hoạt động của ClusterControl là đưa tất cả dữ liệu có liên quan nhất vào một tài liệu duy nhất có thể được phân tích nhanh chóng để hiểu rõ về trạng thái của cơ sở dữ liệu và các quy trình của chúng.
Bạn có thể lập lịch các báo cáo như "Báo cáo hệ thống hàng ngày", "Báo cáo nâng cấp gói", "Báo cáo thay đổi lược đồ", "Bản sao lưu" và "Tính khả dụng" và bạn có thể nhận chúng qua nhiều email địa chỉ.
Sử dụng ClusterControl CLI để Tự động hóa Kiểm tra Bảo mật
ClusterControl CLI, còn được gọi là s9s, là một công cụ dòng lệnh được giới thiệu trong ClusterControl phiên bản 1.4.1 để tương tác, kiểm soát và quản lý các cụm cơ sở dữ liệu bằng hệ thống ClusterControl. ClusterControl CLI mở ra một cánh cửa mới cho tự động hóa cụm, nơi bạn có thể dễ dàng tích hợp nó với các công cụ tự động hóa triển khai hiện có như Ansible, Puppet, Chef, v.v. Công cụ dòng lệnh được gọi bằng cách thực thi một tệp nhị phân có tên là s9s được thêm vào mặc định trong cài đặt ClusterControl.
Hãy xem một số ví dụ về công cụ mạnh mẽ này. Đối với điều này, chúng tôi sẽ xem cách thực hiện các tác vụ Kiểm tra bảo mật đã đề cập bằng cách sử dụng ClusterControl CLI.
Thông tin liên lạc
Bạn có thể bật Mã hóa SSL trong cụm của mình bằng lệnh sau:
$ s9s cluster --enable-ssl --cluster-id=ID
Trong đó ID là số ID Cụm:bạn có thể theo dõi tiến trình của nhiệm vụ này (và các nhiệm vụ còn lại) bằng cách liệt kê quy trình công việc.
$ s9s job --list
Truy cập Cơ sở dữ liệu
Bạn có thể kiểm tra cấu hình cơ sở dữ liệu để xác thực quyền truy cập được phép:
$ s9s node --cluster-id=ID \
--nodes="IP_ADDRESS:PORT" \
--list-config
GROUP OPTION NAME VALUE
- data_directory '/var/lib/pgsql/13/data'
- hba_file '/var/lib/pgsql/13/data/pg_hba.conf'
- ident_file '/var/lib/pgsql/13/data/pg_ident.conf'
- listen_addresses '*'
- port 5432
- max_connections 100
- ssl on
- ssl_ca_file '/etc/ssl/postgresql_single/cluster_47/server_ca.crt'
- ssl_cert_file '/etc/ssl/postgresql_single/cluster_47/server.crt'
...
Trong đó ID là số ID cụm, IP_ADDRESS và PORT là Địa chỉ IP và Cổng cơ sở dữ liệu của bạn.
Tài khoản Người dùng
Bạn có thể liệt kê các tài khoản người dùng trong cụm:
$ s9s accounts --list --cluster-id=ID --long
NAME P CONN MAXC GRANTS
's9spostgresqlchk'@'%' N 0 0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB
'postgres'@'%' N 1 0 LOGIN,SUPERUSER,INHERIT,REPLICATION,CREATEROLE,CREATEDB
'pg_write_server_files'@'%' N 0 0 INHERIT
...
'cmon_replication'@'%' N 2 0 LOGIN,INHERIT,REPLICATION
'admindb'@'%' N 3 0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB
Trong đó ID là số ID cụm.
Cài đặt và Cấu hình
Bạn có thể tạo các cụm mới, thêm các nút cơ sở dữ liệu mới hoặc thậm chí thay đổi cấu hình hiện có trong cụm của mình:
$ s9s cluster --create \
--cluster-type=postgresql \
--nodes="IP_ADDRESS1?master;IP_ADDRESS2?slave;IP_ADDRESS3?slave;" \
--db-admin="DBUSER" \
--db-admin-passwd="DBPASSWORD" \
--cluster-name=PG1 \
--os-user=OSUSER \
--os-key-file=/home/OSUSER/.ssh/id_rsa \
--provider-version=13 \
--log
Trong đó IP_ADDRESS là Địa chỉ IP cơ sở dữ liệu của bạn và bạn cần thay thế DBUSER, DBPASSWORD và OSUSER cho thông tin xác thực cơ sở dữ liệu và người dùng hệ điều hành tương ứng.
Kiểm toán và Ghi nhật ký
Bạn có thể bật ghi nhật ký kiểm tra từ dòng lệnh bằng lệnh sau:
$ s9s cluster --setup-audit-logging --cluster-id=ID
Trong đó ID là số ID cụm:sau đó, bạn có thể kiểm tra nhật ký bằng thông tin ghi nhật ký kiểm tra.
Nâng cấp
Bạn có thể tạo báo cáo để xem liệu bạn có cần nâng cấp cơ sở dữ liệu hoặc gói hệ điều hành của mình hay không.
$ s9s report --cluster-id=ID --type=upgrade --create
Trong đó ID là số ID cụm:dựa trên báo cáo này, bạn có thể lên lịch các cửa sổ bảo trì để chạy nâng cấp và nó cũng có thể được thực hiện từ ClusterControl.
Giám sát Truy vấn
Bạn có thể kiểm tra quá trình đang chạy trên các nút của mình và lọc chúng theo truy vấn, nguồn và hơn thế nữa.
$ s9s process \
--top-queries \
--cluster-id=ID \
--update-freq=1 \
'INSERT*'
$ s9s process \
--list-queries \
--cluster-id=ID \
--client='IP_ADDRESS:*' \
'INSERT*'
Giám sát
Bạn có các tùy chọn khác nhau để giám sát hệ thống của mình từ đây. Bạn có thể kiểm tra trạng thái cho tất cả các cụm, kiểm tra một trong số chúng hoặc thậm chí kiểm tra các cảnh báo trong thời gian thực.
$ s9s cluster --list --long
ID STATE TYPE OWNER GROUP NAME COMMENT
1 STARTED postgresql_single system admins PostgreSQL Cluster All nodes are operational.
2 FAILURE galera system admins PXC57 Cluster failure.
3 STARTED replication system admins MariaDB104 All nodes are operational.
4 STARTED mongodb system admins MongoDB42 All nodes are operational.
Total: 4
$ s9s alarm --cluster-name="PostgreSQL Cluster" --list
ID CID SEVERITY COMPONENT TYPE HOSTNAME TITLE
263 1 CRITICAL Network HostSshFailed haproxy1 SSH failed
264 1 CRITICAL Network HostSshFailed haproxy2 SSH failed
265 1 CRITICAL Network HostSshFailed postgresql2 SSH failed
266 1 CRITICAL Network HostSshFailed postgresql3 SSH failed
...
Báo cáo Hoạt động
Bạn có thể tạo Báo cáo hoạt động và kiểm tra chúng từ dòng lệnh. Báo cáo tương tự có sẵn trong giao diện người dùng ClusterControl.
$ s9s report --cluster-id=ID --type=default --create
Đây chỉ là một số ví dụ cơ bản để xem những việc bạn có thể thực hiện bằng ClusterControl CLI. Để biết thêm thông tin về công cụ, bạn có thể tham khảo tài liệu chính thức.
Kết luận
Luôn có nguy cơ bị tấn công, nhưng bạn có thể thu hẹp lỗ hổng bảo mật trên cụm PostgreSQL của mình bằng cách kiểm tra các điểm đã đề cập ở trên. Để làm cho nhiệm vụ này dễ dàng hơn nhiều, bạn có thể sử dụng giao diện người dùng ClusterControl hoặc thậm chí tự động kiểm tra với ClusterControl CLI. Nó cũng có thể được tích hợp với các công cụ bên ngoài như Ansible, Puppet, v.v.