Mengamankan aplikasi dan resource GKE dengan IAP

Halaman ini menjelaskan cara mengamankan instance Google Kubernetes Engine (GKE) dengan Identity-Aware Proxy (IAP).

Untuk mengamankan resource yang tidak ada di Google Cloud, lihat Mengamankan aplikasi dan resource lokal.

Ringkasan

IAP terintegrasi melalui Ingress untuk GKE. Dengan integrasi ini, Anda dapat mengontrol akses level resource untuk karyawan, bukan menggunakan VPN.

Di cluster GKE, traffic masuk ditangani oleh Load Balancing HTTP(S), yang merupakan komponen dari Cloud Load Balancing. Load balancer HTTP(S) biasanya dikonfigurasi oleh pengontrol Kubernetes Ingress. Pengontrol Ingress mendapatkan informasi konfigurasi dari objek Ingress Kubernetes yang terkait dengan satu atau beberapa objek Service. Setiap objek Layanan menyimpan informasi perutean yang digunakan untuk mengarahkan permintaan yang masuk ke Pod dan port tertentu.

Mulai dari Kubernetes versi 1.10.5-gke.3, Anda dapat menambahkan konfigurasi untuk load balancer dengan mengaitkan Layanan dengan objek BackendConfig. BackendConfig adalah definisi resource kustom (CRD) yang ditentukan dalam repositori kubernetes/ingress-gce.

Pengontrol Ingress Kubernetes membaca informasi konfigurasi dari BackendConfig dan menyiapkan load balancer. BackendConfig menyimpan informasi konfigurasi yang khusus untuk Cloud Load Balancing, dan memungkinkan Anda menentukan konfigurasi terpisah untuk setiap layanan backend Load Balancing HTTP(S).

Sebelum memulai

Guna mengaktifkan IAP untuk GKE, Anda memerlukan hal berikut:

  • Project konsol Google Cloud dengan penagihan diaktifkan.
  • Sekelompok yang terdiri dari satu atau beberapa instance GKE, yang disalurkan oleh load balancer HTTPS. Load balancer seharusnya dibuat secara otomatis saat Anda membuat objek Ingress di cluster GKE.
  • Nama domain yang terdaftar ke alamat load balancer Anda.
  • Kode aplikasi untuk memverifikasi bahwa semua permintaan memiliki identitas.

Mengaktifkan IAP

Jika belum mengonfigurasi layar izin OAuth project, Anda akan diminta untuk melakukannya. Untuk mengonfigurasi layar izin OAuth, lihat Menyiapkan layar izin OAuth.

Menyiapkan akses IAP

  1. Buka halaman Identity-Aware Proxy.
    Buka halaman Identity-Aware Proxy
  2. Pilih project yang ingin Anda amankan dengan IAP.
  3. Pilih kotak centang di samping resource yang ingin Anda beri akses.

    Jika Anda tidak melihat resource, pastikan resource sudah dibuat dan pengontrol ingress Compute Engine BackendConfig sudah disinkronkan.

    Untuk memverifikasi bahwa layanan backend tersedia, jalankan perintah gcloud berikut:

    gcloud compute backend-services list
  4. Di panel samping kanan, klik Tambahkan akun utama.
  5. Pada dialog Add principals yang muncul, masukkan alamat email grup atau individu yang seharusnya memiliki peran IAP-secured Web App User untuk project tersebut.

    Jenis akun utama berikut dapat memiliki peran ini:

    • Akun Google: pengguna@gmail.com
    • Google Grup: admin@googlegroups.com
    • Akun layanan: server@example.gserviceaccount.com
    • Domain Google Workspace: example.com

    Pastikan untuk menambahkan Akun Google yang dapat Anda akses.

  6. Pilih Cloud IAP > IAP-secured Web App User dari menu drop-down Roles.
  7. Klik Simpan.

Mengonfigurasi BackendConfig

Untuk mengonfigurasi BackendConfig untuk IAP, buat Secret Kubernetes, lalu tambahkan blok iap ke BackendConfig.

Membuat Secret Kubernetes

BackendConfig menggunakan Secret Kubernetes untuk menggabungkan klien OAuth yang Anda buat sebelumnya. Secret Kubernetes dikelola seperti objek Kubernetes lainnya menggunakan antarmuka command line (CLI) kubectl. Untuk membuat Secret, jalankan perintah berikut dengan client_id_key dan client_secret_key adalah kunci dari file JSON yang Anda download saat membuat kredensial OAuth:

kubectl create secret generic my-secret --from-literal=client_id=client_id_key \
    --from-literal=client_secret=client_secret_key

Perintah sebelumnya menampilkan output untuk mengonfirmasi kapan Secret berhasil dibuat:

secret "my-secret" created

Menambahkan blok iap ke BackendConfig

Untuk mengonfigurasi BackendConfig untuk IAP, Anda harus menentukan nilai enabled dan secretName. Untuk menentukan nilai ini, pastikan Anda memiliki izin compute.backendServices.update dan tambahkan blok iap ke BackendConfig. Di blok ini, my-secret adalah nama Secret Kubernetes yang Anda buat sebelumnya:

Untuk GKE versi 1.16.8-gke.3 dan yang lebih tinggi, gunakan versi API `cloud.google.com/v1`. Jika Anda menggunakan versi GKE sebelumnya, gunakan `cloud.google.com/v1beta1`.

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: config-default
  namespace: my-namespace
spec:
  iap:
    enabled: true
    oauthclientCredentials:
      secretName: my-secret

Anda juga perlu mengaitkan port Layanan dengan BackendConfig untuk memicu pengaktifan IAP. Salah satu cara untuk membuat pengaitan ini adalah dengan menjadikan semua port untuk layanan secara default ke BackendConfig, yang dapat dilakukan dengan menambahkan anotasi berikut ke resource Service:

metadata:
  annotations:
    beta.cloud.google.com/backend-config: '{"default": "config-default"}'

Untuk menguji konfigurasi, jalankan kubectl get event. Jika Anda melihat pesan "no BackendConfig for service port exists", berarti Anda berhasil mengaitkan port layanan dengan BackendConfig, tetapi resource BackendConfig tidak ditemukan. Error ini dapat terjadi jika Anda belum membuat resource BackendConfig, membuatnya di namespace yang salah, atau salah mengeja referensi di anotasi Layanan.

Jika secretName yang Anda rujuk tidak ada atau tidak terstruktur dengan benar, salah satu pesan error berikut akan ditampilkan:

  • BackendConfig default/config-default is not valid: error retrieving secret "foo": secrets "foo" not found. Untuk mengatasi error ini, pastikan Anda telah membuat Secret Kubernetes dengan benar seperti yang dijelaskan di bagian sebelumnya.
  • BackendConfig default/config-default is not valid: secret "foo" missing client_secret data. Untuk mengatasi error ini, pastikan Anda telah membuat kredensial OAuth dengan benar. Selain itu, pastikan Anda mereferensikan kunci client_id dan client_secret yang benar di JSON yang Anda download sebelumnya.

Jika flag enabled disetel ke true dan secretName disetel dengan benar, IAP akan dikonfigurasi untuk resource yang dipilih.

Menonaktifkan IAP

Untuk menonaktifkan IAP, Anda harus menetapkan enabled ke false di BackendConfig. Jika Anda menghapus blok IAP dari BackendConfig, setelan akan tetap ada. Misalnya, jika IAP diaktifkan dengan secretName: my_secret dan Anda menghapus pemblokiran tersebut, IAP akan tetap diaktifkan dengan kredensial OAuth yang disimpan di my_secret.

Langkah berikutnya