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

Tự động kiểm tra bảo mật cho PostgreSQL

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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phân tích thống kê bảng PostgreSQL

  2. Khi nào thì chọn khóa và mở khóa cập nhật?

  3. Cách cài đặt PostgreSQL 12 trên Ubuntu 20.04 / 18.04 / 16.04

  4. Sử dụng đầu ra văn bản từ một hàm làm truy vấn mới

  5. THỰC HIỆN ... Câu lệnh USING trong PL / pgSQL không hoạt động với loại bản ghi?