Keamanan pada Azure Database for PostgreSQL - Server Fleksibel

BERLAKU UNTUK: Azure Database for PostgreSQL - Server Fleksibel

Beberapa lapisan keamanan tersedia untuk membantu melindungi data di Instans Azure Database for PostgreSQL - Server Fleksibel Anda. Artikel ini menguraikan opsi keamanan tersebut.

Perlindungan dan enkripsi informasi

Azure Database for PostgreSQL - Server Fleksibel mengenkripsi data dengan dua cara:

  • Data saat transit: Azure Database for PostgreSQL - Server Fleksibel mengenkripsi data dalam transit dengan Lapisan Soket Aman dan Keamanan Lapisan Transportasi (SSL/TLS). Enkripsi diberlakukan secara default. Untuk informasi selengkapnya tentang keamanan koneksi dengan SSL\TLS lihat dokumentasi ini. Untuk keamanan yang lebih baik, Anda dapat memilih untuk mengaktifkan autentikasi SCRAM di Azure Database for PostgreSQL - Server Fleksibel.

    Meskipun sangat tidak disarankan, jika diperlukan, karena ketidakcocokan klien lama, Anda memiliki opsi untuk menonaktifkan TLS\SSL untuk koneksi ke Azure Database for PostgreSQL - Server Fleksibel dengan memperbarui require_secure_transport parameter server ke NONAKTIF. Anda juga dapat mengatur versi TLS dengan mengatur ssl_max_protocol_version parameter server.

  • Data tidak aktif: Untuk enkripsi penyimpanan, Azure Database for PostgreSQL - Server Fleksibel menggunakan modul kriptografi tervalidasi FIPS 140-2. Data dienkripsi pada disk, termasuk file cadangan dan file sementara yang dibuat saat kueri sedang berjalan.

    Layanan ini menggunakan pemecah kode AES 256-bit yang disertakan dalam enkripsi penyimpanan Azure, dan kuncinya berupa sistem yang terkelola. Layanan ini mirip dengan teknologi enkripsi dalam penyimpanan lain seperti pada enkripsi data transparan di database SQL Server atau Oracle. Enkripsi penyimpanan selalu aktif dan tidak dapat dinonaktifkan.

Keamanan jaringan

Saat Anda menjalankan Azure Database for PostgreSQL - Flexible Server, Anda memiliki dua opsi jaringan utama:

  • Akses privat: Anda dapat menyebarkan server ke jaringan virtual Azure. Jaringan virtual Azure menyediakan komunikasi jaringan privat yang aman. Sumber daya dalam jaringan virtual dapat dikomunikasikan melalui alamat IP privat. Untuk informasi lebih lanjut, lihat gambaran umum jaringan untuk Azure Database for PostgreSQL - Flexible Server.

    Aturan keamanan dalam grup keamanan jaringan memungkinkan Anda memfilter jenis lalu lintas jaringan yang masuk dan keluar dari subnet jaringan virtual dan antarmuka jaringan. Untuk informasi selengkapnya, lihat gambaran umum kelompok keamanan jaringan.

  • Akses publik: Server dapat diakses melalui titik akhir publik. Titik akhir publik adalah alamat DNS yang dapat diselesaikan secara publik. Akses ke firewall diamankan melalui firewall yang memblokir semua koneksi secara default.

    Aturan firewall IP memberikan akses ke server berdasarkan alamat IP asal dari setiap permintaan. Untuk informasi lebih lanjut, lihat gambaran umum aturan firewall.

Dukungan Pertahanan Microsoft untuk Cloud

Pertahanan Microsoft untuk database relasional sumber terbuka mendeteksi aktivitas anomali yang menunjukkan upaya yang tidak biasa dan berpotensi berbahaya untuk mengakses atau mengeksploitasi database. Defender untuk Cloud menyediakan pemberitahuan keamanan tentang aktivitas anomali sehingga Anda dapat mendeteksi potensi ancaman dan menanggapinya saat terjadi. Saat Anda mengaktifkan paket ini, Defender untuk Cloud menyediakan pemberitahuan saat mendeteksi akses database anomali dan pola kueri dan aktivitas database yang mencurigakan.

