Dokumen ini menunjukkan cara menyiapkan Otorisasi Biner untuk cluster lokal yang dibuat sebagai bagian dari Google Distributed Cloud. Kemudian, Anda akan ditunjukkan 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 for VMware (Google Distributed Cloud) 1.4 atau yang lebih baru.
Layanan Otorisasi Biner menggunakan alamat IP eksternal, yang dapat diakses melalui koneksi internet reguler. Konfigurasikan aturan firewall untuk HTTPS agar cluster pengguna dapat mengakses endpoint
binaryauthorization.googleapis.com
.Bare metal
Konfigurasikan aturan firewall Google Distributed Cloud.
VMware
Konfigurasikan 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
Mengonfigurasi Cloud Audit Logs di Google Distributed Cloud.
VMware
Mengonfigurasi Cloud Audit Logs di Google Distributed Cloud.
Anda harus mengaktifkan Binary Authorization API sebagai berikut:
Buka Konsol Google Cloud.
Dalam menu drop-down project, pilih project host fleet Anda. Anda dapat menemukannya di bagian
gkeConnect
file konfigurasi cluster pengguna. Ini adalah project Google Cloud yang menghubungkan cluster pengguna Anda ke Google Cloud.
Menyiapkan Otorisasi Biner
Di bagian ini, Anda akan menyiapkan Otorisasi Biner di cluster on-premise.
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 langganan 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 Otorisasi Biner 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
Workload Identity Fleet memungkinkan workload di cluster Anda mengautentikasi ke Google tanpa mengharuskan Anda mendownload, merotasi secara manual, dan secara umum mengelola kunci akun layanan 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: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-*
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 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: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-*
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 on-premise.
Dalam setiap contoh, Anda akan mengonfigurasi kebijakan, lalu mengujinya dengan mencoba men-deploy image container di cluster.
Izinkan semua
Bagian ini menunjukkan kasus sukses. Anda mengonfigurasi kebijakan Otorisasi Biner sehingga 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 host fleet Anda.
Klik Edit Policy.
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 hal 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: 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.
Di Google Cloud, lakukan hal berikut:
Konsol
Di konsol Google Cloud, buka halaman Otorisasi Biner.
Pastikan project host fleet Anda dipilih.
Klik Edit Policy.
Di bagian Project default rule, pilih Disallow all images.
Klik Save policy.
gcloud
Tetapkan
PROJECT_ID
ke project ID 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: gcr.io/google-samples/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 membuat 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 mendapatkan ID resource sebagai berikut:
Konsol
Di Konsol Google Cloud, buka halaman Cluster GKE.
Pilih project ID host fleet untuk cluster Anda. Anda dapat menemukan project ID ini di bagian
gkeConnect
file konfigurasi cluster pengguna.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 Konsol Google Cloud atau gcloud CLI.
Memperbarui kebijakan kegagalan
Webhook Modul Otorisasi Biner dapat dikonfigurasi untuk gagal terbuka atau gagal tertutup.
Gagal menutup
Untuk memperbarui kebijakan kegagalan menjadi tutup jika gagal, 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 memperbarui 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 selanjutnya
- Untuk memeriksa kepatuhan kebijakan pada waktu pembuatan Pod tanpa benar-benar memblokir Pod agar tidak dibuat, lihat Mengaktifkan uji coba.
- Untuk memaksa Pod dibuat yang akan diblokir oleh penegak Otorisasi Biner, lihat Menggunakan breakglass.
- Gunakan pengautentikasi
built-by-cloud-build
untuk hanya men-deploy image yang dibuat oleh Cloud Build. - Untuk menerapkan kebijakan Otorisasi Biner berbasis pengautentikasi, lihat hal berikut:
- Konfigurasikan kebijakan menggunakan konsol Google Cloud atau alat command line. Tetapkan aturan default atau khusus cluster untuk mewajibkan pengesahan.
- Buat pengautentikasi menggunakan konsol Google Cloud atau alat command line.
- Buat pengesahan.
- Untuk melihat peristiwa log yang terkait dengan Otorisasi Biner untuk Cloud Terdistribusi, lihat Melihat peristiwa Cloud Audit Logs.
- Memantau metrik.