Menggunakan grup keamanan AD untuk kontrol akses Aurora PostgreSQL - Amazon Aurora

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan grup keamanan AD untuk kontrol akses Aurora PostgreSQL

Dari Aurora PostgreSQL 14.10 dan 15.5 versi, Aurora PostgreSQL Access Control dapat dikelola menggunakan Directory Service untuk grup keamanan Microsoft Active Directory (AD). AWS Versi sebelumnya dari Aurora PostgreSQL mendukung otentikasi berbasis Kerberos dengan AD hanya untuk pengguna individu. Setiap pengguna AD harus secara eksplisit disediakan ke cluster DB untuk mendapatkan akses.

Alih-alih secara eksplisit menyediakan setiap pengguna AD ke klaster DB berdasarkan kebutuhan bisnis, Anda dapat memanfaatkan grup keamanan AD seperti yang dijelaskan di bawah ini:

  • Pengguna AD adalah anggota dari berbagai grup keamanan AD di Active Directory. Ini tidak ditentukan oleh administrator cluster DB, tetapi didasarkan pada persyaratan bisnis, dan ditangani oleh administrator AD.

  • Administrator cluster DB membuat peran DB dalam instans DB berdasarkan persyaratan bisnis. Peran DB ini mungkin memiliki izin atau hak istimewa yang berbeda.

  • Administrator cluster DB mengonfigurasi pemetaan dari grup keamanan AD ke peran DB berdasarkan per cluster DB.

  • Pengguna DB dapat mengakses kluster DB menggunakan kredensyal AD mereka. Akses didasarkan pada keanggotaan grup keamanan AD. Pengguna iklan mendapatkan atau kehilangan akses secara otomatis berdasarkan keanggotaan grup iklan mereka.

Prasyarat

Pastikan Anda memiliki hal berikut sebelum menyiapkan ekstensi untuk grup Keamanan AD:

Menyiapkan ekstensi pg_ad_mapping

Aurora PostgreSQL sekarang menyediakan pg_ad_mapping ekstensi untuk mengelola pemetaan antara grup keamanan AD dan peran DB di cluster Aurora PostgreSQL. Untuk informasi selengkapnya tentang fungsi yang disediakan olehpg_ad_mapping, lihatMenggunakan fungsi dari pg_ad_mapping ekstensi.

Untuk menyiapkan pg_ad_mapping ekstensi pada klaster Aurora PostgreSQL DB, Anda terlebih dahulu menambahkan pg_ad_mapping ke pustaka bersama pada grup parameter cluster DB kustom untuk klaster Aurora PostgreSQL DB Anda. Untuk informasi tentang membuat grup parameter cluster DB kustom, lihatMenggunakan grup parameter. Selanjutnya, Anda menginstal pg_ad_mapping ekstensi. Prosedur di bagian ini menunjukkan caranya kepada Anda. Anda dapat menggunakan AWS Management Console atau AWS CLI.

Anda harus memiliki izin sebagai peran rds_superuser untuk melakukan semua tugas ini.

Langkah-langkah berikut mengasumsikan bahwa cluster Aurora PostgreSQL DB Anda dikaitkan dengan grup parameter cluster DB kustom.

Untuk mengatur pg_ad_mapping ekstensi
  1. Masuk ke AWS Management Console dan buka konsol Amazon RDS di https://console.aws.amazon.com/rds/.

  2. Di panel navigasi, pilih instance Writer cluster PostgreSQL DB Aurora Anda.

  3. Buka tab Konfigurasi untuk instance penulis cluster Aurora PostgreSQL DB Anda. Di antara detail Instans, temukan tautan Grup parameter.

  4. Pilih tautan untuk membuka parameter kustom yang terkait dengan klaster DB Aurora PostgreSQL Anda.

  5. Di kolom pencarian Parameter, ketik shared_pre untuk menemukan parameter shared_preload_libraries.

  6. Pilih Edit parameter untuk mengakses nilai properti.

  7. Tambahkan pg_ad_mapping ke daftar di kolom Nilai. Gunakan koma untuk memisahkan item dalam daftar nilai.

    Gambar parameter shared_preload_libaries dengan pgAudit yang ditambahkan.
  8. Reboot instance penulis cluster Aurora PostgreSQL DB Anda sehingga perubahan Anda pada parameter berlaku. shared_preload_libraries

  9. Ketika instans tersedia, verifikasi bahwa pg_ad_mapping telah diinisialisasi. Gunakan psql untuk terhubung ke instance penulis cluster Aurora PostgreSQL DB Anda, dan kemudian jalankan perintah berikut.

    SHOW shared_preload_libraries; shared_preload_libraries -------------------------- rdsutils,pg_ad_mapping (1 row)
  10. Dengan pg_ad_mapping diinisialisasi, Anda sekarang dapat membuat ekstensi. Anda perlu membuat ekstensi setelah menginisialisasi perpustakaan untuk mulai menggunakan fungsi yang disediakan oleh ekstensi ini.

    CREATE EXTENSION pg_ad_mapping;
  11. Tutup sesi psql.

    labdb=> \q
