Mulai menggunakan konsol Google Cloud (GKE)


Tutorial ini menunjukkan cara mengonfigurasi dan menguji kebijakan Otorisasi Biner yang memerlukan atestasi. Jenis kebijakan ini mengamankan rantai pasokan software berbasis container dengan menentukan siapa yang dapat men-deploy image container di Google Kubernetes Engine (GKE) dan image container mana yang diizinkan untuk di-deploy oleh GKE.

Pada waktu deployment, Otorisasi Biner menggunakan attestor untuk memverifikasi tanda tangan digital dalam pengesahan. Pengesahan dibuat oleh penanda tangan sebagai bagian dari proses build.

Dalam tutorial ini, cluster GKE, pengesahan, dan penegasnya semuanya berada dalam satu project. Konfigurasi satu project sebagian besar berguna untuk menguji atau bereksperimen dengan layanan. Untuk contoh di dunia nyata yang lebih nyata, lihat konfigurasi multi-project.

Langkah-langkah di bawah menjelaskan tugas yang Anda lakukan dari konsol Google Cloud, serta beberapa tugas yang Anda lakukan menggunakan perintah gcloud. Untuk melakukan langkah-langkah ini menggunakan gcloud, lihat Memulai penggunaan Google Cloud CLI.

Tujuan

Dalam tutorial ini, Anda akan mempelajari cara:

  • Membuat cluster (GKE) dengan Otorisasi Biner yang diaktifkan
  • Membuat pengesah yang digunakan penegak Otorisasi Biner untuk memverifikasi tanda tangan pada pengesahan
  • Mengonfigurasi kebijakan yang memerlukan pengesahan
  • Membuat pasangan kunci kriptografis untuk menandatangani pengesahan dan memverifikasinya nanti
  • Menandatangani ringkasan image container, membuat tanda tangan
  • Membuat pengesahan menggunakan tanda tangan
  • Menguji kebijakan dengan men-deploy image container ke GKE

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Aktifkan API Container Registry, Artifact Analysis and Binary Authorization.

    Mengaktifkan API

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Aktifkan API Container Registry, Artifact Analysis and Binary Authorization.

    Mengaktifkan API

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Instal kubectl.

Menetapkan project default

Untuk memfasilitasi perintah yang akan mengikuti, simpan project ID Google Cloud Anda dalam variabel lingkungan sebagai berikut:

PROJECT_ID=PROJECT_ID

dengan PROJECT_ID adalah nama project Anda.

Jika project default tidak dipilih, tetapkan sekarang:

gcloud config set project ${PROJECT_ID}

Membuat cluster dengan Otorisasi Biner diaktifkan

Membuat cluster

Sekarang Anda dapat membuat cluster GKE dengan Otorisasi Biner diaktifkan. Di sini, Anda akan membuat cluster bernama test-cluster di zona GKE us-central1-a.

Untuk membuat cluster, ikuti langkah-langkah berikut:

  1. Buka menu GKE di konsol Google Cloud.

    Buka GKE

  2. Klik Create Cluster.

  3. Masukkan test-cluster di kolom Name.

  4. Pilih Zonal di opsi Location type.

  5. Pilih us-central1-a dari menu drop-down Zone.

  6. Klik Ketersediaan, jaringan, keamanan, dan fitur tambahan.

  7. Di bagian Security, pilih Enable Binary Authorization.

  8. Pilih Hanya terapkan.

  9. Klik Create.

Konfigurasi kubectl

Anda juga harus mengupdate file kubeconfig lokal untuk penginstalan kubectl. Tindakan ini akan memberikan kredensial dan informasi endpoint yang diperlukan untuk mengakses cluster di GKE.

Untuk memperbarui file kubeconfig lokal, ikuti langkah-langkah berikut:

gcloud container clusters get-credentials \
    --zone us-central1-a \
    test-cluster

Melihat kebijakan default

Kebijakan di Otorisasi Biner adalah sekumpulan aturan yang mengatur deployment image container. Anda dapat memiliki satu kebijakan per project. Secara default, kebijakan dikonfigurasi untuk mengizinkan semua image container di-deploy.

