Halaman ini menunjukkan cara mengonfigurasi autentikasi ke cluster Google Kubernetes Engine (GKE) dari penyedia identitas eksternal (IdP).
Halaman ini ditujukan untuk admin dan operator Platform serta admin Identitas dan akun yang menggunakan IdP eksternal yang mendukung OpenID Connect (OIDC) atau Security Assertion Markup Language (SAML) 2.0.
Sebelum membaca halaman ini, pastikan Anda sudah memahami konsep autentikasi dan OpenID berikut:
Metode autentikasi IdP eksternal di GKE
Direkomendasikan — Workforce Identity Federation
Workforce Identity Federation adalah fitur IAM yang memungkinkan Anda melakukan autentikasi ke Google Cloud dari IdP eksternal apa pun yang mendukung OIDC atau SAML 2.0. Workforce Identity Federation tidak memerlukan penginstalan dalam cluster, berfungsi dengan cluster Autopilot dan cluster Standard, serta di-build ke dalam Google Cloud. Untuk mengetahui detailnya, lihat dokumentasi IAM tentang Workforce Identity Federation.
Tidak direkomendasikan — Identity Service untuk GKE
Khusus di cluster GKE Standard, GKE juga mendukung Identity Service untuk GKE. Identity Service untuk GKE terbatas pada IdP OIDC dan menginstal komponen tambahan di cluster Anda. GKE sangat merekomendasikan penggunaan Workforce Identity Federation, bukan Identity Service untuk GKE.
Sebelum memulai
Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
Pertimbangan
Sistem headless tidak didukung dengan Workforce Identity Federation dan Identity Service untuk GKE. Alur autentikasi berbasis browser meminta Anda untuk memberikan izin dan memberikan otorisasi ke akun pengguna Anda.
Menggunakan Workforce Identity Federation di GKE
Untuk menggunakan Workforce Identity Federation di cluster GKE, lakukan hal berikut:
- Siapkan Workforce Identity Federation untuk organisasi dan IdP eksternal Anda. Untuk mengetahui petunjuknya, lihat Mengonfigurasi Workforce Identity Federation.
- Siapkan akses dari IdP eksternal ke Google Cloud konsol Workforce Identity Federation. Untuk mengetahui detailnya, lihat Menyiapkan akses pengguna ke konsol (gabungan).
Konfigurasikan akses pengguna menggunakan salah satu mekanisme otorisasi berikut:
Mengonfigurasi akses pengguna ke cluster menggunakan RBAC
Google Cloud menggunakan ID akun utama untuk mengidentifikasi pengguna di workforce identity pool Anda. Anda dapat merujuk ke ID utama ini dalam kebijakan RBAC Kubernetes atau dalam kebijakan IAM. Anda dapat memberikan izin kepada individu atau grup pengguna, seperti dalam contoh berikut:
Identitas | ID utama |
---|---|
Satu pengguna | principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_IDENTITY_POOL/subject/SUBJECT_ATTRIBUTE_VALUE Ganti kode berikut:
Contoh: principal://iam.googleapis.com/locations/global/workforcePools/full-time-employees/subject/amal@example.com |
Semua pengguna dalam grup | principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_IDENTITY_POOL/group/GROUP_NAME Ganti kode berikut:
Contoh: principalSet://iam.googleapis.com/locations/global/workforcePools/full-time-employees/group/sre |
Untuk setiap ID akun utama yang didukung Workforce Identity Federation, lihat Merepresentasikan pengguna workforce identity pool dalam kebijakan IAM.
Contoh berikut menunjukkan cara memberikan akses hanya baca di seluruh cluster pada
Secrets ke entitas apa pun di kumpulan tenaga kerja full-time-employees
yang memiliki
atribut access_level="sensitive"
di token IdP-nya.
Simpan manifes ClusterRole berikut sebagai
secret-viewer-cluster-role.yaml
:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: secret-viewer rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "watch", "list"]
Setiap akun utama yang Anda ikat dengan ClusterRole ini dapat melihat Secret.
Simpan manifes ClusterRoleBinding berikut sebagai
secret-viewer-cluster-role-binding.yaml
:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: users-view-secrets subjects: - kind: Group name: principalSet://iam.googleapis.com/locations/global/workforcePools/full-time-employees/attribute.access_level/sensitive apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: secret-viewer apiGroup: rbac.authorization.k8s.io
ClusterRoleBinding ini memberikan ClusterRole
secret-viewer
kepada pengguna mana pun yang memiliki atributaccess_level="sensitive"
.Deploy ClusterRole dan ClusterRoleBinding:
kubectl apply -f secret-viewer-cluster-role.yaml kubectl apply -f secret-viewer-cluster-role-binding.yaml
Memigrasikan Identity Service untuk cluster GKE ke Workload Identity Federation
Jika Anda menggunakan Identity Service untuk GKE di cluster GKE yang ada, bermigrasilah ke Workforce Identity Federation. Metode ini menggunakan sintaksis yang berbeda untuk merujuk ke akun utama yang sama, seperti yang ditunjukkan dalam tabel berikut:
Sintaksis Identity Service untuk GKE | Sintaksis Workforce Identity Federation |
---|---|
amal@example.com |
principal://iam.googleapis.com/locations/global/workforcePools/full-time-employees/subject/amal@example.com
|
sre-group |
principalSet://iam.googleapis.com/locations/global/workforcePools/full-time-employees/group/sre-group
|
Untuk memigrasikan cluster agar menggunakan Workforce Identity Federation, lakukan hal berikut:
Siapkan Workforce Identity Federation untuk organisasi dan IdP eksternal Anda. Untuk mengetahui petunjuknya, lihat Mengonfigurasi Workforce Identity Federation.
Perbarui manifes untuk RoleBindings dan ClusterRoleBindings di cluster Anda agar menggunakan sintaksis ID Federasi Identitas Tenaga Kerja. Gunakan salah satu opsi berikut:
Update terprogram: instal dan jalankan utilitas
gke-identity-service-migrator
. Untuk mengetahui petunjuknya, lihat README repositoriGoogleCloudPlatform/gke-utilities
.Utilitas ini menemukan binding RBAC yang ada yang menggunakan sintaksis Identity Service untuk GKE dan membuat manifes baru yang menggunakan ID akun utama Workforce Identity Federation yang sesuai.
Pembaruan manual: Untuk setiap binding yang mereferensikan pengguna atau grup yang diautentikasi, buat salinan terpisah file manifes objek yang menggunakan sintaksis ID Workforce Identity Federation.
Terapkan manifes yang diperbarui untuk RoleBindings dan ClusterRoleBindings ke cluster Anda.
Uji apakah pengguna dapat mengakses resource yang sama saat mereka mengautentikasi menggunakan Workforce Identity Federation.
Hapus binding RBAC yang sudah tidak digunakan lagi dari cluster Anda.
Menggunakan Identity Service untuk GKE
Agar dapat menyiapkan dan menggunakan Identity Service untuk GKE di cluster mode Standar GKE, 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.
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 tanpa endpoint IP eksternal, 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 |
Mengaktifkan Identity Service untuk GKE di 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.
Mengonfigurasi Identity Service untuk GKE
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 yang lebih besar dari1024
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, 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
Lihat Parameter Layanan LoadBalancer untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi load balancing TCP/UDP untuk GKE.
Membuat kebijakan RBAC untuk cluster Anda
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
Sebagai developer yang 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
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 berikutnya
- Pelajari Workforce Identity Federation lebih lanjut.
- Pelajari lebih lanjut cara men-deploy workload.