Workload identity memungkinkan Anda menetapkan identitas dan otorisasi yang berbeda secara terperinci untuk setiap aplikasi di cluster. Workload identity adalah cara yang direkomendasikan agar aplikasi yang berjalan dalam GKE di AWS dapat mengakses Google Cloud layanan. Untuk mengetahui informasi selengkapnya, lihat Workload identity.
Topik ini menjelaskan cara menggunakan workload identity untuk terhubung ke Google Cloud layanan dari workload Anda.
Mengonfigurasiakun layanan Google Cloud
Di bagian ini, Anda akan membuat Google Cloud akun layanan (GSA) dengan izin terbatas untuk mengakses Google Cloud layanan.
Mendapatkan workload identity pool dan penyedia workload
Untuk mengonfigurasi workload identity, Anda harus memiliki nilai untuk URI penyedia identitas dan workload identity pool cluster Anda.
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 identity pool cluster Anda, gunakan Google Cloud CLI:gcloud container aws clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.workloadPool)'Ganti kode berikut:
CLUSTER_NAMEdengan nama cluster Anda.GOOGLE_CLOUD_LOCATIONdengan nama Google Cloud lokasi yang mengelola cluster Anda
Output menyertakan nama identity pool 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 aws 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.
Membuatakun layanan Google Cloud
Untuk membuatakun layanan (GSA), berikan izin ke akun tersebut, dan tambahkan binding kebijakan IAM ke GSA, lakukan langkah-langkah berikut: Google Cloud
Buat GSA dengan Google Cloud CLI:
gcloud iam service-accounts create GSA_NAME --project=PROJECT_IDGanti kode berikut:
GSA_NAME: nama GSA untuk aplikasi Anda.PROJECT_ID: GSA's Google Cloud project.
Tambahkan binding IAM untuk mengizinkan GSA mengakses layanan.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role IAM_ROLEGanti kode berikut:
GSA_NAME: nama GSA untuk aplikasi AndaPROJECT_ID: project ID untuk GSAIAM_ROLE: peran IAM yang akan diberikan ke GSA
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 serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role roles/compute.viewerBerikan izin untuk akun layanan Kubernetes (KSA) Anda agar dapat meniru identitas GSA. Anda dapat melakukannya dengan menambahkan binding kebijakan IAM dengan peran
roles/iam.workloadIdentityUser:gcloud iam service-accounts add-iam-policy-binding GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE//KSA_NAME] \ --role roles/iam.workloadIdentityUserGanti kode berikut:
GSA_NAMEPROJECT_IDNAMESPACE: Namespace Kubernetes untuk aplikasiKSA_NAME: KSA yang akan digunakan untuk aplikasi
Men-deploy aplikasi contoh
Di bagian ini, Anda akan men-deploy aplikasi contoh yang mengakses Compute Engine API. Untuk Menggunakan contoh ini, akun layanan 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: KSA_NAME 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", "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/GSA_NAME@PROJECT_ID.iam.gserviceaccount.com:generateAccessToken", "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: KSA_NAME 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_IDNAMESPACEKSA_NAMEGSA_NAMEIDENTITY_PROVIDERdengan nama penyedia identitas untuk cluster Anda.
Terapkan manifes ke cluster Anda
kubectl apply -f workload-identity-sample.yamlVerifikasi bahwa 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 akun layanan Google Cloud
gcloud iam service-accounts remove-iam-policy-binding \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE//KSA_NAME] \ roles/iam.workloadIdentityUserGanti kode berikut:
GSA_NAMEPROJECT_IDNAMESPACEKSA_NAME
Hapus binding kebijakan IAM dari project
gcloud projects remove-iam-policy-binding PROJECT_ID \ --member serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role roles/compute.viewerGanti kode berikut:
GSA_NAMEPROJECT_ID
Hapus akun layanan Google Cloud
gcloud iam service-accounts delete \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.comGanti kode berikut:
GSA_NAMEPROJECT_ID