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 opsional dan tidak diperlukan untuk mengamankan bidang kontrol Anda.
Panduan ini ditujukan untuk administrator keamanan dan pemilik platform yang memiliki persyaratan kepatuhan atau kebijakan organisasi tertentu untuk mengontrol penerbitan dan penandatanganan kredensial. Anda seharusnya sudah menyiapkan kunci dan CA yang dikelola sendiri dengan otoritas bidang kontrol GKE.
Anda seharusnya sudah memahami konsep berikut:
Halaman ini menjelaskan satu bagian dari kumpulan fitur bidang kontrol opsional di GKE yang memungkinkan Anda melakukan tugas seperti memverifikasi postur keamanan bidang kontrol atau mengonfigurasi enkripsi dan penandatanganan kredensial di bidang 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 opsional kemampuan yang memberi Anda lebih banyak visibilitas atau kontrol atas bidang 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 mengorelasikan log penerbitan identitas dengan log Cloud KMS, Layanan Certificate Authority, 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 Layanan CA. CA kemudian menerbitkan sertifikat menggunakan kunci yang sesuai di Cloud KMS untuk menandatangani ringkasan sertifikat.
Log server Kubernetes API berisi detail tanda tangan sertifikat untuk setiap panggilan Kubernetes API 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 mengorelasikan log dari layanan berikut:
- Log penerbitan identitas GKE: Gunakan kueri
protoPayload.metadata.credentialIduntuk menemukan log penerbitan identitas GKE tertentu berdasarkan ID kredensial dari log server Kubernetes API. Kemudian, gunakan kolomprotoPayload.metadata.certificateFingerprintdari log penerbitan identitas GKE untuk mengorelasikan 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_digestdari log Layanan CA 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 di 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 ditandatangani dan kemudian diverifikasi menggunakan kunci penandatanganan akun layanan di Cloud KMS.
Log server Kubernetes API berisi detail tanda tangan token untuk setiap panggilan Kubernetes API 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 JWT ID dari log server Kubernetes API untuk melacak siklus proses JWT dengan mengorelasikan log berikut:
- Log penerbitan identitas GKE: Gunakan JWT ID 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
toBeSignedDigestkolom dari log penerbitan identitas GKE untuk mengonfirmasi bahwa kunci Cloud KMS yang diharapkan menandatangani JWT.
Harga
Dalam dokumen ini, Anda akan menggunakan komponen yang dapat ditagih sebagai berikut Google Cloud:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
Konfigurasikan bidang kontrol cluster GKE Anda dengan CA atau kunci yang dikelola sendiri.
Aktifkan Cloud Audit Logging Service API berikut:
- Untuk Cloud KMS, aktifkan log audit Akses Data dengan jenis Data Read.
- Untuk Layanan CA, aktifkan log audit Akses Data dengan jenis Admin Read dan Data Write.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan guna mengakses log penerbitan identitas, mintalah administrator untuk memberi Anda peran IAM berikut pada 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 pemberian 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 merutekan 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 otoritas 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 untuk panggilan API yang diautentikasi menggunakan sertifikat, selesaikan langkah-langkah berikut:
Di Google Cloud konsol, buka halaman Logs Explorer:
Tempel 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 Anda atau dengan memeriksa log secara manual.
Untuk mengorelasikan 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 mengorelasikan 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 Google Cloud konsol, buka halaman Logs Explorer:
Tempel 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_IDdari bagian Memverifikasi 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 Google Cloud konsol, buka halaman Logs Explorer:
Tempel 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_HASHdenganCERTIFICATE_HASHdari bagian Memverifikasi penggunaan sertifikat dengan log Kubernetes API. Pastikan Anda menghapus awalanX509SHA256=dari hash.Klik Run query.
Kueri ini menampilkan log yang berisi
tbs_certificate_digest: DIGEST_VALUEkolom 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 Google Cloud konsol, buka halaman Logs Explorer:
Tempel 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_VALUEdengan nilai ringkasan dari Memverifikasi penerbitan sertifikat dengan log Layanan CA bagian.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 diterbitkan.
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 untuk peristiwa penggunaan token, selesaikan langkah-langkah berikut:
Di Google Cloud konsol, buka halaman Logs Explorer:
Tempel 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 Anda atau dengan memeriksa log secara manual.
Untuk mengorelasikan 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 mengorelasikan log dari GKE dan Cloud KMS.
Memverifikasi penerbitan token dengan log GKE
Untuk menemukan entri log untuk peristiwa penerbitan token, selesaikan langkah-langkah berikut:
Di Google Cloud konsol, buka halaman Logs Explorer:
Tempel 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: JWT ID dari bagian Memverifikasi 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 Google Cloud konsol, buka halaman Logs Explorer:
Tempel 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_VALUEdengan nilai di kolomtoBeSignedDigest, dari bagian Memverifikasi 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 berikutnya
- Pelajari tentang keamanan bidang kontrol.
- Pelajari tentang akses administratif untuk karyawan Google.
- Pelajari cara mengonfigurasi logging dan pemantauan untuk GKE.
- Pelajari cara mengonfigurasi akses tingkat kolom ke log.
- Pelajari tentang batas penggunaan logging.