Autentikasi menggunakan token pemilik
Halaman ini menjelaskan cara menyiapkan autentikasi menggunakan token pemilik untuk login ke cluster terdaftar di luar Google Cloud. Setelah pengaturan, administrator cluster akan dapat login ke cluster dari Konsol Google Cloud. Berbagai jenis token pembawa, seperti yang dijelaskan dalam Kubernetes Authentication, didukung. Metode termudah adalah membuat akun layanan Kubernetes (KSA) di cluster, dan menggunakan token pembawanya untuk login.
Metode autentikasi lainnya
Sebagai alternatif untuk menyiapkan otentikasi menggunakan token pemilik, Anda dapat mengatur salah satu metode otentikasi berikut, tergantung pada kebutuhan organisasi Anda:
Identitas Google, yang memungkinkan pengguna login menggunakan Google Cloud Identity mereka. Gunakan ini jika pengguna sudah memiliki akses ke Google Cloud dengan Identitas.
Jika cluster dikonfigurasi untuk menggunakan penyedia identitas OIDC, Anda dapat menggunakan ini untuk melakukan autentikasi ke cluster dari Konsol Google Cloud. Anda dapat cari tahu cara menyiapkan OIDC untuk cluster GKE dalam panduan berikut:
- Konfigurasikan cluster untuk GKE Identity Service dengan OIDC. Panduan ini menunjukkan cara menyiapkan autentikasi OIDC pada cluster dengan cluster berdasarkan semua jenis cluster GKE.
- Menyiapkan GKE Identity Service untuk fleet. Opsi ini memungkinkan Anda menyiapkan OIDC di tingkat fleet untuk cluster yang didukung jenis. Penyiapan level fleet didukung untuk cluster GKE di Google Cloud, semua jenis cluster GKE, dan cluster yang terpasang di EKS di AWS.
Jika metode autentikasi yang disediakan Google ini tidak sesuai untuk Anda organisasi Anda, ikuti petunjuk pada halaman ini untuk menyiapkan autentikasi menggunakan token pemilik.
Memberikan peran IAM untuk akses melalui konsol Google Cloud
Pengguna yang ingin melihat cluster yang terhubung menggunakan konsol Google Cloud memerlukan peran IAM berikut minimal:
roles/container.viewer
. Peran ini memungkinkan pengguna melihat penampung resource di Konsol Google Cloud, termasuk GKE Halaman cluster.. Untuk detail tentang izin yang disertakan dalam peran ini, lihat Peran Kubernetes Engine dokumentasi IAM.roles/gkehub.viewer
. Peran ini memungkinkan pengguna melihat cluster di luar Google Cloud di Konsol Google Cloud. Pengguna tidak memerlukan peran ini jika fleet Anda tidak menyertakan cluster di luar Google Cloud. Untuk mengetahui detail tentang izin yang disertakan dalam peran ini, lihat Peran GKE Hub di dokumentasi IAM.
Jalankan perintah berikut untuk memberikan peran ini:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/container.viewer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/gkehub.viewer
Ganti kode berikut:
PROJECT_ID
: project ID host fleet proyek.EMAIL_ADDRESS
: alamat email yang terkait dengan akun Google Cloud milik pengguna.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran IAM, lihat Mengelola akses ke project, folder, dan organisasi dokumentasi IAM.
Mengonfigurasi kontrol akses berbasis peran
Akses ke cluster dikontrol menggunakan role-based access control (RBAC) Kubernetes.
Sebaiknya Anda atau administrator cluster membuat KSA untuk setiap pengguna yang harus login ke cluster. Menggunakan token pembawa seperti menggunakan {i>password<i}, jadi setiap pengguna harus memiliki akun mereka sendiri. Login dengan token pemilik KSA menyebabkan semua operasi dijalankan sebagai KSA, dibatasi oleh peran RBAC yang diselenggarakan oleh KSA.
KSA harus memiliki minimal peran RBAC berikut di cluster untuk mengaksesnya melalui konsol:
Membuat dan menerapkan peran RBAC cloud-console-reader
Pengguna yang telah diautentikasi yang ingin mengakses resource cluster di Konsol Google Cloud
harus memiliki izin Kubernetes yang relevan untuk melakukannya. Jika tidak ingin memberikan izin yang lebih luas kepada pengguna tersebut, seperti admin cluster, Anda dapat membuat peran RBAC kustom yang menyertakan izin minimum untuk melihat node, volume persisten, pod, dan kelas penyimpanan cluster. Anda dapat mendefinisikan rangkaian
izin dengan membuat resource ClusterRole
RBAC,
cloud-console-reader
, di cluster.
cloud-console-reader
memberikan get
, list
, dan watch
kepada penggunanya
izin pada node cluster, volume persisten, pod, dan kelas penyimpanan,
yang memungkinkan mereka melihat
detail tentang sumber daya ini.
kubectl
Untuk membuat cloud-console-reader
ClusterRole
dan menerapkannya ke cluster, jalankan metode
perintah berikut:
cat <<EOF > cloud-console-reader.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cloud-console-reader
rules:
- apiGroups: [""]
resources: ["nodes", "persistentvolumes", "pods"]
verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
EOF
kubectl apply -f cloud-console-reader.yaml
Anda kemudian dapat memberikan peran ini kepada KSA seperti yang dijelaskan di bagian berikutnya.
Membuat dan memberi otorisasi KSA
kubectl
Untuk membuat KSA dan mengikat izinnya, ikuti langkah-langkah berikut:
Buat resource KSA dan
ClusterRoleBinding
untuk mengikatview
dancloud-console-reader
Kubernetes RBACClusterRoles
ke KSA:KSA_NAME=KSA_NAME kubectl create serviceaccount ${KSA_NAME} kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${KSA_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${KSA_NAME}
Ganti kode berikut:
KSA_NAME
: nama yang Anda pilih untuk KSAVIEW_BINDING_NAME
: nama yang Anda pilih untukview
ReferensiClusterRoleBinding
; Anda dapat menamainya apa saja, tetapi Anda mungkin akan lebih mudah untuk menamainya dengan nama KSACLOUD_CONSOLE_READER_BINDING_NAME
: nama yang Anda pilih untuk resourcecloud-console-reader
ClusterRoleBinding
; Anda juga bisa beri nama apa pun yang kamu mau
Bergantung pada akses yang harus dimiliki akun layanan, ikatkan ke KSA. Untuk mengetahui opsi, lihat peran default Kubernetes.
Misalnya, jika Anda ingin men-deploy aplikasi Kubernetes dari Cloud Marketplace, ikat peran
cluster-admin
ke KSA:kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:KSA_NAME
Ganti
BINDING_NAME
dengan nama peran cluster untuk akun layanan.
Izinkan akun lain
kubectl
Untuk setiap pengguna atau akun layanan lain
yang mendapatkan akses ke cluster,
membuat resource ClusterRoleBinding
untuk mengikat view
dan
cloud-console-reader
peran ke akun mereka:
Ikat
view
dancloud-console-reader
ClusterRoles
:ACCOUNT_NAME=ACCOUNT_NAME kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${ACCOUNT_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${ACCOUNT_NAME}
Ganti kode berikut:
ACCOUNT_NAME
: akun layanan KubernetesVIEW_BINDING_NAME
: nama yang Anda pilih untukview
ClusterRoleBinding
resource; Anda dapat menamainya apa saja yang Anda inginkan, tetapi mungkin akan lebih mudah untuk menamainya dengan nama pengguna atau akun layananCLOUD_CONSOLE_READER_BINDING_NAME
: nama yang Anda pilih untuk resourceview
ClusterRoleBinding
; Anda juga dapat menamai ini apa pun yang kamu mau
Mengikat peran tambahan, bergantung pada akses yang seharusnya dimiliki akun miliki. Untuk mengetahui opsi, lihat peran default Kubernetes.
Misalnya, untuk mengikat peran
cluster-admin
, jalankan perintah berikut:kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:ACCOUNT_NAME
Ganti
BINDING_NAME
dengan nama peran cluster untuk akun layanan.
Mendapatkan token pemilik KSA
kubectl
Untuk mendapatkan token pemilik KSA, jalankan perintah berikut:
SECRET_NAME=KSA_NAME-token kubectl apply -f - << __EOF__ apiVersion: v1 kind: Secret metadata: name: "${SECRET_NAME}" annotations: kubernetes.io/service-account.name: "${KSA_NAME}" type: kubernetes.io/service-account-token __EOF__ until [[ $(kubectl get -o=jsonpath="{.data.token}" "secret/${SECRET_NAME}") ]]; do echo "waiting for token..." >&2; sleep 1; done kubectl get secret ${SECRET_NAME} -o jsonpath='{$.data.token}' | base64 --decode
Ganti KSA_NAME
dengan nama yang Anda pilih untuk KSA.
Dari output perintah ini, salin token dan simpan agar pengguna dapat menggunakan token ini untuk login ke Konsol Google Cloud.