Pemberitahuan ini muncul di halaman pemberitahuan keamanan Defender untuk Cloud dan meliputi:

  • Detail aktivitas mencurigakan yang memicunya
  • Taktik MITRE ATT&CK terkait
  • Tindakan yang direkomendasikan untuk cara menyelidiki dan mengurangi ancaman
  • Opsi untuk melanjutkan penyelidikan Anda dengan Microsoft Azure Sentinel

Microsoft Defender untuk Cloud dan Serangan Brute Force

Serangan brute force adalah salah satu metode peretasan yang paling umum dan cukup berhasil, meski ini adalah metode peretasan yang paling sederhana. Teori di balik serangan seperti itu adalah bahwa jika Anda mengambil sejumlah tak terbatas upaya untuk menebak kata sandi, Anda pasti benar pada akhirnya. Ketika Microsoft Defender untuk Cloud mendeteksi serangan brute force, Microsoft Defender akan memicu pemberitahuan untuk memberi tahu Anda bahwa serangan brute force telah terjadi. Microsoft Defender untuk Cloud juga dapat membedakan serangan brute force sederhana dari serangan brute force terhadap pengguna yang valid atau serangan brute force yang berhasil.

Untuk mendapatkan pemberitahuan dari paket Pertahanan Microsoft, Anda harus terlebih dahulu mengaktifkannya seperti yang ditunjukkan di bagian berikutnya.

Aktifkan keamanan yang ditingkatkan dengan Microsoft Defender untuk Cloud

  1. Dari portal Azure, navigasi ke menu Keamanan di panel kiri
  2. Pilih Microsoft Defender untuk Cloud
  3. Pilih Aktifkan di panel sebelah kanan.

Cuplikan layar portal Azure memperlihatkan cara mengaktifkan Cloud Defender.

Catatan

Jika Anda mengaktifkan fitur "database relasional sumber terbuka" dalam paket Pertahanan Microsoft, Anda akan mengamati bahwa Pertahanan Microsoft diaktifkan secara otomatis secara default untuk sumber daya server fleksibel Azure Database for PostgreSQL Anda.

Manajemen akses

Cara terbaik untuk mengelola Azure Database for PostgreSQL - Izin akses database Server Fleksibel dalam skala besar adalah dengan menggunakan konsep peran. Peran dapat berupa pengguna database atau sekelompok pengguna database. Peran dapat memiliki objek database dan menetapkan hak istimewa pada objek tersebut ke peran lain untuk mengontrol siapa yang memiliki akses ke objek mana. Dimungkinkan juga untuk memberikan keanggotaan dalam peran ke peran lain, sehingga memungkinkan peran anggota untuk menggunakan hak istimewa yang ditetapkan ke peran lain. Azure Database for PostgreSQL - Server Fleksibel memungkinkan Anda memberikan izin langsung kepada pengguna database. Sebagai praktik keamanan yang baik, disarankan agar Anda membuat peran dengan serangkaian izin tertentu berdasarkan persyaratan aplikasi dan akses minimum. Anda kemudian dapat menetapkan peran yang sesuai untuk setiap pengguna. Peran digunakan untuk memberlakukan model hak istimewa paling sedikit untuk mengakses objek database.

Instans Azure Database for PostgreSQL - Server Fleksibel dibuat dengan tiga peran default yang ditentukan. Anda dapat melihat peran ini dengan menjalankan perintah:

SELECT rolname FROM pg_roles;
  • azure_pg_admin

  • azuresu

  • peran administrator

Saat Anda membuat instans Azure Database for PostgreSQL - Server Fleksibel, Anda memberikan kredensial untuk peran administrator. Peran administrator ini dapat digunakan untuk membuat peran PostgreSQL lainnya.
Misalnya, di bawah ini kita dapat membuat contoh pengguna/peran yang disebut demouser,

