Mengamankan deployment image ke Cloud Run dan Google Kubernetes Engine

Halaman ini berisi petunjuk cara mengamankan deployment gambar ke Cloud Run dan Google Kubernetes Engine menggunakan Cloud Build.

Pelajari cara mengonfigurasi Otorisasi Biner untuk memeriksa pengesahan build dan memblokir deployment image yang tidak dihasilkan oleh Cloud Build. Proses ini dapat mengurangi risiko deployment software yang tidak sah.

Sebelum memulai

  1. Aktifkan API Cloud Build, Binary Authorization, and Artifact Registry.

    Mengaktifkan API

  2. Untuk menggunakan contoh command line dalam panduan ini, instal dan konfigurasikan Google Cloud SDK.

  3. Menyiapkan Otorisasi Biner untuk platform Anda.

Mengontrol deployment dengan Otorisasi Biner

Kebijakan di Otorisasi Biner adalah serangkaian aturan yang mengatur deployment gambar. Anda dapat mengonfigurasi aturan untuk mewajibkan attestations yang ditandatangani secara digital.

Cloud Build membuat dan menandatangani pengesahan pada waktu build. Dengan Otorisasi Biner, Anda dapat menggunakan attestor built-by-cloud-build untuk memverifikasi pengesahan dan hanya men-deploy image yang di-build oleh Cloud Build.

Untuk membuat attestor built-by-cloud-build di project Anda, jalankan build dalam project tersebut.

Untuk hanya mengizinkan image yang dibangun oleh Cloud Build di-deploy, lakukan langkah-langkah berikut:

Konsol

  1. Buka halaman Otorisasi Biner di konsol Google Cloud:

    Buka Otorisasi Biner

  2. Di tab Kebijakan, klik Edit Kebijakan.

  3. Pada dialog Edit Policy, pilih Izinkan hanya gambar yang telah disetujui oleh semua attestor berikut.

  4. Klik Add Attestors.

  5. Di kotak dialog Add attestors, lakukan hal berikut:

    1. Pilih Add by project and attestor name, lalu lakukan langkah-langkah berikut:
      1. Di kolom Project name, masukkan project tempat Anda menjalankan Cloud Build.
      2. Klik kolom Attestor name, dan perhatikan bahwa attestor built-by-cloud-build tersedia.
      3. Klik built-by-cloud-build.
    2. Atau, pilih Add by attestor resource ID. Di ID resource Attestor, masukkan

      projects/PROJECT_ID/attestors/built-by-cloud-build
      

      Mengganti PROJECT_ID dengan project tempat Anda menjalankan Cloud Build.

  6. Klik Tambahkan 1 attestor.

  7. Klik Simpan Kebijakan.

gcloud

  1. Ekspor kebijakan yang ada ke file menggunakan perintah berikut:

    gcloud container binauthz policy export > /tmp/policy.yaml
    
  2. Edit file kebijakan Anda.

  3. Edit salah satu aturan berikut:

    • defaultAdmissionRule
    • clusterAdmissionRules
    • istioServiceIdentityAdmissionRules
    • kubernetesServiceAccountAdmissionRules
  4. Tambahkan blok requireAttestationsBy ke aturan jika belum ada.

  5. Di blok requireAttestationsBy, tambahkan

    projects/PROJECT_ID/attestors/built-by-cloud-build
    

    Mengganti PROJECT_ID dengan project tempat Anda menjalankan Cloud Build.

  6. Simpan file kebijakan.

  7. Mengimpor file kebijakan.

    gcloud container binauthz policy import /tmp/policy.yaml
    

    Berikut adalah contoh file kebijakan yang berisi referensi ke built-by-cloud-build-attestor:

    defaultAdmissionRule:
      evaluationMode: REQUIRE_ATTESTATION
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      requireAttestationsBy:
        - projects/PROJECT_ID/attestors/built-by-cloud-build
    name: projects/PROJECT_ID/policy
    

    Ganti PROJECT_ID dengan project ID tempat Anda menjalankan Cloud Build.

Anda dapat melihat error kebijakan di pesan log Otorisasi Biner untuk GKE atau Cloud Run

Menggunakan mode uji coba

Dalam mode uji coba, Otorisasi Biner memeriksa kepatuhan kebijakan tanpa benar-benar memblokir deployment. Sebagai gantinya, pesan status kepatuhan kebijakan dicatat ke Cloud Logging. Anda dapat menggunakan log ini untuk menentukan apakah kebijakan pemblokiran Anda berfungsi dengan benar dan untuk mengidentifikasi positif palsu.

