Halaman ini menjelaskan cara menyiapkan dan mengelola autentikasi dan otorisasi berbasis grup Active Directory di AlloyDB Omni yang di-deploy di Kubernetes. 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.
Dokumen ini mengasumsikan bahwa Anda sudah memahami cara menerapkan file manifes Kubernetes dan menggunakan alat command line kubectl. Untuk mengetahui informasi selengkapnya, lihat Alat command line (kubectl).
Alur kerja integrasi Active Directory
Integrasi Active Directory diimplementasikan menggunakan ekstensi PostgreSQL
(google_pg_auth
) dalam alur kerja berikut:
- Login pengguna: pengguna melakukan autentikasi ke AlloyDB Omni menggunakan kredensial Active Directory standar mereka menggunakan Generic Security Services Application Programming Interface (GSSAPI).
- Pembuatan peran otomatis: jika peran PostgreSQL yang sesuai untuk pengguna tidak ada, sistem akan membuatnya secara otomatis—misalnya,
CREATE ROLE "user@REALM" WITH LOGIN;
. - Pemeriksaan grup LDAP: sistem terhubung dengan aman ke Active Directory Anda menggunakan LDAP untuk mengambil keanggotaan grup pengguna saat ini.
Sinkronisasi keanggotaan: sistem membandingkan grup Active Directory pengguna dengan pemetaan yang Anda konfigurasi.
- Jika pengguna berada di grup Active Directory yang dipetakan, tetapi tidak berada di 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.
Login selesai: koneksi pengguna telah diselesaikan, dan pengguna telah login ke database. Izin pengguna ditentukan oleh peran PostgreSQL yang 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: Anda harus mengonfigurasi dan mengoperasikan autentikasi berbasis GSSAPI 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
danINSERT
—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, Anda harus menerapkan
UserDefinedAuthentication
Resource Kustom di cluster database yang ada.
Konfigurasi AlloyDB Omni menggunakan kredensial server LDAP. Terapkan manifes resource kustom autentikasi yang ditentukan pengguna berikut:
apiVersion: alloydbomni.dbadmin.goog/v1 kind: UserDefinedAuthentication metadata: name: USER_DEFINED_AUTHENTICATION_NAME namespace: DB_CLUSTER_NAMESPACE spec: dbclusterRef: name: DB_CLUSTER_NAME keytabSecretRef: name: KEYTAB_SECRET_NAME pgHbaEntries: PG_HBA_ENTRIES pgIdentEntries: PG_IDENT_ENTRIES ldapConfiguration: enableGroupMapping: true ldapURI: LDAP_URI ldapBaseDN: LDAP_BASE_DN ldapBindDN: LDAP_BIND_DN cacheTTLSeconds: CACHE_TTL_SECONDS ldap_connection_timeout_ms: LDAP_CONNECTION_TIMEOUT ldapBindPasswordSecretRef: name: LDAP_PASSWORD_SECRET_REF ldapsCertificateSecretRef: name: LDAPS_CERT_SECRET_REF
Lakukan penggantian berikut:
USER_DEFINED_AUTHENTICATION_NAME
: nama UserDefinedConfiguration—misalnya,DB_CLUSTER_NAME-ad-auth
.DB_CLUSTER_NAMESPACE
: namespace Kubernetes untuk rencana cadangan ini. Namespace harus cocok dengan namespace cluster database.DB_CLUSTER_NAME
: nama cluster database Anda, yang Anda tetapkan saat membuatnya.LDAP_URI
: URI server LDAP—misalnya—ldaps://ad.example.com:636
.LDAP_BASE_DN
: DN dasar untuk penelusuran LDAP. (misalnya, DC=ad,DC=alloydb,DC=COM)LDAP_BIND_DN
: Distinguished Name (DN) untuk pengguna bind LDAP.LDAP_PASSWORD_SECRET_REF
: referensi ke secret Kubernetes dengan sandi LDAP. Kunci rahasia ini harus berupapassword
.LDAPS_CERT_SECRET_REF
: (Opsional) Referensi ke secret Kubernetes dengan sertifikat LDAPS. Kunci rahasia ini harus berupaldap.crt
.CACHE_TTL_SECONDS
: (Opsional) Waktu maksimum untuk menunggu sebelum memicu sinkronisasi keanggotaan grup LDAP dalam hitungan detik. Defaultnya adalah 3.600 detik.LDAP_CONNECTION_TIMEOUT
: (Opsional) Waktu tunggu koneksi LDAP dalam milidetik. Defaultnya adalah 5.000 md.
Lihat contoh berikut:
apiVersion: v1 kind: Secret metadata: name: ldaps-secret type: Opaque data: ldap.crt: LDAPS_CERTIFICATE_CONTENT_BASE64_ENCODED --- apiVersion: v1 kind: Secret metadata: name: ldap-password-dbcluster-sample type: Opaque data: password: LDAPS_PASSWORD_CONTENT_BASE64_ENCODED --- apiVersion: v1 kind: Secret metadata: name: db-pw-dbcluster-sample type: Opaque data: dbcluster-sample: POSTGRES_PASSWORD --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: dbcluster-sample spec: databaseVersion: 16.8.0 primarySpec: adminUser: passwordRef: name: db-pw-dbcluster-sample resources: memory: 5Gi cpu: 1 disks: - name: DataDisk size: 10Gi --- apiVersion: v1 kind: Secret metadata: name: db-keytab-dbcluster-sample type: Opaque data: krb5.keytab: | DUMMY_KEYTAB --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: UserDefinedAuthentication metadata: name: dbcluster-sample-ad-auth spec: dbclusterRef: name: dbcluster-sample keytabSecretRef: name: db-keytab-dbcluster-sample pgHbaEntries: - hostgssenc all all 0.0.0.0/0 gss - hostgssenc all all ::1/128 gss - hostssl all all 0.0.0.0/0 scram-sha-256 - hostssl all all ::/0 scram-sha-256 ldapConfiguration: enableGroupMapping: true ldapURI: ldaps://ad.alloydb.com:636 ldapBaseDN: DC=ad,DC=alloydb,DC=COM ldapBindDN: read-only-admin@ad.alloydb.com cacheTTLSeconds: 60 ldapBindPasswordSecretRef: name: ldap-password-dbcluster-sample ldapsCertificateSecretRef: name: ldaps-secret
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
Hubungkan ke AlloyDB Omni yang berjalan di Kubernetes.
export DBPOD=`kubectl get pod --selector=alloydbomni.internal.dbadmin.goog/dbcluster=DB_CLUSTER_NAME,alloydbomni.internal.dbadmin.goog/task-type=database -n DB_CLUSTER_NAMESPACE -o jsonpath='{.items[0].metadata.name}'` kubectl exec -ti $DBPOD -n DB_CLUSTER_NAMESPACE -c database -- 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);
Dalam contoh berikut, grup Active Directory ad-developers
dipetakan
ke peran PostgreSQL pg-developers
:
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()
, yang menghentikan sinkronisasi untuk grup tersebut. Fungsi unmap_ad_group()
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('S-1-5-21-.....', ''postgres_read_only'');
Membuat pemetaan pengguna
Untuk memetakan pengguna Active Directory individual ke peran PostgreSQL yang telah Anda buat, gunakan fungsi map_ad_user()
.
SELECT google_pg_auth.map_ad_user(ad_username TEXT, pg_role_name TEXT);
Misalnya, untuk memetakan pengguna Active Directory quinn@google.com
ke
peran PostgreSQL pg-developers
, lakukan hal berikut:
SELECT google_pg_auth.map_ad_user('quinn@google.com', ''postgres_read_only'');
Menghapus pemetaan pengguna
Untuk menghapus pemetaan yang ada, gunakan fungsi unmap_ad_user()
.
SELECT google_pg_auth.unmap_ad_user(ad_username TEXT, pg_role_name TEXT);
Misalnya, untuk membatalkan pemetaan pengguna Active Directory quinn@google.com
dari peran PostgreSQL pg-developers
, lakukan hal berikut:
SELECT google_pg_auth.unmap_ad_user('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 -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 khusus apa pun agar sinkronisasi ini terjadi.
Contoh koneksi database
Dalam contoh berikut, pengguna Quinn adalah bagian dari grup Active Directory bernama
ad_developers
. Administrator memetakan ad_developers
ke peran postgres
bernama postgres_read_only
. Peran ini memiliki akses baca ke tabel bernama
sales
. Saat pengguna login, mereka dapat mengakses tabel.
root@postgres-client:/# kinit quinnREALM Password for quinn@YOUR.REALM: root@postgres-client:/# psql -h ALLOYDB_SERVER_HOST_NAME -U quinnREALM -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 quinnREALM Password for quinn@YOUR.REALM: root@postgres-client:/# psql -h ALLOYDB_SERVER_HOST_NAME -U quinnREALM -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 adalah tugas administratif manual.
- Latensi sinkronisasi: keanggotaan hanya disinkronkan saat pengguna login. Perubahan apa pun yang dilakukan pada keanggotaan grup pengguna di Active Directory hanya akan ditampilkan di AlloyDB Omni pada sesi login pengguna berikutnya.
- Performa: pencarian LDAP menambahkan sedikit latensi ke proses login pengguna awal. Caching membantu mengurangi latensi ini untuk login berikutnya dalam waktu aktif (
auth_cache_ttl_sec
) yang dikonfigurasi. - 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
- Mengintegrasikan dukungan grup Active Directory dengan AlloyDB Omni.
- Mengintegrasikan dukungan pengguna Active Directory dengan AlloyDB Omni.
- Mengintegrasikan dukungan pengguna Active Directory di Kubernetes.
- Memecahkan masalah integrasi Active Directory di AlloyDB Omni.