[Using Workload Identity  |  Kubernetes Engine Documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) - k8sのサービスアカウントを構成して、GCPのサービスアカウントとして使用可能 - AWSのインスタンスプロファイルみたいなもの #### 設定方法 1. 既存のクラスタで Workload Identity を有効にする。`gcloud container clusters update CLUSTER_NAME --workload-pool=PROJECT_ID.svc.id.goog` ```shell-session $ gcloud container clusters update microservices-experiment --workload-pool=$PROJECT_ID.svc.id.goog Updating microservices-experiment...done. Updated [https://container.googleapis.com/v1/projects/<project_id>/zones/asia-northeast1-a/clusters/microservices-experiment]. ``` 2. 既存のノードプールでGKE_METADATAを有効にする。 ```shell-session $ gcloud container node-pools update control-pool --cluster=microservices-experiment --workload-metadata=GKE_METADATA Updating node pool control-pool... Updating control-pool, done with 1 out of 1 nodes (100.0%): 1 succeeded...done. ``` 既存ノードプール内のpodは再起動する。 3. Googleサービスアカウント(GSA)を作成する。`gcloud iam service-accounts create GSA_NAME` ```shell-session $ gcloud iam service-accounts create microservices-experiment Created service account [microservices-experiment]. ``` 4. GSAにIAM Roleを追加する。 ```shell-session $ gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:microservices-experiment@$PROJECT_ID.iam.gserviceaccount.com --role roles/storag e.objectAdmin Updated IAM policy for project [PROJECT_ID]. bindings: - members: - serviceAccount:[email protected] role: roles/compute.serviceAgent - members: - serviceAccount:service-684774652816@container-engine-robot.iam.gserviceaccount.com role: roles/container.serviceAgent - members: - serviceAccount:[email protected] - serviceAccount:[email protected] - serviceAccount:[email protected] role: roles/editor - members: - user:- role: roles/owner - members: - serviceAccount:microservices-experiment@$PROJECT_ID.iam.gserviceaccount.com role: roles/storage.objectAdmin etag: BwXFUMq76DU= version: 1 ``` 4. KSAとGSAの間のIAM policy bindingを作成する。 ```shell-session $ gcloud iam service-accounts add-iam-policy-binding --role roles/iam.workloadIdentityUser --member "serviceAccount:$PROJECT_ID.svc.id.goog[litmus/argo-chaos]" microservices-experiment@$PROJECT_ID.iam.gserviceaccount.com Updated IAM policy for serviceAccount [microservices-experiment@<project id>.iam.gserviceaccount.com]. bindings: - members: - serviceAccount:<project_id>.svc.id.goog[litmus/argo-chaos] role: roles/iam.workloadIdentityUser etag: BwXFRhezLxw= version: 1 ``` 5. GSAのメールアドレスを使用して、アノテーションをKSAに追加する。 ```shell-session $ kubectl annotate serviceaccount --namespace litmus argo-chaos iam.gke.io/gcp-service-account=microservices-experiment@$PROJECT_ID.iam.gserviceaccount.com serviceaccount/argo-chaos annotated ```