Mengautentikasi menggunakan token pemilik

Halaman ini menjelaskan cara menyiapkan autentikasi menggunakan token pemilik untuk login ke cluster terdaftar di luar Google Cloud. Setelah penyiapan, administrator cluster dapat login ke cluster dari konsol Google Cloud. Berbagai jenis token pemilik, seperti yang dijelaskan dalam Autentikasi Kubernetes, yang didukung. Metode termudah adalah membuat akun layanan Kubernetes (KSA) di cluster, dan menggunakan token pemilik untuk login.

Metode autentikasi lainnya

Sebagai alternatif untuk menyiapkan autentikasi menggunakan token pemilik, Anda dapat menyiapkan salah satu metode autentikasi berikut sesuai kebutuhan organisasi Anda:

  • Google Identity, yang memungkinkan pengguna login menggunakan Google Cloud Identity. Gunakan opsi ini jika pengguna sudah memiliki akses ke Google Cloud dengan Identitas Google.

  • Jika cluster dikonfigurasi untuk menggunakan penyedia identitas OIDC, Anda dapat menggunakannya untuk melakukan autentikasi ke cluster dari Konsol Google Cloud. Anda dapat mengetahui cara menyiapkan OIDC untuk cluster GKE dalam panduan berikut:

Jika metode autentikasi yang disediakan Google ini tidak cocok untuk organisasi Anda, ikuti petunjuk di halaman ini untuk menyiapkan autentikasi menggunakan token pemilik.

Memberikan peran IAM untuk akses melalui Konsol Google Cloud

Pengguna yang ingin melihat cluster terhubung menggunakan Google Cloud Console memerlukan peran IAM berikut minimal:

  • roles/container.viewer. Peran ini memungkinkan pengguna melihat resource container di Konsol Google Cloud, termasuk halaman GKE Clusters. Untuk mengetahui detail tentang izin yang disertakan dalam peran ini, baca peran Kubernetes Engine dalam 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 mencakup cluster di luar Google Cloud. Untuk mengetahui detail tentang izin yang tercakup dalam peran ini, lihat peran GKE Hub dalam 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 project host fleet.

  • EMAIL_ADDRESS: alamat email yang terkait dengan akun Google Cloud pengguna.

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran IAM, baca artikel Mengelola akses ke project, folder, dan organisasi dalam 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 login ke cluster. Menggunakan token pemilik sama seperti menggunakan sandi, jadi setiap pengguna harus memiliki akunnya sendiri. Login dengan token pemilik KSA akan menyebabkan semua operasi dijalankan sebagai KSA, yang dibatasi oleh peran RBAC yang dipegang oleh KSA.

KSA harus memiliki setidaknya peran RBAC berikut dalam cluster untuk mengaksesnya melalui konsol:

Membuat dan menerapkan peran RBAC cloud-console-reader

Pengguna terautentikasi 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 izin admin cluster, Anda dapat membuat peran RBAC kustom yang mencakup izin minimum untuk melihat node, volume persisten, pod, dan kelas penyimpanan cluster. Anda dapat menentukan kumpulan izin ini dengan membuat resource RBAC ClusterRole, cloud-console-reader, dalam cluster.

cloud-console-reader memberikan izin get, list, dan watch kepada penggunanya di node cluster, volume persisten, pod, dan kelas penyimpanan, yang memungkinkan mereka melihat detail tentang resource ini.

kubectl

Untuk membuat cloud-console-reader ClusterRole dan menerapkannya ke cluster, jalankan 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

Kemudian, Anda dapat memberikan peran ini kepada KSA seperti yang dijelaskan di bagian berikutnya.

Buat dan otorisasi KSA

kubectl

Untuk membuat KSA dan mengikat izin ke sana, ikuti langkah-langkah berikut:

  1. Buat resource KSA dan ClusterRoleBinding untuk mengikat view dan cloud-console-reader Kubernetes RBAC ClusterRoles 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 KSA
    • VIEW_BINDING_NAME: nama yang Anda pilih untuk resource view ClusterRoleBinding; Anda dapat menamainya apa pun yang Anda inginkan, tetapi mungkin akan lebih mudah untuk menamainya setelah KSA
    • CLOUD_CONSOLE_READER_BINDING_NAME: nama yang Anda pilih untuk resource cloud-console-reader ClusterRoleBinding; Anda juga dapat memberi nama ini sesuai keinginan
  2. Bergantung pada akses yang harus dimiliki akun layanan, ikat peran tambahan ke KSA. Untuk mengetahui opsinya, lihat peran default Kubernetes.

    Misalnya, jika Anda ingin men-deploy aplikasi Kubernetes dari Cloud Marketplace, ikat peran cluster-admin dengan KSA:

    kubectl create clusterrolebinding BINDING_NAME \
       --clusterrole cluster-admin --serviceaccount default:KSA_NAME
    

    Ganti BINDING_NAME dengan nama binding peran cluster untuk akun layanan.

Mengizinkan akun lain

kubectl

Untuk setiap pengguna atau akun layanan lain yang mendapatkan akses ke cluster, buat resource ClusterRoleBinding untuk mengikat peran view dan cloud-console-reader ke akunnya:

  1. Ikat view dan cloud-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 Kubernetes
    • VIEW_BINDING_NAME: nama yang Anda pilih untuk resource ClusterRoleBinding view; Anda bisa menamainya apa pun yang Anda inginkan, tetapi mungkin akan lebih mudah untuk menamainya setelah pengguna atau akun layanan
    • CLOUD_CONSOLE_READER_BINDING_NAME: nama yang Anda pilih untuk resource view ClusterRoleBinding; Anda juga dapat menamai ini apa pun yang Anda inginkan
  2. Ikat peran tambahan, bergantung pada akses yang seharusnya dimiliki akun. Untuk mengetahui opsinya, 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 binding 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 tersebut untuk login ke Konsol Google Cloud.