Mulai menggunakan konsol Google Cloud (GKE) (original) (raw)
Menetapkan project default
Untuk memfasilitasi perintah yang mengikuti, simpan Google Cloud project ID Anda dalam variabel lingkungan sebagai berikut:
PROJECT_ID=PROJECT_ID
dengan PROJECT_ID adalah nama project Anda.
Jika project default belum 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 membuat cluster bernama test-cluster di zona GKE us-central1-a.
Untuk membuat cluster, ikuti langkah-langkah berikut:
- Buka menu GKE di Google Cloud konsol.
Buka GKE - Klik Create Cluster.
- Masukkan
test-clusterdi kolom Name. - Pilih Zonal di opsi Location type.
- Pilih
us-central1-adari menu drop-down Zone. - Klik Availability, networking, security, and additional features.
- Di bagian Security, pilih Enable Binary Authorization.
- Pilih Enforce-only.
- Klik Create.
Mengonfigurasi kubectl
Anda juga harus memperbarui file kubeconfig lokal untuk penginstalan kubectl. Hal ini memberikan informasi endpoint dan kredensial 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
A kebijakan di Otorisasi Biner adalah kumpulan 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:
- Buka halaman Binary Authorization di Google Cloud konsol.
Buka Otorisasi Biner - Klik Edit Policy.
- Di Project Default Rule, opsi Allow All Images akan ditampilkan.
- Klik Save Policy.
Membuat attestor
Attestor adalah otoritas verifikasi yang digunakan penegak Otorisasi Biner pada waktu deployment untuk memutuskan apakah akan mengizinkan GKE men-deploy image container bertanda tangan yang sesuai. Attestor berisi kunci publik dan biasanya dikelola oleh orang yang bertanggung jawab atas keamanan software supply chain.
Untuk membuat attestor, Anda harus:
- Membuat attestor itu sendiri di Otorisasi Biner
- Membuat catatan attestor terkait secara otomatis di Artifact Analysis untuk menyimpan metadata pengesahan tepercaya yang digunakan dalam proses otorisasi
Untuk tutorial ini, Anda memiliki satu attestor bernama test-attestor. Dalam skenario dunia nyata, Anda dapat memiliki sejumlah attestor, yang masing-masing mewakili pihak yang berpartisipasi dalam proses otorisasi untuk image.
Membuat pasangan kunci
Otorisasi Biner menggunakan kunci kriptografi untuk memverifikasi identitas penandatangan secara aman. Hal ini memastikan bahwa hanya image container yang diotorisasi yang dapat di-deploy. Pasangan kunci terdiri dari kunci pribadi dan kunci publik. Penandatangan menggunakan kunci pribadi untuk menandatangani ringkasan image container, yang 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 menggunakanElliptic Curve Digital Signature Algorithm (ECDSA)yang direkomendasikan untuk membuat pasangan kunci PKIX. Anda juga dapat menggunakan kunci RSA atau PGP untuk penandatanganan. Lihat Tujuan utama dan algoritma untuk mengetahui informasi selengkapnya tentang algoritma penandatanganan.
Kunci yang dibuat dan disimpan olehCloud Key Management Service (Cloud KMS) sesuai dengan PKIX. Lihat Membuat attestor menggunakan CLI untuk mengetahui informasi selengkapnya tentang penggunaan kunci PKIX dan Cloud KMS.
Untuk membuat pasangan kunci PKIX, lakukan hal berikut:
- Buat kunci pribadi:
PRIVATE_KEY_FILE="/tmp/ec_private.pem"
openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE} - Ekstrak kunci publik dari kunci pribadi:
PUBLIC_KEY_FILE="/tmp/ec_public.pem"
openssl ec -in PRIVATEKEYFILE−pubout−out{PRIVATE_KEY_FILE} -pubout -out PRIVATEKEYFILE−pubout−out{PUBLIC_KEY_FILE}
Membuat attestor
Sekarang Anda dapat membuat attestor itu sendiri di Otorisasi Biner dan mengaitkan kunci publik yang Anda buat.
Untuk membuat attestor, lakukan hal berikut:
- Kembali ke halaman Binary Authorization di Google Cloud konsol.
Kembali ke Otorisasi Biner - Di tab Attestors, klik Create.

