Panduan memulai: Memantau keamanan Pod dengan validasi berkelanjutan

Pelajari cara mulai menggunakan validasi berkelanjutan (CV) Otorisasi Biner dengan kebijakan berbasis pemeriksaan. Dalam panduan memulai ini, Anda akan menggunakan pemeriksaan CV berikut untuk terus memvalidasi Pod yang sedang berjalan untuk kondisi berikut:

  • Direktori tepercaya: Memeriksa apakah image yang terkait dengan Pod berada di satu atau beberapa direktori tepercaya yang Anda tentukan dalam kebijakan.
  • Keaktualan gambar: Memeriksa apakah gambar Pod diupload dalam jumlah hari yang Anda tentukan dalam kebijakan.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Instal Google Cloud CLI.

  3. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  4. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  5. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  6. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  7. Aktifkan Binary Authorization API dan Google Kubernetes Engine 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.

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  8. Instal Google Cloud CLI.

  9. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  10. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  11. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  12. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  13. Aktifkan Binary Authorization API dan Google Kubernetes Engine 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.

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  14. Instal alat command line kubectl.
  15. Jika kebijakan Otorisasi Biner dan cluster GKE Anda berada di project yang berbeda, pastikan Otorisasi Biner diaktifkan di kedua project.

Membuat kebijakan platform

Untuk menyiapkan kebijakan platform GKE CV, lakukan hal berikut:

  1. Buat file YAML kebijakan platform:

    cat << EOF > /tmp/my-policy.yaml
    gkePolicy:
      checkSets:
      - checks:
        - trustedDirectoryCheck:
            trustedDirPatterns:
            - us-central1-docker.pkg.dev/my-project/my-directory
          displayName: My trusted directory check
        - imageFreshnessCheck:
            maxUploadAgeDays: 30
          displayName: My image freshness check
        displayName: My trusted directory and image freshness check set
    EOF
    

    Kebijakan ini memeriksa kondisi berikut:

    • Image Pod disimpan di repositori Artifact Registry bernama us-central1-docker.pkg.dev/my-project/my-directory.

    • Image Pod diupload ke repositori Artifact Registry atau Container Registry dalam 30 hari terakhir.

  2. Buat kebijakan platform:

    gcloud beta container binauthz policy create POLICY_ID \
        --platform=gke \
        --policy-file=/tmp/my-policy.yaml \
        --project=POLICY_PROJECT_ID
    

    Ganti kode berikut:

    • POLICY_ID: ID pilihan Anda
    • POLICY_PROJECT_ID: ID project kebijakan

Membuat atau memperbarui cluster

Untuk mengaktifkan CV di cluster, Anda dapat membuat cluster baru atau memperbarui cluster yang ada.

  • Untuk membuat cluster dengan kebijakan platform berbasis pemeriksaan yang diaktifkan, jalankan perintah berikut:

    gcloud beta container clusters create CLUSTER_NAME \
        --location=LOCATION \
        --binauthz-evaluation-mode=POLICY_BINDINGS \
        --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
        --project=CLUSTER_PROJECT_ID
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster
    • LOCATION: lokasi—misalnya: us-central1 atau asia-south1
    • POLICY_PROJECT_ID: ID project tempat kebijakan disimpan
    • POLICY_ID: ID kebijakan
    • CLUSTER_PROJECT_ID: project ID cluster

    Tunggu hingga cluster selesai dibuat.

  • Untuk mengupdate cluster yang ada dengan kebijakan berbasis pemeriksaan yang diaktifkan, jalankan perintah berikut.

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --binauthz-evaluation-mode=POLICY_BINDINGS \
        --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
        --project=CLUSTER_PROJECT_ID
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster
    • LOCATION: lokasi—misalnya: us-central1 atau asia-south1
    • POLICY_PROJECT_ID: ID project tempat kebijakan disimpan
    • POLICY_ID: ID kebijakan
    • CLUSTER_PROJECT_ID: project ID cluster

    Tunggu hingga cluster selesai diupdate.

Men-deploy image

  1. Dapatkan kredensial untuk kubectl:

    gcloud container clusters get-credentials CLUSTER_NAME
    
  2. Men-deploy gambar:

    kubectl run hello-app \
        --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    

    Gambar us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 memenuhi pemeriksaan keaktualan karena diupload ke repositori dalam 30 hari terakhir. Namun, gambar tidak memenuhi pemeriksaan direktori tepercaya karena tidak ada di us-central1-docker.pkg.dev/my-project/my-directory. Akibatnya, CV menghasilkan entri log TrustedDirectoryCheck di Cloud Logging.

Melihat log

