PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Mengotomatiskan Audit Keamanan untuk PostgreSQL

Audit keamanan adalah suatu keharusan di semua perusahaan untuk melindungi data dan menghindari kemungkinan pelanggaran keamanan, tetapi ini juga merupakan tugas yang memakan waktu karena Anda perlu memeriksa banyak hal secara berkala. Hasilnya adalah, secara umum, perusahaan mengikuti daftar periksa keamanan dan mengonfigurasi semuanya untuk menutupinya, tetapi mereka tidak memiliki audit keamanan. Anda mungkin berkata, "Jika semuanya bekerja dengan baik, tetap seperti itu". Sebenarnya, Anda tidak dapat mempercayai bahwa kebijakan keamanan yang Anda konfigurasikan sekarang akan berguna di masa mendatang, dan tidak ada yang akan mengubahnya untuk memengaruhinya. Solusi untuk ini dapat mengotomatiskan audit keamanan ini atau memiliki cara untuk melakukannya secara berkala dengan cara yang ramah pengguna.

Di blog ini, kita akan melihat cara melakukan Audit Keamanan yang berbeda untuk PostgreSQL dan mengotomatiskannya menggunakan ClusterControl.

Apa yang Anda perlukan untuk melakukan audit keamanan di PostgreSQL?

Mari kita lihat beberapa hal terpenting yang harus diaudit untuk tujuan keamanan dalam database PostgreSQL:

  • Komunikasi:Komunikasi di semua sistem Anda harus dienkripsi, dan Anda harus membatasi lalu lintas hanya untuk yang datang dari sumber yang dikenal untuk mengurangi risiko akses tidak sah ke data Anda.

  • Akses Database:Anda perlu membatasi akses fisik dan jarak jauh ke database Anda. Akses jarak jauh dapat dibatasi dengan mengizinkan koneksi hanya dari sumber yang diketahui untuk setiap pengguna, atau bahkan menggunakan koneksi SSH atau VPN.

  • Akun Pengguna:Ada banyak cara untuk meningkatkan keamanan akun pengguna Anda di PostgreSQL, seperti menghapus pengguna yang tidak aktif , hanya memberikan hak istimewa yang diperlukan, dll.

  • Instalasi dan Konfigurasi:Ada beberapa perubahan yang harus dilakukan untuk mengamankan instalasi PostgreSQL Anda, seperti menginstal hanya yang diperlukan paket, mengubah kredensial dan konfigurasi default, dll.

  • Audit dan Logging:Pernyataan logging dapat membantu Anda mendeteksi masalah keamanan atau menghindarinya jika Anda mengetahuinya tepat waktu . Anda dapat menggunakan fasilitas logging PostgreSQL standar, tetapi Anda juga dapat menggunakan ekstensi seperti pgAudit untuk mendapatkan logging yang lebih detail.

  • Upgrade:Perbarui OS dan database Anda semaksimal mungkin dengan menerapkan patch dan peningkatan keamanan.

  • Pemantau Kueri:Anda harus memeriksa lalu lintas untuk mendeteksi kueri abnormal atau serangan DoS.

  • Pemantauan:Untuk mengetahui status sistem Anda, Anda perlu memiliki sistem pemantauan yang baik. Ini bisa berguna untuk menemukan masalah keamanan atau bahkan menghindarinya.

Sekarang kita tahu apa yang harus diperiksa, mari kita lihat opsi untuk mengotomatiskan tugas-tugas ini - ClusterControl.

Audit Keamanan untuk PostgreSQL dengan ClusterControl

Untuk Audit Keamanan PostgreSQL, ClusterControl adalah pilihan yang baik karena merupakan sistem manajemen dan pemantauan yang membantu Anda menerapkan, mengelola, memantau, dan menskalakan database Anda dari antarmuka yang ramah pengguna. Ini memiliki dukungan untuk teknologi database open-source teratas dan Anda dapat mengotomatiskan banyak tugas database yang harus Anda lakukan secara teratur seperti menambahkan dan menskalakan node baru, menjalankan pencadangan dan pemulihan, dan banyak lagi.

Mari kita lihat bagaimana Anda dapat menutupi pemeriksaan keamanan yang disebutkan sebelumnya menggunakan ClusterControl.

Komunikasi

Di bagian keamanan (ClusterControl -> Select Cluster -> tab Security), Anda dapat mengaktifkan Enkripsi SSL untuk mengenkripsi koneksi antara klien dan server.

Akses dari ClusterControl ke node juga diamankan menggunakan SSH tanpa kata sandi dengan pasangan kunci.

Akses Basis Data

