Dokumen ini menjelaskan kontrol akses tingkat kolom dan cara menetapkannya di bucket Logging.
Kontrol akses tingkat kolom memungkinkan Anda menyembunyikan setiap kolom LogEntry
dari pengguna
project Google Cloud, sehingga memberi Anda 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 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 di bucket log. - Hanya berikan peran IAM
logging.fieldAccessor
untuk jalur kolom tersebut, atau peran yang berisi izin serupa, kepada pengguna yang perlu melihat kolom yang dibatasi.
Logging memeriksa izin IAM saat pengguna membuat kueri log dari bucket yang telah menetapkan kolom yang dibatasi. Setiap kolom dengan
ACL yang dikonfigurasi akan ditolak untuk pengguna tanpa
logging.FieldAccessor
yang sesuai untuk kolom tersebut, yang berarti:
- Pengguna akan menerima error izin ditolak jika mencoba membuat kueri langsung pada kolom yang dibatasi.
- Penelusuran global tidak mempertimbangkan konten kolom yang ditolak.
- Semua hasil
LogEntry
yang ditampilkan akan menghapus kolom yang dibatasi.
Kolom yang dibatasi
Anda dapat membatasi akses ke kolom jsonPayload
, yang juga membatasi akses ke jalur bertingkat.
Anda juga dapat membatasi akses ke kolom akhir dari hal berikut:
Misalnya, Anda dapat membatasi akses ke kolom labels.check_id
.
Sebelum memulai
Sebelum Anda mulai menetapkan kontrol akses tingkat kolom, lakukan hal berikut:
Pastikan
gcloud --version
melaporkan versi 362.0.0 atau yang lebih baru.Untuk menginstal gcloud CLI versi terbaru, jalankan perintah
gcloud components update
:gcloud components update
Untuk mengetahui petunjuk cara menginstal gcloud CLI, lihat Menginstal Google Cloud CLI.
Jalankan
gcloud config set
untuk mengonfigurasi project Google Cloud default untuk perintah Google Cloud CLI Anda. Sebelum menjalankan perintah, buat penggantian berikut:- PROJECT_ID: ID project.
Perintah:
gcloud config set project PROJECT_ID
Pastikan Anda memiliki salah satu peran IAM berikut untuk project Google Cloud yang berisi bucket:
Untuk informasi tentang cara menetapkan peran IAM, lihat Panduan kontrol akses Logging.
Menetapkan kontrol akses tingkat kolom
Batasan tingkat kolom dikonfigurasi di tingkat bucket log, dan dapat diterapkan ke bucket log yang ada atau saat membuat bucket log baru.
Membatasi kolom di bucket baru
Untuk membatasi kolom log saat membuat bucket log baru, jalankan perintah gcloud logging buckets create
.
Sebelum menjalankan perintah, buat penggantian berikut:
- BUCKET_ID: Nama atau ID bucket log.
- LOCATION: Lokasi bucket log.
- DESCRIPTION: Deskripsi bucket log.
- RESTRICTED_FIELDS: Daftar kolom yang dipisahkan koma yang dibatasi.
Perintah:
gcloud logging buckets create BUCKET_ID --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 di bucket log yang ada, jalankan perintah gcloud logging buckets update
:
gcloud logging buckets update BUCKET_ID --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 pembaruan harus mencantumkan ulang seluruh kumpulan kolom yang dibatasi. Berdasarkan contoh
sebelumnya, jika Anda ingin membatasi akses ke kolom
jsonPayload.data.entryDate
selain kolom yang sudah dibatasi
jsonPayload.data.ssn
dan httpRequest.status
, 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 mengekspos 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 untuk 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 kustom yang berisi peran logging.fieldAccessor
kepada pengguna.
Konsol
Untuk memberi pengguna peran logging.fieldAccessor
menggunakan konsol Google Cloud, selesaikan langkah-langkah berikut:
-
Di konsol Google Cloud, buka halaman IAM:
Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah IAM & Admin.
- Pilih akun utama, lalu klik Edit.
- Di panel Edit permissions, pilih Log Field Accessor untuk peran tersebut.
- Pilih Tambahkan IAM Condition.
- Masukkan judul dan deskripsi di kolom Judul dan Deskripsi.
Pilih tab Editor kondisi dan masukkan ekspresi berikut:
resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_ID"
Pilih Simpan.
Izin Identity and Access Management akan segera diperbarui.
gcloud
Untuk memberi pengguna peran logging.fieldAccessor
menggunakan gcloud CLI, selesaikan langkah-langkah berikut:
Untuk menyimpan informasi kebijakan IAM saat ini dalam file, jalankan perintah
gcloud projects get-iam-policy
dan simpan output dalam file:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
Perintah sebelumnya menyimpan informasi dalam file bernama
policy.json
.Update file
policy.json
dengan binding tambahan.Berikut ini, kolom
expression
hanya mencantumkan bucket log. Oleh karena itu, semua kolom untuk entri log yang disimpan di bucket log tersebut dapat diakses oleh akun utama yang tercantum di bagianmembers
."bindings": [ { "condition": { "description": "DESCRIPTION", "expression": "resource.name.extract(\"locations/global/buckets/{bucket}/\") == 'BUCKET_ID'", "title": "TITLE" }, "members": [ PRINCIPAL ], "role": "roles/logging.fieldAccessor" } ]
Pada contoh sebelumnya, kolom memiliki arti berikut:
- PRINCIPAL: ID untuk akun utama yang ingin Anda berikan peran. ID utama biasanya memiliki bentuk berikut:
PRINCIPAL-TYPE:ID
. Misalnya,user:my-user@example.com
. Untuk mengetahui daftar lengkap format yang dapat dimilikiPRINCIPAL
, lihat ID utama. Di kolommembers
filepolicy.json
, gunakan format"PRINCIPAL-TYPE":"ID"
. - DESCRIPTION: Deskripsi kondisi.
- TITLE: Judul untuk kondisi.
- PRINCIPAL: ID untuk akun utama yang ingin Anda berikan peran. ID utama biasanya memiliki bentuk berikut:
Untuk menerapkan file
policy.json
yang telah diperbarui, jalankan perintahgcloud projects set-iam-policy
:gcloud projects set-iam-policy PROJECT_ID policy.json
Izin Identity and Access Management akan segera diperbarui.
Memberikan izin pada sebagian kolom yang dibatasi
Untuk memberikan izin kepada pengguna pada sebagian kolom yang dibatasi, tetapkan kolom yang dapat diakses pengguna saat memberikan peran logging.fieldAccessor
atau saat menetapkan peran kustom yang berisi logging.fieldAccessor
.
Perhatikan hal berikut:
Ejaan dan penggunaan huruf kapital pada kolom yang dibatasi seperti yang muncul dalam konfigurasi bucket harus cocok dengan ejaan dan penggunaan huruf kapital pada kolom yang dibatasi dalam nama izin IAM. Misalnya, jika menetapkan kolom yang 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 (snake_case) yang tidak peka huruf besar/kecil atau camel case (camelCase) yang peka huruf besar/kecil.
Misalnya,
logName
adalah kolom dalam protobufLogEntry
;log_name
merujuk ke kolom yang sama. KolomjsonPayload.fooBar
merujuk ke kolom yang berbeda denganjsonPayload.foo_bar
, karena nama kolom di bawahjsonPayload
adalah kunci string peta; namun, kolom ini merujuk kejson_payload.fooBar
.Meskipun jalur kolom adalah referensi yang valid ke kolom yang sama, Anda harus mencocokkan ejaan, kapitalisasi, dan huruf besar/kecil saat mengonfigurasi batasan dan izin IAM. Misalnya, jika Anda menentukan batasan pada
jsonPayload.foo
, Anda harus mengonfigurasi izin IAM untukjsonPayload.foo
, bukan untukjson_payload.foo
.
Untuk informasi lebih lanjut tentang jenis kolom log yang valid, lihat Logging query language: values and conversions.
Konsol
Untuk memberi pengguna akses ke kolom yang dibatasi menggunakan konsol Google Cloud, selesaikan langkah-langkah berikut:
-
Di konsol Google Cloud, buka halaman IAM:
Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah IAM & Admin.
- Pilih akun utama, lalu klik Edit.
- Di panel Edit permissions, pilih Log Field Accessor untuk peran tersebut.
- Pilih Tambahkan IAM Condition.
- Masukkan judul dan deskripsi di kolom Judul dan Deskripsi.
Pilih tab Editor kondisi dan masukkan ekspresi berikut:
resource.name.extract("locations/global/buckets/BUCKET_ID/fields/{field}") == "RESTRICTED_FIELDS"
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:
Untuk menyimpan informasi IAM dalam file, jalankan perintah
gcloud projects get-iam-policy
dan simpan output dalam file:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
Perintah sebelumnya menyimpan informasi dalam file bernama
policy.json
.Update file
policy.json
dengan binding tambahan.Berikut ini, kolom
expression
mencantumkan kolom tertentu. Oleh karena itu, hanya akun utama yang tercantum di bagianmembers
yang memiliki akses ke kolom entri log tersebut yang disimpan di bucket log yang ditentukan."bindings": [ { "condition": { "description": "DESCRIPTION", "expression": "resource.name.extract(\"locations/global/buckets/BUCKET_ID/fields/{field}\") == 'RESTRICTED_FIELDS'", "title": "TITLE" }, "members": [ PRINCIPAL ], "role": "roles/logging.fieldAccessor" } ]
Pada contoh sebelumnya, kolom memiliki arti berikut:
- PRINCIPAL: ID untuk akun utama yang ingin Anda berikan peran. ID utama biasanya memiliki bentuk berikut:
PRINCIPAL-TYPE:ID
. Misalnya,user:my-user@example.com
. Untuk mengetahui daftar lengkap format yang dapat dimilikiPRINCIPAL
, lihat ID utama. Di kolommembers
filepolicy.json
, gunakan format"PRINCIPAL-TYPE":"ID"
. - DESCRIPTION: Deskripsi kondisi.
- TITLE: Judul untuk kondisi.
- PRINCIPAL: ID untuk akun utama yang ingin Anda berikan peran. ID utama biasanya memiliki bentuk berikut:
Untuk menerapkan file
policy.json
yang telah diperbarui, jalankan perintahgcloud projects set-iam-policy
:gcloud projects set-iam-policy PROJECT_ID policy.json
Izin Identity and Access Management akan segera diperbarui.
Contoh
Asumsikan bucket log membatasi kolom jsonPayload
, label tertentu, dan subkolom httpRequest
tertentu. Hal berikut terjadi saat pengguna
memeriksa entri log mereka
Untuk pengguna yang memiliki izin untuk mengakses semua kolom yang dibatasi, semua kolom dalam entri log akan terlihat.
Untuk pengguna yang memiliki izin untuk hanya mengakses kolom
jsonPayload
LogEntry
yang dibatasi, semua kolom yang tidak dibatasi akan terlihat, dan kolomjsonPayload
akan terlihat.Untuk pengguna yang tidak memiliki izin untuk melihat kolom yang dibatasi, hanya kolom yang tidak dibatasi yang dapat dilihat.
Jika pengguna menulis kueri dengan batasan global, entri log yang berisi kolom yang dibatasi akan dihilangkan dari respons.
Mencantumkan kolom yang dibatasi
Untuk mencantumkan kolom yang dibatasi di bucket log, jalankan gcloud logging buckets describe
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 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 kurang dari 800 B.
Untuk mengetahui informasi selengkapnya tentang batas yang mungkin berlaku untuk penggunaan Cloud Logging, lihat Kuota dan batas.