Menggunakan workload identity dengan Google Cloud
Workload Identity memungkinkan Anda menetapkan identitas dan otorisasi yang berbeda secara terperinci untuk setiap aplikasi di cluster Anda. Workload Identity adalah cara yang direkomendasikan agar aplikasi yang berjalan dalam GKE di Azure dapat mengakses layananGoogle Cloud . Untuk mengetahui informasi selengkapnya, lihat Workload identity.
Topik ini menjelaskan cara menggunakan identitas workload untuk terhubung ke Google Cloud layanan dari workload Anda.
Mengonfigurasi izin IAM
Di bagian ini, Anda akan memberikan izin ServiceAccount Kubernetes untuk mengakses Google Cloud layanan dengan memberikan peran IAM kepadanya.
Mendapatkan workload identity pool dan penyedia workload Anda
Untuk mengonfigurasi workload identity, Anda harus memiliki nilai untuk URI penyedia identitas dan workload identity pool cluster.
Tentukan workload identity pool untuk cluster Anda:
Semua cluster GKE memiliki penyedia identitas yang dibuat di workload identity pool
PROJECT_ID.svc.id.goog. Untuk mendapatkan nama kumpulan identitas cluster Anda, gunakan Google Cloud CLI:gcloud container azure clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.workloadPool)'Ganti kode berikut:
CLUSTER_NAMEdengan nama cluster Anda.GOOGLE_CLOUD_LOCATIONdengan nama lokasi Google Cloudyang mengelola cluster Anda
Output menyertakan nama pool identitas cluster Anda. Simpan nilai ini. Anda nanti akan membutuhkannya.
Tentukan penyedia identitas untuk cluster Anda.
Untuk menemukan nama penyedia identitas cluster Anda, gunakan Google Cloud CLI:
gcloud container azure clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.identityProvider)'Ganti kode berikut:
CLUSTER_NAMEGOOGLE_CLOUD_LOCATION
Output menyertakan nama penyedia identitas cluster Anda. Simpan nilai ini. Anda nanti akan membutuhkannya.
Memberikan peran IAM ke ServiceAccount Kubernetes Anda
Berikan peran IAM di project ke ServiceAccount Kubernetes:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KUBERNETES_SERVICEACCOUNT" \
--role=IAM_ROLE \
--condition=None
Ganti kode berikut:
PROJECT_ID: Project ID Google Cloud AndaPROJECT_NUMBER: Google Cloud nomor project AndaNAMESPACE: namespace Kubernetes untuk aplikasiKUBERNETES_SERVICEACCOUNT: ServiceAccount Kubernetes yang akan digunakan untuk aplikasiIAM_ROLE: peran IAM yang akan diberikan ke ServiceAccount Kubernetes
Dalam contoh ini, kita akan menggunakan peran roles/compute.viewer,
yang memungkinkan akses hanya baca ke layanan komputasi:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KUBERNETES_SERVICEACCOUNT" \
--role=roles/compute.viewer \
--condition=None
Men-deploy aplikasi contoh
Di bagian ini, Anda akan men-deploy aplikasi contoh yang mengakses
Compute Engine API. Untuk menggunakan contoh ini, ServiceAccount Kubernetes Anda harus memiliki peran IAM roles/compute.viewer yang diberikan kepadanya. Untuk men-deploy aplikasi contoh, ikuti langkah-langkah berikut:
Salin manifes berikut ke dalam file bernama
workload-identity-sample.yaml:apiVersion: v1 kind: Namespace metadata: name: NAMESPACE --- apiVersion: v1 kind: ServiceAccount metadata: name: KUBERNETES_SERVICEACCOUNT namespace: NAMESPACE automountServiceAccountToken: false --- apiVersion: v1 kind: ConfigMap metadata: name: cloud-sdk-config namespace: NAMESPACE data: config: | { "type": "external_account", "audience": "identitynamespace:PROJECT_ID.svc.id.goog:IDENTITY_PROVIDER", "subject_token_type": "urn:ietf:params:oauth:token-type:jwt", "token_url": "https://sts.googleapis.com/v1/token", "credential_source": { "file": "/var/run/secrets/tokens/gcp-ksa/token" } } --- apiVersion: v1 kind: Pod metadata: name: cloud-sdk-example namespace: NAMESPACE spec: serviceAccount: KUBERNETES_SERVICEACCOUNT containers: - name: cloud-sdk image: gcr.io/google.com/cloudsdktool/cloud-sdk:latest command: - /bin/bash - -c - 'set -eu -o pipefail; while true; do gcloud compute zones list --filter="name ~ us-central1-*"; sleep 5; done' env: - name: CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE value: /var/run/secrets/tokens/gcp-ksa/google-application-credentials.json - name: CLOUDSDK_CORE_PROJECT value: PROJECT_ID volumeMounts: - name: gcp-ksa mountPath: /var/run/secrets/tokens/gcp-ksa readOnly: true volumes: - name: gcp-ksa projected: defaultMode: 420 sources: - serviceAccountToken: audience: PROJECT_ID.svc.id.goog expirationSeconds: 86400 path: token - configMap: name: cloud-sdk-config optional: false items: - key: config path: google-application-credentials.jsonGanti kode berikut:
PROJECT_IDNAMESPACEKUBERNETES_SERVICEACCOUNTIDENTITY_PROVIDERdengan nama penyedia identitas untuk cluster Anda.
Terapkan manifes ke cluster Anda
kubectl apply -f workload-identity-sample.yamlPastikan aplikasi contoh berfungsi, periksa log Pod:
kubectl logs -f cloud-sdk-example -n NAMESPACEGanti kode berikut:
NAMESPACE
Jika Pod berhasil mengakses Google Cloud Compute API, Anda akan melihat output yang terlihat mirip dengan ini:
NAME REGION STATUS NEXT_MAINTENANCE TURNDOWN_DATE us-central1-c us-central1 UP us-central1-a us-central1 UP us-central1-f us-central1 UP us-central1-b us-central1 UP
Pembersihan
Hapus aplikasi contoh
kubectl delete -f manifest.yamlHapus binding kebijakan IAM dari project
gcloud projects remove-iam-policy-binding PROJECT_ID \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KUBERNETES_SERVICEACCOUNT" \ --role=roles/compute.viewer \ --condition=NoneGanti kode berikut:
PROJECT_IDPROJECT_NUMBERNAMESPACEKUBERNETES_SERVICEACCOUNT