Memverifikasi integritas VM bidang kontrol GKE

Anda dapat memverifikasi integritas image virtual machine (VM) Compute Engine yang digunakan Google Kubernetes Engine (GKE) untuk VM panel kontrol. Halaman ini memberikan petunjuk untuk tim keamanan yang memantau log panel kontrol untuk memverifikasi hal berikut:

  • VM panel kontrol di-boot dengan firmware autentik dan software booting lainnya yang diverifikasi secara kriptografi oleh booting aman dan pemantauan integritas.
  • VM panel kontrol di-boot dari image OS GKE autentik.

Anda juga dapat melakukan verifikasi ini untuk image OS dan integritas booting node.

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

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

Tentang verifikasi integritas VM

Secara default, semua instance panel kontrol GKE adalah Shielded VM, yang merupakan VM yang diperkuat 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 Shielded VM 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 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 panel kontrol ke Logging. Log ini berisi metadata yang mengidentifikasi mesin dan menyertakan detail tentang image VM dan urutan booting. Google Cloud memublikasikan atestasi ringkasan verifikasi (VSA) untuk setiap image VM panel kontrol GKE di repositori gke-vsa di GitHub. VSA menggunakan framework in-toto untuk atestasi. Anda dapat memvalidasi log VM panel kontrol untuk cluster terhadap VSA yang sesuai untuk memverifikasi bahwa node panel kontrol Anda di-boot seperti yang diharapkan.

Melakukan validasi ini dapat membantu Anda mencapai tujuan berikut:

  • Pastikan software di panel kontrol dilindungi oleh booting aman dan pemantauan integritas, cocok dengan kode sumber yang dimaksudkan, dan sama persis dengan image yang digunakan oleh pelanggan Google Cloud lain.
  • Meningkatkan keyakinan Anda terhadap cara GKE mengamankan panel 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 perintah gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
  • Aktifkan Cloud Logging API.

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), yang berisi izin serviceusage.services.enable. Pelajari cara memberikan peran.

    Mengaktifkan API

  • Pastikan Anda sudah memiliki cluster mode GKE Autopilot atau mode Standar yang menjalankan versi 1.29 atau yang lebih baru.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk memverifikasi integritas VM panel kontrol, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:

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.

Memeriksa fase urutan booting yang gagal

Pemantauan integritas menambahkan log ke Logging jika VM panel kontrol gagal atau berhasil menyelesaikan fase urutan booting. Untuk melihat peristiwa booting yang gagal, jalankan perintah berikut:

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

    Buka Logs Explorer

  2. Di kolom Query, 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 dengan true dalam kueri ini.

  3. Klik Run query. Jika Anda tidak melihat hasil, VM panel kontrol Anda lulus semua pemeriksaan pemantauan integritas. Jika Anda melihat output, lanjutkan ke langkah berikutnya untuk mengidentifikasi cluster yang sesuai.

  4. Di log integritas booting yang gagal, salin nilai di kolom resource.labels.instance_id.

  5. Di kolom Query, 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 kolom instance_id dari langkah sebelumnya.

  6. Klik Run query. Nilai di kolom protoPayload.metadata.parentResource.parentResourceId adalah ID cluster GKE.

  7. 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 organisasi Google Cloud Anda.
    • CLUSTER_ID: nilai kolom protoPayload.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: project ID Anda Google Cloud .
    • LOCATION: lokasi cluster.
    • CLUSTER_NAME: nama cluster.

Menemukan dan memeriksa log VM panel kontrol

Log pembuatan VM Compute Engine yang sesuai dengan cluster GKE disimpan di _Defaultbucket log. Untuk menemukan log pembuatan VM panel kontrol cluster Anda dan mengambil metadata ini, lakukan hal berikut:

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

    Buka Logs Explorer

  2. Di kolom Query, tentukan kueri berikut:

    resource.type="gce_instance"
    protoPayload.methodName="v1.compute.instances.insert"
    protoPayload.metadata.isKubernetesControlPlaneVM="true"
    
  3. Klik Run query. Jika Anda tidak melihat hasil, pastikan Anda memenuhi semua persyaratan di bagian Sebelum memulai.

  4. 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 adalah https://www.googleapis.com/compute/v1/projects/PROJECT_NUMBER/global/images/IMAGE_NAME, dengan PROJECT_NUMBER adalah nomor project milik Google Cloudyang menghosting VM panel kontrol dan IMAGE_NAMEadalah nama image yang digunakan untuk mem-boot VM.
    • isBootDisk: ID boolean untuk menentukan apakah disk ini digunakan sebagai boot disk untuk VM.

Menemukan dan memverifikasi VSA untuk image VM panel kontrol

Di bagian ini, Anda akan menemukan VSA yang sesuai dengan image VM panel kontrol Anda di repositori gke-vsa di GitHub. Kemudian, Anda menggunakan alat bernama slsa-verifier yang disediakan oleh the Supply chain Levels for Software Artifacts (SLSA) framework untuk memverifikasi VSA. Anda memerlukan data berikut dari log pembuatan VM panel kontrol:

  • ID image VM
  • Nomor project milik Google Cloudyang 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 kolom attachedDisks.sourceImage dalam log audit VM dari bagian sebelumnya. Contohnya, gke-1302-gke1627000-cos-113-18244-85-49-c-pre.
  • IMAGE_ID: ID image VM, yang merupakan nilai kolom attachedDisks.sourceImageId dalam log audit VM dari bagian sebelumnya. Contohnya, 9046093115864736653.

Untuk menemukan dan memverifikasi VSA saat Anda mengetahui nama file VSA, lakukan langkah-langkah berikut:

  1. Buka repositori GitHub gke-vsa.
  2. Di direktori "gke-master-images", temukan file yang sesuai dengan image VM Anda. Contohnya, https://github.com/GoogleCloudPlatform/gke-vsa/blob/main/gke-master-images:78064567238/IMAGE_NAME:IMAGE_ID.intoto.jsonl
  3. Download file VSA.
  4. Instal alat slsa-verifier.
  5. Simpan kunci publik untuk memverifikasi VSA ke file bernama vsa_signing_public_key:

    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEeGa6ZCZn0q6WpaUwJrSk+PPYEsca
    3Xkk3UrxvbQtoZzTmq0zIYq+4QQl0YBedSyy+XcwAMaUWTouTrB05WhYtg==
    -----END PUBLIC KEY-----
    

  6. 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, seperti gke-1302-gke1627000-cos-113-18244-85-49-c-pre.
    • IMAGE_ID: ID image VM, seperti 9046093115864736653.

    Jika VSA lulus pemeriksaan verifikasi, output-nya adalah sebagai berikut:

    Verifying VSA: PASSED
    PASSED: SLSA verification passed
    

Langkah berikutnya