Melindungi metadata cluster


Google Kubernetes Engine (GKE) menggunakan metadata instance untuk mengonfigurasi virtual machine (VM) node, tetapi beberapa metadata ini berpotensi sensitif dan harus dilindungi dari workload yang berjalan di cluster.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan 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.

Mengonfigurasi akun layanan node

Kredensial akun layanan setiap node terus terekspos workload. Secara default, node Anda menggunakan akun layanan default Compute Engine. Anda harus mengonfigurasi akun layanan dengan hak istimewa minimal untuk digunakan node Anda, bukan akun layanan default Compute Engine. Kemudian, lampirkan akun layanan ini ke node Anda, sehingga penyerang tidak dapat mengakali perlindungan metadata GKE menggunakan Compute Engine API untuk mengakses instance VM yang mendasarinya secara langsung.

Untuk informasi selengkapnya, lihat Menggunakan akun layanan node dengan hak istimewa terendah.

Untuk membuat akun layanan node dengan hak istimewa minimal, lakukan langkah-langkah berikut:

  1. Buat akun layanan Identity and Access Management (IAM) baru dan simpan alamat email tersebut di variabel lingkungan:

    gcloud iam service-accounts create NODE_SA_NAME \
        --display-name="DISPLAY_NAME"
    export NODE_SA_EMAIL=$(gcloud iam service-accounts list --format='value(email)' \
        --filter='displayName:DISPLAY_NAME')
    

    Ganti kode berikut:

    • NODE_SA_NAME: nama akun layanan node baru Anda.
    • DISPLAY_NAME: nama tampilan akun layanan baru.

    Alamat email akun layanan node memiliki format NODE_SA_NAME@PROJECT_ID.iam.gserviceaccount.com.

  2. Konfigurasi akun layanan Anda dengan peran dan izin minimum untuk menjalankan node GKE Anda:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$NODE_SA_EMAIL \
        --role=roles/monitoring.metricWriter
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$NODE_SA_EMAIL \
        --role=roles/monitoring.viewer
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$NODE_SA_EMAIL \
        --role=roles/logging.logWriter
    

    Ganti PROJECT_ID dengan ID project Google Cloud Anda.

    Selain itu, jika cluster Anda mengambil image pribadi dari Artifact Registry, tambahkan peran roles/artifactregistry.reader:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$NODE_SA_EMAIL \
        --role=roles/artifactregistry.reader
    

Penyembunyian metadata

Penyembunyian metadata GKE mencegah Pod pengguna mengakses kube-env, yang berisi kredensial kubelet, dan token identitas instance VM.

Traffic firewall penyembunyian metadata dari Pod pengguna (Pod tidak berjalan di HostNetwork) ke server metadata cluster, dan hanya mengizinkan kueri aman. Firewall mencegah Pod pengguna menggunakan kredensial kubelet untuk serangan eskalasi akses atau menggunakan identitas VM untuk serangan eskalasi instance.

Workload Identity Federation untuk GKE menggantikan kebutuhan untuk menggunakan penyembunyian metadata dan memperluas perlindungan yang ditawarkan oleh penyembunyian metadata. Anda harus menggunakan Workload Identity Federation untuk GKE, bukan penyembunyian metadata dalam semua situasi. Untuk mempelajari lebih lanjut, lihat Tentang Workload Identity Federation untuk GKE.

Untuk mengaktifkan penyembunyian metadata, gunakan opsi --workload-metadata=SECURE yang tidak digunakan lagi dalam perintah gcloud beta container clusters create atau dalam perintah gcloud beta container node-pools create.

Batasan

Penyamaran metadata memiliki batasan seperti berikut:

  • Penyembunyian metadata hanya melindungi akses ke kube-env dan token identitas instance node.
  • Penyembunyian metadata tidak membatasi akses ke akun layanan node.
  • Penyembunyian metadata tidak membatasi akses ke metadata instance terkait lainnya.
  • Penyembunyian metadata tidak membatasi akses ke API metadata lama lainnya.
  • Penyembunyian metadata tidak membatasi traffic dari Pod yang berjalan di jaringan host (hostNetwork: true dalam spesifikasi Pod).

Menonaktifkan dan mentransisikan dari API metadata lama

Endpoint server metadata Compute Engine v0.1 dan v1beta1 tidak digunakan lagi dan dinonaktifkan pada 30 September 2020.

Untuk jadwal penonaktifan, lihat penghentian penggunaan endpoint server metadata v0.1 dan v1beta1.

Langkah selanjutnya