Tentang kebijakan sandi
Jika pengguna database aplikasi Anda melakukan autentikasi dengan AlloyDB Omni menggunakan metode berbasis sandi bawaan, Anda dapat membuat autentikasi lebih aman dengan menerapkan sandi yang kuat. Anda dapat menentukan dan mengaktifkan penerapan sandi dengan menetapkan kebijakan sandi AlloyDB Omni.
Batasan kebijakan sandi
Kebijakan sandi AlloyDB Omni memiliki batasan berikut:
Kebijakan sandi hanya berlaku untuk sandi yang dibuat setelah Anda menetapkan kebijakan. Sandi pengguna yang ada tidak terpengaruh oleh perubahan dalam kebijakan sandi.
Kebijakan sandi hanya berlaku untuk sandi yang dimasukkan sebagai teks biasa. Kebijakan sandi tidak berlaku untuk sandi yang dimasukkan sebagai string terenkripsi.
Menetapkan kebijakan sandi AlloyDB Omni
Anda menetapkan kebijakan sandi dengan memperbarui parameter sandi Grand Unified Configuration (GUC) dalam file konfigurasi postgresql.conf. Untuk mempelajari cara menetapkan parameter GUC, lihat
Mengonfigurasi flag database AlloyDB Omni.
Kebijakan sandi untuk AlloyDB Omni dapat mencakup opsi berikut:
Larang nama pengguna: mencegah nama pengguna digunakan dalam sandi.
Kompleksitas sandi: periksa apakah sandi berisi jumlah karakter huruf kecil, huruf besar, numerik, dan non-alfanumerik yang diizinkan. Periksa juga apakah panjang sandi valid.
Masa berlaku sandi: pastikan sandi dirotasi secara berkala.
Untuk mengetahui daftar flag kebijakan sandi yang didukung AlloyDB Omni, lihat Flag kebijakan sandi.
Untuk mematuhi standar keamanan dan menyelaraskan dengan panduan pemberi rekomendasi keamanan, Anda harus mengaktifkan ketiga opsi tersebut bersama-sama dengan mengonfigurasi flag penerapan utamanya ke ON:
password.enforce_password_does_not_contain_usernamepassword.enforce_complexitypassword.enforce_expiration
Jika Anda menetapkan salah satu dari ketiga flag ini ke OFF atau menghapusnya, pemberi rekomendasi keamanan akan menandai instance sebagai tidak memiliki kebijakan sandi yang diaktifkan.
Memuat library validasi sandi
Agar kebijakan sandi berlaku di AlloyDB Omni, library alloydb_password_validation harus dimuat. Untuk memuat library ini, lakukan hal berikut:
Temukan file konfigurasi
postgresql.confuntuk penginstalan AlloyDB Omni Anda dan buka di editor teks.Temukan baris
shared_preload_librariesdan periksa apakah baris tersebut menyertakanalloydb_password_validation. Jika tidak, Anda harus menambahkannya. Setelah selesai, barisshared_preload_librariesAnda akan terlihat seperti berikut:shared_preload_libraries='google_columnar_engine,google_job_scheduler,google_storage,alloydb_password_validation'
Menerapkan kompleksitas sandi
Untuk menerapkan kebijakan kompleksitas sandi, lakukan hal berikut:
Verifikasi bahwa file
postgresql.confAnda memuat library validasi sandi.Tetapkan flag ke
ON.password.enforce_complexityGunakan flag kebijakan sandi untuk menentukan kebijakan sandi Anda.
Misalnya, untuk menerapkan kebijakan sandi yang menyatakan bahwa sandi harus berisi setidaknya satu huruf besar, satu angka, dan panjangnya minimal 10 karakter, Anda menetapkan hal berikut dalam file postgresql.conf:
password.enforce_complexity = ONpassword.min_uppercase_letters = 1password.min_numerical_chars = 1password.min_pass_length = 10
Setelah flag ini ditetapkan, upaya untuk menetapkan sandi pengguna database yang tidak mematuhi kebijakan sandi ini akan gagal. Misalnya, dengan kebijakan ini ditetapkan, perintah klien psql berikut akan gagal karena sandi foo kurang dari 10 karakter dan tidak berisi angka atau karakter huruf besar.
CREATE USER USERNAME WITH PASSWORD foo;
Menerapkan masa berlaku sandi
Untuk menerapkan kebijakan masa berlaku sandi, lakukan hal berikut:
Verifikasi bahwa file
postgresql.confAnda memuat library validasi sandi.Tetapkan flag ke
ON.password.enforce_expirationTetapkan flag
password.expiration_in_dayske jumlah hari setelah sandi ditetapkan hingga masa berlakunya berakhir.Tetapkan
password.notify_expiration_in_daysflag ke jumlah hari sebelum masa berlaku sandi berakhir hingga pengguna mulai menerima notifikasi masa berlaku sandi.
Misalnya, untuk menerapkan kebijakan sandi yang menyatakan bahwa masa berlaku sandi berakhir setelah 30 hari dan pengguna akan diberi tahu 15 hari sebelum masa berlaku sandi berakhir, Anda harus menetapkan hal berikut dalam file postgresql.conf:
password.enforce_expiration = ONpassword.expiration_in_days = 30password.notify_expiration_in_days = 15
Jika masa berlaku sandi pengguna berakhir, pengguna tersebut tidak dapat terhubung ke AlloyDB Omni. Untuk mereset sandi pengguna, lakukan hal berikut:
Terhubung ke AlloyDB Omni menggunakan
psql. Misalnya, jika Anda menginstal AlloyDB Omni menggunakan Docker, jalankan perintah berikut:sh docker exec -it CONTAINER-NAME psql -h localhost -U postgresDi perintah
postgres=#, jalankan perintah berikut:ALTER USER USERNAME WITH 'NEW-PASSWORD';
Untuk mengetahui informasi selengkapnya tentang cara mengubah sandi pengguna, lihat
ALTER ROLE dalam
dokumentasi PostgreSQL.
Menerapkan autentikasi berbasis sandi untuk akun administrator internal
Penerapan sandi untuk akun administrator mengotomatiskan dan memusatkan rotasi dan pembaruan sandi sistem penting yang aman, biasanya menggunakan alat eksternal seperti Vault. Fitur ini memungkinkan kepatuhan terhadap kebijakan zero-trust dengan menerapkan autentikasi berbasis sandi untuk akun administrator penting yang digunakan AlloyDB Omni untuk mengelola berbagai proses internal.
Penerapan sandi didukung untuk akun database berikut:
alloydbadmin: akun superuser untuk pengontrol Kubernetes (K8s).alloydbmonitor: akun hanya baca untuk mengumpulkan metrik database.
Untuk mengaktifkan penerapan, Anda mengonfigurasi spesifikasi cluster database untuk mereferensikan objek secret Kubernetes yang menyimpan sandi untuk akun ini. Proses ini meningkatkan keamanan dan mengurangi overhead manual yang diperlukan untuk mengelola kredensial untuk akun administrasi internal database Anda.
Mengaktifkan penerapan sandi
Untuk mengaktifkan penerapan sandi saat Anda membuat cluster, ikuti langkah-langkah berikut:
- Pastikan Anda memiliki cluster Kubernetes yang menjalankan operator Kubernetes AlloyDB Omni 1.7.0 atau yang lebih baru.
- Tambahkan atribut
systemUserPasswordRefske spesifikasi DBCluster. Atribut ini harus berisi pasangan nilai kunci yang menautkan setiap nama akun sistem internal—misalnya,alloydbadmindanalloydbmonitor—ke nama objek secret Kubernetes yang sesuai. Sebelum membuat database, pastikan secret Kubernetes yang direferensikan berisi sandi awal untuk pengguna dan format atribut mengikuti struktur ini:
systemUserPasswordRefs: USER_NAME:USER_NAME-PASSWORD-DATABASE_NAME
Mengelola rotasi sandi dengan aman
Setelah mengaktifkan penerapan, gunakan alat eksternal seperti Vault untuk mengelola rotasi sandi berkelanjutan dengan aman.
- Perbarui sandi database. Alat eksternal memperbarui sandi untuk akun sistem langsung di AlloyDB Omni.
Perbarui secret Kubernetes. Alat eksternal kemudian memperbarui objek secret Kubernetes terkait dengan sandi baru.
- Konten objek secret harus berupa pasangan nilai kunci dengan kunci adalah nama database, dan nilainya adalah sandi baru yang dienkode base64.
Sebaiknya gunakan konvensi berikut untuk nama secret:
USER_NAME-pw-DATABASE_NAME
Operator AlloyDB Omni mendeteksi perubahan pada secret Kubernetes dan otomatis memperbarui cache sandi yang digunakan oleh agen database yang berjalan di pod database. Agen kemudian menggunakan sandi baru yang di-cache ini untuk semua operasi database di masa mendatang.
Menonaktifkan penerapan sandi untuk pengguna tertentu
Untuk menonaktifkan penerapan sandi untuk akun sistem tertentu, Anda harus menghapus pengguna tersebut dari daftar systemUserPasswordRefs dalam spesifikasi DBCluster.
- Hapus pengguna. Dalam spesifikasi DBCluster, hapus pasangan nilai kunci yang sesuai dengan pengguna yang ingin Anda kecualikan dari penerapan sandi. Misalnya, jika Anda menonaktifkannya untuk
alloydbadmin, hapusalloydbadmin: alloydbadmin-pw-dbcluster-sample. Terapkan spesifikasi DBCluster yang diubah menggunakan
kubectl apply.Setelah Anda menerapkan spesifikasi yang diperbarui, penerapan sandi akan dinonaktifkan untuk pengguna tersebut.
Tidak mengizinkan nama pengguna dalam sandi
Untuk menerapkan kebijakan yang mencegah sandi berisi nama pengguna, lakukan hal berikut:
Verifikasi bahwa file
postgresql.confAnda memuat library validasi sandi.Tetapkan
password.enforce_password_does_not_contain_usernamekeON.
Misalnya, untuk memastikan bahwa sandi tidak berisi nama pengguna sebagai substring, Anda menetapkan hal berikut dalam file postgresql.conf:
password.enforce_password_does_not_contain_username = ON
Jika flag ini ditetapkan, operasi berikut akan gagal karena sandi
alex-secret berisi nama pengguna alex:
CREATE USER alex WITH PASSWORD 'alex-secret';