- Isi kolom sebagai berikut:
- Masukkan
test-attestordi kolom Attestor name. - Pastikan Automatically create a Artifact Analysis note dicentang.
- Klik Add a PKIX Public Key.
- Buka
/tmp/ec_public.pemdi editor teks. Ini adalah file kunci publik yang Anda buat di langkah sebelumnya. Salin konten file ke kotak teks Public key material. - Klik
Elliptic Curve P-256 - SHA256 Digestdi menu drop-down Signature algorithm. - Klik Done.
- Masukkan
- Klik Create untuk membuat attestor.
- Simpan ID kunci publik.
Untuk melihat ID kunci publik attestor setelah menambahkannya ke attestor, gunakangcloud container binauthz attestors describe ${ATTESTOR_NAME}. Untuk membuat variabel lingkungan untuk 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 Anda:
- Kembali ke halaman Binary Authorization di Google Cloud konsol.
- Di tab Policy, klik Edit Policy.
- Pilih Allow Only Images That Have Been Approved By the Following Attestors.
- Klik Add Attestors.
- Klik Add by project and attestor name.
- Masukkan PROJECT_ID di kolom Project name.
- Masukkan
test-attestordi kolom Attestor name. - Klik Add 1 Attestor.
- Klik Save Policy.
Untuk mengetahui informasi selengkapnya, lihatMengonfigurasi Kebijakan Menggunakan Konsol.
Menguji kebijakan
Anda dapat menguji kebijakan yang Anda konfigurasi di atas dengan mencoba men-deploy image container contoh ke cluster. Kebijakan akan memblokir deployment karena pengesahan yang diperlukan belum dibuat.
Untuk tutorial ini, Anda dapat menggunakan image contoh dari Artifact Registry. Image dari Artifact Registry terletak di jalur us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0. Jalur ini 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 us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
Sekarang, verifikasi bahwa deployment diblokir oleh Otorisasi Biner:
kubectl get pods
Perintah akan mencetak pesan berikut, yang menunjukkan bahwa image tidak di-deploy:
No resources found.
Anda dapat memperoleh 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 mirip dengan berikut ini:
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 attestor.
Pastikan untuk menghapus deployment agar Anda dapat melanjutkan ke langkah berikutnya:
kubectl delete deployment hello-server
Membuat pengesahan
An pengesahan adalah dokumen digital yang dibuat oleh penandatangan yang menyatakan bahwa GKE diizinkan untuk men-deploy image container terkait. Proses pembuatan pengesahan terkadang disebut "menandatangani image".
Dalam tutorial ini, Anda membuat pengesahan untuk image contoh dari Artifact Registry.
Untuk membuat pengesahan, lakukan hal berikut:
- Tetapkan variabel yang menyimpan jalur registry dan ringkasan image, serta nama attestor:
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:
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. Tandatangani payload dengan kunci pribadi PKIX Anda dan output 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 diMembuat pasangan kunci PKIX di atas.
Flag validate memeriksa apakah pengesahan dapat diverifikasi oleh attestor yang Anda konfigurasi dalam kebijakan Anda.
5. Verifikasi bahwa pengesahan telah dibuat:
gcloud container binauthz attestations list \
--attestor=$ATTESTOR_NAME --attestor-project=$PROJECT_ID
Untuk mengetahui informasi selengkapnya tentang cara membuat pengesahan, lihatMembuat Pengesahan.
Menguji ulang kebijakan
Sekali lagi, uji kebijakan dengan men-deploy image container contoh 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 pengesahan. Di sini, Otorisasi Biner mengizinkan image di-deploy karena pengesahan yang diperlukan telah dibuat.
Untuk men-deploy image, jalankan perintah berikut:
kubectl run hello-server --image IMAGEPATH@{IMAGE_PATH}@IMAGEPATH@{IMAGE_DIGEST} --port 8080
Untuk memverifikasi bahwa image telah di-deploy, jalankan perintah berikut:
kubectl get pods
Perintah 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