Mengintegrasikan dukungan grup Active Directory dengan AlloyDB Omni

Pilih versi dokumentasi:

Halaman ini menjelaskan cara menyiapkan dan mengelola autentikasi dan otorisasi berbasis grup Active Directory di AlloyDB Omni. Dukungan berbasis grup Active Directory mengotomatiskan pengelolaan keanggotaan peran PostgreSQL berdasarkan keanggotaan grup pengguna di Active Directory Anda, yang menyederhanakan pengelolaan pengguna dan memastikan izin disinkronkan.

Untuk mengetahui informasi selengkapnya, lihat Ringkasan Active Directory.

Alur kerja integrasi Active Directory

Integrasi Active Directory diimplementasikan menggunakan ekstensi PostgreSQL (google_pg_auth) seperti yang ditunjukkan dalam alur kerja berikut:

  1. Login pengguna: pengguna melakukan autentikasi ke AlloyDB Omni menggunakan kredensial Active Directory standar mereka menggunakan GSSAPI.
  2. Pembuatan peran otomatis: jika peran PostgreSQL yang sesuai untuk pengguna tidak ada, sistem akan membuatnya secara otomatis—misalnya, CREATE ROLE "user@REALM" WITH LOGIN;.
  3. Pemeriksaan grup LDAP: sistem terhubung dengan aman ke Active Directory Anda menggunakan LDAP untuk mengambil keanggotaan grup pengguna saat ini.
  4. Sinkronisasi keanggotaan: sistem membandingkan grup Active Directory pengguna dengan pemetaan yang Anda konfigurasi.
    • Jika pengguna berada dalam grup Active Directory yang dipetakan, tetapi tidak berada dalam grup PostgreSQL yang sesuai, pengguna akan diberi keanggotaan.
    • Jika pengguna tidak berada dalam grup Active Directory yang dipetakan, tetapi berada dalam grup PostgreSQL yang sesuai, keanggotaan pengguna akan dicabut.
  5. Login selesai: koneksi pengguna telah diselesaikan, dan pengguna telah login ke database. Izin pengguna ditentukan oleh peran PostgreSQL tempat pengguna menjadi anggotanya, yang disinkronkan dengan status grup Active Directory-nya.

Sinkronisasi ini terjadi secara otomatis pada setiap login pengguna, yang memastikan hak akses PostgreSQL mencerminkan status Active Directory Anda saat ini.

Sebelum memulai

Sebelum mengintegrasikan dukungan grup Active Directory dengan AlloyDB Omni, pastikan Anda memenuhi persyaratan berikut.

  • Autentikasi GSSAPI: Autentikasi berbasis GSSAPI harus dikonfigurasi dan beroperasi untuk instance AlloyDB Omni Anda. Untuk mengetahui informasi selengkapnya, lihat Mengintegrasikan Active Directory dengan AlloyDB Omni.
  • Peran grup PostgreSQL: Anda harus membuat peran grup PostgreSQL secara manual yang ingin dipetakan ke grup Active Directory, seperti yang ditunjukkan dalam contoh berikut:

    CREATE ROLE 'postgres_developers';
    CREATE ROLE 'postgres_read_only';
    
  • Izin: Anda harus menetapkan izin database secara manual—misalnya, SELECT dan INSERT—ke peran grup PostgreSQL ini. Integrasi hanya mengelola keanggotaan, tetapi tidak mengelola hak istimewa grup itu sendiri, seperti yang ditunjukkan dalam contoh berikut:

    GRANT SELECT ON ALL TABLES IN SCHEMA sales TO postgres_read_only;
    GRANT USAGE ON SCHEMA finance TO postgres_developers;
    GRANT USAGE ON SCHEMA sales TO postgres_read_only;
    GRANT SELECT, INSERT ON finance.transactions TO postgres_developers;
    

Mengonfigurasi dukungan grup Active Directory

