Menggunakan workload identity dengan Google Cloud
Workload identity memungkinkan Anda menetapkan identitas dan otorisasi yang berbeda dan terperinci untuk setiap aplikasi di cluster. Workload Identity adalah cara yang direkomendasikan bagi aplikasi yang berjalan dalam GKE di Azure untuk mengakses layanan Google Cloud. Untuk mengetahui informasi selengkapnya, lihat Identitas workload.
Topik ini menjelaskan cara menggunakan Workload Identity untuk terhubung ke layanan Google Cloud dari workload Anda.
Mengonfigurasi akun layanan Google Cloud
Di bagian ini, Anda akan membuat akun layanan Google Cloud (GSA) dengan izin terbatas untuk mengakses layanan Google Cloud.
Mendapatkan kumpulan dan penyedia workload identity
Untuk mengonfigurasi workload identity, Anda harus memiliki nilai untuk URI penyedia identitas cluster dan kumpulan identitas workload.
Tentukan kumpulan workload identity untuk cluster Anda:
Semua cluster GKE memiliki penyedia identitas yang dibuat di kumpulan identitas workload
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_NAME
dengan nama cluster Anda.GOOGLE_CLOUD_LOCATION
dengan nama lokasi Google Cloud yang mengelola cluster Anda
Outputnya akan menyertakan nama kumpulan 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_NAME
GOOGLE_CLOUD_LOCATION
Output-nya mencakup nama penyedia identitas cluster Anda. Simpan nilai ini. Anda nanti akan membutuhkannya.
Membuat akun layanan Google Cloud
Untuk membuat akun layanan Google Cloud (GSA), berikan izin ke akun tersebut, dan tambahkan binding kebijakan IAM ke GSA, lakukan langkah-langkah berikut:
Buat GSA dengan Google Cloud CLI:
gcloud iam service-accounts create GSA_NAME --project=PROJECT_ID
Ganti kode berikut:
GSA_NAME
: nama GSA untuk aplikasi Anda.PROJECT_ID
: project Google Cloud GSA.
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_ROLE
Ganti kode berikut:
GSA_NAME
: nama GSA untuk aplikasi AndaPROJECT_ID
: ID project 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.viewer
Berikan izin untuk akun layanan Kubernetes (KSA) untuk meniru GSA. Untuk melakukannya, tambahkan 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.workloadIdentityUser
Ganti kode berikut:
GSA_NAME
PROJECT_ID
NAMESPACE
: Namespace Kubernetes untuk aplikasiKSA_NAME
: KSA yang akan digunakan untuk aplikasi
Menerapkan aplikasi sampel
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. 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.json
Ganti kode berikut:
PROJECT_ID
NAMESPACE
KSA_NAME
GSA_NAME
IDENTITY_PROVIDER
dengan nama penyedia identitas untuk cluster Anda.
Terapkan manifes ke cluster Anda
kubectl apply -f workload-identity-sample.yaml
Pastikan aplikasi contoh berfungsi, periksa log Pod:
kubectl logs -f cloud-sdk-example -n NAMESPACE
Ganti kode berikut:
NAMESPACE
Jika Pod berhasil mengakses Compute API Google Cloud, 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
Menghapus aplikasi contoh
kubectl delete -f manifest.yaml
Menghapus 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.workloadIdentityUser
Ganti kode berikut:
GSA_NAME
PROJECT_ID
NAMESPACE
KSA_NAME
Menghapus 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.viewer
Ganti kode berikut:
GSA_NAME
PROJECT_ID
Menghapus akun layanan Google Cloud
gcloud iam service-accounts delete \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
Ganti kode berikut:
GSA_NAME
PROJECT_ID