Workload Identity

Workload Identity (WIF)は、クラスタのワークロードが Kubernetes サービス アカウントで外部クラウド リソースにアクセスできるようにするメカニズムです。WIF は、GKE 接続クラスタ内で実行されているアプリケーションが Google Cloud サービスにアクセスする場合におすすめの方法です。クラスタを登録すると、GKE 接続クラスタ API が WIF に必要なすべてのインフラストラクチャを作成し、一般公開または限定公開のいずれかの OIDC 発行者を使用するクラスタをサポートします。

Connect やテレメトリー エージェントなど、Google Cloud に接続し直すすべての GKE Enterprise サービスは、Workload Identity を使用します。

Kubernetes サービス アカウントと Workload Identity

Pod が実行されると、それは Kubernetes サービス アカウントを使用して、クラスタ内でホストされているリソースへのアクセスを承認します。WIF を使用することで、Pod は同じ Kubernetes サービス アカウント(KSA)を使用して、クラスタの外部でホストされているリソースにアクセスするための有効期間が短いトークンを取得します。

WIF には、クラスタ内部の OIDC ID プロバイダと Google Cloud IAM などの外部リソース プロバイダの間の信頼関係が必要です。接続クラスタを登録すると、登録プロセスは、Google Cloud プロジェクトにバインドされているデフォルトの Workload Identity プールにクラスタの OIDC サービスを追加することで、この信頼関係を自動的に作成します。

この Workload Identity プールは、Google プロジェクトの信頼できる ID プロバイダのプールで、PROJECT_ID.svc.id.goog という名前です。ここで、PROJECT_ID は、接続クラスタに関連付けられている Google プロジェクト ID です。

通常の Google Cloud IAM ポリシーを使用して、Kubernetes サービス アカウントによる Google Cloud サービスへのアクセスを制御できます。Kubernetes サービス アカウント プリンシパルは、Workload Identity プール内の KSA を表します。これらの形式は次のとおりです。

serviceAccount:WORKLOAD_IDENTITY_POOL_NAME[KSA_NAMESPACE/KSA_NAME]

Kubernetes サービス アカウントにロールを付与するには、次のコマンドを使用します。

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:PROJECT_ID.svc.id.goog[KSA_NAMESPACE/KSA_NAME]" \
  --role=IAM_ROLE

次のように置き換えます。

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID
  • KSA_NAMESPACE: このサービス アカウントが存在するクラスタの名前空間
  • KSA_NAME: アクセス許可を付与する Kubernetes サービス アカウントの名前
  • IAM_ROLE: この KSA に付与する Google Cloud ロール