Untuk mengonfigurasi dukungan grup Active Directory di AlloyDB Omni, Anda harus mengaktifkan ekstensi google_pg_auth, memberikan detail Active Directory Anda dalam file postgresql.conf, dan menangani kredensial dengan aman.

  1. Berikan sandi LDAP.

    Anda harus memberikan sandi untuk akun layanan ldap_bind_dn ke penampung AlloyDB Omni menggunakan variabel lingkungan AD_LDAP_PASSWORD, seperti yang ditunjukkan dalam contoh berikut:

    docker run -d --name CONTAINER_NAME \
              -e POSTGRES_PASSWORD=NEW_PASSWORD \
              -e AD_LDAP_PASSWORD=AD_LDAP_PASSWORD \
              -vDATA_DIR:/var/lib/postgresql/data \
              -p HOST_PORT:5432 \
              --restart=always \
              google/alloydbomni:IMAGE_TAG
    
  2. Aktifkan ekstensi google_pg_auth.

    1. Di file postgresql.conf, tambahkan atau ubah parameter berikut untuk mengaktifkan ekstensi dan mengonfigurasi koneksi LDAP. File postgresql.conf berada di direktori data yang Anda pasang saat memulai image AlloyDB Omni.

      # ---------------------------------------------------------------------------
      # ALLOYDB ACTIVE DIRECTORY INTEGRATION SETTINGS
      # ---------------------------------------------------------------------------
      
      google_pg_auth.enable_auth = on
      google_pg_auth.ldap_uri = "AD_LDAP_SERVER_HOST"
      google_pg_auth.ldap_base_dn = AD_LDAP_BASE_DN
      google_pg_auth.ldap_bind_dn = AD_LDAP_BIND_DN
      google_pg_auth.auth_cache_ttl_sec = 3600
      

      Lakukan penggantian berikut:

      • AD_LDAP_SERVER_HOST: URI untuk server LDAP Active Directory Anda—misalnya, ldap://ad-controller.example.com.
      • AD_LDAP_BASE_DN: Base Distinguished Name (DN) untuk melakukan penelusuran LDAP—misalnya, DC=example,DC=com.
      • AD_LDAP_BIND_DN: Distinguished Name (DN) akun pengguna Active Directory yang digunakan AlloyDB Omni untuk terhubung dan melakukan penelusuran LDAP—misalnya, setupadmin@ad-example.com.
      • auth_cache_ttl_sec adalah waktu yang berlalu hingga data di-cache oleh AlloyDB Omni per pengguna sebelum AlloyDB Omni mencoba menghubungi server LDAP lagi. Nilai auth_cache_ttl_sec dapat berkisar dari minimum 60 detik hingga maksimum 86.400 detik (24 jam).
    2. Tambahkan google_pg_auth ke parameter shared_preload_libraries di postgresql.conf.

    3. Tambahkan baris berikut ke file postgresql.conf Anda:

      shared_preload_libraries='google_pg_auth,google_columnar_engine,google_job_scheduler,google_storage'
      
    4. Mulai ulang database.

      docker restart CONTAINER_NAME
      
  3. Konfigurasi sertifikat LDAPS.

    Untuk memastikan koneksi yang aman ke server Active Directory Anda melalui LDAPS, Anda memerlukan sertifikat CA.

    Tempatkan file sertifikat LDAPS Anda di lokasi yang telah ditentukan sebelumnya berikut dalam image AlloyDB Omni: /etc/ldap/ldap.crt.

Mengelola pemetaan grup

Anda dapat membuat dan mengelola pemetaan antara grup Active Directory dan peran PostgreSQL menggunakan fungsi SQL.

Login ke cluster dan muat ekstensi

docker exec -it CONTAINER_NAME psql -h localhost -U postgres
postgres=# CREATE EXTENSION google_pg_auth;
CREATE EXTENSION

Membuat pemetaan grup

Untuk memetakan grup Active Directory ke peran grup PostgreSQL yang sudah Anda buat, gunakan fungsi map_ad_group():

SELECT google_pg_auth.map_ad_group(ad_group_name TEXT, ad_group_sid TEXT, pg_role_name TEXT);

Misalnya, untuk memetakan grup Active Directory ad-developers ke peran PostgreSQL pg-developers, gunakan perintah berikut:

SELECT google_pg_auth.map_ad_group('ad-developers', 'S-1-5-21-.....', 'postgres_read_only');

Untuk mengambil SID grup tertentu di Active Directory, gunakan perintah berikut di server Active Directory Anda:

C:\Users\Admin> Get-ADGroup -Identity ad-developers | select SID

             SID
-----------------------------------------------
S-1-5-21-3168537779-1985441202-1799118680-1612

Menghapus pemetaan grup