Entri log akan muncul di Cloud Logging dalam waktu 24 jam setelah Pod di-deploy, tetapi dapat muncul dalam waktu beberapa jam saja.

Untuk melihat log di Cloud Logging, gunakan filter berikut:

logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation"
"policyName"

Log untuk Pod hello-app mirip dengan yang di bawah. Beberapa kolom mungkin berbeda, bergantung pada project ID, nama cluster, dll.

{
  "insertId": "637c2de7-0000-2b64-b671-24058876bb74",
  "jsonPayload": {
    "podEvent": {
      "endTime": "2022-11-22T01:14:30.430151Z",
      "policyName": "projects/1234567890/platforms/gke/policies/my-policy",
      "images": [
        {
          "result": "DENY",
          "checkResults": [
            {
              "explanation": "TrustedDirectoryCheck at index 0 with display name \"My trusted directory check\" has verdict NOT_CONFORMANT. Image is not in a trusted directory",
              "checkSetName": "Default check set",
              "checkSetIndex": "0",
              "checkName": "My trusted directory check",
              "verdict": "NON_CONFORMANT",
              "checkType": "TrustedDirectoryCheck",
              "checkIndex": "0"
            }
          ],
          "image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
        }
      ],
      "verdict": "VIOLATES_POLICY",
      "podNamespace": "default",
      "deployTime": "2022-11-22T01:06:53Z",
      "pod": "hello-app"
    },
    "@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent"
  },
  "resource": {
    "type": "k8s_cluster",
    "labels": {
      "project_id": "my-project",
      "location": "us-central1-a",
      "cluster_name": "my-cluster"
    }
  },
  "timestamp": "2022-11-22T01:44:28.729881832Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
  "receiveTimestamp": "2022-11-22T03:35:47.171905337Z"
}

Entri log menampilkan informasi tentang pelanggaran kebijakan, termasuk kolom berikut:

  • policyName: kebijakan platform yang digunakan CV saat mengidentifikasi pelanggaran
  • checkResults: blok hasil yang mencakup kolom berikut:

    • explanation: pesan error
    • checkSetName: nilai displayName untuk set pemeriksaan
    • checkSetIndex: indeks set pemeriksaan dalam kebijakan
    • checkName: nama pemeriksaan
    • checkIndex: indeks pemeriksaan dalam set pemeriksaan
    • verdict: putusan yang menghasilkan entri log, dalam hal ini NOT_CONFORMANT karena pemeriksaan tidak terpenuhi.

Beberapa pemeriksaan dapat menyertakan informasi tambahan yang dapat membantu Anda memahami alasan pemeriksaan tidak terpenuhi.

Karena gambar memenuhi pemeriksaan keaktualan, pemeriksaan keaktualan tidak muncul di log.

Pembersihan

Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan pada halaman ini, hapus project Google Cloud yang berisi resource tersebut.

Bagian ini menjelaskan cara membersihkan pemantauan CV yang Anda konfigurasi sebelumnya dalam panduan ini.

Anda dapat menonaktifkan pemantauan CV atau Binary Authorization dan CV di cluster Anda.

Menonaktifkan Otorisasi Biner di cluster

Untuk menonaktifkan penerapan CV dan Otorisasi Biner di cluster Anda, jalankan perintah berikut:

gcloud beta container clusters update CLUSTER_NAME \
    --binauthz-evaluation-mode=DISABLED \
    --location=LOCATION \
    --project=CLUSTER_PROJECT_ID

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster
  • LOCATION: lokasi cluster
  • CLUSTER_PROJECT_ID: project ID cluster

Menonaktifkan pemantauan kebijakan berbasis pemeriksaan di cluster

Untuk menonaktifkan CV dengan kebijakan berbasis pemeriksaan di cluster, dan mengaktifkan kembali penerapan menggunakan kebijakan penerapan Otorisasi Biner, jalankan perintah berikut:

gcloud beta container clusters update CLUSTER_NAME  \
    --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
    --location=LOCATION \
    --project="CLUSTER_PROJECT_ID"

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster
  • LOCATION: lokasi cluster
  • CLUSTER_PROJECT_ID: project ID cluster

Perhatikan bahwa --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE setara dengan flag --enable-binauthz yang lebih lama.

Menghapus kebijakan

Untuk menghapus kebijakan, jalankan perintah berikut. Kebijakan platform berbasis pemeriksaan tidak perlu dihapus untuk menonaktifkan audit kebijakan berbasis pemeriksaan.

gcloud beta container binauthz policy delete POLICY_ID \
    --platform=gke \
    --project="POLICY_PROJECT_ID"

Ganti kode berikut:

  • POLICY_ID: ID kebijakan
  • POLICY_PROJECT_ID: ID project kebijakan

Langkah berikutnya