Untuk melihat kebijakan default, ikuti langkah-langkah berikut:

  1. Buka halaman Otorisasi Biner di konsol Google Cloud.

    Buka Otorisasi Biner

  2. Klik Edit Policy.

  3. Di Project Default Rule, opsi Allow All Images akan ditampilkan.

  4. Klik Simpan Kebijakan.

Membuat attestor

Pengesah adalah otoritas verifikasi yang digunakan penegak Otorisasi Biner pada waktu deployment untuk memutuskan apakah akan mengizinkan GKE men-deploy image container yang ditandatangani yang sesuai. Pengesah berisi kunci publik dan biasanya dikelola oleh orang yang bertanggung jawab atas keamanan supply chain software.

Untuk membuat attestor, Anda harus:

  • Membuat attestor itu sendiri di Otorisasi Biner
  • Membuat catatan pengesah terkait secara otomatis di Artifact Analysis untuk menyimpan metadata pengesahan tepercaya yang digunakan dalam proses otorisasi

Untuk tutorial ini, Anda memiliki satu pengautentikasi bernama test-attestor. Dalam skenario dunia nyata, Anda dapat memiliki sejumlah pengautentikasi, yang masing-masing mewakili pihak yang berpartisipasi dalam proses otorisasi untuk image.

Membuat pasangan kunci

Otorisasi Biner menggunakan kunci kriptografis untuk memverifikasi identitas penanda tangan dengan aman. Hal ini memastikan hanya image container resmi yang dapat di-deploy. Pasangan kunci terdiri dari kunci pribadi dan kunci publik. Penanda tangan menggunakan kunci pribadi untuk menandatangani ringkasan image penampung, menghasilkan tanda tangan yang kemudian disimpan dalam pernyataan. Kunci publik disimpan di penanda tangan. Pada waktu deployment, penegak Binary Authorization menggunakan kunci publik pengautentikasi untuk memverifikasi tanda tangan dalam pengesahan sebelum mengizinkan container di-deploy.

Dalam tutorial ini, Anda menggunakan format Public-Key Infrastructure (X.509) (PKIX) untuk kunci kriptografis. Tutorial ini menggunakan Elliptic Curve Digital Signature Algorithm (ECDSA) yang direkomendasikan untuk menghasilkan pasangan kunci PKIX. Anda juga dapat menggunakan kunci RSA atau PGP untuk menandatangani. Lihat Tujuan utama dan algoritma untuk mengetahui informasi selengkapnya tentang algoritma penandatanganan.

Kunci yang dibuat dan disimpan oleh Cloud Key Management Service (Cloud KMS) mematuhi PKIX. Lihat Membuat pengautentikasi menggunakan CLI untuk mengetahui informasi selengkapnya tentang penggunaan kunci PKIX dan Cloud KMS.

Untuk membuat pasangan kunci PKIX, lakukan langkah-langkah berikut:

  1. Buat kunci pribadi:

    PRIVATE_KEY_FILE="/tmp/ec_private.pem"
    openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}
    
  2. Ekstrak kunci publik dari kunci pribadi:

    PUBLIC_KEY_FILE="/tmp/ec_public.pem"
    openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
    

Membuat attestor

Sekarang Anda dapat membuat pengautentikasi itu sendiri di Otorisasi Biner dan mengaitkan kunci publik yang Anda buat.

Untuk membuat pengautentikasi, lakukan hal berikut:

  1. Kembali ke halaman Otorisasi Biner di konsol Google Cloud.

    Kembali ke Otorisasi Biner

  2. Di tab Attestors, klik Create.

    Screenshot tab kebijakan yang menampilkan aturan default

  3. Isi kolom sebagai berikut:

    1. Masukkan test-attestor di kolom Attestor name.

    2. Pastikan Buat catatan Artifact Analysis secara otomatis dicentang.

    3. Klik Tambahkan Kunci Publik PKIX.

    4. Buka /tmp/ec_public.pem di editor teks. Ini adalah file kunci publik yang Anda buat di langkah sebelumnya. Salin konten file ke kotak teks Materi kunci publik.

    5. Klik Elliptic Curve P-256 - SHA256 Digest di drop-down Signature algorithm.

    6. Klik Done.

  4. Klik Create untuk membuat pengautentikasi.

  5. Simpan ID kunci publik.

    Untuk melihat ID kunci publik attestor setelah menambahkannya ke attestor, gunakan gcloud container binauthz attestors describe ${ATTESTOR_NAME}. Untuk membuat variabel lingkungan guna menyimpan ID kunci publik, jalankan perintah berikut:

    ATTESTOR_NAME=test-attestor
    PUBLIC_KEY_ID=$(gcloud container binauthz attestors describe ${ATTESTOR_NAME}\
      --format='value(userOwnedGrafeasNote.publicKeys[0].id)')
    

