Membuat pengesahan Otorisasi Biner di pipeline Cloud Build

Tutorial ini menunjukkan cara membuat pengesahan Otorisasi Biner di pipeline Cloud Build. Penyiapan ini membantu memastikan bahwa hanya image container yang di-build dan ditandatangani sebagai bagian dari proses build Cloud Build yang otomatis diotorisasi untuk dijalankan di lingkungan deployment Anda.

Untuk mempelajari cara menggunakan pemindaian kerentanan Artifact Analysis di pipeline build Cloud Build, lihat Membuat pengesahan dengan Voucher atau Membuat pengesahan dengan Kritis Signer.

Ringkasan Cloud Build

Cloud Build (ringkasan) menggunakan kode sumber yang disimpan di Cloud Source Repositories atau repositori yang dihosting lainnya, menjalankan build dan pengujian, serta menyimpan output software yang dihasilkan di Container Registry atau layanan penyimpanan lainnya di Google Cloud Platform.

Ringkasan Otorisasi Biner

Otorisasi Biner (ringkasan) adalah produk Google Cloud yang menerapkan batasan waktu deployment pada aplikasi. Integrasi Google Kubernetes Engine (GKE)-nya memungkinkan pengguna menerapkan bahwa container yang di-deploy ke cluster Kubernetes ditandatangani secara kriptografis oleh otoritas tepercaya dan diverifikasi oleh pengesah Otorisasi Biner.

Anda dapat mengonfigurasi Otorisasi Biner untuk mewajibkan atestasi berdasarkan lokasi kode sumber untuk mencegah image container yang dibuat dari sumber yang tidak sah untuk di-deploy.

Untuk mempelajari lebih lanjut:

Arsitektur

Diagram berikut menunjukkan komponen dalam penyiapan Otorisasi Biner/Cloud Build:

Pipeline pengesahan Otorisasi Biner Cloud Build.
Gambar 1.Pipeline Cloud Build yang membuat pengesahan Otorisasi Biner.

Dalam pipeline ini:

  1. Kode untuk mem-build image container dikirim ke repositori sumber, seperti Cloud Source Repositories.

  2. Alat continuous integration (CI), Cloud Build, mem-build dan menguji penampung.

  3. Build akan mengirim image container ke Container Registry atau registry lain yang menyimpan image yang telah Anda build.

  4. Cloud Key Management Service, yang menyediakan pengelolaan kunci untuk pasangan kunci kriptografis, menandatangani image penampung. Tanda tangan yang dihasilkan kemudian disimpan dalam pengesahan yang baru dibuat.

  5. Pada waktu deployment, pengautentikasi memverifikasi pengesahan menggunakan kunci publik dari pasangan kunci. Otorisasi Biner menerapkan kebijakan dengan mewajibkan pengesahan yang ditandatangani untuk men-deploy image container.

Membuat pengesahan menggunakan Cloud Build dengan Cloud Key Management Service

Bagian ini menunjukkan cara menerapkan arsitektur di atas. Langkah ini menggunakan langkah build kustom open source dari komunitas Cloud Build. Langkah build kustom menandatangani image container, membuat pengesahan, dan menguploadnya ke Otorisasi Biner.

Mengonfigurasi Identity and Access Management

Untuk menggunakan langkah build ini, akun layanan Cloud Build memerlukan peran IAM berikut:

  • Binary Authorization Attestor Viewer
    • roles/binaryauthorization.attestorsViewer
  • Cloud KMS CryptoKey Signer/Verifier (jika menggunakan kunci di KMS untuk menandatangani atestasi)
    • roles/cloudkms.signerVerifier
  • Artifact Analysis Notes Attacher
    • roles/containeranalysis.notes.attacher

Perintah berikut dapat digunakan untuk menambahkan peran ke Akun Layanan Cloud Build project Anda:

  1. Aktifkan Cloud Build:

    Aktifkan Cloud Build API di project Google Cloud target.

  2. Simpan project ID Anda ke variabel lingkungan:

    PROJECT_ID=PROJECT_ID
    

    dengan PROJECT_ID sebagai project ID Google Cloud Anda.

  3. Tetapkan project Google Cloud CLI:

    gcloud config set project ${PROJECT_ID}
    
  4. Dapatkan nomor project:

    PROJECT_NUMBER=$(gcloud projects list --filter="${PROJECT_ID}" --format="value(PROJECT_NUMBER)")
    
  5. Tambahkan peran Binary Authorization Attestor Viewer ke Akun Layanan Cloud Build:

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
      --role roles/binaryauthorization.attestorsViewer
    
  6. Tambahkan peran Cloud KMS CryptoKey Signer/Verifier ke Akun Layanan Cloud Build (Penandatanganan berbasis KMS):

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
      --role roles/cloudkms.signerVerifier
    
  7. Tambahkan peran Artifact Analysis Notes Attacher ke Akun Layanan Cloud Build:

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
      --role roles/containeranalysis.notes.attacher
    

