Panduan ini menjelaskan cara memverifikasi integritas image mesin virtual (VM) Compute Engine yang digunakan Google Kubernetes Engine (GKE) untuk VM bidang kontrol. Panduan ini ditujukan untuk tim keamanan yang memantau log bidang kontrol dan ingin memverifikasi hal berikut:
- VM bidang kontrol di-boot dengan firmware asli dan software booting lainnya yang diverifikasi secara kriptografi oleh booting aman dan pemantauan integritas.
- VM bidang kontrol di-boot dari image GKE OS yang autentik.
Anda juga dapat melakukan verifikasi ini untuk image OS dan integritas booting node pekerja Anda.
Halaman ini menjelaskan salah satu bagian dari serangkaian 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, Trusted Cloud menerapkan berbagai langkah keamanan ke bidang kontrol terkelola. Halaman ini menjelaskan kemampuan opsional yang memberi Anda lebih banyak visibilitas atau kontrol atas bidang kontrol GKE.
Tentang verifikasi integritas VM
Secara default, semua instance bidang kontrol GKE adalah Shielded VM, yaitu VM yang telah melalui proses hardening yang menggunakan kemampuan keamanan seperti booting aman dan terukur, virtual trusted platform module (vTPM), dan firmware UEFI. Semua node GKE juga mengaktifkan pemantauan integritas, yang memvalidasi urutan booting setiap VM Terlindungi terhadap urutan booting "baik" dasar. Validasi ini menampilkan hasil lulus atau gagal untuk setiap fase urutan booting dan menambahkan hasil tersebut ke Cloud Logging. Pemantauan integritas diaktifkan secara default di semua cluster GKE dan memvalidasi fase berikut:
- Urutan booting awal: dari saat firmware UEFI dimulai hingga
bootloader mengambil alih kontrol. Ditambahkan ke log VM sebagai
earlyBootReportEvent
. - Urutan booting akhir: dari saat bootloader mengambil kontrol hingga
kernel sistem operasi mengambil kontrol. Ditambahkan ke log VM sebagai
lateBootReportEvent
.
GKE juga menambahkan log pembuatan VM bidang kontrol ke Logging. Log ini berisi metadata yang mengidentifikasi mesin dan mencakup detail tentang image VM dan urutan booting.Trusted Cloud memublikasikan pengesahan ringkasan verifikasi (VSA) untuk setiap image VM bidang kontrol GKE di repositori gke-vsa di GitHub. VSA menggunakan framework in-toto untuk pengesahan. Anda dapat memvalidasi log VM bidang kontrol untuk cluster Anda terhadap VSA yang sesuai untuk memverifikasi bahwa node bidang kontrol Anda di-boot seperti yang diharapkan.
Melakukan validasi ini dapat membantu Anda mencapai sasaran berikut:
- Pastikan software di bidang kontrol dilindungi oleh booting aman dan pemantauan integritas, cocok dengan kode sumber yang dimaksud, dan sama persis dengan image yang digunakan pelanggan lain. Trusted Cloud
- Meningkatkan keyakinan Anda tentang cara GKE mengamankan bidang kontrol.
Harga
Fitur ini ditawarkan tanpa biaya tambahan di GKE.
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
-
Enable the Cloud Logging API.
- Pastikan Anda sudah memiliki cluster mode GKE Autopilot atau mode Standard yang menjalankan versi 1.29 atau yang lebih baru.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk memverifikasi integritas VM control plane, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:
-
Membuat dan berinteraksi dengan cluster:
Kubernetes Engine Cluster Admin (
roles/container.clusterAdmin
) -
Mengakses dan memproses log:
Logs Viewer (
roles/logging.viewer
)
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.
Memeriksa fase urutan booting yang gagal
Pemantauan integritas menambahkan log ke Logging jika VM bidang kontrol gagal atau berhasil menyelesaikan fase urutan booting. Untuk melihat peristiwa booting yang gagal, jalankan perintah berikut:
Di konsol Trusted Cloud , buka halaman Logs Explorer:
Di kolom Kueri, tentukan kueri berikut:
jsonPayload.@type="type.googleapis.com/cloud_integrity.IntegrityEvent" jsonPayload.earlyBootReportEvent.policyEvaluationPassed="false" OR jsonPayload.lateBootReportEvent.policyEvaluationPassed="false" jsonPayload.metadata.isKubernetesControlPlaneVM="true"
Anda juga dapat memeriksa peristiwa booting yang berhasil dengan mengganti
false
dengantrue
dalam kueri ini.Klik Run query. Jika Anda tidak melihat hasil, berarti VM panel kontrol Anda lulus semua pemeriksaan pemantauan integritas. Jika Anda melihat output, lanjutkan ke langkah berikutnya untuk mengidentifikasi cluster yang sesuai.
Di log integritas booting yang gagal, salin nilai di kolom
resource.labels.instance_id
.Di kolom Kueri, tentukan kueri berikut:
protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog" protoPayload.metadata.isKubernetesControlPlaneVM="true" resource.labels.instance_id="INSTANCE_ID" protoPayload.methodName="v1.compute.instances.insert"
Ganti
INSTANCE_ID
dengan nilai kolominstance_id
dari langkah sebelumnya.Klik Run query. Nilai di kolom
protoPayload.metadata.parentResource.parentResourceId
adalah ID cluster GKE.Temukan nama cluster GKE:
gcloud asset query \ --organization=ORGANIZATION_ID \ --statement="SELECT name FROM container_googleapis_com_Cluster WHERE resource.data.id='CLUSTER_ID';"
Ganti kode berikut:
ORGANIZATION_ID
: ID numerik organisasiTrusted Cloud .CLUSTER_ID
: nilai kolomprotoPayload.metadata.parentResource.parentResourceId
dari langkah sebelumnya.
Outputnya mirip dengan hal berikut ini:
# lines omitted for clarity //container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME
Output ini memiliki kolom berikut:
PROJECT_ID
: ID project Trusted Cloud Anda.LOCATION
: lokasi cluster.CLUSTER_NAME
: nama cluster.
Menemukan dan memeriksa log VM bidang kontrol
Log pembuatan VM Compute Engine yang sesuai dengan cluster GKE disimpan di bucket log _Default
.
Untuk menemukan log pembuatan VM panel kontrol cluster dan mengambil metadata ini, lakukan hal berikut:
Di konsol Trusted Cloud , buka halaman Logs Explorer:
Di kolom Kueri, tentukan kueri berikut:
resource.type="gce_instance" protoPayload.methodName="v1.compute.instances.insert" protoPayload.metadata.isKubernetesControlPlaneVM="true"
Klik Run query. Jika Anda tidak melihat hasil, periksa apakah Anda memenuhi semua persyaratan di bagian Sebelum memulai.
Di hasil kueri, periksa kolom
metadata
. Outputnya mirip dengan hal berikut ini:# fields omitted for clarity "metadata": { "usedResources": { "attachedDisks": [ { "sourceImageId": "9046093115864736653", "sourceImage": "https://www.googleapis.com/compute/v1/projects/1234567890/global/images/gke-1302-gke1627000-cos-113-18244-85-49-c-pre", "isBootDisk": true } # fields omitted for clarity
Kolom
metadata
mencakup informasi berikut:usedResources
: daftar resource yang digunakan untuk membuat VM.attachedDisks
: boot disk untuk VM.sourceImageId
: ID unik image VM.sourceImage
: URL image VM sumber. Sintaksis nilai di kolom ini adalahhttps://www.googleapis.com/compute/v1/projects/PROJECT_NUMBER/global/images/IMAGE_NAME
, denganPROJECT_NUMBER
adalah jumlah project yang dimiliki Trusted Cloudyang menghosting VM bidang kontrol danIMAGE_NAME
adalah nama image yang digunakan untuk mem-boot VM.isBootDisk
: ID boolean untuk menunjukkan apakah disk ini digunakan sebagai boot disk untuk VM.
Menemukan dan memverifikasi VSA untuk image VM bidang kontrol
Di bagian ini, Anda akan menemukan VSA yang sesuai dengan image VM bidang
kontrol di repositori gke-vsa di GitHub. Kemudian, Anda menggunakan alat bernama
slsa-verifier
yang disediakan oleh
framework Supply chain Levels for Software Artifacts (SLSA)
untuk memverifikasi VSA. Anda memerlukan data berikut dari log pembuatan VM bidang kontrol:
- ID image VM
- Nomor project dari project yang dimiliki Trusted Clouddan menghosting VM
- Nama image OS yang digunakan untuk mem-boot VM
File yang sesuai dengan VM panel kontrol Anda memiliki format nama file berikut:
IMAGE_NAME:IMAGE_ID.intoto.jsonl
Ganti kode berikut:
IMAGE_NAME
: nama image VM, yang merupakan string setelah/images/
di kolomattachedDisks.sourceImage
dalam log audit VM dari bagian sebelumnya. Contoh,gke-1302-gke1627000-cos-113-18244-85-49-c-pre
.IMAGE_ID
: ID image VM, yang merupakan nilai kolomattachedDisks.sourceImageId
di log audit VM dari bagian sebelumnya. Contohnya,9046093115864736653
.
Untuk menemukan dan memverifikasi VSA saat Anda mengetahui nama file VSA, lakukan langkah-langkah berikut:
- Buka
repositori GitHub
gke-vsa
. - Di direktori "gke-master-images", temukan file yang sesuai dengan image VM Anda. Misalnya,
https://github.com/GoogleCloudPlatform/gke-vsa/blob/main/gke-master-images:78064567238/IMAGE_NAME:IMAGE_ID.intoto.jsonl
- Download file VSA.
- Instal alat
slsa-verifier
. Simpan kunci publik untuk memverifikasi VSA ke file bernama
vsa_signing_public_key
:Verifikasi VSA:
slsa-verifier verify-vsa \ --attestation-path=PATH_TO_VSA_FILE \ --resource-uri=gce_image://gke-master-images:IMAGE_NAME \ --subject-digest=gce_image_id:IMAGE_ID\ --verifier-id=https://bcid.corp.google.com/verifier/bcid_package_enforcer/v0.1 \ --verified-level=BCID_L1 \ --verified-level=SLSA_BUILD_LEVEL_2 \ --public-key-path=PATH_TO_PUBLIC_KEY_FILE \ --public-key-id=keystore://76574:prod:vsa_signing_public_key
Ganti kode berikut:
PATH_TO_VSA_FILE
: jalur ke file VSA yang Anda download.IMAGE_NAME
: nama image VM, sepertigke-1302-gke1627000-cos-113-18244-85-49-c-pre
.IMAGE_ID
: ID image VM, seperti9046093115864736653
.
Jika VSA lulus pemeriksaan verifikasi, outputnya adalah sebagai berikut:
Verifying VSA: PASSED PASSED: SLSA verification passed