Mengonfigurasi kebijakan

Sekarang, Anda dapat mengonfigurasi kebijakan:

  1. Kembali ke halaman Otorisasi Biner di konsol Google Cloud.

  2. Di tab Kebijakan, klik Edit Kebijakan.

  3. Pilih Hanya Izinkan Gambar yang Telah Disetujui oleh Pengesah Berikut.

  4. Klik Tambahkan Pengesah.

  5. Klik Tambahkan menurut project dan nama attestor.

  6. Masukkan PROJECT_ID di kolom Project name.

  7. Masukkan test-attestor di kolom Attestor name.

  8. Klik Tambahkan 1 Pengesah.

  9. Klik Simpan Kebijakan.

Untuk informasi selengkapnya, lihat Mengonfigurasi Kebijakan Menggunakan Konsol.

Menguji kebijakan

Anda dapat menguji kebijakan yang dikonfigurasi di atas dengan mencoba men-deploy contoh image container ke cluster. Kebijakan akan memblokir deployment karena atestasi yang diperlukan belum dibuat.

Untuk tutorial ini, Anda dapat menggunakan contoh image dari Container Registry dan Artifact Registry. Image dari Container Registry terletak di jalur gcr.io/google-samples/hello-app:1.0. Image dari Artifact Registry terletak di jalur us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0. Kedua jalur tersebut berisi image publik yang dibuat oleh Google yang berisi aplikasi contoh "Hello, World!".

Untuk mencoba men-deploy image, jalankan perintah berikut:

kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080

Sekarang, verifikasi bahwa deployment diblokir oleh Otorisasi Biner:

kubectl get pods

Perintah ini akan mencetak pesan berikut, yang menunjukkan bahwa image tidak di-deploy:

No resources found.

Anda bisa mendapatkan detail lebih lanjut tentang deployment:

kubectl get event --template \
'{{range.items}}{{"\033[0;36m"}}{{.reason}}:{{"\033[0m"}}\{{.message}}{{"\n"}}{{end}}'

Anda akan melihat respons yang menyerupai berikut:

FailedCreate: Error creating: pods POD_NAME is forbidden: admission webhook "imagepolicywebhook.image-policy.k8s.io" denied the request: Image IMAGE_NAME denied by Binary Authorization default admission rule. Image IMAGE_NAME denied by ATTESTOR_NAME: No attestations found

Dalam output ini:

  • POD_NAME: nama Pod.
  • IMAGE_NAME: nama image.
  • ATTESTOR_NAME: nama pengautentikasi.

Pastikan untuk menghapus deployment agar Anda dapat melanjutkan ke langkah berikutnya:

kubectl delete deployment hello-server

Membuat pengesahan

Pengesahan adalah dokumen digital yang dibuat oleh penanda tangan yang menjamin bahwa GKE diizinkan untuk men-deploy image penampung terkait. Proses pembuatan pengesahan terkadang disebut "menandatangani image".

Dalam tutorial ini, Anda akan membuat pengesahan untuk contoh image dari Container Registry dan Artifact Registry.