Untuk menghapus pemetaan yang ada, gunakan fungsi unmap_ad_group(). Fungsi ini menghentikan sinkronisasi untuk grup tersebut, tetapi tidak menghapus pengguna dari grup PostgreSQL jika mereka sudah menjadi anggota.

SELECT google_pg_auth.unmap_ad_group(ad_group_sid TEXT, pg_role_name TEXT);

Lihat contoh berikut:

SELECT google_pg_auth.unmap_ad_group('quinn@google.com', 'postgres_read_only');

Terhubung ke database AlloyDB Omni

Login ke database AlloyDB Omni menggunakan pengguna Active Directory. Anda harus mengaktifkan kinit di klien tempat Anda terhubung.

Dalam contoh berikut, pod postgres-client telah menginstal kinit dan psql serta dikonfigurasi untuk terhubung ke cluster AlloyDB Omni menggunakan klien psql.

root@postgres-client:/# kinit AD_USER_NAME
Password for user1REALM:

root@postgres-client:/# psql -h ALLOYDB_SERVER_HOST_NAME -U AD_USER_NAME@REALM -d postgres
psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3)
GSSAPI-encrypted connection
Type "help" for help.

user1=#

Akses Anda di database AlloyDB Omni ditentukan secara otomatis berdasarkan hal berikut:

  • Keanggotaan Anda saat ini di grup Active Directory.
  • Pemetaan yang ditentukan oleh administrator antara grup Active Directory tersebut dan peran PostgreSQL.
  • Izin yang diberikan oleh administrator ke peran PostgreSQL tersebut.

Jika ini adalah pertama kalinya Anda terhubung, peran pengguna PostgreSQL Anda (your_ad_user@YOURDOMAIN.COM) akan dibuat secara otomatis.

Setiap kali Anda login, sistem akan memeriksa keanggotaan grup Active Directory Anda saat ini dan memperbarui keanggotaan peran PostgreSQL yang sesuai agar cocok. Anda tidak perlu melakukan tindakan tertentu agar sinkronisasi ini terjadi.

Contoh koneksi database

Misalnya, asumsikan bahwa pengguna Quinn adalah bagian dari grup Active Directory bernama ad_developers. Administrator memetakan ad_developers ke peran postgres bernama pg_read_only. Peran ini memiliki akses baca ke tabel bernama sales. Saat pengguna login, mereka dapat mengakses tabel.

root@postgres-client:/# kinit quinn@REALM
Password for quinn@YOUR.REALM:

root@postgres-client:/# psql -h ALLOYDB_SERVER_HOST_NAME -U quinn@REALM -d postgres
psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3)
GSSAPI-encrypted connection
Type "help" for help.

postgres=# select * from sales;
// Query will be run successfully

Dalam contoh berikut, Quinn dihapus dari grup ad_developers di Active Directory:

root@postgres-client:/# kinit quinn@REALM
Password for quinn@YOUR.REALM:

root@postgres-client:/# psql -h ALLOYDB_SERVER_HOST_NAME -U quinn@REALM -d postgres
psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3)
GSSAPI-encrypted connection
Type "help" for help.

postgres=# select * from sales;
// Query will fail

Batasan

  • Pengelolaan grup dan izin secara manual: fitur ini hanya mengotomatiskan keanggotaan pengguna dalam grup PostgreSQL yang ada. Pembuatan grup tersebut dan pemberian izinnya tetap menjadi tugas administratif manual.
  • Latensi sinkronisasi: keanggotaan hanya disinkronkan saat pengguna login. Perubahan apa pun yang dilakukan pada keanggotaan grup pengguna di Active Directory hanya tercermin di AlloyDB Omni pada sesi login pengguna berikutnya.
  • Performa: pencarian LDAP menambahkan sedikit latensi ke proses login pengguna awal. Penyimpanan ke dalam cache membantu mengurangi latensi ini untuk proses login berikutnya dalam durasi waktu aktif yang dikonfigurasi (auth_cache_ttl_sec).
  • Penanganan error: jika server LDAP tidak dapat dijangkau, atau jika terjadi error lain selama proses sinkronisasi, AlloyDB Omni akan mencatat error tersebut. Namun, login pengguna akan tetap berhasil karena autentikasi GSSAPI berhasil. Hanya sinkronisasi keanggotaan grup untuk sesi tersebut yang akan gagal.

Langkah berikutnya