Pelajari cara mengonfigurasi GKE di AWS untuk menggunakan OpenID Connect (OIDC) untuk autentikasi ke cluster pengguna. Topik ini membahas proses untuk mengonfigurasi GKE di AWS dengan penyedia OpenID apa pun.
Untuk mengupgrade cluster yang menggunakan autentikasi OIDC ke Kubernetes 1.21, lihat Upgrade ke 1.21.
Untuk ringkasan alur autentikasi GKE di AWS, lihat Autentikasi.
Ringkasan
GKE di AWS mendukung OIDC sebagai salah satu mekanisme autentikasi untuk berinteraksi dengan server Kubernetes API cluster pengguna. Dengan OIDC, Anda dapat mengelola akses ke cluster Kubernetes menggunakan prosedur standar di organisasi Anda untuk membuat, mengaktifkan, dan menonaktifkan akun pengguna.
Sebelum memulai
Topik ini mengasumsikan bahwa Anda sudah memahami konsep autentikasi dan OpenID berikut:
Google Cloud CLI harus diinstal di setiap mesin lokal developer.
Sistem headless tidak didukung. Untuk melakukan autentikasi, Anda harus membuka browser di mesin lokal yang menjalankan gcloud CLI. Kemudian, browser akan meminta Anda untuk memberikan otorisasi ke akun pengguna Anda.
Untuk melakukan autentikasi melalui konsol Google Cloud , setiap cluster yang ingin Anda konfigurasi untuk autentikasi OIDC harus didaftarkan ke Google Cloud.
Persona
Topik ini mengacu pada tiga persona:
Administrator organisasi: Orang ini memilih penyedia OpenID dan mendaftarkan aplikasi klien dengan penyedia.
Administrator cluster: Orang ini membuat satu atau beberapa cluster pengguna dan membuat file konfigurasi autentikasi untuk developer yang menggunakan cluster tersebut.
Developer: Orang ini menjalankan workload di satu atau beberapa cluster dan menggunakan OIDC untuk melakukan autentikasi.
Pilih penyedia OpenID
Bagian ini ditujukan untuk administrator organisasi.
Anda dapat menggunakan penyedia OpenID pilihan Anda. Untuk mengetahui daftar penyedia tersertifikasi, lihat Sertifikasi OpenID.
Membuat URL pengalihan
Bagian ini ditujukan untuk administrator organisasi.
Penyedia OpenID menggunakan URL pengalihan untuk menampilkan token ID. Anda harus membuat URL pengalihan untuk gcloud CLI dan konsolGoogle Cloud .
Menetapkan URL pengalihan gcloud CLI
Saat mengonfigurasi penyedia OpenID, tentukan URL pengalihan CLI Anda sebagai
http://localhost:PORT/callback
Ganti PORT dengan nomor port Anda yang lebih besar dari 1024.
Menetapkan Google Cloud URL pengalihan konsol
URL pengalihan untuk konsol Google Cloud adalah:
https://console.cloud.google.com/kubernetes/oidc
Saat mengonfigurasi penyedia OIDC, tentukan
https://console.cloud.google.com/kubernetes/oidc
sebagai salah satu URL pengalihan Anda.
Mendaftarkan aplikasi klien Anda ke penyedia OpenID
Bagian ini ditujukan untuk administrator organisasi.
Sebelum developer Anda dapat menggunakan Google Cloud CLI atau Google Cloud konsol dengan penyedia OpenID Anda, Anda harus mendaftarkan kedua klien tersebut ke penyedia OpenID. Pendaftaran mencakup langkah-langkah berikut:
Pelajari URI penerbit penyedia Anda. gcloud CLI atau konsolGoogle Cloud mengirim permintaan autentikasi ke URI ini.
Konfigurasi penyedia Anda dengan URL pengalihan, termasuk nomor port Anda, untuk gcloud CLI.
Konfigurasi penyedia Anda dengan URL pengalihan untuk konsol Google Cloud ,
https://console.cloud.google.com/kubernetes/oidc
.Buat satu client ID yang digunakan penyedia Anda untuk mengidentifikasi Google Cloud CLI dan konsolGoogle Cloud .
Buat satu secret klien yang digunakan gcloud CLI dan konsol Google Cloud untuk mengautentikasi penyedia OpenID.
Buat cakupan kustom yang dapat digunakan oleh gcloud CLI atau konsol untuk meminta grup keamanan pengguna. Google Cloud
Buat nama klaim kustom yang digunakan penyedia untuk menampilkan grup keamanan pengguna.
Konfigurasi cluster Anda
Bagian ini ditujukan bagi administrator cluster.
Untuk mengonfigurasi autentikasi OIDC, Anda harus mengonfigurasi resource AWSCluster cluster pengguna dengan detail autentikasi untuk cluster. Detail dari AWSCluster digunakan untuk mengonfigurasi OIDC untuk Google Cloud konsol dan Plugin Autentikasi untuk GKE Enterprise. Konfigurasi ini mencakup informasi OIDC berikut:
authentication: awsIAM: adminIdentityARNs: - AWS_IAM_ARN oidc: - certificateAuthorityData: CERTIFICATE_STRING clientID: CLIENT_ID clientSecret: CLIENT_SECRET extraParams: EXTRA_PARAMS groupsClaim: GROUPS_CLAIM groupPrefix: GROUP_PREFIX issuerURI: ISSUER_URI kubectlRedirectURI: KUBECTL_REDIRECT_URI scopes: SCOPES userClaim: USER_CLAIM userPrefix: USER_PREFIX
Kolom autentikasi
Tabel berikut menjelaskan kolom objek
authentication.awsIAM.adminIdentityARNs
.
Kolom | Diperlukan | Deskripsi | Format |
---|---|---|---|
adminIdentityARNs | Ya, jika mengonfigurasi OIDC. | Amazon Resource Name (ARN) identitas IAM AWS (pengguna atau peran) yang diberi akses administrator cluster oleh GKE di AWS.
Contoh: arn:aws:iam::123456789012:group/Developers |
String |
Kolom | Diperlukan | Deskripsi | Format |
---|---|---|---|
certificateAuthorityData | Tidak |
Sertifikat berenkode PEM berenkode base64 untuk penyedia OIDC. Untuk membuat string,
enkode sertifikat, termasuk header, ke dalam base64. Sertakan string
yang dihasilkan di certificateAuthorityData sebagai satu baris. Contoh:
certificateAuthorityData: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tC...k1JSUN2RENDQWFT== |
String |
clientID | Ya | ID untuk aplikasi klien yang membuat permintaan autentikasi ke penyedia OpenID. | String |
clientSecret | Tidak | Rahasia bersama antara aplikasi klien OIDC dan penyedia OIDC. | String |
extraParams | Tidak |
Parameter nilai kunci tambahan yang akan dikirim ke penyedia OpenID. Jika Anda
memberikan otorisasi ke grup, teruskan resource=token-groups-claim .
Jika server otorisasi Anda meminta izin, untuk autentikasi dengan
Microsoft Azure dan Okta, tetapkan |
Daftar yang dipisahkan koma |
groupsClaim | Tidak | Klaim JWT yang digunakan penyedia untuk menampilkan grup keamanan Anda. | String |
groupPrefix | Tidak | Awalan ditambahkan ke klaim grup untuk mencegah konflik dengan nama yang sudah ada.
Misalnya, jika Anda memiliki dua grup bernama foobar , tambahkan awalan
gid- , grup hasilnya adalah gid-foobar . |
String |
issuerURI | Ya | URL tempat permintaan otorisasi dikirim ke OpenID Anda, seperti
https://example.com/adfs . Server Kubernetes API menggunakan URL ini
untuk menemukan kunci publik agar dapat memverifikasi token. URI harus menggunakan HTTPS. |
URL String |
kubectlRedirectURI | Ya | URL pengalihan yang digunakan `kubectl` untuk otorisasi. | URL String |
cakupan | Ya | Cakupan tambahan yang akan dikirim ke penyedia OpenID. Microsoft Azure dan Okta
memerlukan cakupan offline_access . |
Daftar yang dipisahkan koma |
userClaim | Tidak | Klaim JWT yang akan digunakan sebagai nama pengguna. Anda dapat memilih klaim lain, seperti email atau nama, bergantung pada penyedia OpenID. Namun, klaim selain email diberi awalan URL penerbit untuk mencegah bentrokan penamaan. | String |
userPrefix | Tidak | Awalan ditambahkan ke klaim nama pengguna untuk mencegah konflik dengan nama yang sudah ada. | String |
Contoh: Memberikan otorisasi kepada pengguna dan grup
Banyak penyedia mengenkode properti yang mengidentifikasi pengguna, seperti email dan ID pengguna, dalam token. Namun, properti ini memiliki risiko implisit untuk kebijakan autentikasi:
- ID pengguna dapat membuat kebijakan sulit dibaca dan diaudit.
- Penggunaan alamat email dapat menimbulkan risiko ketersediaan (jika pengguna mengubah email utamanya) dan risiko keamanan (jika email dapat ditetapkan ulang).
Daripada menetapkan ID pengguna, sebaiknya gunakan kebijakan grup, yang dapat bersifat persisten dan lebih mudah diaudit.
Misalkan penyedia Anda membuat token identitas yang menyertakan kolom berikut:
{ 'iss': 'https://server.example.com' 'sub': 'u98523-4509823' 'groupList': ['developers@example.corp', 'us-east1-cluster-admins@example.corp'] ... }
Dengan format token ini, Anda akan mengisi spesifikasi
oidc
file konfigurasi Anda seperti berikut:
issuerURL: 'https://server.example.com' username: 'sub' usernamePrefix: 'uid-' group: 'groupList' groupPrefix: 'gid-' extraParams: 'resource=token-groups-claim' ...
Setelah membuat cluster pengguna, Anda menggunakan kontrol akses berbasis peran (RBAC) Kubernetes untuk memberikan akses istimewa kepada pengguna terautentikasi.
Dalam contoh berikut, Anda membuat ClusterRole
yang memberikan akses hanya baca kepada penggunanya ke Secret cluster, dan membuat resource ClusterRoleBinding
untuk mengikat peran ke grup yang diautentikasi.
Tentukan
ClusterRole
. Salin YAML berikut ke dalam file bernamasecret-reader-role.yaml
.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: secret-reader rules: - apiGroups: [""] # The resource type for which access is granted resources: ["secrets"] # The permissions granted by the ClusterRole verbs: ["get", "watch", "list"]
Tentukan
ClusterRoleBinding
. Salin YAML berikut ke dalam file bernamasecret-reader-admins.yaml
.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: read-secrets-admins subjects: # Allows anyone in the "us-east1-cluster-admins" group to # read Secrets in any namespace within this cluster. - kind: Group name: gid-us-east1-cluster-admins # Name is case sensitive apiGroup: rbac.authorization.k8s.io # Allows this specific user to read Secrets in any # namespace within this cluster - kind: User name: uid-u98523-4509823 apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: secret-reader apiGroup: rbac.authorization.k8s.io
Terapkan
secret-reader-role.yaml
dansecret-reader-admins.yaml
ke cluster Anda dengankubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f secret-reader-role.yaml && \ kubectl apply -f secret-reader-admins.yaml
Pengguna yang diberi akses di
read-secrets-admins
kini memiliki akses untuk membaca Secret di cluster Anda.
Membuat konfigurasi login
Bagian ini ditujukan bagi administrator cluster.
Setelah membuat cluster pengguna, Anda perlu membuat file konfigurasi untuk cluster menggunakan gcloud anthos create-login-config
.
Dari direktori
anthos-aws
, gunakananthos-gke
untuk beralih konteks ke cluster pengguna Anda. Ganti CLUSTER_NAME dengan nama cluster pengguna Anda.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Buat konfigurasi dengan
gcloud anthos
.gcloud anthos create-login-config --kubeconfig usercluster-kubeconfig
Ganti usercluster-kubeconfig dengan jalur ke file
kubeconfig
cluster pengguna Anda. Di Linux dan macOS, secara default file ini berada di~/.kube/config
.
Perintah ini menghasilkan file (kubectl-anthos-config.yaml
) yang berisi informasi konfigurasi yang digunakan developer Anda untuk melakukan autentikasi ke cluster dengan gcloud CLI. Anda tidak boleh mengubah file ini.
Untuk memahami lebih lanjut konten kubectl-anthos-config.yaml
, lihat
lampiran.
Mendistribusikan konfigurasi login
Mendistribusikan file konfigurasi kepada pengguna yang perlu mengautentikasi ke cluster pengguna Anda. Anda dapat mendistribusikan konfigurasi dengan:
- Menempatkan file di direktori default.
- Mendistribusikan file dengan aman.
- Menghosting file di server HTTPS.
Direktori default konfigurasi login
Lokasi default untuk menyimpan file konfigurasi untuk setiap OS adalah sebagai berikut:
- Linux
$HOME/.config/google/anthos/kubectl-anthos-config.yaml
, dengan$HOME
adalah direktori beranda pengguna.- macOS
$HOME/Library/Preferences/google/anthos/kubectl-anthos-config.yaml
, dengan$HOME
adalah direktori utama pengguna.- Windows
%APPDATA%/google/anthos/kubectl-anthos-config.yaml
, dengan%APPDATA%
adalah direktori data aplikasi pengguna.
Setelah konfigurasi login didistribusikan, developer Anda siap mengonfigurasi gcloud CLI untuk mengakses cluster.
Memodifikasi cluster setelah mengupgrade ke Kubernetes 1.21
Setelah mengupgrade cluster ke Kubernetes 1.21, Anda perlu mengonfigurasi GKE Identity Service dan menghapus informasi OIDC dari konfigurasi cluster. Untuk memperbarui konfigurasi, lakukan langkah-langkah berikut:
Ikuti langkah-langkah di Mengupgrade cluster Anda.
Dari direktori
anthos-aws
, gunakananthos-gke
untuk beralih konteks ke cluster pengguna Anda. Ganti CLUSTER_NAME dengan nama cluster pengguna Anda.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Buka manifes yang berisi AWSCluster di editor teks. Biarkan file tetap terbuka dan gunakan nilai objek
oidc
untuk mengikuti langkah-langkah di Mengonfigurasi cluster untuk GKE Identity Service.Dari direktori
anthos-aws
, gunakananthos-gke
untuk mengganti konteks ke layanan pengelolaan Anda.cd anthos-aws anthos-gke aws management get-credentials
Buka file YAML yang membuat AWSCluster Anda di editor teks. Jika tidak memiliki file YAML awal, Anda dapat menggunakan
kubectl edit
.Edit YAML
Jika Anda mengikuti petunjuk di Membuat cluster pengguna, file YAML Anda akan diberi nama
cluster-0.yaml
. Buka file ini di editor teks.kubectl edit
Untuk menggunakan
kubectl edit
guna mengedit AWSCluster, jalankan perintah berikut:env HTTPS_PROXY=http://localhost:8118 \ kubectl edit awscluster cluster-name
Ganti cluster-name dengan AWSCluster Anda. Misalnya, untuk mengedit cluster default,
cluster-0
, jalankan perintah berikut:env HTTPS_PROXY=http://localhost:8118 \ kubectl edit awscluster cluster-0
Hapus objek
oidc
dari manifes cluster Anda.Simpan file. Jika Anda menggunakan
kubectl edit
,kubectl
akan menerapkan perubahan secara otomatis. Jika Anda mengedit file YAML, terapkan ke layanan pengelolaan dengan perintah berikut:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f cluster-0.yaml
Layanan pengelolaan kemudian memperbarui AWSCluster Anda.
Mengonfigurasi gcloud untuk mengakses cluster Anda
Bagian ini ditujukan untuk developer atau administrator cluster.
Prasyarat
Untuk menyelesaikan bagian ini, Anda harus menyelesaikan hal berikut:
- Konfigurasi login.
Versi gcloud CLI yang telah diupdate dengan komponen
anthos-auth
.gcloud components update gcloud components install anthos-auth
Pastikan gcloud CLI berhasil diinstal dengan menjalankan perintah berikut, yang akan merespons dengan memberikan detail tentang argumen yang diperlukan dan opsi yang tersedia.
gcloud anthos auth
Lakukan autentikasi ke cluster Anda
Anda dapat melakukan autentikasi ke cluster dengan cara berikut:
- Dengan gcloud CLI di komputer lokal Anda.
- Dengan gcloud CLI di komputer jarak jauh menggunakan tunnel SSH.
Dengan Connect di konsol Google Cloud .
gcloud local
Gunakan gcloud anthos auth login
untuk melakukan autentikasi ke cluster dengan konfigurasi login Anda.
Jika Anda menempatkan konfigurasi login di lokasi default dan telah mengonfigurasi nama cluster, Anda dapat menggunakan gcloud anthos auth login
tanpa opsi. Anda juga dapat mengonfigurasi cluster, pengguna, dan detail autentikasi lainnya dengan parameter opsional.
Default
gcloud anthos auth login --cluster CLUSTER_NAME
Ganti CLUSTER_NAME dengan nama cluster yang sepenuhnya memenuhi syarat. Misalnya,
projects/my-gcp-project/locations/global/memberships/cluster-0-0123456a
.
Parameter opsional
gcloud anthos auth login
mendukung parameter opsional berikut:
gcloud anthos auth login --cluster CLUSTER_NAME \
--user USERNAME --login-config ANTHOS_CONFIG_YAML \
--login-config-cert LOGIN_CONFIG_CERT_PEM \
--kubeconfig=KUBECONFIG --dry-run
Parameter dijelaskan dalam tabel berikut.
Parameter | Deskripsi |
---|---|
cluster | Nama cluster yang akan diautentikasi. Secara default, cluster di `kubectl-anthos-config.yaml`. |
user | Nama pengguna untuk kredensial di kubeconfig . Nilai defaultnya adalah
{cluster-name}-anthos-default-user . |
login-config | Jalur ke file konfigurasi yang dibuat oleh admin cluster untuk developer atau URL yang menghosting file. Nilai defaultnya adalah
kubectl-anthos-config.yaml . |
login-config-cert | Jika menggunakan URL untuk login-config, jalur ke file sertifikat CA untuk membuat koneksi HTTPS. |
kubeconfig | Jalur ke file kubeconfig yang berisi token. Nilai defaultnya adalah
$HOME/.kube/config` . |
uji coba | Uji opsi command line Anda tanpa mengubah konfigurasi atau cluster. |
Perintah gcloud anthos login
meluncurkan browser yang meminta pengguna untuk
login dengan kredensial perusahaan mereka, melakukan pertukaran kredensial
OIDC, dan mendapatkan token yang relevan. Kemudian, gcloud CLI
menulis token ke file kubeconfig
. kubectl
menggunakan file ini untuk
melakukan autentikasi ke cluster pengguna.
Untuk memverifikasi bahwa autentikasi berhasil, jalankan perintah kubectl
dengan
file kubeconfig
Anda:
env HTTPS_PROXY=http://localhost:8118 \
kubectl get nodes --kubeconfig my.kubeconfig
gcloud tunnel
Jika ingin melakukan autentikasi ke cluster pengguna dari komputer jarak jauh, Anda dapat melakukan autentikasi menggunakan tunnel SSH. Untuk menggunakan tunnel, file konfigurasi autentikasi Anda harus berada di komputer jarak jauh, dan Anda harus dapat menjangkau penyedia Open ID dari komputer lokal Anda.
Di komputer lokal, jalankan perintah berikut:
ssh USERNAME@REMOTE_MACHINE -L LOCAL_PORT:localhost:REMOTE_PORT
Ganti kode berikut:
USERNAME dengan pengguna yang memiliki akses SSH ke komputer jarak jauh.
REMOTE_MACHINE dengan nama host atau alamat IP komputer jarak jauh.
LOCAL_PORT adalah port yang tersedia di komputer lokal Anda yang digunakan
ssh
untuk membuat tunnel ke komputer jarak jauh.REMOTE_PORT adalah port yang Anda konfigurasi untuk URL pengalihan OIDC. Nomor port adalah bagian dari kolom
kubectlRedirectURI
di file konfigurasi autentikasi Anda.
Di shell SSH, jalankan perintah berikut untuk memulai autentikasi:
gcloud anthos auth login --login-config AUTH_CONFIG_FILE
Ganti AUTH_CONFIG_FILE dengan jalur file konfigurasi autentikasi Anda di mesin jarak jauh. gcloud CLI menjalankan server web di komputer jarak jauh.
Di komputer lokal Anda, di browser, buka http://localhost:LOCAL_PORT/login dan ikuti alur login OIDC.
File kubeconfig
di komputer jarak jauh Anda kini memiliki token untuk mengakses
cluster pengguna.
Di shell SSH, pastikan Anda memiliki akses ke cluster pengguna:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes
Konsol
Anda dapat melakukan autentikasi dengan Google Cloud konsol, memulai alur autentikasi dari halaman cluster Kubernetes di konsol Google Cloud :
-
Buka konsol Google Cloud :
-
Cari cluster GKE di AWS Anda dalam daftar, lalu klik Login.
-
Pilih Authenticate with the Identity Provider configured for the cluster, lalu klik LOGIN.
Anda akan dialihkan ke penyedia identitas Anda, tempat Anda mungkin perlu login atau memberikan izin kepada konsol untuk mengakses akun Anda. Google Cloud Kemudian, Anda akan dialihkan kembali ke halaman Kubernetes clusters di konsol Google Cloud .
Memperbarui konfigurasi OIDC
Untuk memperbarui konfigurasi OIDC di cluster Anda, gunakan perintah kubectl edit
.
env HTTPS_PROXY=http://localhost:8118 \
kubectl edit clientconfigs -n kube-public default
Alat kubectl
memuat resource ClientConfig di editor default Anda. Untuk
memperbarui konfigurasi, simpan file. Alat kubectl
memperbarui resource ClientConfig di cluster Anda.
Untuk mengetahui informasi tentang isi resource ClientConfig, lihat bagian berikut.
Lampiran: Contoh konfigurasi login
Contoh kubectl-anthos-config.yaml
berikut. Contoh ini disertakan untuk
memahami isinya. Anda harus selalu membuat file dengan
gcloud anthos create-login-config
.
apiVersion: authentication.gke.io/v2alpha1 kind: ClientConfig metadata: name: default namespace: kube-public spec: authentication: - name: oidc oidc: clientID: CLIENT_CONFIG clientSecret: CLIENT_SECRET extraParams: resource=k8s-group-claim,domain_hint=consumers certificateAuthorityData: CERTIFICATE_STRING issuerURI: https://adfs.contoso.com/adfs kubectlRedirectURI: http://redirect.kubectl.com/ scopes: allatclaim,group userClaim: "sub" groupsClaim: "groups" proxy: PROXY_URL #Optional certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA name: projects/my-project/locations/global/membership/cluster-0 server: https://192.168.0.1:PORT preferredAuthentication: oidc
Untuk penjelasan konten kolom, lihat Kolom autentikasi.
Langkah berikutnya
Deploy workload pertama Anda ke GKE di AWS.