Menyiapkan cluster GKE

Dokumen ini menunjukkan cara menyiapkan Otorisasi Biner untuk cluster GKE. Bagian ini kemudian menunjukkan cara mengonfigurasi contoh kebijakan Otorisasi Biner.

Sebelum memulai

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

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

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

  4. Anda harus mengaktifkan Binary Authorization API sebagai berikut:

    1. Buka Konsol Google Cloud.

      Mengaktifkan API

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

  1. Tentukan project Connect Anda:

    export PROJECT_ID=PROJECT_ID
    
  2. Tentukan ID keanggotaan Armada cluster Anda:

    export MEMBERSHIP_ID=MEMBERSHIP_ID
    

Menggunakan kunci akun layanan

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

  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. Binary Authorization Module 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

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.

  1. 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"
    
  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 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 .
    
  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. Verifikasi bahwa Deployment telah dibuat:

    kubectl get pod --namespace binauthz-system
    

    Anda 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 Connect 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 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 .
    
  6. 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
    
  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. Verifikasi bahwa Deployment telah dibuat:

    kubectl get pod --namespace binauthz-system
    

    Anda 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 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

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

    Buka Otorisasi Biner

  2. Pastikan untuk memilih project ID Connect Anda.

  3. Klik Edit Kebijakan.

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

  5. Klik Simpan Kebijakan.

gcloud

  1. Tetapkan PROJECT_ID untuk project Connect Anda. Anda dapat menemukan project ID ini di kolom gkeConnect pada file konfigurasi cluster pengguna Anda.

    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:

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

Di workstation admin cluster GKE, lakukan hal berikut:

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

Di Google Cloud, lakukan hal berikut:

Konsol

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

    Buka Otorisasi Biner

  2. Pastikan project Connect Anda dipilih.

  3. Klik Edit Kebijakan.

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

  5. Klik Save policy.

gcloud

  1. Tetapkan PROJECT_ID ke project ID Connect 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 cluster GKE, lakukan hal berikut:

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

  1. Di Google Cloud Console, buka halaman Cluster GKE Enterprise.

    Buka Cluster

  2. Pilih project ID Connect untuk cluster GKE. Anda dapat menemukan project ID ini di bagian gkeConnect pada file konfigurasi cluster pengguna Anda.

  3. Di bagian Anthos Managed Clusters, temukan ID cluster Anda di kolom Name.

  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 cluster GKE 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-nya adalah my-cluster-id.

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

  1. Mengedit file manifest-0.2.6.yaml dan menetapkan faultPolicy 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 agar gagal dibuka, lakukan hal berikut:

  1. Mengedit file manifest-0.2.6.yaml dan menetapkan faultPolicy 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