Tutorial ini menunjukkan cara mengonfigurasi dan menguji kebijakan Otorisasi Biner yang memerlukan pengesahan. Jenis kebijakan ini mengamankan rantai pasokan software berbasis container Anda dengan memverifikasi bahwa image container memiliki pengesahan bertanda tangan sebelum mengizinkan deployment image.
Pada waktu deployment, Otorisasi Biner menggunakan attestor untuk memverifikasi tanda tangan digital dalam pengesahan. Pengesahan dibuat oleh penanda tangan, biasanya sebagai bagian dari pipeline continuous integration (CI).
Dalam tutorial ini, cluster GKE, pengesahan, dan pengesah semuanya berada dalam satu project. Konfigurasi satu project sebagian besar berguna untuk menguji atau bereksperimen dengan layanan. Untuk contoh yang lebih nyata, lihat konfigurasi multi-project.
Langkah-langkah berikut menjelaskan tugas yang Anda lakukan di command line. Untuk mengikuti langkah-langkah ini menggunakan Google Cloud console, lihat Mulai menggunakan Google Cloud console.
Tujuan
Dalam tutorial ini, Anda akan melakukan beberapa hal berikut:
- Buat cluster Google Kubernetes Engine (GKE) dengan Otorisasi Biner diaktifkan
- Buat attestor yang digunakan penguat Otorisasi Biner untuk memverifikasi tanda tangan pada pengesahan
- Mengonfigurasi kebijakan yang memerlukan pengesahan
- Buat pasangan kunci kriptografi untuk menandatangani pengesahan dan memverifikasinya nanti
- Menandatangani ringkasan image container, membuat tanda tangan
- Membuat pengesahan menggunakan tanda tangan
- Uji kebijakan dengan men-deploy image container ke GKE
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init - Instal
kubectluntuk berinteraksi dengan GKE.
Aktifkan Otorisasi Biner
Sebelum menggunakan Otorisasi Biner, tetapkan project default Anda dan aktifkan API Google Cloud yang diperlukan.
Menetapkan project default
Langkah pertama adalah menetapkan project Google Cloud default yang digunakan oleh perintah
gcloud:
PROJECT_ID=PROJECT_ID
gcloud config set project ${PROJECT_ID}
Ganti PROJECT_ID dengan nama project Anda.
Aktifkan API yang diperlukan
Mengaktifkan API berikut:
Artifact Registry
gcloud --project=${PROJECT_ID} \
services enable\
container.googleapis.com\
artifactregistry.googleapis.com\
binaryauthorization.googleapis.com
Membuat cluster dengan Otorisasi Biner diaktifkan
Untuk menyiapkan lingkungan Kubernetes, buat cluster dengan Otorisasi Biner diaktifkan dan konfigurasi kubectl untuk berinteraksi dengannya.
Membuat cluster
Buat cluster GKE dengan Otorisasi Biner diaktifkan. Ini adalah cluster tempat Anda ingin menjalankan image container yang di-deploy. Saat membuat cluster, Anda meneruskan flag --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE ke perintah
gcloud container clusters create.
Untuk membuat cluster, ikuti langkah-langkah berikut:
gcloud container clusters create \
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
--zone us-central1-a \
test-cluster
Di sini, Anda akan membuat cluster bernama test-cluster di zona GKE us-central1-a.
Konfigurasi kubectl
Anda juga harus mengupdate file kubeconfig lokal untuk penginstalan kubectl
Anda. Tindakan ini akan memberikan informasi endpoint dan kredensial yang diperlukan untuk mengakses cluster di GKE.
Untuk memperbarui file kubeconfig lokal, jalankan perintah 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.
Otorisasi Biner memungkinkan Anda mengekspor dan mengimpor file kebijakan dalam format YAML. Format ini mencerminkan struktur kebijakan saat disimpan oleh
layanan. Saat mengonfigurasi kebijakan menggunakan perintah gcloud, Anda mengedit
file ini.
Untuk melihat kebijakan default, ekspor file YAML kebijakan:
gcloud container binauthz policy export
Secara default, file memiliki konten berikut:
defaultAdmissionRule: enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG evaluationMode: ALWAYS_ALLOW globalPolicyEvaluationMode: ENABLE name: projects/PROJECT_ID/policy
Aturan default ditentukan di node defaultAdmissionRule. evaluationMode menentukan bahwa
kebijakan mengizinkan semua upaya deployment image. Dalam tutorial ini, Anda akan memperbarui aturan default untuk mewajibkan pengesahan.
globalPolicyEvaluationMode
mengecualikan image sistem yang dikelola Google dari penerapan Otorisasi Biner.
Untuk menambahkan gambar yang dikecualikan ke daftar yang diizinkan, tambahkan berikut ke file kebijakan:
admissionWhitelistPatterns: - namePattern: EXEMPT_IMAGE_PATH
Ganti EXEMPT_IMAGE_PATH dengan jalur ke gambar yang akan dikecualikan. Untuk mengecualikan gambar tambahan, tambahkan entri - namePattern tambahan. Pelajari admissionWhitelistPatterns lebih lanjut.
Untuk mengetahui informasi selengkapnya tentang struktur kebijakan, lihat Referensi YAML kebijakan.
Membuat pengesah
Pengesah adalah otoritas verifikasi yang digunakan oleh penerap Otorisasi Biner pada waktu deployment untuk memutuskan apakah akan mengizinkan GKE men-deploy image container bertanda tangan yang sesuai. Pengesah berisi kunci publik dan biasanya dikelola oleh personel di organisasi Anda yang bertanggung jawab atas keamanan rantai pasokan software.
Untuk membuat pengesah, ikuti langkah-langkah berikut:
- Buat catatan di Artifact Analysis untuk menyimpan metadata tepercaya yang digunakan dalam proses otorisasi.
- Buat pengesah itu sendiri di Otorisasi Biner dan kaitkan catatan yang Anda buat.
Untuk tutorial ini, Anda memiliki satu attestor bernama test-attestor dan catatan Artifact Analysis bernama test-attestor-note. Dalam skenario dunia nyata, Anda dapat memiliki sejumlah pengesah, yang masing-masing mewakili pihak yang berpartisipasi dalam proses otorisasi untuk image container.
Membuat catatan Artifact Analysis
Tetapkan variabel yang menyimpan nama attestor dan catatan Artifact Analysis Anda:
ATTESTOR_NAME=test-attestor NOTE_ID=test-attestor-note
Ganti kode berikut:
- test-attestor: nama pengesah pilihan Anda.
- attestor-note: nama catatan pengesah pilihan Anda.
Buat file JSON di
/tmp/note_payload.jsonyang menjelaskan catatan Analisis Artefak:cat > /tmp/note_payload.json << EOM { "name": "projects/${PROJECT_ID}/notes/${NOTE_ID}", "attestation": { "hint": { "human_readable_name": "Attestor Note" } } } EOMBuat catatan dengan mengirim permintaan HTTP ke Artifact Analysis REST API:
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ --data-binary @/tmp/note_payload.json \ "https://containeranalysis.googleapis.com/v1/projects/${PROJECT_ID}/notes/?noteId=${NOTE_ID}"Pastikan catatan telah dibuat:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://containeranalysis.googleapis.com/v1/projects/${PROJECT_ID}/notes/${NOTE_ID}"
Buat pengesah
Anda dapat membuat pengesah dengan mengikuti langkah-langkah berikut:
Buat attestor di Otorisasi Biner:
gcloud container binauthz attestors create ${ATTESTOR_NAME} \ --attestation-authority-note=${NOTE_ID} \ --attestation-authority-note-project=${PROJECT_ID}Pastikan bahwa pengesah telah dibuat:
gcloud container binauthz attestors list
Pengesah yang Anda buat belum dapat digunakan tanpa pasangan kunci terkait, yang Anda buat nanti dalam panduan ini.
Membuat pasangan kunci
Otorisasi Biner menggunakan kunci kriptografi untuk memverifikasi identitas penanda tangan secara aman. Hal ini memastikan bahwa hanya image container yang diizinkan yang dapat di-deploy. Pasangan kunci terdiri dari kunci pribadi dan kunci publik. Penandatangan menggunakan kunci pribadi untuk menandatangani ringkasan gambar penampung, sehingga menghasilkan tanda tangan yang kemudian disimpan dalam pengesahan. Kunci publik disimpan di attestor. Pada waktu deployment, penegak Otorisasi Biner menggunakan kunci publik attestor 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 kriptografi. 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 gambar.
Untuk mengetahui informasi selengkapnya tentang algoritma penandatanganan, lihat Tujuan dan algoritma kunci.