Halaman ini menjelaskan cara mengonfigurasi penyedia identitas eksternal untuk melakukan autentikasi ke cluster Google Kubernetes Engine (GKE).
Ringkasan
Identity Service untuk GKE dapat membantu memperluas solusi identitas Anda yang sudah ada untuk autentikasi ke dalam cluster GKE. Dengan dukungan untuk OpenID Connect (OIDC), Anda dapat mengelola akses ke cluster Kubernetes menggunakan prosedur standar di organisasi Anda untuk membuat, mengaktifkan, dan menonaktifkan akun pengguna. Identity Service untuk GKE terbatas bagi penyedia identitas OIDC.
Sebelum memulai
Topik ini mengasumsikan bahwa Anda sudah memahami konsep autentikasi dan OpenID berikut:
Sistem headless tidak didukung. Alur autentikasi berbasis browser digunakan untuk meminta persetujuan dan memberikan otorisasi ke akun pengguna Anda.
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
initialize
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
Pengguna Identity Service untuk GKE
Tugas dalam dokumen ini berlaku untuk Anda jika Anda adalah salah satu dari peran berikut:
Administrator cluster: Membuat satu atau beberapa cluster pengguna dan membuat file konfigurasi autentikasi untuk developer yang menggunakan cluster tersebut.
Developer: Menjalankan workload di satu atau beberapa cluster dan menggunakan OIDC untuk melakukan autentikasi.
Cara kerja
Agar dapat menyiapkan dan menggunakan Identity Service untuk GKE di cluster GKE Anda, administrator cluster harus melakukan hal berikut:
- Aktifkan Identity Service untuk GKE di cluster.
- Mengonfigurasi Identity Service untuk GKE.
- Buat kebijakan RBAC untuk cluster Anda.
Setelah administrator cluster mengonfigurasi Identity Service untuk GKE, developer dapat login dan melakukan autentikasi ke cluster.
Mengaktifkan Identity Service untuk GKE di cluster
Bagian ini ditujukan bagi administrator cluster.
Secara default, Identity and Access Management (IAM) dikonfigurasi sebagai penyedia identitas untuk autentikasi cluster. Jika ingin menggunakan OIDC dengan penyedia identitas pihak ketiga, Anda dapat mengaktifkan Identity Service untuk GKE pada cluster baru atau yang sudah ada menggunakan Google Cloud CLI.
Mengaktifkan Identity Service untuk GKE di cluster baru
Untuk membuat cluster dengan Identity Service untuk GKE yang diaktifkan, jalankan perintah berikut:
gcloud container clusters create CLUSTER_NAME \
--enable-identity-service
Ganti CLUSTER_NAME
dengan nama cluster baru Anda.
Mengaktifkan Identity Service untuk GKE di cluster yang sudah ada
Guna mengaktifkan Identity Service untuk GKE pada cluster yang sudah ada, jalankan perintah berikut
gcloud container clusters update CLUSTER_NAME \
--enable-identity-service
Ganti CLUSTER_NAME
dengan nama cluster Anda.
Objek Kubernetes yang dibuat oleh Identity Service untuk GKE
Tabel berikut menjelaskan objek Kubernetes yang dibuat saat Anda mengaktifkan Identity Service untuk GKE di cluster:
Objek Kubernetes | |
---|---|
anthos-identity-service |
Namespace Digunakan untuk deployment Identity Service untuk GKE. |
kube-public |
Namespace Digunakan untuk file konfigurasi klien default . |
gke-oidc-envoy |
LoadBalancer Endpoint untuk permintaan OIDC. Eksternal secara default. Jika dibuat di cluster pribadi, atau cluster dengan kebijakan jaringan yang ketat, endpoint akan bersifat internal untuk Virtual Private Cloud cluster. Dibuat di namespace anthos-identity-service . |
gke-oidc-service |
ClusterIP Memfasilitasi komunikasi antara Deployment gke-oidc-envoy
dan Deployment gke-oidc-service .Dibuat di namespace anthos-identity-service . |
gke-oidc-envoy |
Deployment Menjalankan proxy yang diekspos ke gke-oidc-envoy
LoadBalancer. Berkomunikasi dengan gke-oidc-service untuk memvalidasi
token identitas. Bertindak sebagai proxy untuk server Kubernetes API, dan
meniru identitas pengguna
saat meneruskan permintaan ke server API.Dibuat di namespace anthos-identity-service . |
gke-oidc-service |
Deployment Memvalidasi token identitas, dan menyediakan validasi webhook penerimaan untuk resource ClientConfig .Dibuat di namespace anthos-identity-service . |
gke-oidc-operator |
Deployment Merekonsiliasi konfigurasi klien dan gke-oidc-envoy
LoadBalancer. Dibuat di namespace anthos-identity-service . |
gke-oidc-certs |
Secret Berisi certificate authority (CA) cluster dan sertifikat TLS untuk LoadBalancer. Dibuat di namespace anthos-identity-service |
default |
ClientConfig CRD Berisi parameter OIDC seperti metode autentikasi pilihan, konfigurasi penyedia identitas, serta pemetaan klaim pengguna dan grup. Digunakan untuk validasi token identitas. Digunakan oleh administrator cluster untuk mengonfigurasi setelan OIDC sebelum mendistribusikannya kepada developer. Dibuat di namespace kube-public |
Mengonfigurasi Identity Service untuk GKE
Bagian ini ditujukan bagi administrator cluster.
Anda dapat mengonfigurasi Identity Service untuk parameter GKE dengan mendownload dan
mengubah ClientConfig default
.
Download ClientConfig
default
:kubectl get clientconfig default -n kube-public -o yaml > client-config.yaml
Perbarui bagian
spec.authentication
dengan setelan yang Anda pilih:apiVersion: authentication.gke.io/v2alpha1 kind: ClientConfig metadata: name: default namespace: kube-public spec: name: cluster-name server: https://192.168.0.1:6443 authentication: - name: oidc oidc: clientID: CLIENT_ID certificateAuthorityData: OIDC_PROVIDER_CERTIFICATE extraParams: EXTRA_PARAMS issuerURI: ISSUER_URI cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc kubectlRedirectURI: KUBECTL_REDIRECT_URL scopes: SCOPES userClaim: USER groupsClaim: GROUPS userPrefix: USER_PREFIX groupPrefix: GROUP_PREFIX
Ganti kode berikut:
CLIENT_ID
: ID aplikasi klien yang membuat permintaan autentikasi ke penyedia OIDC.OIDC_PROVIDER_CERTIFICATE
: (Opsional) sertifikat PEM untuk penyedia OIDC. Kolom ini mungkin berguna jika penyedia OIDC Anda menggunakan sertifikat yang ditandatangani sendiri. Identity Service untuk GKE menyertakan sekumpulan root publik secara default.EXTRA_PARAMS
: parameter nilai kunci tambahan yang akan dikirim kepada penyedia OIDC.- Untuk memberikan otorisasi ke grup, gunakan
resource=token-groups-claim
. - Untuk mengautentikasi Microsoft Azure dan Okta, gunakan
prompt=consent
. - Untuk Cloud Identity, gunakan
prompt=consent,access_type=offline
.
- Untuk memberikan otorisasi ke grup, gunakan
ISSUER_URI
: URL untuk mengirim permintaan otorisasi OIDC, sepertihttps://example.com/adfs
. Server Kubernetes API menggunakan URL ini untuk menemukan kunci publik agar dapat memverifikasi token. URI harus menggunakan HTTPS. Untuk Cloud Identity, gunakanhttps://accounts.google.com
.KUBECTL_REDIRECT_URL
: URL alihan yang digunakankubectl oidc login
untuk otorisasi. URL ini biasanya menggunakan formathttp://localhost:PORT/callback
, denganPORT
adalah port apa pun di atas1024
yang akan tersedia di workstation developer, misalnyahttp://localhost:10000/callback
. Anda harus mendaftarkan URL ini ke penyedia OIDC sebagai URL alihan yang diotorisasi untuk aplikasi klien. Jika Anda menggunakan Google Identity sebagai penyedia OIDC, baca Menetapkan URI pengalihan untuk mendapatkan petunjuk.SCOPES
: cakupan tambahan yang akan dikirim kepada penyedia OIDC.- Microsoft Azure dan Okta memerlukan cakupan
offline_access
. - Untuk Cloud Identity, gunakan
openid, email
untuk mendapatkan token ID yang berisi alamat email dalam klaimemail
.
- Microsoft Azure dan Okta memerlukan cakupan
USER
: klaim pengguna dari token identitas.GROUPS
: klaim grup dari token identitas.USER_PREFIX
: awalan yang ditambahkan ke klaim pengguna untuk mencegah konflik dengan nama yang sudah ada. Secara default, awalan penerbit ditambahkan keuserID
yang diberikan ke server Kubernetes API (kecuali jika klaim pengguna adalahemail
). ID pengguna yang dihasilkan adalahISSUER_URI#USER
. Sebaiknya gunakan awalan, tetapi Anda dapat menonaktifkan awalan tersebut dengan menetapkanUSER_PREFIX
ke-
.GROUP_PREFIX
: awalan ditambahkan ke klaim grup untuk mencegah konflik dengan nama yang sudah ada. Misalnya, jika Anda memiliki dua grup bernamafoobar
, tambahkan awalangid-
. Grup yang dihasilkan adalahgid-foobar
.
Terapkan konfigurasi yang telah diperbarui:
kubectl apply -f client-config.yaml
Setelah konfigurasi ini diterapkan, Identity Service untuk GKE akan berjalan di dalam cluster Anda dan menyalurkan permintaan di balik load balancer
gke-oidc-envoy
. Alamat IP di kolomspec.server
harus merupakan alamat IP load balancer. Jika Anda mengubah kolomspec.server
, perintahkubectl
mungkin akan gagal.Buat salinan file konfigurasi
client-config.yaml
:cp client-config.yaml login-config.yaml
Perbarui file konfigurasi
login-config.yaml
dengan setelanclientSecret
di bagianspec.authentication.oidc
.clientSecret: CLIENT_SECRET
Ganti
CLIENT_SECRET
dengan rahasia bersama antara aplikasi klien OIDC dan penyedia OIDC.Distribusikan file
login-config.yaml
yang telah diperbarui kepada developer Anda.
Mengonfigurasi Identity Service untuk GKE pada cluster dengan kebijakan yang ketat
Untuk mengonfigurasi Identity Service untuk GKE agar berfungsi seperti yang diharapkan pada cluster yang menerapkan kebijakan jaringan yang ketat, seperti cluster pribadi, lakukan hal berikut:
- Tambahkan aturan firewall
untuk port TCP
15000
agar bidang kontrol Anda dapat berkomunikasi dengan webhook validasiClientConfig
. - Jika
gke-oidc-envoy
dibuat sebagai load balancer internal, ekspos di VPC Anda. - Jika Anda memiliki kebijakan yang menolak traffic dalam cluster,
tambahkan aturan firewall untuk port TCP
8443
agar deploymentgke-oidc-envoy
dapat berkomunikasi dengan deploymentgke-oidc-service
.
Identity Service untuk komponen GKE versi 0.2.20 dan yang lebih baru tidak menggunakan
port TCP 15000
. Jika versi komponen Anda adalah 0.2.20 atau
yang lebih baru, Anda tidak perlu menambahkan aturan firewall untuk port 15000
. Untuk memeriksa
versi komponen Anda, jalankan perintah berikut:
kubectl describe deployment gke-oidc-envoy -n anthos-identity-service \
| grep "components.gke.io/component-name: gke-oidc" -A1
Menambahkan properti kustom ke load balancer
Setelah mengonfigurasi Identity Service untuk GKE, Anda dapat menambahkan properti dan anotasi kustom,
seperti alamat IP statis, ke load balancer
gke-oidc-envoy
. Untuk mengedit layanan gke-oidc-envoy
, jalankan perintah
berikut:
kubectl edit service gke-oidc-envoy -n anthos-identity-service
Baca dokumentasi tentang cara mengonfigurasi load balancing TCP/UDP untuk GKE.
Membuat kebijakan RBAC untuk cluster Anda
Bagian ini ditujukan bagi administrator cluster.
Administrator dapat menggunakan kontrol akses berbasis peran (RBAC) Kubernetes untuk memberikan akses ke pengguna cluster terautentikasi. Agar dapat mengonfigurasi RBAC untuk cluster, Anda harus memberikan peran RBAC untuk setiap developer. Untuk memberikan akses ke resource di namespace tertentu, buat Role dan RoleBinding . Untuk memberikan akses ke resource di seluruh cluster, buat ClusterRole dan ClusterRoleBinding.
Misalnya, pertimbangkan pengguna yang perlu melihat semua objek Secret di seluruh cluster. Langkah-langkah berikut memberikan peran RBAC yang diperlukan kepada pengguna ini.
Simpan manifes ClusterRole berikut sebagai
secret-viewer-cluster-role.yaml
. Seseorang yang diberi peran ini bisa mendapatkan, menonton, dan membuat daftar Secret apa pun di cluster.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: secret-viewer rules: - apiGroups: [""] # The resource type for which access is granted resources: ["secrets"] # The permissions granted by the ClusterRole verbs: ["get", "watch", "list"]
Terapkan manifes ClusterRole:
kubectl apply -f secret-viewer-cluster-role.yaml
Simpan manifes ClusterRoleBinding berikut sebagai
secret-viewer-cluster-role-binding.yaml
. Binding tersebut memberikan peransecret-viewer
ke nama pengguna yang ditentukan dalam file konfigurasi klien.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: people-who-view-secrets subjects: - kind: User name: ISSUER_URI#USER apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: secret-viewer apiGroup: rbac.authorization.k8s.io
Ganti kode berikut:
ISSUER_URI
: URI penerbit darispec.authentication.oidc.issuerURI
di file konfigurasi klien.USER
: ID pengguna dalam token di bagian nama klaim yang dikonfigurasi dispec.authentication.oidc.userClaim
dalam file konfigurasi klien.
Terapkan manifes ClusterRoleBinding:
kubectl apply -f secret-viewer-cluster-role-binding.yaml
Login dan melakukan autentikasi ke cluster
Bagian ini ditujukan untuk developer.
Saat menerima file konfigurasi OIDC dari administrator, Anda dapat melakukan autentikasi ke cluster.
Download file
login-config.yaml
yang disediakan oleh administrator Anda.Instal Google Cloud CLI SDK, yang menawarkan komponen OIDC terpisah. Anda dapat menginstal paket ini dengan menjalankan perintah berikut:
gcloud components install kubectl-oidc
Lakukan autentikasi ke cluster Anda:
kubectl oidc login --cluster=CLUSTER_NAME --login-config=login-config.yaml
Browser web akan terbuka untuk menyelesaikan proses autentikasi.
Setelah diautentikasi, Anda dapat menjalankan perintah
kubectl
, misalnya:kubectl get pods
Menonaktifkan Identity Service untuk GKE
Bagian ini ditujukan bagi administrator cluster.
Anda dapat menonaktifkan Identity Service untuk GKE dengan gcloud CLI. Untuk menonaktifkan Identity Service untuk GKE, jalankan perintah berikut:
gcloud container clusters update CLUSTER_NAME \
--no-enable-identity-service
Langkah selanjutnya
- Pelajari lebih lanjut cara men-deploy workload.
- Pelajari lebih lanjut OpenID Connect.
- Pelajari lebih lanjut cakupan dan klaim.