Mengonfigurasi akses tingkat kolom

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:

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:

  1. Di panel Edit permissions, pilih Log Field Accessor.
  2. Pilih Tambahkan kondisi.

    Tambahkan izin Aksesor Kolom Log.

  3. Masukkan judul dan deskripsi di kolom Title dan Description.

  4. Pilih tab Condition editor dan masukkan ekspresi berikut:

    resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_NAME"
    

    Tambahkan kondisi ke izin.

  5. Pilih Simpan.

Izin Identity and Access Management akan segera diperbarui.

gcloud

Untuk memberi pengguna peran logging.fieldAccessor menggunakan gcloud CLI, selesaikan langkah-langkah berikut:

  1. Edit file policy.json:

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    
  2. 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 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 di protobuf LogEntry; log_name mengacu pada kolom yang sama. Kolom jsonPayload.fooBar mengacu pada kolom yang berbeda dengan jsonPayload.foo_bar, karena nama kolom di bawah jsonPayload adalah kunci string peta; tetapi merujuk ke json_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 untuk jsonPayload.foo, bukan untuk json_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:

  1. Di panel Edit permissions, pilih Log Field Accessor.
  2. Pilih Tambahkan kondisi.

    Tambahkan izin Aksesor Kolom Log.

  3. Masukkan judul dan deskripsi di kolom Title dan Description.

  4. Pilih tab Condition editor dan masukkan ekspresi berikut:

    resource.name.extract("locations/global/buckets/BUCKET_ID /fields/{field}") == "RESTRICTED_FIELD"
    

    Tambahkan sebagian kolom yang dibatasi.

  5. 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:

  1. Edit file policy.json:

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    
  2. 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:

Semua kolom log ditampilkan.

Bagi pengguna yang memiliki izin untuk hanya mengakses kolom jsonPayload LogEntry yang dibatasi, LogEntry akan terlihat seperti berikut:

Hanya kolom jsonPayload yang ditampilkan.

Bagi pengguna yang tidak memiliki izin untuk melihat salah satu kolom yang dibatasi, LogEntry akan terlihat seperti berikut:

Semua kolom dibatasi.

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.