Mengonfigurasi akses tingkat kolom

Dokumen ini menjelaskan kontrol akses tingkat kolom dan cara menyetelnya di bucket Logging. Kontrol akses tingkat kolom memungkinkan Anda menyembunyikan kolom LogEntry individual 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. 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 kontrol akses tingkat kolom menggunakan Google Cloud CLI.

Untuk membatasi akses ke kolom log, lakukan hal berikut:

  • Konfigurasi kolom LogEntry yang dibatasi pada bucket log.
  • Hanya beri pengguna yang perlu melihat kolom yang dibatasi peran IAM logging.fieldAccessor untuk jalur kolom tersebut, atau peran yang berisi izin serupa.

Logging memeriksa izin IAM saat pengguna menjalankan kueri log dari bucket yang memiliki setelan kolom terbatas. 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 izin ditolak jika mencoba membuat kueri langsung ke kolom yang dibatasi.
  • Penelusuran global tidak mempertimbangkan konten kolom yang ditolak.
  • Semua hasil LogEntry yang ditampilkan akan menghilangkan 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 menyiapkan 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 projectGoogle Cloud default untuk perintah Google Cloud CLI Anda. Sebelum menjalankan perintah, lakukan penggantian berikut:

    • PROJECT_ID: ID project.

    Perintah:

    gcloud config set project PROJECT_ID
    
  • Pastikan Anda memiliki salah satu peran IAM berikut untuk project yang berisi bucket: Google Cloud

    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 pada 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 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 update Anda harus mencantumkan kembali seluruh kumpulan kolom yang dibatasi. Melanjutkan 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 terbatas dari pengguna yang tidak memiliki peran logging.fieldAccessor atau peran dengan izin serupa. Pencatatan log 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 bagi pengguna tertentu.

Memberikan izin pada semua kolom terbatas

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 konsol Google Cloud , selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud , buka halaman IAM:

    Buka IAM

    Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah IAM & Admin.

  2. Pilih principal, lalu klik Edit.
  3. Di panel Edit izin, pilih Log Field Accessor untuk peran.
  4. Pilih Tambahkan Kondisi IAM.
  5. Masukkan judul dan deskripsi di kolom Judul dan Deskripsi.
  6. Pilih tab Editor kondisi, lalu masukkan ekspresi berikut:

    resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_ID"
    
  7. 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:

  1. 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.

  2. Perbarui file policy.json dengan binding tambahan.

    Di bagian berikut, kolom expression hanya mencantumkan bucket log. Oleh karena itu, semua kolom untuk entri log yang disimpan di bucket log tersebut dapat diakses oleh prinsipal yang tercantum di bagian members.

    "bindings": [
        {
          "condition": {
            "description": "DESCRIPTION",
            "expression": "resource.name.extract(\"locations/global/buckets/{bucket}/\") == 'BUCKET_ID'",
            "title": "TITLE"
          },
          "members": [
            PRINCIPAL
          ],
          "role": "roles/logging.fieldAccessor"
        }
    ]
    

    Dalam 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 dimiliki PRINCIPAL, lihat ID utama. Di kolom members pada file policy.json, gunakan format "PRINCIPAL-TYPE":"ID".
    • DESCRIPTION: Deskripsi kondisi.
    • TITLE: Judul untuk kondisi.
  3. Untuk menerapkan file policy.json yang telah diperbarui, jalankan perintah gcloud 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 pada sebagian kolom yang dibatasi, tetapkan kolom yang dapat diakses pengguna saat memberikan peran logging.fieldAccessor kepada mereka atau saat menetapkan peran khusus yang berisi logging.fieldAccessor.

Perhatikan hal berikut:

  • Ejaan dan penggunaan huruf kapital pada kolom yang dibatasi seperti yang muncul dalam konfigurasi bucket harus sama dengan ejaan dan penggunaan huruf kapital pada kolom yang dibatasi dalam nama izin IAM. Misalnya, jika Anda menetapkan kolom yang dibatasi sebagai jsonPayload, Anda harus memberikan izin pada kolom jsonPayload, bukan kolom Jsonpayload.

  • 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 dalam protobuf LogEntry; log_name merujuk ke kolom yang sama. Kolom jsonPayload.fooBar merujuk ke kolom yang berbeda dengan jsonPayload.foo_bar, karena nama kolom di bawah jsonPayload adalah kunci string peta; namun, kolom ini merujuk ke json_payload.fooBar.

    Meskipun jalur kolom adalah referensi yang valid ke kolom yang sama, Anda harus mencocokkan ejaan, huruf kapital, dan huruf kecil saat mengonfigurasi batasan dan izin IAM. Misalnya, jika Anda menentukan batasan pada jsonPayload.foo, Anda harus mengonfigurasi izin IAM untuk jsonPayload.foo, bukan untuk json_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 konsol Google Cloud , selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud , buka halaman IAM:

    Buka IAM

    Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah IAM & Admin.

  2. Pilih principal, lalu klik Edit.
  3. Di panel Edit izin, pilih Log Field Accessor untuk peran.
  4. Pilih Tambahkan Kondisi IAM.
  5. Masukkan judul dan deskripsi di kolom Judul dan Deskripsi.
  6. Pilih tab Editor kondisi, lalu masukkan ekspresi berikut:

    resource.name.extract("locations/global/buckets/BUCKET_ID/fields/{field}") == "RESTRICTED_FIELDS"
    
  7. Pilih Save.

Izin Identity and Access Management akan segera diperbarui.

gcloud

Untuk memberi pengguna akses ke kolom yang dibatasi menggunakan gcloud CLI, selesaikan langkah-langkah berikut:

  1. 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.

  2. Perbarui file policy.json dengan binding tambahan.

    Di bawah ini, kolom expression mencantumkan kolom tertentu. Oleh karena itu, hanya prinsipal yang tercantum di bagian members yang 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"
        }
    ]
    

    Dalam 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 dimiliki PRINCIPAL, lihat ID utama. Di kolom members pada file policy.json, gunakan format "PRINCIPAL-TYPE":"ID".
    • DESCRIPTION: Deskripsi kondisi.
    • TITLE: Judul untuk kondisi.
  3. Untuk menerapkan file policy.json yang telah diperbarui, jalankan perintah gcloud 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 sub-bidang httpRequest tertentu. Berikut yang 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 mengakses hanya kolom jsonPayload LogEntry yang dibatasi, semua kolom yang tidak dibatasi dapat dilihat, dan kolom jsonPayload dapat dilihat.

  • Untuk pengguna yang tidak memiliki izin untuk melihat kolom yang dibatasi, hanya kolom yang tidak dibatasi yang terlihat.

Jika pengguna menulis kueri dengan pembatasan global, maka 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: Jalur kolom yang dibatasi harus lebih kecil dari 800 B.

Untuk mengetahui informasi selengkapnya tentang batas yang mungkin berlaku untuk penggunaan Cloud Logging, lihat Kuota dan batas.