Dokumen ini menjelaskan kontrol akses tingkat kolom dan cara menetapkannya di bucket Logging.
Kontrol akses tingkat kolom memungkinkan Anda menyembunyikan kolom LogEntry individual dari pengguna
aprojek, sehingga memberi Anda cara yang lebih terperinci untuk mengontrol data log
yang dapat diakses pengguna. Google Cloud
Ringkasan
Logging uses field-level access control to hide
LogEntry
fields from users of a Google Cloud project who don't have the required
permissions to view the fields. Dibandingkan dengan
tampilan log, yang menyembunyikan seluruh LogEntry,
kontrol akses tingkat kolom menyembunyikan kolom individual LogEntry. Anda dapat menetapkan kontrol akses tingkat kolom dan izin tampilan log di bucket Logging. Anda membatasi dan mengelola akses tingkat kolom
kontrol menggunakan Google Cloud CLI.
Untuk membatasi akses ke kolom log, lakukan hal berikut:
- Konfigurasi kolom
LogEntryyang dibatasi di bucket log. - Hanya berikan peran IAM
logging.fieldAccessoruntuk jalur kolom tersebut kepada pengguna yang perlu melihat kolom yang dibatasi, atau peran yang berisi izin serupa.
Logging memeriksa izin IAM saat pengguna membuat kueri log dari bucket yang memiliki kolom yang dibatasi. Kolom apa pun dengan ACL yang dikonfigurasi akan ditolak untuk pengguna tanpa logging.FieldAccessor yang sesuai untuk kolom tersebut, yang berarti:
- Pengguna akan menerima error penolakan izin jika mencoba membuat kueri kolom yang dibatasi secara langsung.
- Penelusuran global tidak mempertimbangkan konten kolom yang ditolak.
- Setiap hasil
LogEntryyang ditampilkan akan menghapus kolom yang dibatasi.
Kolom yang dibatasi
Anda dapat membatasi akses ke kolom jsonPayload, yang
juga membatasi akses ke jalur bertingkatnya.
Anda juga dapat membatasi akses ke kolom leaf berikut:
Misalnya, Anda dapat membatasi akses ke kolom labels.check_id.
Sebelum memulai
Sebelum mulai menetapkan kontrol akses tingkat kolom, lakukan hal berikut:
Pastikan
gcloud --versionmelaporkan versi 362.0.0 atau yang lebih baru.Untuk menginstal gcloud CLI versi terbaru, jalankan
gcloud components updateperintah:gcloud components updateUntuk mengetahui petunjuk cara menginstal gcloud CLI, lihat Menginstal Google Cloud CLI.
Jalankan
gcloud config setuntuk mengonfigurasi default Google Cloud project untuk perintah Google Cloud CLI Anda. Sebelum menjalankan perintah, lakukan penggantian berikut:- PROJECT_ID: ID project.
Perintah:
gcloud config set project PROJECT_IDPastikan Anda memiliki salah satu IAM peran berikut untuk Google Cloud project yang berisi bucket:
Untuk mengetahui informasi tentang cara menetapkan peran IAM, lihat Panduan Kontrol akses Logging.
Menetapkan kontrol akses tingkat kolom
Pembatasan 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, lakukan penggantian berikut:
- BUCKET_ID: Nama atau ID bucket log.
- LOCATION: Lokasi bucket log.
- DESCRIPTION: Deskripsi bucket log.
- RESTRICTED_FIELDS: Daftar kolom yang dibatasi, yang dipisahkan koma.
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 di bucket yang ada
Untuk membatasi kolom log di bucket log yang ada, jalankan
gcloud logging buckets update
perintah:
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 ingin menambahkan kolom ke batasan yang ada, perintah update Anda harus mencantumkan kembali seluruh kumpulan kolom yang dibatasi. Mengacu pada contoh sebelumnya, jika Anda ingin membatasi akses ke kolom jsonPayload.data.entryDate selain kolom jsonPayload.data.ssn dan httpRequest.status yang sudah 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 kembali kolom yang sudah dibatasi, dan hanya mencantumkan jsonPayload.data.entryDate, maka 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 subset kolom yang dibatasi kepada pengguna tertentu.
Memberikan izin pada semua kolom yang dibatasi
Untuk memberikan izin kepada pengguna atas semua kolom yang dibatasi, berikan peran logging.fieldAccessor kepada pengguna atau peran kustom yang berisi peran logging.fieldAccessor.
Konsol
Untuk memberikan peran logging.fieldAccessor kepada pengguna menggunakan Google Cloud konsol,
selesaikan langkah-langkah berikut:
-
Di Google Cloud konsol, 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.
- Pilih Add IAM Condition.
- 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_ID"Pilih Save.
Izin Identity and Access Management akan segera diperbarui.
gcloud
Untuk memberikan peran logging.fieldAccessor kepada pengguna menggunakan gcloud CLI, selesaikan langkah-langkah berikut:
Untuk menyimpan informasi kebijakan IAM saat ini dalam file, jalankan perintah
gcloud projects get-iam-policydan simpan output dalam file:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.jsonPerintah sebelumnya menyimpan informasi dalam file bernama
policy.json.Perbarui file
policy.jsondengan binding tambahan.Di bagian berikut, kolom
expressionhanya 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 kolommembersfilepolicy.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.jsonyang 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 subset kolom yang dibatasi
Untuk memberikan izin kepada pengguna atas subset 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 kapitalisasi kolom yang dibatasi seperti yang muncul dalam konfigurasi bucket harus cocok dengan ejaan dan kapitalisasi kolom yang dibatasi dalam nama izin IAM. Misalnya, jika Anda menetapkan kolom yang dibatasi sebagai
jsonPayload, Anda harus memberikan izin pada kolomjsonPayload, bukan kolomJsonpayload.Jalur kolom, termasuk string kunci peta, bersifat 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,
logNameadalah kolom dalamLogEntryprotobuf;log_namemengacu pada kolom yang sama. KolomjsonPayload.fooBarmengacu pada kolom yang berbeda denganjsonPayload.foo_bar, karena nama kolom di bawahjsonPayloadadalah kunci string peta; namun, kolom tersebut mengacu padajson_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 mengetahui informasi lebih lanjut tentang jenis kolom log yang valid, lihat Bahasa kueri Logging: nilai dan konversi.
Konsol
Untuk memberikan akses kepada pengguna ke kolom yang dibatasi menggunakan Google Cloud konsol, selesaikan langkah-langkah berikut:
-
Di Google Cloud konsol, 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.
- Pilih Add IAM Condition.
- 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_FIELDS"Pilih Save.
Izin Identity and Access Management akan segera diperbarui.
gcloud
Untuk memberikan akses kepada pengguna ke kolom yang dibatasi menggunakan gcloud CLI, selesaikan langkah-langkah berikut:
Untuk menyimpan informasi IAM dalam file, jalankan perintah
gcloud projects get-iam-policydan simpan output dalam file:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.jsonPerintah sebelumnya menyimpan informasi dalam file bernama
policy.json.Perbarui file
policy.jsondengan binding tambahan.Di bagian berikut, kolom
expressionmencantumkan kolom tertentu. Oleh karena itu, hanya akun utama yang tercantum di bagianmembersyang memiliki akses ke kolom entri log 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 kolommembersfilepolicy.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.jsonyang 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
Misalkan bucket log membatasi kolom jsonPayload, label tertentu, dan subkolom httpRequest tertentu. Hal berikut terjadi saat pengguna memeriksa entri log-nya
Untuk pengguna yang memiliki izin untuk mengakses semua kolom yang dibatasi, semua kolom dalam entri log akan terlihat.
Untuk pengguna yang memiliki izin untuk mengakses kolom
LogEntryjsonPayloadyang dibatasi saja, semua kolom yang tidak dibatasi akan terlihat, dan kolomjsonPayloadakan terlihat.Untuk pengguna yang tidak memiliki izin untuk melihat kolom yang dibatasi, hanya kolom yang tidak dibatasi yang akan terlihat.
Mencantumkan kolom yang dibatasi
Untuk mencantumkan kolom yang dibatasi di bucket log, jalankan berikut
gcloud logging buckets describe:
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: Jalur kolom yang dibatasi harus berukuran kurang dari 800 B.
Untuk mengetahui informasi selengkapnya tentang batas yang mungkin berlaku untuk penggunaan Cloud Logging, lihat Kuota dan batas.