postgres=> CREATE USER demouser PASSWORD 'password123';

Peran administrator tidak boleh digunakan oleh aplikasi.

Di lingkungan PaaS berbasis cloud, akses ke akun superuser Azure Database for PostgreSQL - Server Fleksibel dibatasi untuk mengontrol operasi pesawat hanya oleh operator cloud. Oleh karena itu, azure_pg_admin akun ada sebagai akun pseudo-superuser. Peran administrator Anda adalah anggota peran tersebut azure_pg_admin .
Namun, akun admin server bukan bagian azuresu dari peran, yang memiliki hak istimewa superuser dan digunakan untuk melakukan operasi sarana kontrol. Karena layanan ini adalah layanan PaaS terkelola, hanya Microsoft yang merupakan bagian dari peran superuser.

Catatan

Jumlah izin superuser saja, seperti pembuatan cast implisit tertentu, tidak tersedia dengan Azure Database for PostgreSQL - Flexible Server, karena azure_pg_admin peran tidak selaras dengan izin peran superuser PostgreSQL.

Anda dapat mengaudit daftar peran secara berkala di server Anda. Misalnya, Anda dapat terhubung menggunakan klien psql dan mengkueri tabel pg_roles yang berisi daftar semua peran beserta hak istimewa seperti membuat peran tambahan, membuat database, replikasi, dll.

postgres=> \x
Expanded display is on.
postgres=> select * from pg_roles where rolname='demouser';
-[ RECORD 1 ]--+---------
rolname        | demouser
rolsuper       | f
rolinherit     | t
rolcreaterole  | f
rolcreatedb    | f
rolcanlogin    | f
rolreplication | f
rolconnlimit   | -1
rolpassword    | ********
rolvaliduntil  |
rolbypassrls   | f
rolconfig      |
oid            | 24827

Pengelogan audit di Azure Database for PostgreSQL - Server Fleksibel juga tersedia dengan Azure Database for PostgreSQL - Server Fleksibel untuk melacak aktivitas di database Anda.

Mengontrol akses skema

Database yang baru dibuat di Azure Database for PostgreSQL - Server Fleksibel memiliki sekumpulan hak istimewa default dalam skema publik database yang memungkinkan semua pengguna dan peran database untuk membuat objek. Untuk membatasi akses pengguna aplikasi dengan lebih baik ke database yang Anda buat di Instans Azure Database for PostgreSQL - Server Fleksibel, kami sarankan Anda mempertimbangkan untuk mencabut hak istimewa publik default ini. Setelah melakukannya, Anda kemudian dapat memberikan hak istimewa tertentu untuk pengguna database secara lebih terperinci. Contohnya:

  • Untuk mencegah pengguna database aplikasi membuat objek dalam skema publik, cabut hak istimewa public untuk membuat skema dari public peran.

    REVOKE CREATE ON SCHEMA public FROM PUBLIC;
    
  • Selanjutnya, buat database baru.

    CREATE DATABASE Test_db;
    
  • Cabut semua hak istimewa dari skema PUBLIK pada database baru ini.

    REVOKE ALL ON DATABASE Test_db FROM PUBLIC;
    
  • Membuat peran kustom untuk pengguna db aplikasi

    CREATE ROLE Test_db_user;
    
  • Beri pengguna database dengan peran ini kemampuan untuk menyambungkan ke database.

    GRANT CONNECT ON DATABASE Test_db TO Test_db_user;
    GRANT ALL PRIVILEGES ON DATABASE Test_db TO Test_db_user;
    
  • Membuat pengguna database

    CREATE USER user1 PASSWORD 'Password_to_change'
    
  • Tetapkan peran, dengan koneksinya dan pilih hak istimewa untuk pengguna

    GRANT Test_db_user TO user1;
    

