Dokumen ini menjelaskan cara administrator cluster atau operator aplikasi dapat mengonfigurasi cluster untuk mendukung autentikasi menggunakan penyedia OpenID Connect (OIDC) pihak ketiga.
Batasan
Anda harus menggunakan jenis cluster yang mendukung OIDC.
Sebelum memulai
-
Install the Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Setelah melakukan inisialisasi gcloud CLI, update gcloud CLI dan instal komponen yang diperlukan:
gcloud components update gcloud components install kubectl
- Pastikan administrator platform Anda telah memberi Anda semua informasi penyedia yang Anda butuhkan. Untuk mengetahui informasi selengkapnya, lihat Membagikan detail penyedia identitas.
- Untuk melakukan autentikasi menggunakan konsol Google Cloud , daftarkan setiap cluster yang ingin Anda konfigurasi ke fleet project Anda. Untuk mengetahui informasi selengkapnya, lihat Ringkasan pembuatan armada.
- Untuk terhubung ke bidang kontrol cluster AWS atau Azure yang berada di luar
jaringan VPC saat ini melalui bastion host, pastikan Anda
telah membuat bastion host dan memulai tunnel SSH di port
8118. Saat menjalankan perintahkubectldalam dokumen ini, tambahkan awalanHTTPS_PROXY=http://localhost:PORTpada perintah, denganPORTadalah nomor port yang Anda gunakan saat memulai tunnel SSH. - Untuk cluster GKE di Google Cloud, daftarkan cluster ke fleet Anda.
Konfigurasi cluster
Untuk mengonfigurasi autentikasi ke cluster menggunakan OIDC, Anda menambahkan informasi berikut ke resource kustom Kubernetes bernama ClientConfig:
- Informasi tentang penyedia identitas Anda, seperti ID klien dan rahasia.
- Informasi tentang Token Web JSON (JWT) yang digunakan penyedia identitas Anda untuk autentikasi.
- Cakupan atau parameter tambahan yang unik untuk penyedia identitas Anda.
Untuk mengetahui informasi selengkapnya tentang informasi yang Anda butuhkan dari administrator platform Anda, atau siapa pun yang mengelola identitas di organisasi Anda, lihat Membagikan detail penyedia identitas.
Cluster menggunakan kolom di resource kustom ClientConfig untuk berinteraksi dengan penyedia identitas Anda. Setiap cluster memiliki ClientConfig bernama
default di namespace kube-public. Kolom spesifik yang Anda ubah bergantung pada penyedia identitas Anda.
Untuk mengedit default ClientConfig, pastikan Anda dapat terhubung ke cluster
kubectl, lalu jalankan perintah berikut:
kubectl --kubeconfig=KUBECONFIG_PATH edit ClientConfigs default -n kube-public
Ganti KUBECONFIG_PATH dengan jalur ke file kubeconfig
cluster Anda—misalnya $HOME/.kube/config.
Editor teks memuat resource ClientConfig cluster Anda. Tambahkan
objek spec.authentication.oidc seperti yang ditunjukkan dalam contoh berikut. Jangan ubah
data default yang telah ditulis.
apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
name: default
namespace: kube-public
spec:
authentication:
- name: NAME
oidc:
certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
clientID: CLIENT_ID
clientSecret: CLIENT_SECRET
deployCloudConsoleProxy: PROXY_BOOLEAN
extraParams: EXTRA_PARAMS
groupsClaim: GROUPS_CLAIM
groupPrefix: GROUP_PREFIX
issuerURI: ISSUER_URI
kubectlRedirectURI: KUBECTL_REDIRECT_URI
scopes: SCOPES
userClaim: USER_CLAIM
userPrefix: USER_PREFIX
enableAccessToken: ENABLE_ACCESS_TOKEN
proxy: PROXY_URL
# Rest of the resource is managed by Google. DO NOT MODIFY.
Misalnya, pertimbangkan kolom token identitas berikut:
{
'iss': 'https://server.example.com'
'sub': 'u98523-4509823'
'groupList': ['developers@example.corp', 'us-east1-cluster-admins@example.corp']
# Multiple lines are omitted here
}
Dalam contoh ini, iss adalah URI penyedia identitas, sub mengidentifikasi pengguna,
dan groupList mencantumkan grup keamanan tempat pengguna berada. Contoh ini hanya menampilkan contoh kolom yang mungkin dimiliki token sebenarnya.
Untuk token contoh sebelumnya, Anda memperbarui kolom berikut dalam
objek spec.authentication.oidc ClientConfig:
issuerURI: 'https://server.example.com'
userClaim: 'sub'
groupsClaim: 'groupList'
# Multiple lines are omitted here
Anda dapat menambahkan beberapa konfigurasi penyedia identitas OIDC, LDAP, dan SAML ke ClientConfig yang sama. Cluster mencoba mengautentikasi dengan setiap konfigurasi dalam urutan yang ditentukan, dan berhenti setelah autentikasi pertama berhasil. Contoh ClientConfig berikut menentukan beberapa penyedia identitas dalam urutan tertentu:
apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
name: default
namespace: kube-public
spec:
authentication:
- aws:
region: us-west-2
name: AWS Login
- ldap:
# Multiple lines are omitted here.
- saml:
# Multiple lines are omitted here.
- azureAD:
# Multiple lines are omitted here.
- oidc:
name: Okta OIDC
# Multiple lines are omitted here.
- oidc:
name: Google OIDC
# Multiple lines are omitted here.
Kolom OIDC ClientConfig
Tabel berikut menjelaskan kolom objek ClientConfig oidc. Kolom yang perlu Anda tambahkan bergantung pada token penyedia identitas dan cara administrator platform Anda mengonfigurasi penyedia.
| Kolom | Diperlukan | Deskripsi | Format |
|---|---|---|---|
| nama | ya | Nama yang ingin Anda gunakan untuk mengidentifikasi konfigurasi ini, biasanya nama penyedia identitas. Nama konfigurasi harus dimulai dengan huruf, diikuti dengan maksimal 39 huruf kecil, angka, atau tanda hubung, dan tidak boleh diakhiri dengan tanda hubung. | String |
| certificateAuthorityData | Tidak | Jika disediakan oleh administrator platform Anda, string sertifikat berenkode PEM untuk penyedia identitas. Sertakan string
yang dihasilkan dalam certificateAuthorityData sebagai satu baris. |
String |
| clientID | Ya | ID klien dari penyedia identitas. | String |
| clientSecret | Tidak | Rahasia bersama antara aplikasi klien OIDC dan penyedia OIDC. | String |
| deployCloudConsoleProxy | Tidak | Menentukan apakah proxy di-deploy yang memungkinkan konsol Google Cloud terhubung ke penyedia identitas lokal yang tidak dapat diakses secara publik melalui internet. Secara default, nilai ini ditetapkan ke false. |
Boolean |
| extraParams | Tidak | Parameter key=value tambahan untuk dikirim ke penyedia identitas, yang ditentukan sebagai daftar yang dipisahkan koma—misalnya `prompt=consent,access_type=offline`. | Daftar yang dipisahkan koma |
| groupsClaim | Tidak | Klaim JWT (nama kolom) yang digunakan penyedia Anda untuk menampilkan grup keamanan akun. | String |
| groupPrefix | Tidak | Awalan yang ingin Anda tambahkan ke nama grup keamanan untuk menghindari bentrokan dengan nama yang ada dalam aturan kontrol akses jika Anda memiliki konfigurasi untuk beberapa penyedia identitas (biasanya nama penyedia). | String |
| issuerURI | Ya | URI tempat permintaan otorisasi dibuat ke penyedia identitas Anda. URI harus menggunakan HTTPS dan tidak boleh diakhiri dengan garis miring di akhir. | URL String |
| kubectlRedirectURI | Ya | URL pengalihan dan port yang digunakan oleh gcloud CLI dan ditentukan oleh admin platform Anda saat pendaftaran, biasanya dalam bentuk http://localhost:PORT/callback. |
URL String |
| cakupan | Ya | Cakupan tambahan yang akan dikirim ke penyedia OpenID. Misalnya, Microsoft Azure dan Okta
memerlukan cakupan offline_access. |
Daftar yang dipisahkan koma |
| userClaim | Tidak | Klaim JWT (nama kolom) yang digunakan penyedia Anda untuk mengidentifikasi akun pengguna. Jika Anda tidak menentukan nilai di sini, nilai defaultnya adalah "sub", yang merupakan klaim ID pengguna yang digunakan oleh banyak penyedia. Anda dapat memilih klaim lain, seperti "email" atau "name", bergantung pada penyedia OpenID. Klaim selain "email" diberi awalan URL penerbit untuk mencegah bentrokan penamaan. | String |
| userPrefix | Tidak | Awalan yang ingin ditambahkan ke klaim pengguna untuk mencegah bentrokan dengan nama yang ada, jika Anda tidak ingin menggunakan awalan default. | String |
| enableAccessToken | Tidak | Jika diaktifkan, cluster dapat menggunakan endpoint userinfo penyedia identitas untuk mendapatkan informasi grup saat pengguna login dari command line. Dengan begitu, Anda dapat menggunakan grup keamanan untuk otorisasi jika memiliki penyedia (seperti Okta) yang menyediakan klaim grup dari endpoint ini. Jika tidak disetel, nilai ini dianggap false. |
Boolean |
| proxy | Tidak | Alamat server proxy yang akan digunakan untuk terhubung ke penyedia identitas, jika ada. Anda mungkin perlu menyetel ini jika, misalnya, cluster Anda berada di jaringan pribadi dan perlu terhubung ke penyedia identitas publik. Misalnya: http://user:password@10.10.10.10:8888. |
String |
Setelah mengedit ClientConfig, simpan file untuk memperbarui ClientConfig bagi cluster Anda. Jika Anda membuat kesalahan sintaksis, Anda akan melihat perintah untuk memperbaiki kesalahan tersebut dan menyimpan file.
Konfigurasi khusus penyedia
Bagian ini memberikan panduan konfigurasi untuk beberapa penyedia OIDC populer, termasuk contoh konfigurasi yang dapat Anda salin dan edit dengan detail Anda sendiri.
Microsoft Entra ID
Ini adalah konfigurasi default untuk menyiapkan cluster untuk autentikasi dengan Microsoft Entra ID. Dengan konfigurasi ini, cluster dapat memperoleh informasi keanggotaan pengguna dan grup dari Microsoft Entra ID, dan Anda dapat menyiapkan kontrol akses berbasis peran (RBAC) Kubernetes berdasarkan grup. Namun, menggunakan konfigurasi ini membatasi Anda untuk mengambil sekitar 200 grup per pengguna.
Jika Anda perlu mengambil lebih dari 200 grup per pengguna, lihat petunjuk untuk Microsoft Entra ID (Lanjutan).
# Multiple lines are omitted here.
spec:
authentication:
- name: oidc-entraid
oidc:
clientID: CLIENT_ID
clientSecret: CLIENT_SECRET
cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc
extraParams: prompt=consent, access_type=offline
issuerURI: https://login.microsoftonline.com/TENANT_ID/v2.0
kubectlRedirectURI: http://localhost:PORT/callback
scopes: openid,email,offline_access
userClaim: email
# Multiple lines are omitted here. Do not modify any pre-filled data.
Ganti kode berikut:
- CLIENT_ID: ID klien dari Microsoft Entra ID.
- CLIENT_SECRET: Rahasia bersama antara aplikasi klien OIDC dan penyedia OIDC.
- TENANT_ID: Jenis akun Microsoft Entra ID yang akan diautentikasi. Nilai yang didukung adalah ID tenant, atau nama tenant untuk akun yang termasuk dalam tenant tertentu. Nama tenant juga dikenal sebagai domain utama. Untuk mengetahui detail cara menemukan nilai ini, lihat Menemukan ID tenant Microsoft Entra dan nama domain utama.
- PORT: Nomor port yang dipilih untuk URL pengalihan yang digunakan oleh gcloud CLI, yang ditentukan oleh administrator platform Anda saat pendaftaran.
Microsoft Entra ID (Tingkat Lanjut)
Konfigurasi opsional untuk Microsoft Entra ID ini memungkinkan cluster mengambil informasi pengguna dan grup tanpa batasan jumlah grup per pengguna, menggunakan Microsoft Graph API.
Untuk mengetahui informasi tentang platform yang mendukung konfigurasi ini, lihat Penyiapan lanjutan untuk Microsoft Entra ID.
Jika Anda perlu mengambil kurang dari 200 grup per pengguna, sebaiknya
gunakan konfigurasi default menggunakan anchor oidc di ClientConfig Anda. Untuk mengetahui informasi selengkapnya, lihat petunjuk
untuk Microsoft Entra ID.
Semua kolom dalam konfigurasi contoh berikut bersifat wajib.
# Multiple lines are omitted here.
spec:
authentication:
- name: NAME
proxy: PROXY_URL
azureAD:
clientID: CLIENT_ID
clientSecret: CLIENT_SECRET
tenant: TENANT_ID
kubectlRedirectURI: http://localhost:PORT/callback
groupFormat: GROUP_FORMAT
userClaim: USER_CLAIM
# Multiple lines are omitted here. Do not modify any pre-filled data.
Ganti kode berikut:
- NAME: Nama yang ingin Anda gunakan untuk mengidentifikasi konfigurasi ini, biasanya nama penyedia identitas. Nama konfigurasi harus dimulai dengan huruf, diikuti dengan maksimal 39 huruf kecil, angka, atau tanda hubung, dan tidak boleh diakhiri dengan tanda hubung.
- PROXY_URL: Alamat server proxy yang akan digunakan untuk terhubung ke penyedia identitas, jika ada. Anda mungkin perlu menyetel ini jika, misalnya, cluster Anda berada di jaringan pribadi dan perlu terhubung ke penyedia identitas publik. Contoh:
http://user:password@10.10.10.10:8888. - CLIENT_ID: ID klien dari Microsoft Entra ID.
- CLIENT_SECRET: Rahasia bersama antara aplikasi klien OIDC dan penyedia OIDC.
- TENANT: Jenis akun Microsoft Entra yang akan diautentikasi. Nilai yang didukung adalah ID tenant, atau nama tenant untuk akun yang termasuk dalam tenant tertentu. Nama tenant juga dikenal sebagai domain utama. Untuk mengetahui detail cara menemukan nilai ini, lihat Menemukan ID tenant Microsoft Entra dan nama domain utama.
- PORT: Nomor port yang dipilih untuk URL pengalihan yang digunakan oleh gcloud CLI, yang ditentukan oleh administrator platform Anda saat pendaftaran.
- GROUP_FORMAT: Format yang Anda inginkan untuk mengambil informasi grup. Kolom ini dapat mengambil nilai yang sesuai dengan
IDatauNAMEgrup pengguna. Perhatikan bahwa setelan ini hanya tersedia untuk cluster dalam deployment Google Distributed Cloud bare metal. - USER_CLAIM (Opsional): Klaim JWT (nama kolom) yang digunakan penyedia Anda untuk mengidentifikasi akun. Jika Anda tidak menentukan nilai di sini, cluster akan menggunakan nilai dalam urutan "email", "preferred_username", atau "sub" untuk mengambil detail pengguna. Atribut ini dapat digunakan mulai versi 1.28.
Okta
Berikut cara menyiapkan autentikasi menggunakan pengguna dan grup dengan Okta sebagai penyedia identitas Anda. Konfigurasi ini memungkinkan cluster mengambil klaim pengguna dan grup menggunakan token akses dan endpoint userinfo Okta.
# Multiple lines are omitted here.
spec:
authentication:
- name: okta
oidc:
clientID: CLIENT_ID
clientSecret: CLIENT_SECRET
cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc
enableAccessToken: true
extraParams: prompt=consent
groupsClaim: groups
issuerURI: https://OKTA_ISSUER_URI/
kubectlRedirectURI: http://localhost:PORT/callback
scopes: offline_access,email,profile,groups
userClaim: email
# Multiple lines are omitted here. Do not modify any pre-filled data.
Batasan akses grup
Untuk pengguna Okta, cluster dapat mengambil informasi grup untuk pengguna yang nama grupnya, jika digabungkan, memiliki panjang kurang dari 170.000 karakter. Hal ini sesuai dengan keanggotaan sekitar 650 grup mengingat panjang grup maksimum Okta. Jika pengguna adalah anggota terlalu banyak grup, panggilan autentikasi akan gagal.
Apa langkah selanjutnya?
Setelah konfigurasi diterapkan, lanjutkan menyiapkan akses pengguna ke cluster.