Menggunakan grup keamanan AD untuk kontrol akses Aurora Postgre SQL - 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 Postgre SQL

Dari Aurora Postgre SQL 14.10 dan 15.5 versi, kontrol akses Aurora Postgre dapat dikelola menggunakan SQL AWS Directory Service untuk grup keamanan Microsoft Active Directory (AD). Versi Aurora Postgre sebelumnya SQL 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 Postgre SQL sekarang menyediakan pg_ad_mapping ekstensi untuk mengelola pemetaan antara grup keamanan AD dan peran DB di cluster Aurora Postgre. SQL Untuk informasi selengkapnya tentang fungsi yang disediakan olehpg_ad_mapping, lihatMenggunakan fungsi dari pg_ad_mapping ekstensi.

Untuk menyiapkan pg_ad_mapping ekstensi pada cluster SQL DB Aurora Postgre Anda, pertama-tama Anda menambahkan pg_ad_mapping ke pustaka bersama pada grup parameter cluster DB kustom untuk cluster DB Aurora Postgre Anda. SQL Untuk informasi tentang membuat grup parameter cluster DB kustom, lihat. 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 SQL DB Aurora Postgre Anda dikaitkan dengan grup parameter cluster DB kustom.

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

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

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

  4. Pilih tautan untuk membuka parameter khusus yang terkait dengan cluster Aurora SQL Postgre DB 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 shared_preload_libaries parameter dengan pgAudit ditambahkan.
  8. Reboot instance penulis cluster Aurora Postgre SQL DB Anda sehingga perubahan Anda pada shared_preload_libraries parameter berlaku.

  9. Ketika instans tersedia, verifikasi bahwa pg_ad_mapping telah diinisialisasi. Gunakan psql untuk terhubung ke instance penulis cluster Aurora Postgre SQL 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 di grup parameter kustom Anda, seperti yang ditunjukkan dalam prosedur berikut.

  1. Gunakan yang berikut ini AWS CLI perintah untuk pg_ad_mapping 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 yang berikut ini AWS CLI perintah untuk me-reboot instance penulis cluster Aurora Postgre SQL 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 Postgre SQL 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 psql sesi sehingga Anda dapat menggunakan AWS CLI.

    labdb=> \q

Mengambil Grup SID 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 a SID ditugaskan untuk itu. Untuk mengambil grup keamanan AD SID dari direktori aktif, Anda dapat menggunakan Get- ADGroup cmdlet dari mesin klien windows yang digabungkan dengan domain Active Directory tersebut. Parameter Identity menentukan nama grup Active Directory untuk mendapatkan yang sesuaiSID.

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 perlu secara eksplisit menyediakan grup keamanan AD dalam database sebagai peran SQL Postgre 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 Kata Sandi atau IAM otentikasi 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 Postgre sebagai peran akun. SQL

Grup Keamanan AD Peran Posgre DB SQL
akun-grup akun-peran

Saat memetakan peran DB dengan grup keamanan AD, Anda harus memastikan bahwa peran DB memiliki LOGIN atribut yang ditetapkan dan memiliki CONNECT hak istimewa untuk 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 Postgre DBSQL.

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

Untuk informasi tentang pengambilan SID grup keamanan AD, lihatMengambil Grup SID 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 SQL Postgre DB.

Grup Keamanan AD Peran Posgre DB SQL 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. Backend PID 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 Grup SID 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

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 Grup SID 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

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

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)