Menyiapkan untuk cluster lokal

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

  1. 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.

  2. 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.

  3. 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.

  4. Anda harus mengaktifkan Binary Authorization API sebagai berikut:

    1. Buka Konsol Google Cloud.

      Mengaktifkan API

    2. 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

  1. Tentukan project host fleet Anda:

    export PROJECT_ID=PROJECT_ID
    
  2. Tetapkan ID keanggotaan fleet ke ID cluster Anda:

    ID langganan tercantum di kolom NAME saat Anda menjalankan perintah gcloud container fleet memberships list.

    export MEMBERSHIP_ID=CLUSTER_NAME
    

Menggunakan kunci akun layanan

  1. 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.

  2. Tentukan jalur file kubeconfig cluster pengguna:

    export KUBECONFIG=PATH
    

    Ganti PATH dengan jalur file kubeconfig cluster pengguna Anda.

  3. 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.

  4. 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.

  1. 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"
    
  2. Buat direktori kerja:

    1. Buat direktori bernama binauthz.

    2. Ubah ke direktori.

  3. 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 .
    
  4. Ganti variabel lingkungan dalam template:

    envsubst < manifest-wi-0.2.6.yaml.tmpl > manifest-0.2.6.yaml
    
  5. Instal Modul Otorisasi Biner di cluster pengguna Anda:

    kubectl apply -f manifest-0.2.6.yaml
    
  6. Pastikan Deployment telah dibuat:

    kubectl get pod --namespace binauthz-system
    

    Anda akan melihat Pod binauthz-module-deployment-* tercantum dengan Status dari Running 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

  1. Tetapkan project default untuk Google Cloud CLI:

    gcloud config set project ${PROJECT_ID}
    
  2. Buat akun layanan akses Binary Authorization API:

    gcloud iam service-accounts create ${SA_NAME}
    
  3. 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"
    
  4. Buat direktori kerja:

    1. Buat direktori bernama binauthz.

    2. Ubah ke direktori.

  5. 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 .
    
  6. Buat file YAML untuk namespacebinauthz-system.

    Salin kode berikut ke file bernama namespace.yaml:

    apiVersion: v1
    kind: Namespace
    metadata:
      labels:
        control-plane: binauthz-controller
      name: binauthz-system
    
  7. Buat namespace di cluster pengguna Anda:

    kubectl apply -f namespace.yaml
    

    Anda akan melihat output yang mirip dengan berikut ini:

    namespace/binauthz-system created
    
  8. 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
    
  9. 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}
    
  10. Instal Modul Otorisasi Biner di cluster pengguna Anda:

    kubectl apply -f manifest-0.2.6.yaml
    
  11. Pastikan Deployment telah dibuat:

    kubectl get pod --namespace binauthz-system
    

    Anda akan melihat Pod binauthz-module-deployment-* tercantum dengan Status dari Running 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

  1. Di konsol Google Cloud, buka halaman Otorisasi Biner.

    Buka Otorisasi Biner

  2. Pastikan untuk memilih project ID host fleet Anda.

  3. Klik Edit Policy.

  4. Di bagian Project default rule, pilih Allow all images.

  5. Klik Simpan Kebijakan.

gcloud

  1. Tetapkan PROJECT_ID untuk project host fleet Anda. Anda dapat menemukan project ID ini di kolom gkeConnect dalam file konfigurasi cluster pengguna.

    export PROJECT_ID=PROJECT_ID
    

    Tetapkan project Google Cloud default.

    gcloud config set project ${PROJECT_ID}
    
  2. 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
    
  3. Edit policy.yaml.

  4. Tetapkan evaluationMode ke ALWAYS_ALLOW.

  5. Jika Anda memiliki blok requireAttestationsBy dalam file, hapus blok ini.

  6. Simpan file.

  7. 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:

  1. 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
    
  2. Buat Pod:

    kubectl apply -f pod.yaml
    

    Anda melihat bahwa Pod berhasil di-deploy.

  3. 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

  1. Di konsol Google Cloud, buka halaman Otorisasi Biner.

    Buka Otorisasi Biner

  2. Pastikan project host fleet Anda dipilih.

  3. Klik Edit Policy.

  4. Di bagian Project default rule, pilih Disallow all images.

  5. Klik Save policy.

gcloud

  1. Tetapkan PROJECT_ID ke project ID host fleet Anda.

    export PROJECT_ID=PROJECT_ID
    
  2. Tetapkan project Google Cloud default.

    gcloud config set project ${PROJECT_ID}
    
  3. Ekspor file YAML kebijakan:

    gcloud container binauthz policy export  > policy.yaml
    
  4. Edit policy.yaml.

  5. Tetapkan evaluationMode ke ALWAYS_DENY.

  6. Jika Anda memiliki blok requireAttestationsBy dalam file, hapus blok ini.

  7. Simpan file.

  8. Impor policy.yaml sebagai berikut:

    gcloud container binauthz policy import policy.yaml
    

Di workstation admin, lakukan hal berikut:

  1. 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
    
  2. 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

  1. Di Konsol Google Cloud, buka halaman Cluster GKE.

    Buka Cluster

  2. Pilih project ID host fleet untuk cluster Anda. Anda dapat menemukan project ID ini di bagian gkeConnect file konfigurasi cluster pengguna.

  3. Di daftar cluster, temukan ID cluster Anda di kolom Nama.

  4. Untuk membuat ID resource, tambahkan awalan global. ke ID cluster sehingga ID resource memiliki format berikut: global.CLUSTER_ID.

gcloud

  1. Gunakan SSH untuk terhubung ke workstation admin Anda.

  2. Di workstation admin, jalankan perintah berikut:

    kubectl get membership -o yaml
    
  3. 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.

  4. Untuk membuat ID resource, tambahkan awalan global. ke ID cluster. Dalam contoh, ID resource-nya adalah global.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:

  1. Edit file manifest-0.2.6.yaml dan tetapkan failurePolicy ke Fail

  2. 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:

  1. Edit file manifest-0.2.6.yaml dan tetapkan failurePolicy ke Ignore

  2. 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

  1. Contoh kode berikut menunjukkan cara menonaktifkan webhook:

    kubectl delete ValidatingWebhookConfiguration/binauthz-validating-webhook-configuration
    
  2. Contoh kode berikut menunjukkan cara mengaktifkan kembali webhook:

    kubectl apply -f manifest-0.2.6.yaml
    
  3. 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