Dokumen ini menjelaskan kontrol akses tingkat kolom dan cara menetapkannya di bucket Logging.
Kontrol akses tingkat kolom dapat Anda gunakan untuk menyembunyikan masing-masing kolom LogEntry
dari pengguna project Google Cloud, sehingga Anda memiliki cara yang lebih terperinci untuk mengontrol data log yang dapat diakses pengguna.
Ringkasan
Logging menggunakan kontrol akses tingkat kolom untuk menyembunyikan kolom LogEntry
dari pengguna project Google Cloud yang tidak memiliki izin yang diperlukan untuk melihat kolom tersebut. Dibandingkan dengan
tampilan log, yang menyembunyikan seluruh LogEntry
,
kontrol akses tingkat kolom menyembunyikan setiap kolom LogEntry
. Anda dapat menetapkan kontrol akses tingkat kolom dan izin tampilan log di bucket Logging. Anda dapat membatasi dan mengelola kontrol akses tingkat kolom menggunakan Google Cloud CLI.
Untuk membatasi akses ke kolom log, lakukan hal berikut:
- Konfigurasikan kolom
LogEntry
yang dibatasi pada bucket log. - Hanya berikan peran IAM
logging.fieldAccessor
kepada pengguna yang perlu melihat kolom yang dibatasi untuk jalur kolom tersebut, atau peran yang berisi izin serupa.
Logging memeriksa izin IAM saat pengguna membuat kueri log dari bucket yang memiliki kumpulan kolom terbatas. Setiap kolom dengan ACL yang dikonfigurasi akan ditolak bagi pengguna tanpa logging.FieldAccessor
yang sesuai untuk kolom tersebut, yang berarti:
- Pengguna akan menerima error yang ditolak izinnya jika mereka mencoba langsung mengkueri kolom yang dibatasi.
- Penelusuran global tidak mempertimbangkan konten kolom yang ditolak.
- Setiap hasil
LogEntry
yang ditampilkan akan menghapus kolom yang dibatasi.
Kolom yang dibatasi
Anda dapat membatasi akses ke kombinasi apa pun dari kolom LogEntry
berikut:
Kolom LogEntry |
Kolom bertingkat dari kolom LogEntry induk |
---|---|
jsonPayload |
buatan pengguna |
textPayload |
Tidak ada |
protoPayload |
spesifik per layanan |
httpRequest |
httpRequest kolom bertingkat |
labels |
buatan pengguna |
sourceLocation |
sourceLocation kolom bertingkat |
Membatasi akses ke kolom yang memiliki kolom bertingkat (seperti jsonPayload
, atau sub-jalur jsonPayload
tertentu) juga akan membatasi akses ke salah satu jalur bertingkatnya.
Sebelum memulai
Sebelum Anda mulai menetapkan kontrol akses tingkat kolom, lakukan hal berikut:
Pastikan
gcloud --version
melaporkan versi Google Cloud CLI sebagai versi 362.0.0 atau yang lebih tinggi.Untuk menginstal versi terbaru gcloud CLI, jalankan perintah
update
berikut:update komponen gcloud
Untuk mengetahui petunjuk cara menginstal gcloud CLI, lihat Menginstal Google Cloud CLI.
Pastikan Anda memiliki salah satu peran IAM berikut untuk project Google Cloud yang berisi bucket:
Untuk mengetahui informasi tentang cara menetapkan peran IAM, lihat Panduan kontrol akses Logging.
Menetapkan kontrol akses tingkat kolom
Pembatasan level kolom dikonfigurasi pada level bucket dan dapat diterapkan ke bucket yang ada atau saat membuat bucket baru.
Membatasi kolom pada bucket baru
Untuk membatasi kolom log saat membuat bucket log baru, jalankan perintah gcloud CLI berikut:
gcloud logging buckets create BUCKET_NAME --location=LOCATION \
--description=DESCRIPTION --restricted-fields=RESTRICTED_FIELDS
Contoh perintah:
gcloud logging buckets create new-log-bucket --location=global \ --description="New bucket with restricted fields" --restricted-fields="jsonPayload.data.ssn,httpRequest.status"
Membatasi kolom pada bucket yang ada
Untuk membatasi kolom log pada bucket log yang ada, jalankan perintah gcloud CLI berikut:
gcloud logging buckets update BUCKET_NAME --location=LOCATION \
--restricted-fields=RESTRICTED_FIELDS
Contoh perintah:
gcloud logging buckets update my-existing-log-bucket --location=global \ --restricted-fields="jsonPayload.data.ssn,httpRequest.status"
Jika Anda ingin menambahkan kolom ke batasan yang ada, perintah update harus mencantumkan ulang seluruh kumpulan kolom yang dibatasi. Berdasarkan contoh sebelumnya, jika Anda ingin membatasi akses ke kolom jsonPayload.data.entryDate
selain kolom jsonPayload.data.ssn
dan httpRequest.status
yang telah dibatasi, perintah Anda akan terlihat seperti ini:
gcloud logging buckets update my-existing-log-bucket --location=global \ --restricted-fields="jsonPayload.data.ssn,jsonPayload.data.entryDate,httpRequest.status"
Jika Anda tidak mencantumkan ulang kolom yang sudah dibatasi, dan hanya mencantumkan jsonPayload.data.entryDate
, jsonPayload.data.ssn
dan httpRequest.status
akan dihapus sebagai kolom yang dibatasi.
Mengelola akses ke kolom yang dibatasi
Secara default, Logging menyembunyikan semua kolom yang dibatasi dari pengguna yang tidak memiliki peran logging.fieldAccessor
atau peran dengan izin serupa.
Logging menampilkan kolom yang dibatasi kepada pengguna yang memiliki izin untuk melihat log di bucket dan peran logging.fieldAccessor
.
Anda dapat mengubah perilaku default untuk membatasi subkumpulan kolom yang dibatasi bagi pengguna tertentu.
Memberikan izin di semua kolom yang dibatasi
Untuk memberikan izin kepada pengguna ke semua kolom yang dibatasi, berikan peran logging.fieldAccessor
atau peran khusus yang berisi peran logging.fieldAccessor
kepada pengguna.
Konsol
Untuk memberi pengguna peran logging.fieldAccessor
menggunakan Konsol Google Cloud, selesaikan langkah-langkah berikut:
- Di panel Edit permissions, pilih Log Field Accessor.
Pilih Tambahkan kondisi.
Masukkan judul dan deskripsi di kolom Title dan Description.
Pilih tab Condition editor dan masukkan ekspresi berikut:
resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_NAME"
Pilih Simpan.
Izin Identity and Access Management akan segera diperbarui.
gcloud
Untuk memberi pengguna peran logging.fieldAccessor
menggunakan gcloud CLI, selesaikan langkah-langkah berikut:
Edit file
policy.json
:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
Update file
policy.json
dengan binding tambahan:"bindings": [ { "condition": { "description": "DESCRIPTION", "expression": "resource.name.extract(\"locations/global/buckets/{bucket}/\") == 'BUCKET_NAME'", "title": "TITLE" }, "members": [ "user":"USER_ID@DOMAIN.com" ], "role": "roles/logging.fieldAccessor" } ]
Contoh binding:
"bindings": [ { "condition": { "description": "Grants access to all restricted fields in a log bucket", "expression": "resource.name.extract(\"locations/global/buckets/{bucket}/\") == 'log-bucket-with-sensitive-data'", "title": "Log bucket condition for restricted fields" }, "members": [ "user":"222larabrown@gmail.com" ], "role": "roles/logging.fieldAccessor" } ]
Izin Identity and Access Management akan segera diperbarui.
Memberikan izin ke sebagian kolom yang dibatasi
Untuk memberikan izin kepada pengguna di subkumpulan kolom yang dibatasi, tetapkan kolom yang dapat diakses pengguna saat memberi mereka peran logging.fieldAccessor
atau saat menetapkan peran khusus yang berisi logging.fieldAccessor
.
Perhatikan hal-hal berikut:
Ejaan dan kapitalisasi kolom yang dibatasi seperti yang muncul dalam konfigurasi bucket harus cocok dengan ejaan dan kapitalisasi kolom yang dibatasi tersebut di nama izin IAM. Misalnya, jika Anda menetapkan kolom dibatasi sebagai
jsonPayload
, Anda harus memberikan izin di kolomjsonPayload
, bukan kolomJsonpayload
.Jalur kolom, termasuk string kunci peta, peka huruf besar/kecil, tetapi jalur kolom protobuf dapat dinyatakan sebagai snake case yang tidak peka huruf besar/kecil (snake_case) atau camel case yang peka huruf besar/kecil (camelCase).
Misalnya,
logName
adalah kolom di protobufLogEntry
;log_name
mengacu pada kolom yang sama. KolomjsonPayload.fooBar
mengacu pada kolom yang berbeda denganjsonPayload.foo_bar
, karena nama kolom di bawahjsonPayload
adalah kunci string peta; tetapi merujuk kejson_payload.fooBar
.Meskipun jalur kolom adalah referensi yang valid untuk kolom yang sama, Anda harus cocok dengan ejaan, kapitalisasi, dan kasus saat mengonfigurasi batasan dan izin IAM. Misalnya, jika Anda menentukan pembatasan pada
jsonPayload.foo
, Anda harus mengonfigurasi izin IAM untukjsonPayload.foo
, bukan untukjson_payload.foo
.
Untuk mengetahui informasi lebih lanjut tentang jenis kolom log yang valid, lihat Launguage kueri logging: nilai dan konversi.
Konsol
Untuk memberi pengguna akses ke kolom yang dibatasi menggunakan Konsol Google Cloud, selesaikan langkah-langkah berikut:
- Di panel Edit permissions, pilih Log Field Accessor.
Pilih Tambahkan kondisi.
Masukkan judul dan deskripsi di kolom Title dan Description.
Pilih tab Condition editor dan masukkan ekspresi berikut:
resource.name.extract("locations/global/buckets/BUCKET_ID /fields/{field}") == "RESTRICTED_FIELD"
Pilih Simpan.
Izin Identity and Access Management akan segera diperbarui.
gcloud
Untuk memberi pengguna akses ke kolom yang dibatasi menggunakan gcloud CLI, selesaikan langkah-langkah berikut:
Edit file
policy.json
:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
Update file
policy.json
dengan binding tambahan:"bindings": [ { "condition": { "description": "DESCRIPTION", "expression": "resource.name.extract(\"locations/global/buckets/BUCKET_NAME/fields/{field}\") == 'RESTRICTED_FIELD'", "title": "TITLE" }, "members": [ "user":"USER_ID@DOMAIN.com" ], "role": "roles/logging.fieldAccessor" } ]
Contoh binding:
"bindings": [ { "condition": { "description": "Give access to one restricted field that contains sensitive information", "expression": "resource.name.extract(\"locations/global/buckets/my-log-bucket/fields/{field}\") == 'jsonPyaload.data.ssn'", "title": "Access to restricted field" }, "members": [ "user":"222larabrown@gmail.com" ], "role": "roles/logging.fieldAccessor" } ]
Izin Identity and Access Management akan segera diperbarui.
Contoh output
Contoh berikut menunjukkan tampilan LogEntry
bagi pengguna yang telah dibatasi agar tidak dapat mengakses subset kolom LogEntry
.
Asumsikan bucket telah membatasi kolom berikut:
jsonPayload
httpRequest
labels
Bagi pengguna yang memiliki izin untuk mengakses semua kolom yang dibatasi, LogEntry
akan terlihat seperti berikut:
Bagi pengguna yang memiliki izin untuk hanya mengakses kolom jsonPayload
LogEntry
yang dibatasi, LogEntry
akan terlihat seperti berikut:
Bagi pengguna yang tidak memiliki izin untuk melihat salah satu kolom yang dibatasi,
LogEntry
akan terlihat seperti berikut:
Jika pengguna memasukkan pembatasan global
yang akan menampilkan LogEntry
dengan kolom yang dibatasi, Logging
akan menyembunyikan seluruh LogEntry
, bukan hanya kolom tersebut.
Kolom yang dibatasi listingan
Untuk menampilkan daftar kolom yang dibatasi di bucket log, jalankan perintah gcloud CLI berikut:
gcloud logging buckets describe BUCKET_ID --location=LOCATION
Contoh perintah:
gcloud logging buckets describe my-log-bucket --location=global
Kuota dan batas
Saat menyiapkan dan menggunakan kontrol akses tingkat kolom, perhatikan hal-hal berikut:
- Jumlah kolom yang dibatasi: Anda dapat membatasi hingga 20 kolom untuk setiap bucket log.
- Ukuran kolom yang dibatasi: Panjang jalur kolom yang dibatasi harus lebih kecil dari 800 B.
Untuk mengetahui informasi selengkapnya tentang batas yang mungkin berlaku untuk penggunaan Cloud Logging Anda, lihat Kuota dan batas.