Mem-build dan mendaftarkan langkah build kustom dengan Cloud Build

  1. Clone repo komunitas build Google Cloud:

    git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
    
  2. Konfigurasikan penanda tangan Otorisasi Biner untuk Cloud Build:

    Sebelum digunakan, kode untuk langkah build kustom harus di-build ke dalam penampung dan di-push ke Cloud Build. Untuk melakukannya, jalankan perintah berikut:

    cd cloud-builders-community/binauthz-attestation
    gcloud builds submit . --config cloudbuild.yaml
    

    Langkah build kustom telah di-push ke Google Container Registry project Anda saat ini dan sekarang siap digunakan.

Membuat pengesah di Otorisasi Biner

Buat pengesah yang akan digunakan Otorisasi Biner pada waktu deployment untuk memverifikasi pengesahan.

Siapkan pengautentikasi dan pasangan kunci Cloud Key Management Service di Otorisasi Biner:

Lihat Membuat pengautentikasi menggunakan CLI

Memverifikasi bahwa attestor telah dibuat

   gcloud --project="${ATTESTOR_PROJECT_ID}" container binauthz attestors list
   

Tambahkan langkah "create-attestation" ke cloudbuild.yaml Anda

Untuk menggunakan langkah binauthz-attestation, Anda harus mengupdate cloudbuild.yaml dengan menambahkan langkah yang akan menandatangani build yang telah di-push ke Container Registry.

Dua metode disediakan di bawah:

  • Update cloudbuild.yaml secara manual.

  • Jalankan contoh pipeline dengan variabel lingkungan yang Anda tetapkan sebelumnya.

Mengupdate cloudbuild.yaml secara manual

  1. Perbarui cloudbuild.yaml secara manual dengan menambahkan langkah build di bawah setelah langkah saat penampung diupload ke Container Registry. Catatan: Anda harus mengganti ATTESTOR_NAME, KMS_KEY_LOCATION, KMS_KEYRING_NAME, KMS_KEY_NAME, dan KMS_KEY_VERSION dengan nilai Anda sendiri secara manual:

    - id: 'create-attestation'
      name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest'
      args:
        - '--artifact-url'
        - 'gcr.io/${PROJECT_ID}/helloworld:latest'
        - '--attestor'
        - 'projects/${PROJECT_ID}/attestors/ATTESTOR_NAME'
        - '--keyversion'
        - 'projects/${PROJECT_ID}/locations/KMS_KEY_LOCATION/keyRings/KMS_KEYRING_NAME/cryptoKeys/KMS_KEY_NAME/cryptoKeyVersions/KMS_KEY_VERSION'
    

    Hal berikut juga valid:

    - id: 'create-attestation'
      name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest'
      args:
        - '--artifact-url'
        - 'gcr.io/${PROJECT_ID}/helloworld:latest'
        - '--attestor'
        - 'ATTESTOR_NAME'
        - '--attestor-project'
        - '${PROJECT_ID}'
        - '--keyversion'
        - 'KEY_VERSION'
        - '--keyversion-project'
        - '${PROJECT_ID}'
        - '--keyversion-location'
        - 'KEY_LOCATION'
        - '--keyversion-keyring'
        - 'KEYRING_NAME'
        - '--keyversion-key'
        - 'KEY_NAME'
    

Opsional: Menguji pipeline

Untuk menguji contoh pipeline pengesahan Cloud Build, lakukan langkah-langkah berikut:

  1. Buat file cloudbuild.yaml dengan variabel lingkungan yang Anda tetapkan sebelumnya:

    cd example
    cat <<EOM > cloudbuild_example.yaml
    steps:
      - id: 'build'
        name: 'gcr.io/cloud-builders/docker'
        args:
          - 'build'
          - '-t'
          - 'gcr.io/$PROJECT_ID/helloworld:latest'
          - '.'
      - id: 'publish'
        name: 'gcr.io/cloud-builders/docker'
        args:
          - 'push'
          - 'gcr.io/$PROJECT_ID/helloworld:latest'
      - id: 'create-attestation'
        name: 'gcr.io/$PROJECT_ID/binauthz-attestation:latest'
        args:
          - '--artifact-url'
          - 'gcr.io/$PROJECT_ID/helloworld:latest'
          - '--attestor'
          - 'projects/$PROJECT_ID/attestors/${ATTESTOR_NAME}'
          - '--keyversion'
          - 'projects/${PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION}'
    tags: ['cloud-builders-community']
    
    EOM
    
  2. Jalankan Cloud Build dengan contoh cloudbuild_example.yaml:

    Dari direktori cloud-builders-community/binauthz-attestation/example, jalankan perintah berikut:

    gcloud builds submit . --config cloudbuild_example.yaml
    

Langkah selanjutnya