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 kolomprotoPayload.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 bentuk 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 menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
Konfigurasi bidang kontrol cluster GKE Anda dengan kunci atau CA yang dikelola sendiri.
Aktifkan Cloud Audit Logging Service API berikut:
- Untuk Cloud KMS, aktifkan log audit Akses Data dengan jenis Pembacaan Data.
- Untuk Layanan CA, aktifkan log audit Akses Data dari jenis Admin Read dan Data Write.
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:
Di konsol Google Cloud, buka halaman Logs Explorer:
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="
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:
Di konsol Google Cloud, buka halaman Logs Explorer:
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:
PROJECT_ID
: project ID Anda.CREDENTIAL_ID
:CREDENTIAL_ID
dari bagian Verifikasi penggunaan sertifikat dengan log Kubernetes API.
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:
Di konsol Google Cloud, buka halaman Logs Explorer:
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
denganCERTIFICATE_HASH
dari bagian Memverifikasi penggunaan sertifikat dengan log Kubernetes API. Pastikan Anda menghapus awalanX509SHA256=
dari hash.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:
Di konsol Google Cloud, buka halaman Logs Explorer:
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.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:
Di konsol Google Cloud, buka halaman Logs Explorer:
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="
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:
Di konsol Google Cloud, buka halaman Logs Explorer:
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:
PROJECT_ID
: project ID Anda.JWT_ID
: ID JWT dari bagian Verifikasi penggunaan token dengan log server Kubernetes API.
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:
Di konsol Google Cloud, buka halaman Logs Explorer:
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 kolomtoBeSignedDigest
, dari bagian Verifikasi penerbitan token dengan log GKE.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
- Pelajari keamanan bidang kontrol.
- Pelajari akses administratif untuk karyawan Google.
- Pelajari cara mengonfigurasi logging dan pemantauan untuk GKE.
- Pelajari cara mengonfigurasi akses tingkat kolom ke log.
- Pelajari batas penggunaan logging.