Dokumen ini menunjukkan cara menyiapkan Otorisasi Biner untuk cluster GKE. Bagian ini kemudian menunjukkan cara mengonfigurasi contoh kebijakan Otorisasi Biner.
Sebelum memulai
Anda harus memiliki cluster GKE yang terdaftar di Connect. Otorisasi Biner mendukung lingkungan berikut.
GKE on Bare Metal
GKE di Bare Metal 1.14 atau yang lebih baru.
GKE on VMware
GKE di VMware 1.4 atau yang lebih baru.
Layanan Otorisasi Biner menggunakan alamat IP publik, yang dapat diakses melalui koneksi internet reguler. Konfigurasikan aturan firewall Anda untuk HTTPS agar cluster pengguna dapat mengakses endpoint
binaryauthorization.googleapis.com
.GKE on Bare Metal
Mengonfigurasi GKE di aturan firewall Bare Metal.
GKE on VMware
Mengonfigurasi aturan firewall GKE di VMware.
Jika ingin menggunakan Cloud Audit Logs terpusat untuk melihat entri log audit, termasuk entri dari Otorisasi Biner untuk cluster GKE, Anda harus mengonfigurasi Cloud Audit Logs dalam konfigurasi cluster Anda.
GKE on Bare Metal
Mengonfigurasi Cloud Audit Logs di GKE di Bare Metal.
GKE on VMware
Mengonfigurasi Cloud Audit Logs di GKE di VMware.
Anda harus mengaktifkan Binary Authorization API sebagai berikut:
Buka Konsol Google Cloud.
Dalam menu drop-down project, pilih Connect project Anda. Anda dapat menemukan project Google Cloud ini di bagian
gkeConnect
pada file konfigurasi cluster pengguna Anda. Ini adalah project Google Cloud yang menghubungkan cluster pengguna Anda ke Google Cloud.
Menyiapkan Otorisasi Biner
Di bagian ini, Anda akan menyiapkan Otorisasi Biner untuk cluster GKE di cluster Anda.
Menentukan variabel lingkungan penginstalan
Untuk menentukan variabel lingkungan, lakukan langkah-langkah berikut:
Menggunakan Workload Identity
Tentukan project Connect Anda:
export PROJECT_ID=PROJECT_ID
Tentukan ID keanggotaan Armada cluster Anda:
export MEMBERSHIP_ID=MEMBERSHIP_ID
Menggunakan kunci akun layanan
Tentukan project Connect Anda:
export PROJECT_ID=PROJECT_ID
Ganti PROJECT_ID dengan project Google Cloud di bagian
gkeConnect
pada file konfigurasi cluster pengguna Anda.Tentukan jalur file kubeconfig cluster pengguna:
export KUBECONFIG=PATH
Ganti PATH dengan jalur file kubeconfig cluster pengguna Anda.
Pilih nama untuk akun layanan akses Binary Authorization API:
export SA_NAME=SERVICE_ACCOUNT_NAME
Ganti SERVICE_ACCOUNT_NAME dengan nama akun layanan pilihan Anda. Binary Authorization Module menggunakan akun layanan ini untuk mengakses Binary Authorization API.
Tentukan jalur ke file kunci akun layanan yang Anda download nanti dalam panduan ini:
export SA_JSON_PATH=SA_KEY_FILE_PATH
Ganti SA_KEY_FILE_PATH dengan jalur file kunci JSON untuk akun layanan.
Menginstal modul Otorisasi Biner di cluster pengguna
Untuk menginstal modul Otorisasi Biner, lakukan hal berikut:
Menggunakan Workload Identity
Fleet Workload Identity memungkinkan beban kerja di cluster Anda untuk melakukan autentikasi ke Google tanpa mengharuskan Anda mendownload, merotasi secara manual, dan mengelola kunci akun layanan Google Cloud secara umum. Anda dapat mengetahui lebih lanjut cara kerja Workload Identity fleet dan manfaat menggunakannya di Menggunakan fleet Workload Identity.
Berikan peran
binaryauthorization.policyEvaluator
ke akun layanan Kubernetes di project Connect Anda:gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${PROJECT_ID}.svc.id.goog[binauthz-system/binauthz-admin]" \ --role="roles/binaryauthorization.policyEvaluator"
Buat direktori kerja:
Buat direktori bernama
binauthz
.Ubah ke direktori.
Download file
manifest-wi-0.2.6.yaml.tmpl
, yang Anda gunakan untuk menginstal Modul Otorisasi Biner di cluster pengguna cluster GKE:GKE on Bare Metal
gsutil cp gs://anthos-baremetal-release/binauthz/manifest-wi-0.2.6.yaml.tmpl .
GKE on VMware
gsutil cp gs://gke-on-prem-release/binauthz/manifest-wi-0.2.6.yaml.tmpl .
Ganti variabel lingkungan dalam template:
envsubst < manifest-wi-0.2.6.yaml.tmpl > manifest-0.2.6.yaml
Instal Modul Otorisasi Biner di cluster pengguna Anda:
kubectl apply -f manifest-0.2.6.yaml
Verifikasi bahwa Deployment telah dibuat:
kubectl get pod --namespace binauthz-system
Anda melihat Pod
binauthz-module-deployment-*
tercantum denganStatus
dariRunning
dan 1/1 Pod siap, mirip dengan output ini:NAME READY STATUS RESTARTS AGE binauthz-module-deployment-5fddf9594f-qjprz 1/1 Running 0 11s
Menggunakan kunci akun layanan
Tetapkan project default untuk Google Cloud CLI:
gcloud config set project ${PROJECT_ID}
Buat akun layanan akses Binary Authorization API:
gcloud iam service-accounts create ${SA_NAME}
Berikan peran
binaryauthorization.policyEvaluator
ke akun layanan akses Binary Authorization API di project Connect Anda:gcloud projects add-iam-policy-binding ${PROJECT_ID}\ --member="serviceAccount:${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/binaryauthorization.policyEvaluator"
Buat direktori kerja:
Buat direktori bernama
binauthz
.Ubah ke direktori.
Download file
manifest-0.2.6.yaml
, yang Anda gunakan untuk menginstal Modul Otorisasi Biner di cluster pengguna cluster GKE:anthos_clusters_on_bare_metal
gsutil cp gs://anthos-baremetal-release/binauthz/manifest-0.2.6.yaml .
anthos_clusters_on_vmware
gsutil cp gs://gke-on-prem-release/binauthz/manifest-0.2.6.yaml .
Buat file YAML untuk namespace
binauthz-system
.Salin kode berikut ke file bernama
namespace.yaml
:apiVersion: v1 kind: Namespace metadata: labels: control-plane: binauthz-controller name: binauthz-system
Buat namespace di cluster pengguna Anda:
kubectl apply -f namespace.yaml
Anda akan melihat output yang mirip dengan berikut ini:
namespace/binauthz-system created
Download file kunci JSON untuk akun layanan Anda:
gcloud iam service-accounts keys create ${SA_JSON_PATH} --iam-account ${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
Simpan kunci akun layanan sebagai Secret Kubernetes di cluster pengguna Anda:
kubectl --namespace binauthz-system create secret generic binauthz-sa --from-file=key.json=${SA_JSON_PATH}
Instal Modul Otorisasi Biner di cluster pengguna Anda:
kubectl apply -f manifest-0.2.6.yaml
Verifikasi bahwa Deployment telah dibuat:
kubectl get pod --namespace binauthz-system
Anda melihat Pod
binauthz-module-deployment-*
tercantum denganStatus
dariRunning
dan 1/1 Pod siap, mirip dengan output ini:NAME READY STATUS RESTARTS AGE binauthz-module-deployment-5fddf9594f-qjprz 1/1 Running 0 11s
Menyiapkan dan menggunakan kebijakan Otorisasi Biner
Bagian ini menunjukkan cara menyiapkan dan menggunakan kebijakan Otorisasi Biner untuk cluster GKE.
Pada setiap contoh, Anda mengonfigurasi kebijakan, lalu mengujinya dengan mencoba men-deploy image container di cluster GKE.
Allow all
Bagian ini menunjukkan kasus keberhasilan. Anda mengonfigurasi kebijakan Otorisasi Biner agar image container memenuhi kebijakan dan di-deploy.
Di Google Cloud, lakukan hal berikut:
Konsol
Di konsol Google Cloud, buka halaman Otorisasi Biner.
Pastikan untuk memilih project ID Connect Anda.
Klik Edit Kebijakan.
Di bagian Project default rule, pilih Allow all images.
Klik Simpan Kebijakan.
gcloud
Tetapkan
PROJECT_ID
untuk project Connect Anda. Anda dapat menemukan project ID ini di kolomgkeConnect
pada file konfigurasi cluster pengguna Anda.export PROJECT_ID=PROJECT_ID
Tetapkan project Google Cloud default.
gcloud config set project ${PROJECT_ID}
Ekspor file YAML kebijakan ke sistem lokal Anda:
gcloud container binauthz policy export > policy.yaml
File YAML Anda akan terlihat seperti berikut:
admissionWhitelistPatterns: - namePattern: gcr.io/google_containers/* - namePattern: gcr.io/google-containers/* - namePattern: k8s.gcr.io/** - namePattern: gke.gcr.io/** - namePattern: gcr.io/stackdriver-agents/* globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_ALLOW enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/<var>PROJECT_ID</var>/policy
Edit
policy.yaml
.Tetapkan
evaluationMode
keALWAYS_ALLOW
.Jika Anda memiliki blok
requireAttestationsBy
dalam file, hapus blok ini.Simpan file.
Impor
policy.yaml
sebagai berikut:gcloud container binauthz policy import policy.yaml
Di workstation admin cluster GKE, lakukan hal berikut:
Membuat file manifes untuk Pod.
Simpan kode berikut ke file bernama
pod.yaml
:apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: test-container image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
Buat Pod:
kubectl apply -f pod.yaml
Anda melihat bahwa Pod berhasil di-deploy.
Hapus Pod:
kubectl delete -f pod.yaml
Jangan izinkan semua
Bagian ini menunjukkan kasus kegagalan. Di bagian ini, Anda akan mengonfigurasi kebijakan default untuk melarang deployment image container Anda.
Di Google Cloud, lakukan hal berikut:
Konsol
Di konsol Google Cloud, buka halaman Otorisasi Biner.
Pastikan project Connect Anda dipilih.
Klik Edit Kebijakan.
Di bagian Project default rule, pilih Disallow all images.
Klik Save policy.
gcloud
Tetapkan
PROJECT_ID
ke project ID Connect Anda.export PROJECT_ID=PROJECT_ID
Tetapkan project Google Cloud default.
gcloud config set project ${PROJECT_ID}
Ekspor file YAML kebijakan:
gcloud container binauthz policy export > policy.yaml
Edit
policy.yaml
.Tetapkan
evaluationMode
keALWAYS_DENY
.Jika Anda memiliki blok
requireAttestationsBy
dalam file, hapus blok ini.Simpan file.
Impor
policy.yaml
sebagai berikut:gcloud container binauthz policy import policy.yaml
Di workstation admin cluster GKE, lakukan hal berikut:
Membuat file manifes untuk Pod.
Simpan kode berikut ke file bernama
pod.yaml
:apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: test-container image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
Buat Pod:
kubectl apply -f pod.yaml
Anda melihat bahwa Pod diblokir sehingga tidak dapat di-deploy. Outputnya akan terlihat seperti berikut:
Error from server (VIOLATES_POLICY): error when creating "pod.yaml": admission webhook "binaryauthorization.googleapis.com" denied the request: Denied by default admission rule. Overridden by evaluation mode
Mendapatkan ID resource cluster pengguna
Bagian ini menunjukkan cara membuat ID resource cluster untuk cluster pengguna Anda. Pada kebijakan Otorisasi Biner, Anda dapat membuat aturan khusus cluster. Anda mengaitkan aturan ini dengan ID resource khusus cluster, yang didasarkan pada ID cluster Anda.
Anda mendapatkan ID resource sebagai berikut:
Konsol
Di Google Cloud Console, buka halaman Cluster GKE Enterprise.
Pilih project ID Connect untuk cluster GKE. Anda dapat menemukan project ID ini di bagian
gkeConnect
pada file konfigurasi cluster pengguna Anda.Di bagian Anthos Managed Clusters, temukan ID cluster Anda di kolom Name.
Untuk membuat ID resource, tambahkan awalan
global.
ke ID cluster sehingga ID resource memiliki format berikut:global.CLUSTER_ID
.
gcloud
Gunakan SSH untuk terhubung ke workstation admin cluster GKE Anda.
Di workstation admin, jalankan perintah berikut:
kubectl get membership -o yaml
Dapatkan ID cluster dari kolom
spec.owner.id
output. Contoh output berikut:apiVersion: v1 items: - apiVersion: hub.gke.io/v1 kind: Membership ... spec: owner: id: //gkehub.googleapis.com/projects/PROJECT_NUMBER/locations/global/memberships/my-cluster-id
Dalam contoh output, ID cluster-nya adalah
my-cluster-id
.Untuk membuat ID resource, tambahkan awalan
global.
ke ID cluster. Dalam contoh, ID resource adalahglobal.my-cluster-id
.
Anda menggunakan ID resource ini saat menentukan aturan khusus cluster. Pelajari cara menetapkan aturan khusus cluster menggunakan Google Cloud Console atau gcloud CLI.
Memperbarui kebijakan kegagalan
Webhook Modul Otorisasi Biner dapat dikonfigurasi untuk gagal buka atau gagal ditutup.
Gagal menutup
Untuk memperbarui kebijakan kegagalan agar gagal ditutup, lakukan hal berikut:
Mengedit file manifest-0.2.6.yaml dan menetapkan faultPolicy ke
Fail
Aktifkan kembali webhook:
kubectl apply -f manifest-0.2.6.yaml
Anda akan melihat output yang mirip dengan berikut ini:
serviceaccount/binauthz-admin unchanged role.rbac.authorization.k8s.io/binauthz-role configured clusterrole.rbac.authorization.k8s.io/binauthz-role configured rolebinding.rbac.authorization.k8s.io/binauthz-rolebinding unchanged clusterrolebinding.rbac.authorization.k8s.io/binauthz-rolebinding unchanged secret/binauthz-tls unchanged service/binauthz unchanged deployment.apps/binauthz-module-deployment unchanged validatingwebhookconfiguration.admissionregistration.k8s.io/binauthz-validating-webhook-configuration configured
Fail open
Untuk memperbarui kebijakan kegagalan agar gagal dibuka, lakukan hal berikut:
Mengedit file manifest-0.2.6.yaml dan menetapkan faultPolicy ke
Ignore
Aktifkan kembali webhook:
kubectl apply -f manifest-0.2.6.yaml
Anda akan melihat output yang mirip dengan berikut ini:
serviceaccount/binauthz-admin unchanged role.rbac.authorization.k8s.io/binauthz-role configured clusterrole.rbac.authorization.k8s.io/binauthz-role configured rolebinding.rbac.authorization.k8s.io/binauthz-rolebinding unchanged clusterrolebinding.rbac.authorization.k8s.io/binauthz-rolebinding unchanged secret/binauthz-tls unchanged service/binauthz unchanged deployment.apps/binauthz-module-deployment unchanged validatingwebhookconfiguration.admissionregistration.k8s.io/binauthz-validating-webhook-configuration configured
Untuk mempelajari lebih lanjut, lihat kebijakan kegagalan webhook.
Pembersihan
Contoh kode berikut menunjukkan cara menonaktifkan webhook:
kubectl delete ValidatingWebhookConfiguration/binauthz-validating-webhook-configuration
Contoh kode berikut menunjukkan cara mengaktifkan kembali webhook:
kubectl apply -f manifest-0.2.6.yaml
Contoh kode berikut menunjukkan cara menghapus semua resource yang terkait dengan Otorisasi Biner:
kubectl delete -f manifest-0.2.6.yaml kubectl delete namespace binauthz-system
Langkah selanjutnya
- Untuk memeriksa kepatuhan kebijakan pada waktu pembuatan Pod tanpa benar-benar memblokir pembuatan Pod, lihat Mengaktifkan uji coba.
- Untuk memaksa pembuatan Pod yang akan diblokir oleh pemberlakuan Otorisasi Biner, lihat Menggunakan akses darurat.
- Gunakan attestor
built-by-cloud-build
untuk men-deploy image yang di-build hanya oleh Cloud Build (Pratinjau). - Untuk menerapkan kebijakan Otorisasi Biner berbasis attestor, lihat hal berikut:
- Konfigurasikan kebijakan menggunakan Konsol Google Cloud atau alat command line. Tetapkan aturan default atau khusus cluster untuk mewajibkan pengesahan.
- Buat attestor menggunakan Google Cloud Console atau alat command line.
- Membuat pengesahan.
- Untuk melihat peristiwa log yang terkait dengan Otorisasi Biner untuk cluster GKE, baca bagian Melihat peristiwa Cloud Audit Logs.
- Pantau metrik.