Dalam contoh ini, pengguna1 dapat terhubung dan memiliki semua hak istimewa dalam database pengujian kami Test_db, tetapi tidak ada db lain di server. Akan disarankan lebih lanjut, alih-alih memberikan pengguna ini\peran ALL PRIVILEGES pada database tersebut dan objeknya, untuk memberikan izin yang lebih selektif, seperti SELECT,INSERT,EXECUTE, dll. Untuk informasi selengkapnya tentang hak istimewa dalam database PostgreSQL, lihat perintah GRANT dan REVOKE di dokumen PostgreSQL.

Perubahan PostgreSQL 16 dengan keamanan berbasis peran

Dalam peran database PostgreSQL dapat memiliki banyak atribut yang menentukan hak istimewanya. Salah satu atribut tersebut adalah atribut CREATEROLE, yang penting untuk manajemen database PostgreSQL pengguna dan peran. Dalam PostgreSQL 16 perubahan signifikan diperkenalkan pada atribut ini. Di PostgreSQL 16, pengguna dengan atribut CREATEROLE tidak lagi memiliki kemampuan untuk membagikan keanggotaan dalam peran apa pun kepada siapa pun; sebaliknya, seperti pengguna lain, tanpa atribut ini, mereka hanya dapat membagikan keanggotaan dalam peran yang mereka miliki ADMIN OPTION. Selain itu, di PostgreSQL 16, atribut CREATEROLE masih memungkinkan nonsuperuser kemampuan untuk memprovisikan pengguna baru, namun mereka hanya dapat menghilangkan pengguna yang mereka buat sendiri. Upaya untuk menghilangkan pengguna, yang tidak dibuat oleh pengguna dengan atribut CREATEROLE , akan mengakibatkan kesalahan.

PostgreSQL 16 juga memperkenalkan peran bawaan baru dan yang ditingkatkan. Peran pg_use_reserved_connections baru di PostgreSQL 16 memungkinkan penggunaan slot koneksi yang dicadangkan melalui reserved_connections. Peran pg_create_subscription memungkinkan superuser untuk membuat langganan.

Keamanan tingkat baris

Keamanan tingkat baris (RLS) adalah fitur keamanan Azure Database for PostgreSQL - Flexible Server yang memungkinkan administrator database menentukan kebijakan untuk mengontrol bagaimana baris tertentu tampilan data dan beroperasi untuk satu atau beberapa peran. Keamanan tingkat baris adalah filter tambahan yang dapat Anda terapkan ke tabel database Azure Database for PostgreSQL - Server Fleksibel. Saat pengguna mencoba melakukan tindakan pada tabel, filter ini diterapkan sebelum kriteria kueri atau pemfilteran lainnya, dan data dipersempit atau ditolak sesuai dengan kebijakan keamanan Anda. Anda dapat membuat kebijakan keamanan tingkat baris untuk perintah tertentu seperti SELECT, INSERT, UPDATE, dan DELETE, tentukan untuk SEMUA perintah. Kasus penggunaan untuk keamanan tingkat baris termasuk implementasi yang mematuhi PCI, lingkungan rahasia, dan aplikasi hosting / multipenyewa bersama.

Hanya pengguna dengan SET ROW SECURITY hak yang mungkin menerapkan hak keamanan baris ke tabel. Pemilik tabel mungkin mengatur keamanan baris pada tabel. Seperti OVERRIDE ROW SECURITY ini saat ini adalah hak implisit. Keamanan tingkat baris tidak mengambil alih izin yang ada GRANT , keamanan menambahkan tingkat kontrol yang lebih halus. Misalnya, pengaturan ROW SECURITY FOR SELECT untuk mengizinkan pengguna tertentu memberikan baris hanya akan memberi pengguna tersebut akses jika pengguna juga memiliki SELECT hak istimewa pada kolom atau tabel yang dimaksud.

