Halaman ini menjelaskan audit database menggunakan ekstensi pgAudit, yang membantu Anda mengonfigurasi banyak log yang sering kali diperlukan untuk mematuhi sertifikasi pemerintah, keuangan, dan ISO.
Untuk mengetahui informasi umum tentang ekstensi PostgreSQL di Cloud SQL, lihat Ekstensi PostgreSQL.
Ringkasan
Audit database di Cloud SQL untuk PostgreSQL tersedia melalui ekstensi pgAudit open source.
Dengan ekstensi ini, Anda dapat merekam dan melacak operasi SQL yang dilakukan terhadap instance database tertentu secara selektif. Ekstensi ini memberi Anda kemampuan audit untuk memantau dan mencatat subkumpulan operasi tertentu.
Ekstensi pgAudit berlaku untuk perintah dan kueri SQL yang dijalankan. Sebaliknya, Cloud Audit Logs harus digunakan untuk mengaudit operasi administratif dan pemeliharaan yang dilakukan di instance Cloud SQL.
Lihat halaman Log audit untuk informasi selengkapnya tentang logging audit di Cloud SQL.
Menyiapkan pengauditan database di Cloud SQL
Langkah-langkah untuk logging audit menggunakan ekstensi pgAudit mencakup:
- Mengaktifkan flag
cloudsql.enable_pgaudit
di Cloud SQL. - Menjalankan perintah untuk membuat ekstensi pgAudit.
- Menetapkan nilai untuk flag
pgaudit.log
.
Setelah menyiapkan audit database, Anda dapat melihat log dan, jika perlu, menonaktifkan logging.
Menyiapkan pengauditan
Bagian ini menjelaskan dasar-dasar penyiapan operasi audit database.
Flag awal untuk mengaktifkan pengauditan
Di Cloud SQL, Anda menggunakan flag database untuk banyak operasi, termasuk menyesuaikan
parameter PostgreSQL dan mengonfigurasi instance. Dengan flag cloudsql.enable_pgaudit
,
pengauditan instance database tertentu
dapat dilakukan. Anda dapat mengubah nilai flag cloudsql.enable_pgaudit
melalui Google Cloud Console atau perintah gcloud
.
Gunakan petunjuk standar untuk flag guna
mengaktifkan tanda cloudsql.enable_pgaudit
, dengan menyetel nilai ke on
. Misalnya,
untuk menggunakan perintah gcloud
, tentukan hal berikut, dengan mengganti
nama instance Anda dengan [INSTANCE_NAME]
:
gcloud sql instances patch [INSTANCE_NAME] --database-flags cloudsql.enable_pgaudit=on
Flag cloudsql.enable_pgaudit
tercantum bersama
flag lain yang didukung
dan khusus untuk Cloud SQL.
Menjalankan perintah untuk membuat ekstensi pgAudit
Setelah mengaktifkan flag database, jalankan perintah CREATE EXTENSION
menggunakan klien psql yang kompatibel. Perintah berikut membuat
ekstensi pgAudit untuk semua database di instance Cloud SQL:
CREATE EXTENSION pgaudit;
Menetapkan nilai untuk flag pgaudit.log
Gunakan petunjuk standar untuk flag guna
menetapkan nilai untuk flag pgaudit.log
.
Misalnya, untuk mengaktifkan audit untuk semua operasi database pada sebuah instance,
Anda dapat menggunakan perintah gcloud
berikut:
gcloud sql instances patch [INSTANCE_NAME] --database-flags \
cloudsql.enable_pgaudit=on,pgaudit.log=all
Mengonfigurasi setelan lain untuk database
Untuk mengonfigurasi setelan audit untuk database, ikuti prosedur di bagian Menyesuaikan logging audit database section.
Lihat log audit database
Untuk melihat log audit, aktifkan log audit Akses Data untuk project Anda. Log pgAudit yang dibuat untuk instance tertentu dikirim ke Cloud Logging sebagai log audit Akses Data. Pengguna dapat melihat log pgAudit yang dibuat melalui aplikasi Logs Explorer.
Di aplikasi Logs Explorer log pgAudit dapat dilihat dengan memilih filter log cloudaudit.googleapis.com/data_access.
Atau, Anda dapat menggunakan kueri berikut untuk menampilkan semua log pgAudit untuk project Cloud SQL tertentu:
resource.type="cloudsql_database"
logName="projects/<your-project-name>/logs/cloudaudit.googleapis.com%2Fdata_access"
protoPayload.request.@type="type.googleapis.com/google.cloud.sql.audit.v1.PgAuditEntry"
Format log untuk pgAudit
Setiap entri log pgAudit di log audit Akses Data memiliki kolom yang mewakili informasi yang dikumpulkan untuk kueri.
Berikut ini contohnya:
{ protoPayload: { @type: "type.googleapis.com/google.cloud.audit.AuditLog" methodName: "cloudsql.instances.query" request: { @type: "type.googleapis.com/google.cloud.sql.audit.v1.PgAuditEntry" auditClass: "READ" auditType: "SESSION" chunkCount: "1" chunkIndex: "1" command: "SELECT" database: "finance" databaseSessionId: 2209692 parameter: "[not logged]" statement: "SELECT * FROM revenue" statementId: 2 substatementId: 1 user: "alice" } } }
Berikut adalah deskripsi kolom di log audit Akses Data:
- auditClass. Jenis pernyataan yang dicatat dalam log. Nilai
yang mungkin adalah
READ
,WRITE
,FUNCTION
,ROLE
,DDL
,MISC
, danMISC_SET
. - auditType.
SESSION
atauOBJECT
. - chunkCount. Chunking dapat terjadi pada data yang tersedia di kolom
parameter
danstatement
. KolomchunkCount
menunjukkan jumlah total potongan. Lihat juga deskripsi kolomchunkIndex
. - chunkIndex. Menentukan nomor indeks potongan data di kolom
parameter
danstatement
(dalam penampungrequest
saat ini). Angka awalnya adalah1
. Lihat juga deskripsi kolomchunkCount
. - perintah. Misalnya
ALTER TABLE
atauSELECT
. - parameter. Kolom
chunkIndex
dapat menentukan konten kolom ini; lihat deskripsi kolomchunkIndex
. Jika nilai untukpgaudit.log_parameter
ditetapkan, kolomparameter
dapat berisi parameter pernyataan sebagai data CSV kutipan. Jika tidak ada parameter, kolom ini berisi[none]
. Jika tidak, kolom ini berisi[not logged]
. - pernyataan. Pernyataan yang dijalankan di backend.
Kolom
chunkIndex
dapat menentukan konten kolomstatement
; lihat deskripsi kolomchunkIndex
. - statementId. ID pernyataan unik untuk sesi ini. Setiap ID pernyataan mewakili panggilan backend. ID pernyataan bersifat berurutan, meskipun beberapa pernyataan tidak dicatat dalam log.
- substatementId. ID berurutan untuk setiap sub-pernyataan dalam pernyataan utama.
Beberapa kolom tersebut juga dijelaskan dalam dokumentasi pgAudit.
Menonaktifkan pengauditan
Untuk menonaktifkan pengauditan database, tetapkan nilai flagcloudsql.enable_pgaudit
ke off
. Nilainya dapat diubah melalui Google Cloud Console atau melalui
perintah gcloud
. Gunakan
petunjuk standar untuk flag guna
menonaktifkan flag cloudsql.enable_pgaudit
.
Selain itu, jalankan perintah DROP EXTENSION
menggunakan
klien psql yang kompatibel untuk menghapus status ekstensi:
DROP EXTENSION pgaudit;
Menyesuaikan logging audit database di Cloud SQL
Bagian ini menjelaskan cara menyesuaikan perilaku audit instance database.
Untuk kemampuan tambahan ekstensi, tinjau dokumentasi pgAudit.
Persyaratan untuk hak istimewa superuser
Di Cloud SQL, ekstensi hanya dapat dibuat oleh pengguna yang menjadi bagian dari peran
cloudsqlsuperuser
. Saat membuat instance PostgreSQL baru, pengguna PostgreSQL default
akan dibuat untuk Anda (meskipun Anda harus menyetel sandi pengguna).
Pengguna PostgreSQL default adalah bagian dari peran cloudsqlsuperuser
. Untuk mengetahui informasi
selengkapnya, lihat Pengguna PostgreSQL.
Mengonfigurasi pengauditan untuk semua operasi database pada instance
Guna mengonfigurasi audit untuk semua database dalam satu instance, Anda harus menerapkan
setelan pgAudit pada tingkat sistem. Parameter audit tingkat sistem hanya dapat ditetapkan
sebagai flag database melalui Google Cloud Console atau perintah gcloud
.
Misalnya, untuk mengaktifkan
audit untuk semua operasi database pada sebuah instance, Anda dapat menggunakan
perintah gcloud
berikut:
gcloud sql instances patch [INSTANCE_NAME] --database-flags \
cloudsql.enable_pgaudit=on,pgaudit.log=all
Mengonfigurasi operasi tertentu pada semua database instance
Untuk mengaudit semua database instance, Anda dapat menggunakan
Google Cloud Console atau perintah gcloud
. Misalnya,
untuk mengaktifkan pengauditan hanya untuk operasi baca dan tulis pada instance, Anda dapat
menggunakan perintah gcloud
berikut. Contoh ini menggunakan
sintaksis berbasis daftar untuk menentukan
beberapa nilai:
gcloud sql instances patch [INSTANCE_NAME] \
--database-flags ^:^cloudsql.enable_pgaudit=on:pgaudit.log=read,write
Perintah tersebut menimpa tanda database yang ada.
Mengonfigurasi pengauditan untuk database tertentu
Untuk mengonfigurasi audit untuk database tertentu, tetapkan parameter pgAudit di
level database. Misalnya, perintah SQL berikut dapat digunakan untuk mengaktifkan
pengauditan baca/tulis untuk database bernama finance
:
finance=> ALTER DATABASE finance SET pgaudit.log = 'read,write';
Mengonfigurasi pengauditan untuk relasi
Mengaudit suatu relasi lebih sempit daripada mengaudit basis data tertentu.
Saat Anda mengaudit sebuah relasi, peran auditor unik akan ditetapkan
ke parameter pgaudit.role
. Setiap objek atau relasi yang diberikan ke peran ini
akan dicatat ke dalam log.
Misalnya, untuk mengonfigurasi audit untuk semua kueri SELECT
pada relasi
salary
dalam database employee
, Anda dapat menggunakan perintah berikut:
employee=> CREATE ROLE auditor WITH NOLOGIN;
employee=> ALTER DATABASE employee SET pgaudit.role = 'auditor';
employee=> GRANT SELECT ON salary TO auditor;
Anda juga dapat mengaudit subset kolom untuk relasi tertentu.
Misalnya, perintah berikut mengonfigurasi logging audit agar hanya terjadi
saat kolom income
dan tax_status
diakses dari relasi:
salary
employee=> GRANT SELECT(income, tax_status) ON salary TO auditor;
Mengonfigurasi pengauditan untuk pengguna database
Anda dapat mengaktifkan pengauditan untuk pengguna tertentu dengan menetapkan parameter
pgaudit.log
pada tingkat per ROLE
.
Misalnya, perintah SQL berikut menetapkan pengauditan untuk semua operasi database
yang dijalankan oleh pengguna Alice
:
finance=> ALTER ROLE alice SET pgaudit.log = 'all';
Tips untuk pengelolaan audit pada Cloud SQL
Saat Anda menyesuaikan perilaku audit, ingatlah hal berikut:
- Saat tanda database
cloudsql.enable_pgaudit
dinonaktifkan, logging audit akan segera dihentikan. Namun, setelan pgAudit yang diterapkan (misalnya, setelan parameterpgaudit.log
) dipertahankan, kecuali jika dihapus secara eksplisit. - Instance database dimulai ulang setiap kali nilai flag database untuk
cloudsql.enable_pgaudit
berubah. - Pengguna database yang dibuat melalui perintah
CREATE ROLE
eksplisit tidak memiliki hak istimewa untuk mengubah setelan audit. Hanya pengguna database yang dibuat melalui Google Cloud Console dan perintahgcloud
yang dapat mengubah setelan audit. - Saat Anda mengaktifkan logging audit sesi dan logging audit objek, pernyataan yang berkaitan dengan keduanya akan ditambahkan ke log. Logging sesi dan logging objek tidak saling membatalkan atau memodifikasi.
Batasan ekstensi pgAudit pada Cloud SQL untuk PostgreSQL
Log audit untuk sementara ditulis ke disk instance mereka, menggunakan kapasitas disk sebelum log dikirim ke Cloud Logging. Oleh karena itu, tinjau semua informasi berikut sebelum menggunakan fitur ini:
- Kecepatan proses transfer log adalah 4 MB per detik. Jika pemuatan dari pembuatan log
melebihi kecepatan penyerapan, hal berikut dapat terjadi:
- Penggunaan disk yang tidak diinginkan dapat terjadi.
- Kapasitas disk dapat habis.
- Jika Anda mengaktifkan fitur ini dan menjalankan banyak kueri yang memenuhi kriteria audit, penggunaan disk dapat meningkat terlalu cepat.
- Sebelum menggunakan fitur ini, rencanakan untuk:
- Aktifkan peningkatan penyimpanan otomatis.
- Memantau penggunaan disk secara keseluruhan; beban dari pembuatan log tidak dapat dipantau secara terpisah. Gunakan metrik cloudsql.googleapis.com/database/disk/utilization di Metrics Explorer.
- Jika perlu, kurangi penggunaan disk dengan menjalankan lebih sedikit kueri atau mengurangi pengauditan.
- Jika ruang disk yang tersedia habis, log audit untuk beberapa kueri mungkin akan hilang.