Memverifikasi penerbitan dan penggunaan identitas


Halaman ini menunjukkan cara menggunakan log untuk memeriksa penerbitan dan penggunaan identitas Kubernetes, dalam bentuk sertifikat dan token akun layanan, oleh bidang kontrol cluster Google Kubernetes Engine (GKE). Verifikasi ini sepenuhnya bersifat opsional dan tidak diperlukan untuk mengamankan panel kontrol Anda.

Panduan ini ditujukan untuk administrator keamanan dan pemilik platform yang memiliki persyaratan kebijakan atau kepatuhan organisasi tertentu untuk mengontrol penerbitan dan penandatanganan kredensial. Anda seharusnya sudah menyiapkan kunci dan CA yang dikelola sendiri dengan otoritas panel kontrol GKE.

Anda seharusnya sudah memahami konsep berikut:

Halaman ini menjelaskan salah satu bagian dari serangkaian fitur platform kontrol opsional di GKE yang memungkinkan Anda melakukan tugas seperti memverifikasi postur keamanan platform kontrol atau mengonfigurasi enkripsi dan penandatanganan kredensial di platform kontrol menggunakan kunci yang Anda kelola. Untuk mengetahui detailnya, lihat Tentang otoritas bidang kontrol GKE.

Secara default, Google Cloud menerapkan berbagai langkah keamanan ke bidang kontrol terkelola. Halaman ini menjelaskan kemampuan opsional yang memberi Anda visibilitas atau kontrol lebih besar atas panel kontrol GKE.

Tentang log penerbitan identitas

Log penerbitan identitas GKE adalah log audit bidang kontrol yang mencatat kapan bidang kontrol menerbitkan kredensial dan kapan kredensial tersebut digunakan di cluster. Anda dapat menggunakan log ini untuk melacak masa aktif kredensial, termasuk penerbitan dan penggunaan, dengan mengaitkan log penerbitan identitas dengan log Cloud KMS, Certificate Authority Service, dan Kubernetes API. Log penerbitan identitas GKE diaktifkan saat menggunakan otoritas bidang kontrol GKE. Log ini melacak penerbitan dan penggunaan jenis kredensial berikut:

  • Sertifikat X.509
  • Token Web JSON (JWT) cluster

Sertifikat X.509

Kubernetes menggunakan sertifikat X.509 untuk autentikasi sertifikat klien. Untuk menerbitkan sertifikat, bidang kontrol Kubernetes mengirimkan CertificateSigningRequest yang disetujui ke certificate authority (CA) di CA Service. CA kemudian mengeluarkan sertifikat menggunakan kunci yang sesuai di Cloud KMS untuk menandatangani ringkasan sertifikat.

Log server Kubernetes API berisi detail tanda tangan sertifikat untuk panggilan Kubernetes API apa pun yang diautentikasi dengan sertifikat. Entri ID kredensial dalam log memiliki bentuk berikut:

"authentication.k8s.io/credential-id": "X509SHA256=CERTIFICATE_HASH"

Nilai CERTIFICATE_HASH adalah hash SHA256 untuk sertifikat, yang dapat Anda gunakan untuk melacak siklus proses sertifikat.

Anda dapat menggunakan log sertifikat server Kubernetes API untuk melacak siklus proses sertifikat dengan menghubungkan log dari layanan berikut:

  • Log penerbitan identitas GKE: Gunakan kueri protoPayload.metadata.credentialId untuk menemukan log penerbitan identitas GKE tertentu berdasarkan ID kredensial dari log server Kubernetes API. Kemudian, gunakan kolom protoPayload.metadata.certificateFingerprint dari log penerbitan identitas GKE untuk menghubungkan log penerbitan identitas dengan log Layanan CA.
  • Log Layanan CA: Temukan entri log penerbitan sertifikat, yang berisi ID berikut:
    • cert_fingerprint.sha256_hash: hash SHA256 dari sertifikat yang ditandatangani. Gunakan ID ini untuk mencocokkan log dengan peristiwa GKE dan Kubernetes API.
    • tbs_certificate_digest: hash konten sertifikat yang dikirim untuk ditandatangani oleh kunci Cloud KMS. Gunakan ID ini untuk mencocokkan log dengan log Cloud KMS.
  • Log penandatanganan Cloud KMS: Gunakan nilai tbs_certificate_digest dari log CA Service untuk mengonfirmasi bahwa kunci Cloud KMS yang diharapkan menandatangani sertifikat.