Berikut adalah contoh yang menunjukkan cara membuat kebijakan yang memastikan hanya anggota peran "manajer" yang dibuat kustom yang hanya dapat mengakses baris untuk akun tertentu. Kode dalam contoh berikut dibagikan dalam dokumentasi PostgreSQL.

CREATE TABLE accounts (manager text, company text, contact_email text);

ALTER TABLE accounts ENABLE ROW LEVEL SECURITY;

CREATE POLICY account_managers ON accounts TO managers
    USING (manager = current_user);

Klausa USING secara implisit menambahkan klausul WITH CHECK , memastikan bahwa anggota peran manajer tidak dapat melakukan SELECToperasi , , DELETEatau UPDATE pada baris milik manajer lain, dan tidak INSERT dapat baris baru milik manajer lain. Anda dapat menghilangkan kebijakan keamanan baris dengan menggunakan perintah DROP POLICY , seperti dalam contohnya:



DROP POLICY account_managers ON accounts;

Meskipun Anda mungkin telah menghilangkan kebijakan, manajer peran masih tidak dapat melihat data apa pun yang termasuk dalam manajer lain. Ini karena kebijakan keamanan tingkat baris masih diaktifkan pada tabel akun. Jika keamanan tingkat baris diaktifkan secara default, PostgreSQL menggunakan kebijakan penolakan default. Anda dapat menonaktifkan keamanan tingkat baris, seperti pada contoh di bawah ini:

ALTER TABLE accounts DISABLE ROW LEVEL SECURITY;

Melewati Keamanan Tingkat Baris

PostgreSQL memiliki izin BYPASSRLS dan NOBYPASSRLS , yang dapat ditetapkan ke peran; NOBYPASSRLS ditetapkan secara default. Dengan server yang baru disediakan di Azure Database for PostgreSQL - Server Fleksibel melewati hak istimewa keamanan tingkat baris (BYPASSRLS)diimplementasikan sebagai berikut:

  • Untuk server versi Postgres 16 ke atas, kami mengikuti perilaku PostgreSQL 16 standar. Pengguna non-administratif yang dibuat oleh peran administrator azure_pg_admin memungkinkan Anda membuat peran dengan atribut BYPASSRLS\privilege seperlunya.
  • Untuk server versi Postgres 15 ke bawah. , Anda dapat menggunakan pengguna azure_pg_admin untuk melakukan tugas administratif yang memerlukan hak istimewa BYPASSRLS, tetapi tidak dapat membuat pengguna non-admin dengan hak istimewa BypassRLS, karena peran administrator tidak memiliki hak istimewa superuser, seperti umum dalam layanan PaaS PostgreSQL berbasis cloud.

Memperbarui kata sandi

Untuk keamanan yang lebih baik, ini adalah praktik yang baik untuk memutar kata sandi admin dan kata sandi pengguna database Anda secara berkala. Disarankan untuk menggunakan kata sandi yang kuat menggunakan huruf besar dan kecil, angka, dan karakter khusus.

Menggunakan SCRAM

Mekanisme Autentikasi Respons Tantangan Asin (SCRAM) sangat meningkatkan keamanan autentikasi pengguna berbasis kata sandi dengan menambahkan beberapa fitur keamanan utama yang mencegah serangan tabel pelangi, serangan man-in-the-middle, dan serangan kata sandi tersimpan, sekaligus menambahkan dukungan untuk beberapa algoritma hashing dan kata sandi yang berisi karakter non-ASCII.

Jika driver klien Anda mendukung SCRAM , Anda dapat menyiapkan akses ke Azure Database for PostgreSQL - Server Fleksibel menggunakan SCRAM sebagai scram-sha-256 vs. default md5.

Mengatur ulang kata sandi administrator

Ikuti panduan cara mengatur ulang kata sandi admin.

Memperbarui kata sandi pengguna database

Anda dapat menggunakan alat klien untuk memperbarui kata sandi pengguna database.
Contohnya,

postgres=> ALTER ROLE demouser PASSWORD 'Password123!';
ALTER ROLE