Workload Identity

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

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

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

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 です。

KSA による Google Cloud サービスへのアクセスは、通常の Google Cloud IAM ポリシーによって制御できます。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: このサービス アカウントが存在するクラスタの Namespace
  • KSA_NAME: アクセス許可を付与する Kubernetes サービス アカウントの名前
  • IAM_ROLE: この KSA に付与する Google Cloud ロール