Token Web JSON (JWT)

JWT (Token Web JSON) yang ditandatangani digunakan sebagai token pembawa untuk entity dalam cluster, seperti akun layanan Kubernetes, saat mengautentikasi permintaan ke Kubernetes API. Saat Pod dibuat yang menggunakan akun layanan tertentu, Kubernetes akan membuat JWT dan memasangnya di Pod. Saat Anda menggunakan otoritas bidang kontrol GKE untuk menjalankan kunci dan CA Anda sendiri, JWT ini akan ditandatangani dan kemudian diverifikasi menggunakan kunci penandatanganan akun layanan di Cloud KMS.

Log server Kubernetes API berisi detail tanda tangan token untuk panggilan Kubernetes API apa pun yang diautentikasi dengan JWT. Entri tanda tangan token dalam log memiliki format berikut:

"authentication.kubernetes.io/credential-id":"JTI=JWT_ID"

Nilai JWT_ID adalah string yang mengidentifikasi JWT yang digunakan dalam panggilan Kubernetes API.

Anda dapat menggunakan ID JWT dari log server Kubernetes API untuk melacak siklus proses JWT dengan mengaitkan log berikut:

  • Log penerbitan identitas GKE: Gunakan ID JWT dari log server Kubernetes API untuk menemukan entri penerbitan JWT tertentu. Setiap entri juga berisi kolom toBeSignedDigest, yang nilainya dapat cocok dengan log Cloud KMS.
  • Log penandatanganan Cloud KMS: Gunakan nilai kolom toBeSignedDigest dari log penerbitan identitas GKE untuk mengonfirmasi bahwa kunci Cloud KMS yang diharapkan menandatangani JWT.

Harga

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

  1. Konfigurasikan bidang kontrol cluster GKE Anda dengan kunci atau CA yang dikelola sendiri.

  2. Aktifkan Cloud Audit Logging Service API berikut:

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan guna mengakses log penerbitan identitas, minta administrator untuk memberi Anda peran IAM berikut di project Anda:

  • Melakukan semua tindakan di Logging: Logging Admin (roles/logging.admin).
  • Melihat log: Private Logs Viewer (roles/logging.privateLogViewer).

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Persyaratan dan batasan

Persyaratan dan batasan berikut berlaku:

  • Anda harus menggunakan GKE versi 1.31.1-gke.1846000 atau yang lebih baru.
  • Log penerbitan identitas dicatat sebagai log Cloud Audit Logs dan memiliki periode retensi yang ditetapkan selama 400 hari. Periode retensi tidak dapat dikonfigurasi, tetapi Anda dapat me-rutekan log audit peristiwa sistem ke tujuan lain untuk periode retensi yang lebih lama.

Memverifikasi sertifikat

Anda dapat menggunakan log penerbitan identitas otoritas bidang kontrol GKE untuk mengonfirmasi bahwa sertifikat berhasil diterbitkan atau digunakan. Anda dapat menggunakan salah satu log berikut, atau kombinasi log, untuk mengonfirmasi informasi tentang penerbitan dan penggunaan sertifikat:

Log sertifikat

Log Kubernetes API untuk penggunaan sertifikat

Mencatat detail tanda tangan sertifikat setiap kali sertifikat digunakan terhadap Kubernetes API.

Log GKE untuk operasi penerbitan sertifikat

Mencatat semua operasi penerbitan sertifikat sebagai log audit Peristiwa Sistem. Log ini diaktifkan secara default di cluster mana pun yang menggunakan kunci atau CA yang dikelola pengguna dengan otorisasi bidang kontrol GKE.