Untuk mengatur pg_ad_mapping

Untuk mengatur pg_ad_mapping menggunakan AWS CLI, Anda memanggil modify-db-parameter-groupoperasi untuk menambahkan parameter ini dalam grup parameter kustom Anda, seperti yang ditunjukkan dalam prosedur berikut.

  1. Gunakan AWS CLI perintah berikut pg_ad_mapping untuk menambah shared_preload_libraries parameter.

    aws rds modify-db-parameter-group \ --db-parameter-group-name custom-param-group-name \ --parameters "ParameterName=shared_preload_libraries,ParameterValue=pg_ad_mapping,ApplyMethod=pending-reboot" \ --region aws-region
  2. Gunakan AWS CLI perintah berikut untuk me-reboot instance penulis cluster Aurora PostgreSQL DB Anda sehingga pg_ad_mapping diinisialisasi.

    aws rds reboot-db-instance \ --db-instance-identifier writer-instance \ --region aws-region
  3. Saat instans tersedia, verifikasikan bahwa pg_ad_mapping telah diinisialisasi. Gunakan psql untuk terhubung ke instance penulis cluster Aurora PostgreSQL DB Anda, dan kemudian jalankan perintah berikut.

    SHOW shared_preload_libraries; shared_preload_libraries -------------------------- rdsutils,pg_ad_mapping (1 row)

    Dengan pg_ad_mapping diinisialisasi, Anda sekarang dapat membuat ekstensi.

    CREATE EXTENSION pg_ad_mapping;
  4. Tutup sesi psql sehingga Anda dapat menggunakan AWS CLI.

    labdb=> \q

Mengambil SID Grup Direktori Aktif di PowerShell

Security identifier (SID) digunakan untuk mengidentifikasi prinsip keamanan atau kelompok keamanan secara unik. Setiap kali grup keamanan atau akun dibuat di Active Directory, SID ditugaskan untuk itu. Untuk mengambil SID grup keamanan AD dari direktori aktif, Anda dapat menggunakan cmdlet Get-AdGroup dari mesin klien windows yang bergabung dengan domain Active Directory tersebut. Parameter Identity menentukan nama grup Active Directory untuk mendapatkan SID yang sesuai.

Contoh berikut mengembalikan SID grup AD adgroup1.

C:\Users\Admin> Get-ADGroup -Identity adgroup1 | select SID SID ----------------------------------------------- S-1-5-21-3168537779-1985441202-1799118680-1612

Memetakan peran DB dengan grup keamanan AD

Anda harus secara eksplisit menyediakan grup keamanan AD dalam database sebagai peran PostgreSQL DB. Pengguna AD, yang merupakan bagian dari setidaknya satu grup keamanan AD yang disediakan akan mendapatkan akses ke database. Anda tidak boleh memberikan rds_ad role peran DB berbasis keamanan grup AD. Otentikasi Kerberos untuk grup keamanan akan dipicu dengan menggunakan akhiran nama domain seperti user1@example.com. Peran DB ini tidak dapat menggunakan Password atau autentikasi IAM untuk mendapatkan akses ke database.

catatan

Pengguna AD yang memiliki peran DB terkait dalam database dengan rds_ad peran yang diberikan kepada mereka, tidak dapat masuk sebagai bagian dari grup keamanan AD. Mereka akan mendapatkan akses melalui peran DB sebagai pengguna individu.

Misalnya, grup akun adalah grup keamanan di AD tempat Anda ingin menyediakan grup keamanan ini di Aurora PostgreSQL sebagai peran akun.

Grup Keamanan AD Peran PosgreSQL DB
akun-grup akun-peran

Saat memetakan peran DB dengan grup keamanan AD, Anda harus memastikan bahwa peran DB memiliki atribut LOGIN yang ditetapkan dan memiliki hak istimewa CONNECT ke database login yang diperlukan.

postgres => alter role accounts-role login; ALTER ROLE postgres => grant connect on database accounts-db to accounts-role;

Admin sekarang dapat melanjutkan untuk membuat pemetaan antara grup keamanan AD dan peran PostgreSQL DB.

