Menyiapkan cluster untuk GKE Identity Service dengan OIDC
Dokumen ini ditujukan bagi administrator cluster atau operator aplikasi yang ingin menyiapkan Layanan Identitas GKE di setiap cluster, sehingga memungkinkan developer dan pengguna lain login ke cluster menggunakan detail identitas yang ada dari penyedia OpenID Connect (OIDC).
Prasyarat
- Cluster Anda harus berupa cluster GKE di lokal (VMware atau bare metal), di AWS, atau di Azure. Konfigurasi OIDC per cluster tidak didukung untuk cluster terlampir atau cluster GKE.
- Untuk melakukan autentikasi melalui konsol Google Cloud , setiap cluster yang ingin Anda konfigurasi untuk autentikasi OIDC harus didaftarkan ke fleet project Anda.
Sebelum memulai
- Pastikan administrator platform Anda telah memberi Anda semua informasi yang diperlukan dari Mendaftarkan Layanan Identitas GKE dengan penyedia Anda sebelum Anda memulai penyiapan, termasuk ID dan rahasia klien untuk Layanan Identitas GKE.
Pastikan Anda telah menginstal alat command line berikut:
- Google Cloud CLI versi terbaru, yang mencakup
gcloud
, alat command line untuk berinteraksi dengan Google Cloud. Jika Anda perlu menginstal Google Cloud CLI, lihat panduan penginstalan. kubectl
untuk menjalankan perintah terhadap cluster Kubernetes. Jika Anda perlu menginstalkubectl
, ikuti petunjuk berikut.
Jika Anda menggunakan Cloud Shell sebagai lingkungan shell untuk berinteraksi dengan Google Cloud, alat ini akan diinstal untuk Anda.
- Google Cloud CLI versi terbaru, yang mencakup
Pastikan Anda telah menginisialisasi gcloud CLI untuk digunakan dengan project tempat cluster terdaftar.
Jika Anda perlu terhubung ke bidang kontrol cluster GKE AWS atau Azure yang berada di luar VPC saat ini melalui host bastion, pastikan Anda telah membuat host bastion dan memulai tunnel SSH di port 8118 sebelum penyiapan ini. Kemudian, tambahkan
HTTPS_PROXY=http://localhost:8118
di depan perintahkubectl
saat mengikuti panduan ini. Jika Anda menggunakan port lain saat memulai tunnel SSH, ganti8118
dengan port yang Anda pilih.
Konfigurasi cluster
Untuk mengonfigurasi cluster agar menggunakan penyedia pilihan Anda, GKE Identity Service mengharuskan Anda menentukan detail tentang penyedia identitas, informasi dalam token JWT yang diberikannya untuk identifikasi pengguna, dan informasi lain yang diberikan saat Anda mendaftarkan GKE Identity Service sebagai aplikasi klien.
Jadi, misalnya, jika penyedia Anda membuat token identitas dengan kolom berikut (di antara kolom lainnya), dengan iss
adalah URI penyedia identitas, sub
mengidentifikasi pengguna, dan groupList
mencantumkan grup keamanan tempat pengguna berada:
{ 'iss': 'https://server.example.com' 'sub': 'u98523-4509823' 'groupList': ['developers@example.corp', 'us-east1-cluster-admins@example.corp'] ... }
...konfigurasi Anda akan memiliki kolom terkait berikut:
issuerURI: 'https://server.example.com' userClaim: 'sub' groupsClaim: 'groupList' ...
Administrator platform Anda, atau siapa pun yang mengelola identitas di organisasi Anda, harus memberi Anda sebagian besar informasi yang Anda butuhkan untuk membuat konfigurasi.
GKE Identity Service menggunakan jenis resource kustom (CRD) Kubernetes yang disebut ClientConfig untuk konfigurasi cluster, dengan kolom untuk semua informasi yang dibutuhkan GKE Identity Service untuk berinteraksi dengan penyedia identitas. Setiap cluster GKE memiliki resource ClientConfig bernama default
di namespace kube-public
yang Anda perbarui dengan detail konfigurasi Anda, dengan mengikuti petunjuk di bawah.
Anda dapat melihat beberapa contoh konfigurasi spesifik untuk penyedia populer di Konfigurasi khusus penyedia.
kubectl
Untuk mengedit ClientConfig default, pastikan Anda dapat terhubung ke cluster
melalui 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 di bawah. Jangan mengubah 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_STRING
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.
...
Anda dapat mengonfigurasi beberapa penyedia identitas di ClientConfig
sesuai dengan kebutuhan Anda. Hal ini menyederhanakan pengelolaan dan memberikan fleksibilitas, sehingga Anda dapat mengonfigurasi berbagai metode autentikasi dalam resource konfigurasi terpadu. Contoh ClientConfig
berikut menentukan beberapa penyedia identitas dalam urutan prioritas autentikasi yang diperlukan.
apiVersion: v1
items:
- apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
...
spec:
authentication:
- aws:
region: us-west-2
name: AWS Login
- ldap:
...
- saml:
...
- azureAD:
...
- oidc:
name: Okta OIDC
...
-oidc:
name: Google OIDC
...
Tabel berikut menjelaskan kolom objek ClientConfig oidc
. Sebagian besar kolom bersifat opsional. Kolom yang perlu Anda tambahkan bergantung pada penyedia identitas dan opsi penyiapan yang dipilih oleh admin platform Anda saat mengonfigurasi penyedia untuk Layanan Identitas GKE.
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 yang ditampilkan saat mendaftarkan Layanan Identitas GKE dengan penyedia OIDC Anda. | 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, GKE Identity Service akan menggunakan "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, Layanan Identitas GKE 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 Anda menyelesaikan ClientConfig, simpan file, yang akan memperbarui ClientConfig di cluster Anda. Jika Anda membuat kesalahan sintaksis, Anda akan diminta untuk mengedit ulang konfigurasi untuk memperbaikinya.
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.
Azure AD
Ini adalah konfigurasi default untuk menyiapkan GKE Identity Service dengan Azure AD. Dengan konfigurasi ini, Layanan Identitas GKE dapat memperoleh informasi keanggotaan pengguna dan grup dari Azure AD, 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 Azure AD (Lanjutan).
...
spec:
authentication:
- name: oidc-azuread
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
# Rest of the resource is managed by Google. DO NOT MODIFY.
...
Ganti kode berikut:
- CLIENT_ID: ID klien yang ditampilkan saat mendaftarkan GKE Identity Service dengan penyedia Anda.
- CLIENT_SECRET: Rahasia bersama antara aplikasi klien OIDC dan penyedia OIDC.
- TENANT: Jenis akun Azure AD 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 Azure AD dan nama domain utama.
- PORT: Nomor port yang dipilih untuk URL pengalihan yang digunakan oleh gcloud CLI, yang ditentukan oleh admin platform Anda saat pendaftaran.
Azure AD (Tingkat Lanjut)
Konfigurasi opsional untuk Azure AD ini memungkinkan GKE Identity Service 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 Azure AD.
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 Azure AD.
Semua kolom dalam konfigurasi contoh berikut bersifat wajib.
...
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
# Rest of the resource is managed by Google. DO NOT MODIFY.
...
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 berlaku. 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 yang ditampilkan saat mendaftarkan GKE Identity Service dengan penyedia Anda.
- CLIENT_SECRET: Rahasia bersama antara aplikasi klien OIDC dan penyedia OIDC.
- TENANT: Jenis akun Azure AD 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 Azure AD dan nama domain utama.
- PORT: Nomor port yang dipilih untuk URL pengalihan yang digunakan oleh gcloud CLI, yang ditentukan oleh admin platform Anda saat pendaftaran.
- GROUP_FORMAT: Format yang Anda inginkan untuk mengambil informasi grup. Kolom ini dapat mengambil nilai yang sesuai dengan
ID
atauNAME
grup pengguna. Perhatikan bahwa setelan ini saat 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, Layanan Identitas GKE akan menggunakan nilai dalam urutan "email", "preferred_username", atau "sub" untuk mengambil detail pengguna. Atribut ini dapat digunakan mulai dari GKE Enterprise versi 1.28.
Okta
Berikut cara menyiapkan autentikasi menggunakan pengguna dan grup dengan Okta sebagai penyedia identitas Anda. Konfigurasi ini memungkinkan Anthos Identity Service mengambil klaim pengguna dan grup menggunakan token akses dan endpoint userinfo Okta.
...
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
# Rest of the resource is managed by Google. DO NOT MODIFY.
...
Batas akses grup
Untuk pengguna Okta, Anthos Identity Service 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.