Log audit Layanan CA

Mencatat entri setiap kali sertifikat diterbitkan.

Log audit Cloud KMS

Mencatat entri setiap kali ringkasan ditandatangani, sebagai respons terhadap permintaan penandatanganan dari Layanan CA.

Memverifikasi penggunaan sertifikat dengan log Kubernetes API

Untuk menemukan entri log panggilan API yang diautentikasi menggunakan sertifikat, selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Logs Explorer:

    Buka Logs Explorer

  2. Tempelkan ekspresi berikut ke dalam kolom editor kueri:

    log_id("cloudaudit.googleapis.com/activity")
    resource.type="k8s_cluster"
    labels."authentication.kubernetes.io/credential-id":"X509SHA256="
    
  3. Klik Run query.

    Kueri ini menampilkan semua log server Kubernetes API yang memiliki sertifikat X.509 terkait. Temukan entri log tertentu untuk diselidiki menggunakan alat keamanan atau dengan memeriksa log secara manual.

Untuk mengaitkan log ini dengan jenis log lainnya, temukan kolom berikut:

"authentication.k8s.io/credential-id":"CREDENTIAL_ID"

Nilai CREDENTIAL_ID adalah ID yang dapat Anda gunakan untuk mengaitkan log dari GKE, Layanan CA, dan Cloud KMS. CREDENTIAL_ID memiliki bentuk "X509SHA256=CERTIFICATE_HASH".

Memverifikasi penerbitan sertifikat dengan log GKE

Untuk menemukan entri log GKE untuk peristiwa penerbitan sertifikat, selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Logs Explorer:

    Buka Logs Explorer

  2. Tempelkan ekspresi berikut ke dalam kolom editor kueri:

    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event"
    resource.type="gke_cluster"
    protoPayload.serviceName="container.googleapis.com"
    protoPayload.metadata.credentialId="CREDENTIAL_ID"
    

    Ganti kode berikut:

  3. Klik Run query.

Memverifikasi penerbitan sertifikat dengan log Layanan CA

Untuk menemukan log Layanan CA yang cocok dengan peristiwa penerbitan sertifikat GKE, selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Logs Explorer:

    Buka Logs Explorer

  2. Tempelkan ekspresi berikut ke dalam kolom editor kueri:

    resource.type="audited_resource"
    protoPayload.serviceName="privateca.googleapis.com"
    protoPayload.methodName="google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificate"
    protoPayload.response.certificate_description.cert_fingerprint.sha256_hash="CERTIFICATE_HASH"
    

    Ganti CERTIFICATE_HASH dengan CERTIFICATE_HASH dari bagian Memverifikasi penggunaan sertifikat dengan log Kubernetes API. Pastikan Anda menghapus awalan X509SHA256= dari hash.

  3. Klik Run query.

    Kueri ini menampilkan log yang berisi kolom tbs_certificate_digest: DIGEST_VALUE di bagian respons deskripsi sertifikat.

Anda dapat menggunakan DIGEST_VALUE untuk mencocokkan log penandatanganan Cloud KMS untuk sertifikat.

Memverifikasi penerbitan sertifikat dengan log penandatanganan Cloud KMS

Untuk menemukan peristiwa penandatanganan Cloud KMS untuk peristiwa penerbitan sertifikat Layanan CA, selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Logs Explorer:

    Buka Logs Explorer

  2. Tempelkan ekspresi berikut ke dalam kolom editor kueri:

    protoPayload.request.digest.sha256="DIGEST_VALUE"
    protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"
    protoPayload.methodName="AsymmetricSign"
    protoPayload.serviceName="cloudkms.googleapis.com"
    

    Ganti DIGEST_VALUE dengan nilai ringkasan dari bagian Verifikasi penerbitan sertifikat dengan log Layanan CA.

  3. Klik Run query.

    Kueri ini menampilkan log untuk peristiwa penerbitan sertifikat. Log Cloud KMS tidak membedakan antara sertifikat dan JWT, sehingga entri log untuk keduanya identik.