admin=>select pgadmap_set_mapping('accounts-group', 'accounts-role', <SID>, <Weight>);

Untuk informasi tentang mengambil SID grup keamanan AD, lihatMengambil SID Grup Direktori Aktif di PowerShell.

Mungkin ada kasus di mana pengguna AD termasuk dalam beberapa grup, dalam hal ini, pengguna AD akan mewarisi hak istimewa peran DB, yang disediakan dengan bobot tertinggi. Jika kedua peran memiliki bobot yang sama, pengguna AD akan mewarisi hak istimewa peran DB yang sesuai dengan pemetaan yang ditambahkan baru-baru ini. Rekomendasinya adalah untuk menentukan bobot yang mencerminkan izin/hak istimewa relatif dari peran DB individu. Lebih tinggi izin atau hak istimewa peran DB, lebih tinggi bobot yang harus dikaitkan dengan entri pemetaan. Ini akan menghindari ambiguitas dua pemetaan yang memiliki bobot yang sama.

Tabel berikut menunjukkan contoh pemetaan dari grup keamanan AD ke peran Aurora PostgreSQL DB.

Grup Keamanan AD Peran PosgreSQL DB Berat Badan
akun-grup akun-peran 7
kelompok penjualan peran penjualan 10
kelompok pengembang peran pengembang 7

Dalam contoh berikut, user1 akan mewarisi hak istimewa peran penjualan karena memiliki bobot yang lebih tinggi sementara user2 akan mewarisi hak istimewa sebagai pemetaan untuk peran ini dibuat dev-role setelahnyaaccounts-role, yang memiliki bobot yang sama dengan. accounts-role

nama pengguna Keanggotaan Grup Keamanan
user1 akun-kelompok penjualan-kelompok
user2 akun-grup dev-group

Perintah psql untuk membuat, membuat daftar, dan menghapus pemetaan ditunjukkan di bawah ini. Saat ini, tidak mungkin untuk memodifikasi entri pemetaan tunggal. Entri yang ada perlu dihapus dan pemetaan dibuat ulang.

admin=>select pgadmap_set_mapping('accounts-group', 'accounts-role', 'S-1-5-67-890', 7); admin=>select pgadmap_set_mapping('sales-group', 'sales-role', 'S-1-2-34-560', 10); admin=>select pgadmap_set_mapping('dev-group', 'dev-role', 'S-1-8-43-612', 7); admin=>select * from pgadmap_read_mapping(); ad_sid | pg_role | weight | ad_grp -------------+----------------+--------+--------------- S-1-5-67-890 | accounts-role | 7 | accounts-group S-1-2-34-560 | sales-role | 10 | sales-group S-1-8-43-612 | dev-role | 7 | dev-group (3 rows)

Pencatatan/audit identitas pengguna AD

Gunakan perintah berikut untuk menentukan peran database yang diwarisi oleh pengguna saat ini atau sesi:

postgres=>select session_user, current_user; session_user | current_user -------------+-------------- dev-role | dev-role (1 row)

Untuk menentukan identitas utama keamanan AD, gunakan perintah berikut:

postgres=>select principal from pg_stat_gssapi where pid = pg_backend_pid(); principal ------------------------- user1@example.com (1 row)

Saat ini, identitas pengguna AD tidak terlihat di log audit. log_connectionsParameter dapat diaktifkan untuk mencatat pembentukan sesi DB. Untuk informasi selengkapnya, lihat log_connections. Output untuk ini termasuk identitas pengguna AD, seperti yang ditunjukkan di bawah ini. PID backend yang terkait dengan output ini kemudian dapat membantu tindakan atribut kembali ke pengguna AD yang sebenarnya.

pgrole1@postgres:[615]:LOG: connection authorized: user=pgrole1 database=postgres application_name=psql GSS (authenticated=yes, encrypted=yes, principal=Admin@EXAMPLE.COM)

Batasan

  • ID Microsoft Entra yang dikenal sebagai Azure Active Directory tidak didukung.

Menggunakan fungsi dari pg_ad_mapping ekstensi

pg_ad_mappingekstensi memberikan dukungan untuk fungsi-fungsi berikut:

pgadmap_set_mapping

Fungsi ini menetapkan pemetaan antara grup keamanan AD dan peran Database dengan bobot terkait.

Sintaks

pgadmap_set_mapping( ad_group, db_role, ad_group_sid, weight)

Argumen