Untuk membuat pengesahan, lakukan hal berikut:

  1. Tetapkan variabel yang menyimpan jalur registry dan ringkasan image, serta nama attestor:

    Container Registry

    IMAGE_PATH="gcr.io/google-samples/hello-app"
    IMAGE_DIGEST="sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4"
    ATTESTOR="test-attestor"
    IMAGE_TO_ATTEST=${IMAGE_PATH}@${IMAGE_DIGEST}
    

    Artifact Registry

    IMAGE_PATH="us-docker.pkg.dev/google-samples/containers/gke/hello-app"
    IMAGE_DIGEST="sha256:37e5287945774f27b418ce567cd77f4bbc9ef44a1bcd1a2312369f31f9cce567"
    ATTESTOR="test-attestor"
    IMAGE_TO_ATTEST=${IMAGE_PATH}@${IMAGE_DIGEST}
    
  2. Buat payload pengesahan:

    Container Registry

    gcloud container binauthz create-signature-payload \
    --artifact-url=${IMAGE_PATH}@${IMAGE_DIGEST} > /tmp/generated_payload.json
    

    File JSON payload memiliki konten berikut:

    {
    "critical": {
      "identity": {
        "docker-reference": "gcr.io/google-samples/hello-app"
      },
      "image": {
        "docker-manifest-digest": "sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea
    882eb722c3be4"
      },
      "type": "Google cloud binauthz container signature"
    }
    }
    

    Artifact Registry

    gcloud container binauthz create-signature-payload \
    --artifact-url=${IMAGE_PATH}@${IMAGE_DIGEST} > /tmp/generated_payload.json
    

    File JSON payload memiliki konten berikut:

    {
    "critical": {
      "identity": {
        "docker-reference": "us-docker.pkg.dev/google-samples/containers/gke/hello-app"
      },
      "image": {
        "docker-manifest-digest": "sha256:37e5287945774f27b418ce567cd77f4bbc9ef44a1bcd1a2312369f31f9cce567"
      },
      "type": "Google cloud binauthz container signature"
    }
    }
    
  3. Tanda tangani payload dengan kunci pribadi PKIX Anda dan hasilkan file tanda tangan:

    openssl dgst -sha256 -sign ${PRIVATE_KEY_FILE} /tmp/generated_payload.json > /tmp/ec_signature
    

    File tanda tangan adalah versi file JSON payload yang ditandatangani secara digital yang Anda buat di atas.

  4. Buat dan validasi pengesahan:

    gcloud container binauthz attestations create \
        --project="${PROJECT_ID}" \
        --artifact-url="${IMAGE_TO_ATTEST}" \
        --attestor="projects/${PROJECT_ID}/attestors/${ATTESTOR_NAME}" \
        --signature-file=/tmp/ec_signature \
        --public-key-id="${PUBLIC_KEY_ID}" \
        --validate
    

    dengan PUBLIC_KEY_ID adalah ID kunci publik yang Anda temukan di Membuat pasangan kunci PKIX di atas.

    Flag validate memeriksa apakah pengesahan dapat diverifikasi oleh penegasnya yang Anda konfigurasi dalam kebijakan.

  5. Pastikan bahwa pengesahan telah dibuat:

    gcloud container binauthz attestations list \
        --attestor=$ATTESTOR_NAME --attestor-project=$PROJECT_ID
    

Untuk informasi selengkapnya tentang cara membuat pengesahan, lihat Membuat Pengesahan.

Menguji ulang kebijakan

Sekali lagi, uji kebijakan dengan men-deploy contoh image container ke cluster. Kali ini, Anda harus men-deploy image menggunakan ringkasan, bukan tag seperti 1.0 atau latest, karena Otorisasi Biner akan menggunakan ringkasan untuk mencari atestasi. Di sini, Otorisasi Biner memungkinkan image di-deploy karena pengesahan yang diperlukan telah dibuat.

Untuk men-deploy image, jalankan perintah berikut:

kubectl run hello-server --image ${IMAGE_PATH}@${IMAGE_DIGEST} --port 8080

Untuk memverifikasi bahwa image telah di-deploy, jalankan perintah berikut:

kubectl get pods

Perintah ini akan mencetak pesan yang mirip dengan berikut ini, yang menunjukkan bahwa deployment berhasil:

NAME                            READY     STATUS    RESTARTS   AGE
hello-server-579859fb5b-h2k8s   1/1       Running   0          1m

Untuk menghapus pod, jalankan perintah berikut:

kubectl delete pod hello-server

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Hapus cluster yang Anda buat di GKE:

gcloud container clusters delete \
    --zone=us-central1-a \
    test-cluster

Langkah selanjutnya