Memverifikasi token

Anda dapat menggunakan log penerbitan identitas otoritas bidang kontrol GKE dan log penandatanganan Cloud KMS untuk mengonfirmasi bahwa Token Web JSON (JWT) berhasil dikeluarkan.

Memulai traceback peristiwa penerbitan token biasanya dimulai dengan memantau log Kubernetes API untuk aktivitas akun layanan. Setelah mengidentifikasi log aktivitas yang memerlukan penyelidikan lebih lanjut, Anda dapat menggunakan log berikut untuk mengonfirmasi informasi tentang penerbitan dan penggunaan kredensial:

Log JWT

Log Kubernetes API untuk penggunaan JWT

Mencatat detail tanda tangan JWT setiap kali JWT digunakan terhadap Kubernetes API.

Log GKE untuk operasi penerbitan JWT

Mencatat semua operasi penerbitan token sebagai log audit Peristiwa Sistem. Log ini diaktifkan secara default di cluster mana pun yang menggunakan kunci atau CA yang dikelola pengguna otoritas bidang kontrol GKE.

Log audit Cloud KMS

Mencatat entri setiap kali token ditandatangani dan diterbitkan.

Memverifikasi penggunaan token dengan log server Kubernetes API

Untuk menemukan entri log peristiwa penggunaan token, selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Logs Explorer:

    Buka Logs Explorer

  2. Tempelkan ekspresi berikut ke dalam kolom editor kueri:

    log_id("cloudaudit.googleapis.com/activity")
    resource.type="k8s_cluster"
    labels."authentication.kubernetes.io/credential-id":"JTI="
    
  3. Klik Run query.

    Kueri ini menampilkan semua log server Kubernetes API yang memiliki JWT terkait. Temukan entri log tertentu untuk diselidiki menggunakan alat keamanan atau dengan memeriksa log secara manual.

Untuk mengaitkan log ini dengan jenis log lainnya, temukan kolom berikut:

"authentication.k8s.io/credential-id": "JTI=JWT_ID"

JWT_ID adalah ID token yang dapat Anda gunakan untuk mengaitkan log dari GKE dan Cloud KMS.

Memverifikasi penerbitan token dengan log GKE

Untuk menemukan entri log peristiwa penerbitan token, selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Logs Explorer:

    Buka Logs Explorer

  2. Tempelkan ekspresi berikut ke dalam kolom editor kueri:

    resource.type="gke_cluster"
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event"
    protoPayload.methodName="google.cloud.gkeauth.v1.Auth.SignServiceAccountJWT"
    protoPayload.metadata.credentialId="JTI=JWT_ID"
    

    Ganti kode berikut:

  3. Klik Run query.

    Kueri ini menampilkan log yang berisi kolom toBeSignedDigest.

Anda dapat menggunakan nilai toBeSignedDigest untuk menemukan peristiwa penandatanganan Cloud KMS.

Memverifikasi penerbitan token dengan log penandatanganan Cloud KMS

Untuk menemukan entri log untuk ringkasan yang ditandatangani, selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Logs Explorer:

    Buka Logs Explorer

  2. Tempelkan ekspresi berikut ke dalam kolom editor kueri:

    protoPayload.request.digest.sha256="DIGEST_VALUE"
    protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog"
    protoPayload.methodName="AsymmetricSign"
    protoPayload.serviceName="cloudkms.googleapis.com"
    

    Ganti DIGEST_VALUE dengan nilai di kolom toBeSignedDigest, dari bagian Verifikasi penerbitan token dengan log GKE.

  3. Klik Run query.

    Kueri ini menampilkan log untuk peristiwa penerbitan sertifikat. Log Cloud KMS tidak membedakan antara sertifikat dan JWT, sehingga entri log untuk keduanya identik.

Langkah selanjutnya