Parameter Deskripsi
ad_group Nama Grup AD. Nilai tidak bisa null atau string kosong.
db_role Peran database yang akan dipetakan ke Grup AD yang ditentukan. Nilai tidak bisa null atau string kosong.
ad_group_id Pengidentifikasi keamanan yang digunakan untuk mengidentifikasi grup AD secara unik. Nilai dimulai dengan 'S-1-' dan tidak dapat berupa string nol atau kosong. Untuk informasi selengkapnya, lihat Mengambil SID Grup Direktori Aktif di PowerShell.
berat Berat yang terkait dengan peran database. Peran dengan bobot tertinggi diutamakan ketika pengguna adalah anggota dari beberapa grup. Nilai default berat adalah 1.

Jenis pengembalian

None

Catatan penggunaan

Fungsi ini menambahkan pemetaan baru dari grup keamanan AD ke peran database. Itu hanya dapat dieksekusi pada instance DB utama dari cluster DB oleh pengguna yang memiliki hak istimewa rds_superuser.

Contoh-contoh

postgres=> select pgadmap_set_mapping('accounts-group','accounts-role','S-1-2-33-12345-67890-12345-678',10); pgadmap_set_mapping (1 row)

pgadmap_read_mapping

Fungsi ini mencantumkan pemetaan antara grup keamanan AD dan peran DB yang disetel menggunakan pgadmap_set_mapping fungsi.

Sintaks

pgadmap_read_mapping()

Argumen

None

Jenis pengembalian

Parameter Deskripsi
ad_group_id Pengidentifikasi keamanan yang digunakan untuk mengidentifikasi grup AD secara unik. Nilai dimulai dengan 'S-1-' dan tidak dapat berupa string nol atau kosong. Untuk informasi lebih lanjut, lihat Mengambil SID Grup Direktori Aktif di PowerShell .accounts-role@example.com
db_role Peran database yang akan dipetakan ke Grup AD yang ditentukan. Nilai tidak bisa null atau string kosong.
berat Berat yang terkait dengan peran database. Peran dengan bobot tertinggi diutamakan ketika pengguna adalah anggota dari beberapa grup. Nilai default berat adalah 1.
ad_group Nama Grup AD. Nilai tidak bisa null atau string kosong.

Catatan penggunaan

Panggil fungsi ini untuk mencantumkan semua pemetaan yang tersedia antara grup keamanan AD dan peran DB.

Contoh-contoh

postgres=> select * from pgadmap_read_mapping(); ad_sid | pg_role | weight | ad_grp ------------------------------------+---------------+--------+------------------ S-1-2-33-12345-67890-12345-678 | accounts-role | 10 | accounts-group (1 row) (1 row)

pgadmap_reset_mapping

Fungsi ini me-reset satu atau semua pemetaan yang diatur menggunakan fungsi. pgadmap_set_mapping

Sintaks

pgadmap_reset_mapping( ad_group_sid, db_role, weight)

Argumen

Parameter Deskripsi
ad_group_id Pengidentifikasi keamanan yang digunakan untuk mengidentifikasi grup AD secara unik.
db_role Peran database yang akan dipetakan ke Grup AD yang ditentukan.
berat Berat yang terkait dengan peran database.

Jika tidak ada argumen yang diberikan, semua pemetaan peran grup AD ke DB disetel ulang. Entah semua argumen perlu disediakan atau tidak sama sekali.

Jenis pengembalian

None

Catatan penggunaan

Panggil fungsi ini untuk menghapus grup AD tertentu ke pemetaan peran DB atau untuk mengatur ulang semua pemetaan. Fungsi ini hanya dapat dijalankan pada instance DB utama dari cluster DB oleh pengguna yang memiliki rds_superuser hak istimewa.

Contoh-contoh

postgres=> select * from pgadmap_read_mapping(); ad_sid | pg_role | weight | ad_grp --------------------------------+--------------+-------------+------------------- S-1-2-33-12345-67890-12345-678 | accounts-role| 10 | accounts-group S-1-2-33-12345-67890-12345-666 | sales-role | 10 | sales-group (2 rows) postgres=> select pgadmap_reset_mapping('S-1-2-33-12345-67890-12345-678', 'accounts-role', 10); pgadmap_reset_mapping (1 row) postgres=> select * from pgadmap_read_mapping(); ad_sid | pg_role | weight | ad_grp --------------------------------+--------------+-------------+--------------- S-1-2-33-12345-67890-12345-666 | sales-role | 10 | sales-group (1 row) postgres=> select pgadmap_reset_mapping(); pgadmap_reset_mapping (1 row) postgres=> select * from pgadmap_read_mapping(); ad_sid | pg_role | weight | ad_grp --------------------------------+--------------+-------------+-------------- (0 rows)