Anda dapat membatasi akses ke database PostgreSQL dengan memodifikasi file konfigurasi pg_hba.conf dari UI ClusterControl (ClusterControl -> Select Cluster -> Manage -> Configurations). Dengan cara ini, Anda dapat menentukan opsi berikut:

  • Jenis:Opsi yang paling sering digunakan di sini adalah "lokal" untuk soket domain Unix, dan "host" untuk soket TCP/IP biasa atau terenkripsi SSL, tetapi ada opsi lain seperti "hostssl", dan lainnya.

  • Database:Ini bisa berupa "semua", "pengguna yang sama", "samerole", "replikasi", a nama database, atau daftar nama database yang dipisahkan koma.

  • Pengguna:Dapat berupa "semua", nama pengguna, nama grup yang diawali dengan "+", atau daftar yang dipisahkan koma daripadanya.

  • Alamat:Nama host, atau alamat IP dan topeng CIDR.

  • Metode:Yang paling sering digunakan di sini adalah "trust", "reject", "md5", "ident" , dan "peer", tetapi ada lebih banyak opsi seperti "scram-sha-256" atau "ldap".

Contoh:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
  host  all             admindb         10.10.10.121/32         md5

Akun Pengguna

Anda dapat mengelola pengguna database dari UI ClusterControl (ClusterControl -> Pilih Cluster -> Kelola -> Manajemen Pengguna). Anda dapat membuat pengguna baru, atau mengedit dan menghapus yang sudah ada, dan memberikan hak istimewa yang sesuai kepada mereka.

Instalasi dan Konfigurasi

Anda dapat menerapkan cluster PostgreSQL baru atau mengimpor yang sudah ada. Dengan cluster PostgreSQL Anda ditambahkan ke ClusterControl, Anda dapat mengelola konfigurasi saat ini (ClusterControl -> Select Cluster -> Manage -> Configuration), atau bahkan menambahkan node baru ke cluster.

Selama penerapan, Anda dapat mengubah konfigurasi basis data seperti port basis data atau kredensial, lalu ClusterControl hanya akan menginstal paket yang diperlukan untuk menerapkan cluster baru Anda.

Audit dan Logging

Anda dapat memeriksa logging PostgreSQL standar di ClusterControl UI (ClusterControl -> Select Cluster -> Logs -> System Logs) atau bahkan mengaktifkan ekstensi pgAudit dari ClusterControl dan memeriksa logging audit di tempat yang sama .

Upgrade

Dalam kasus peningkatan kecil, Anda dapat menggunakan ClusterControl untuk tugas ini. Anda dapat mengakses UI dan menjalankan upgrade (ClusterControl -> Select Cluster -> Manage -> Upgrades), atau menggunakan Laporan Operasional ClusterControl “Package Upgrades”, untuk menerima paket yang tersedia melalui email atau memeriksanya di ClusterControl UI.

Pemantau Kueri

Di bagian pemantau kueri, Anda dapat menemukan kueri teratas, kueri yang berjalan, outlier kueri, dan statistik kueri untuk memantau lalu lintas database Anda.

Pemantauan

ClusterControl memungkinkan Anda memantau server secara real-time dengan kumpulan dasbor yang telah ditentukan sebelumnya untuk menganalisis beberapa metrik yang paling umum.

ClusterControl memungkinkan Anda menyesuaikan grafik yang tersedia di cluster, dan Anda dapat mengaktifkan pemantauan berbasis agen untuk menghasilkan dasbor yang lebih detail.

Anda juga dapat membuat lansiran, yang memberi tahu Anda tentang peristiwa di kluster Anda, atau berintegrasi dengan berbagai layanan seperti PagerDuty atau Slack.

Laporan Operasional

Jika Anda tidak ingin mengakses UI ClusterControl untuk memeriksa status cluster, Anda dapat membuat atau menjadwalkan Laporan Operasional.

Laporan Operasional memberi Anda informasi tentang status basis data Anda, yang dapat Anda gunakan untuk mengaudit lingkungan Anda. Laporan ini terdiri dari pemeriksaan yang berbeda dan menangani berbagai tugas DBA sehari-hari. Ide di balik Pelaporan Operasional ClusterControl adalah untuk menempatkan semua data yang paling relevan ke dalam satu dokumen yang dapat dianalisis dengan cepat untuk mendapatkan pemahaman yang jelas tentang status database dan prosesnya.

Anda dapat menjadwalkan laporan seperti "Laporan Sistem Harian", "Laporan Peningkatan Paket", "Laporan Perubahan Skema", "Cadangan", dan "Ketersediaan", dan Anda dapat menerimanya di lebih dari satu email alamat.

Menggunakan ClusterControl CLI untuk Mengotomatiskan Audit Keamanan