Untuk mengaktifkan uji coba, lakukan hal berikut:

Konsol

  1. Buka halaman Otorisasi Biner di konsol Google Cloud.

    Buka Otorisasi Biner.

  2. Klik Edit Kebijakan.

  3. Di Default Rule atau aturan tertentu, pilih Dry-run mode.

  4. Klik Simpan Kebijakan.

gcloud

  1. Ekspor kebijakan Otorisasi Biner ke file YAML:

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. Dalam editor teks, tetapkan enforcementMode ke DRYRUN_AUDIT_LOG_ONLY, lalu simpan file tersebut.

  3. Untuk memperbarui kebijakan, impor file dengan menjalankan perintah berikut:

    gcloud container binauthz policy import /tmp/policy.yaml
    

Anda dapat melihat error kebijakan di pesan log Otorisasi Biner untuk GKE atau Cloud Run

Batasan

  • Cloud Build dan Otorisasi Biner harus berada dalam project yang sama. Jika Anda menjalankan platform deployment di project lain, konfigurasikan peran IAM untuk penyiapan multi-project, dan lihat project Cloud Build saat menambahkan attestor built-by-cloud-build di Otorisasi Biner.

  • Cloud Build tidak menghasilkan pengesahan saat Anda mengirim image ke Artifact Registry menggunakan langkah build docker push eksplisit. Pastikan Anda mengirim ke Artifact Registry menggunakan kolom images pada langkah build docker build. Untuk mengetahui informasi selengkapnya tentang images, lihat Berbagai cara menyimpan image di Artifact Registry.

  • Anda harus menggunakan file konfigurasi build yang terpisah untuk pipeline build dan pipeline deployment. Hal ini karena Cloud Build menghasilkan pengesahan hanya setelah pipeline build berhasil diselesaikan. Otorisasi Biner kemudian akan memeriksa pengesahan sebelum men-deploy image.

Mengaktifkan pengesahan di kumpulan pribadi

Secara default, Cloud Build tidak membuat pengesahan Otorisasi Biner untuk build di kumpulan pribadi. Untuk membuat pengesahan, tambahkan opsi requestedVerifyOption: VERIFIED ke file konfigurasi build Anda:

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1', '.' ]
images:
- 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1'
options:
  requestedVerifyOption: VERIFIED

Setelah menambahkan requestedVerifyOption, Cloud Build akan mengaktifkan pembuatan pengesahan dan metadata provenance untuk gambar Anda.

Lihat metadata attestor

attestor dibuat saat pertama kali Anda menjalankan build dalam sebuah project. ID attestor berupa projects/PROJECT_ID/attestors/built-by-cloud-build, dengan PROJECT_ID sebagai project ID Anda.

Anda dapat memeriksa metadata build attestor menggunakan perintah berikut:

curl -X GET -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://binaryauthorization.googleapis.com/v1beta1/projects/PROJECT_ID/attestors/built-by-cloud-build

Ganti PROJECT_ID dengan project tempat Anda menjalankan Cloud Build.

Output-nya berisi informasi tentang attestor dan kunci publik yang terkait. Contoh:

name": "projects/PROJECT_ID/attestors/built-by-cloud-build",
  "userOwnedDrydockNote": {
    "noteReference": "projects/PROJECT_ID/notes/built-by-cloud-build",
    "publicKeys": [
      {
        "id": "//cloudkms.googleapis.com/v1/projects/verified-builder/locations/asia/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1",
        "pkixPublicKey": {
          "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMMvFxZLgIiWOLIXsaTkjTmOKcaK7\neIZrgpWHpHziTFGg8qyEI4S8O2/2wh1Eru7+sj0Sh1QxytN/KE5j3mTvYA==\n-----END PUBLIC KEY-----\n",
          "signatureAlgorithm": "ECDSA_P256_SHA256"
        }
      },
...
      }
    ],
    "delegationServiceAccountEmail": "service-942118413832@gcp-binaryauthorization.iam.gserviceaccount.com"
  },
  "updateTime": "2021-09-24T15:26:44.808914Z",
  "description": "Attestor autogenerated by build ID fab07092-30f4-4f70-caf7-4545cbc404d6"

Langkah selanjutnya