Dokumen ini menunjukkan cara menyiapkan Otorisasi Biner untuk cluster lokal yang dibuat sebagai bagian dari Google Distributed Cloud. Kemudian, Anda akan melihat cara mengonfigurasi contoh kebijakan Otorisasi Biner.
Sebelum memulai
Pastikan cluster Anda memiliki versi Google Distributed Cloud yang didukung. Otorisasi Biner mendukung lingkungan berikut.
Bare metal
Google Distributed Cloud 1.14 atau 1.15. Untuk versi 1.16 atau yang lebih baru, Otorisasi Biner dapat dikonfigurasi selama pembuatan atau update cluster.
VMware
Distributed Cloud untuk VMware (Google Distributed Cloud) 1.4 atau yang lebih baru.
Layanan Otorisasi Biner menggunakan alamat IP eksternal yang dapat diakses melalui koneksi internet reguler. Konfigurasi aturan firewall untuk HTTPS agar cluster pengguna dapat mengakses endpoint
binaryauthorization.googleapis.com
.Bare metal
Konfigurasi aturan firewall Google Distributed Cloud.
VMware
Konfigurasi aturan firewall Google Distributed Cloud.
Jika ingin menggunakan Cloud Audit Logs terpusat untuk melihat entri log audit, termasuk yang berasal dari Otorisasi Biner untuk cluster di luar Google Cloud, Anda harus mengonfigurasi Cloud Audit Logs dalam konfigurasi cluster.
Bare metal
Konfigurasi Cloud Audit Logs di Google Distributed Cloud.
VMware
Konfigurasi Cloud Audit Logs di Google Distributed Cloud.
Anda harus mengaktifkan Binary Authorization API sebagai berikut:
Buka Google Cloud console.
Di menu drop-down project, pilih project host fleet Anda. Anda dapat menemukannya di bagian
gkeConnect
pada file konfigurasi cluster pengguna Anda. Ini adalah Google Cloud project yang menghubungkan cluster pengguna Anda ke Google Cloud.
Menyiapkan Otorisasi Biner
Di bagian ini, Anda akan menyiapkan Otorisasi Biner di cluster lokal.
Menentukan variabel lingkungan penginstalan
Untuk menentukan variabel lingkungan, lakukan hal berikut:
Menggunakan Workload Identity
Tentukan project host fleet Anda:
export PROJECT_ID=PROJECT_ID
Tetapkan ID keanggotaan fleet ke ID cluster Anda:
ID keanggotaan tercantum di kolom
NAME
saat Anda menjalankan perintahgcloud container fleet memberships list
.export MEMBERSHIP_ID=CLUSTER_NAME
Menggunakan kunci akun layanan
Tentukan project host fleet Anda:
export PROJECT_ID=PROJECT_ID
Ganti PROJECT_ID dengan project Google Cloud di bagian
gkeConnect
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. Modul Binary Authorization 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.
Instal modul Otorisasi Biner di cluster pengguna Anda
Untuk menginstal modul Otorisasi Biner, lakukan hal berikut:
Menggunakan Workload Identity
Dengan Fleet Workload Identity, workload di cluster Anda dapat melakukan autentikasi ke Google tanpa mengharuskan Anda mendownload, memutar secara manual, dan mengelola kunci akun layanan secara umum. Google Cloud Anda dapat mengetahui lebih lanjut cara kerja Workload Identity fleet dan keuntungan menggunakannya di Menggunakan Workload Identity fleet.
Berikan peran
binaryauthorization.policyEvaluator
ke akun layanan Kubernetes di project host fleet 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 Anda:Bare metal
gcloud storage cp gs://anthos-baremetal-release/binauthz/manifest-wi-0.2.6.yaml.tmpl .
VMware
gcloud storage 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
Pastikan Deployment telah dibuat:
kubectl get pod --namespace binauthz-system
Anda akan melihat Pod
binauthz-module-deployment-*
yang 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}
Beri peran
binaryauthorization.policyEvaluator
kepada akun layanan akses Binary Authorization API di project host fleet 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 Anda:Bare metal
gcloud storage cp gs://anthos-baremetal-release/binauthz/manifest-0.2.6.yaml .
VMware
gcloud storage 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
Pastikan Deployment telah dibuat:
kubectl get pod --namespace binauthz-system
Anda akan melihat Pod
binauthz-module-deployment-*
yang 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 lokal.
Dalam setiap contoh, Anda mengonfigurasi kebijakan, lalu mengujinya dengan mencoba men-deploy image container di cluster Anda.
Izinkan semua
Bagian ini menunjukkan kasus keberhasilan. Anda mengonfigurasi kebijakan Otorisasi Biner sehingga image container memenuhi kebijakan dan di-deploy.
Di Google Cloud, lakukan hal berikut:
Konsol
Di Google Cloud console, buka halaman Binary Authorization.
Pastikan untuk memilih project ID host fleet Anda.
Klik Edit Kebijakan.
Di bagian Project default rule, pilih Allow all images.
Klik Simpan Kebijakan.
gcloud
Tetapkan
PROJECT_ID
untuk project host fleet Anda. Anda dapat menemukan project ID ini di kolomgkeConnect
dalam file konfigurasi cluster pengguna.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:
defaultAdmissionRule: enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG evaluationMode: ALWAYS_ALLOW globalPolicyEvaluationMode: ENABLE 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
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.
Di workstation admin, lakukan hal berikut:
Buat 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: us-docker.pkg.dev/google-samples/containers/gke/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
Buat Pod:
kubectl apply -f pod.yaml
Anda akan 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 image container Anda di-deploy.
Di Google Cloud , lakukan hal berikut:
Konsol
Di Google Cloud console, buka halaman Binary Authorization.
Pastikan project host fleet Anda dipilih.
Klik Edit Kebijakan.
Di bagian Aturan default project, pilih Jangan izinkan semua gambar.
Klik Save policy.
gcloud
Tetapkan
PROJECT_ID
ke ID project host fleet 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, lakukan hal berikut:
Buat 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: us-docker.pkg.dev/google-samples/containers/gke/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
Buat Pod:
kubectl apply -f pod.yaml
Anda melihat bahwa Pod diblokir agar tidak 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 menyusun ID resource cluster untuk cluster pengguna Anda. Dalam 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 akan mendapatkan ID resource sebagai berikut:
Konsol
Di Google Cloud console, buka halaman Clusters GKE.
Pilih project ID host fleet untuk cluster Anda. Anda dapat menemukan project ID ini di bagian
gkeConnect
pada file konfigurasi cluster pengguna Anda.Di daftar cluster, temukan ID cluster Anda di kolom Nama.
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 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 adalah
my-cluster-id
.Untuk membuat ID resource, tambahkan awalan
global.
ke ID cluster. Dalam contoh, ID resource-nya adalahglobal.my-cluster-id
.
Anda menggunakan ID resource ini saat menentukan aturan khusus cluster. Pelajari cara menetapkan aturan khusus cluster menggunakan konsolGoogle Cloud atau gcloud CLI.
Memperbarui kebijakan kegagalan
Webhook Modul Otorisasi Biner dapat dikonfigurasi agar gagal dibuka atau gagal ditutup.
Gagal menutup
Untuk mengupdate kebijakan kegagalan menjadi fail close, lakukan hal berikut:
Edit file manifest-0.2.6.yaml dan tetapkan failurePolicy 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 mengupdate kebijakan kegagalan menjadi fail open, lakukan hal berikut:
Edit file manifest-0.2.6.yaml dan tetapkan failurePolicy 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 berikutnya
- Untuk memeriksa kepatuhan kebijakan pada waktu pembuatan Pod tanpa benar-benar memblokir pembuatan Pod, lihat Mengaktifkan uji coba.
- Untuk memaksa pembuatan Pod yang seharusnya diblokir oleh penguat Otorisasi Biner, lihat Menggunakan breakglass.
- Gunakan pengesah
built-by-cloud-build
untuk men-deploy hanya image yang dibuat oleh Cloud Build. - Untuk menerapkan kebijakan Otorisasi Biner berbasis pengesah, lihat bagian berikut:
- Konfigurasi kebijakan menggunakan konsolGoogle Cloud atau alat command line. Tetapkan aturan default atau khusus cluster untuk mewajibkan pengesahan.
- Buat pengesah menggunakan konsolGoogle Cloud atau alat command line.
- Buat pengesahan.
- Untuk melihat peristiwa log yang terkait dengan Binary Authorization for Distributed Cloud, lihat Melihat peristiwa Cloud Audit Logs.
- Memantau metrik.