ClusterControl CLI, juga dikenal sebagai s9s, adalah alat baris perintah yang diperkenalkan di ClusterControl versi 1.4.1 untuk berinteraksi, mengontrol, dan mengelola cluster database menggunakan sistem ClusterControl. ClusterControl CLI membuka pintu baru untuk otomatisasi cluster di mana Anda dapat dengan mudah mengintegrasikannya dengan alat otomatisasi penyebaran yang ada seperti Ansible, Puppet, Chef, dll. Alat baris perintah dipanggil dengan mengeksekusi biner yang disebut s9s yang ditambahkan secara default dalam instalasi ClusterControl.

Mari kita lihat beberapa contoh alat canggih ini. Untuk ini, kita akan melihat cara melakukan tugas Audit Keamanan yang disebutkan menggunakan ClusterControl CLI.

Komunikasi

Anda dapat mengaktifkan Enkripsi SSL di cluster Anda menggunakan perintah berikut:

$ s9s cluster --enable-ssl --cluster-id=ID

Di mana ID adalah nomor ID Cluster:Anda dapat memantau kemajuan tugas ini (dan tugas lainnya) dengan mencantumkan proses tugas.

$ s9s job --list

Akses Basis Data

Anda dapat memeriksa konfigurasi database untuk memvalidasi akses yang diizinkan:

$ 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'
...

Di mana ID adalah nomor ID Cluster, IP_ADDRESS dan PORT adalah Alamat IP dan Port database Anda.

Akun Pengguna

Anda dapat membuat daftar akun pengguna yang ada di cluster:

$ 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

Di mana ID adalah nomor ID Cluster.

Instalasi dan Konfigurasi

Anda dapat membuat cluster baru, menambahkan node database baru, atau bahkan mengubah konfigurasi yang ada di cluster Anda:

$ 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

Di mana IP_ADDRESS adalah Alamat IP basis data Anda, dan Anda harus mengganti DBUSER, DBPASSWORD , dan OSUSER untuk kredensial basis data dan pengguna sistem operasi Anda.

Audit dan Logging

Anda dapat mengaktifkan log audit dari baris perintah menggunakan perintah berikut:

$ s9s cluster --setup-audit-logging --cluster-id=ID

Di mana ID adalah nomor ID Cluster:lalu, Anda dapat memeriksa log dengan informasi log audit.

Upgrade

Anda dapat membuat laporan untuk melihat apakah Anda perlu mengupgrade database atau paket sistem operasi Anda.

$ s9s report --cluster-id=ID --type=upgrade --create

Di mana ID adalah nomor ID Cluster:berdasarkan laporan ini, Anda dapat menjadwalkan jendela pemeliharaan untuk menjalankan pemutakhiran, dan dapat juga dilakukan dari ClusterControl.

Pemantau Kueri

Anda dapat memeriksa proses yang berjalan di node Anda dan memfilternya menurut kueri, sumber, dan lainnya.

$ s9s process \
--top-queries \
--cluster-id=ID \
--update-freq=1 \
'INSERT*'


$ s9s process \
--list-queries \
--cluster-id=ID \
--client='IP_ADDRESS:*' \
'INSERT*'

Pemantauan

Anda memiliki opsi berbeda untuk memantau sistem Anda dari sini. Anda dapat memeriksa status semua cluster, memeriksa salah satunya, atau bahkan memeriksa alarm secara real-time.

$  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
...

Laporan Operasi

Anda dapat membuat Laporan Operasional dan memeriksanya dari baris perintah. Laporan yang sama tersedia di UI ClusterControl.

$ s9s report --cluster-id=ID --type=default --create

Ini hanya beberapa contoh dasar untuk melihat jenis hal yang dapat Anda lakukan menggunakan ClusterControl CLI. Untuk informasi lebih lanjut tentang alat ini, Anda dapat merujuk ke dokumentasi resmi.

Kesimpulan

Selalu ada risiko diretas, tetapi Anda dapat menutup celah kerentanan pada klaster PostgreSQL Anda dengan memeriksa poin-poin yang disebutkan di atas. Untuk membuat tugas ini lebih mudah, Anda dapat menggunakan UI ClusterControl atau bahkan mengotomatiskan pemeriksaan dengan CLI ClusterControl. Itu juga dapat diintegrasikan dengan alat eksternal seperti Ansible, Puppet, dan lainnya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tabel Cetak tidak sesuai dengan ukuran halaman

  2. GROUP BY di Postgres - tidak ada kesetaraan untuk tipe data JSON?

  3. kueri sql yang mengelompokkan item berbeda ke dalam ember

  4. Bagaimana justify_interval() Bekerja di PostgreSQL

  5. Ubah dari SQLite ke PostgreSQL dalam proyek Rails baru