GKE 用 Workload Identity 連携を使用する

このドキュメントでは、Google Kubernetes Engine(GKE)クラスタで GKE 用 Workload Identity 連携を有効にして構成する方法について説明します。GKE 用 Workload Identity 連携を使用すると、GKE クラスタ内のワークロードが Identity and Access Management(IAM)サービス アカウントの権限を借用して Google Cloud サービスにアクセスできます。GKE 用 Workload Identity 連携の仕組みと制限事項については、GKE 用 Workload Identity 連携をご覧ください。

始める前に

作業を始める前に、次のことを確認してください。

  • Google Kubernetes Engine API を有効にします。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化します。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得します。

GKE 用 Workload Identity 連携を有効にする

クラスタとノードプールで GKE 用 Workload Identity 連携を有効にするには、Google Cloud CLI または Google Cloud コンソールを使用します。ノードプールで GKE 用 Workload Identity 連携を有効にするには、クラスタレベルで GKE の Workload Identity 連携を有効にする必要があります

Autopilot クラスタでは、GKE 用 Workload Identity 連携がデフォルトで有効になります。GKE 用 Workload Identity 連携を使用するように Autopilot Pod を構成するには、GKE 用 Workload Identity 連携を使用するようにアプリケーションを構成するに進みます。

新しいクラスタを作成する

新しい Standard クラスタで GKE 用 Workload Identity 連携を有効にするには、gcloud CLI または Google Cloud コンソールを使用します。

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. 新しいクラスタで GKE 用 Workload Identity 連携を有効にするには、次のコマンドを実行します。

    gcloud container clusters create CLUSTER_NAME \
        --region=COMPUTE_REGION \
        --workload-pool=PROJECT_ID.svc.id.goog
    

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

    • CLUSTER_NAME: 新しいクラスタの名前。
    • COMPUTE_REGION: クラスタの Compute Engine のリージョン。ゾーンクラスタの場合は、--zone=COMPUTE_ZONE を使用します。
    • PROJECT_ID: Google Cloud プロジェクト ID。

コンソール

新しいクラスタで GKE 用 Workload Identity 連携を有効にするには、次の操作を行います。

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. [ 作成] をクリックします。

  3. [クラスタを作成] ダイアログで、GKE Standard の [構成] をクリックします。

  4. ナビゲーション メニューの [クラスタ] セクションで、[セキュリティ] をクリックします。

  5. [Workload Identity を有効にする] チェックボックスをオンにします。

  6. クラスタの構成を続行し、[作成] をクリックします。

既存のクラスタを更新する

既存の Standard クラスタで GKE 用 Workload Identity 連携を有効にするには、gcloud CLI または Google Cloud コンソールを使用します。既存のノードプールは影響を受けませんが、クラスタ内の新しいノードプールでは GKE 用 Workload Identity 連携が使用されます。

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. 既存のクラスタで GKE 用 Workload Identity 連携を有効にするには、次のコマンドを実行します。

    gcloud container clusters update CLUSTER_NAME \
        --region=COMPUTE_REGION \
        --workload-pool=PROJECT_ID.svc.id.goog
    

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

    • CLUSTER_NAME: 既存のクラスタの名前。
    • COMPUTE_REGION: クラスタの Compute Engine のリージョン。ゾーンクラスタの場合は、--zone=COMPUTE_ZONE を使用します。
    • PROJECT_ID: Google Cloud プロジェクト ID。

コンソール

既存のクラスタで GKE 用 Workload Identity 連携を有効にするには、次の操作を行います。

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. クラスタの詳細ページの [セキュリティ] セクションで、[ Edit workload identity federation for GKE] をクリックします。

  4. [Workload Identity の編集] ダイアログで、[Workload Identity を有効にする] チェックボックスをオンにします。

  5. [変更を保存] をクリックします。

既存のワークロードを GKE 用 Workload Identity 連携に移行する

既存のクラスタで GKE 用 Workload Identity 連携を有効にした後、GKE 用 Workload Identity 連携を使用するように実行中のワークロードを移行することをおすすめします。ご使用の環境に適した移行方法を選択します。GKE 用 Workload Identity 連携を有効にして新しいノードプールを作成することも、既存のノードプールを更新して GKE 用 Workload Identity 連携を有効にすることもできます。

GKE 用 Workload Identity 連携に対応するためにアプリケーションの変更も必要な場合は、新しいノードプールを作成することをおすすめします。

クラスタで GKE 用 Workload Identity 連携が有効になっている場合、新しいノードプールを作成すると、そのプールではデフォルトで GKE 用 Workload Identity 連携が使用されます。GKE 用 Workload Identity 連携を有効にした新しいノードプールを作成するには、次のコマンドを実行します。

gcloud container node-pools create NODEPOOL_NAME \
    --cluster=CLUSTER_NAME \
    --region=COMPUTE_REGION \
    --workload-metadata=GKE_METADATA

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

  • NODEPOOL_NAME: 新しいノードプールの名前。
  • CLUSTER_NAME: GKE 用 Workload Identity 連携が有効になっている既存のクラスタの名前。

--workload-metadata=GKE_METADATA フラグにより、GKE メタデータ サーバーを使用するようにノードプールが構成されます。GKE 用 Workload Identity 連携がクラスタで有効になっていない場合にノードプールの作成が失敗するように、このフラグを含めることをおすすめします。

既存のノードプールを更新する

クラスタで GKE 用 Workload Identity 連携を有効にした後、既存のノードプールで GKE の Workload Identity 連携を手動で有効にできます。

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. GKE 用 Workload Identity 連携を使用するように既存のノードプールを変更するには、次のコマンドを実行します。

    gcloud container node-pools update NODEPOOL_NAME \
        --cluster=CLUSTER_NAME \
        --region=COMPUTE_REGION \
        --workload-metadata=GKE_METADATA
    

    クラスタで GKE 用 Workload Identity 連携が有効になっている場合、--workload-metadata=GCE_METADATA を明示的に指定することで、この機能を特定のノードプールで選択的に無効にできます。詳しくは、クラスタ メタデータの保護をご覧ください。

コンソール

GKE 用 Workload Identity 連携を使用するように既存のノードプールを変更するには、次の操作を行います。

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [ノード] タブをクリックします。

  4. [ノードプール] セクションで、変更するノードプールの名前をクリックします。

  5. [ノードプールの詳細] ページで、[ 編集] をクリックします。

  6. [ノードプールの編集] ページの [セキュリティ] セクションで、[GKE メタデータ サーバーを有効にする] チェックボックスをオンにします。

  7. [保存] をクリックします。

GKE 用 Workload Identity 連携を使用するようにアプリケーションを構成する

GKE 用 Workload Identity 連携を有効にしたら、アプリケーションを新しいノードプールに移行する前に、GKE 用 Workload Identity 連携を使用して Google Cloud の認証を行うようにアプリケーションを構成する必要があります。

Kubernetes サービス アカウントをアプリケーションに割り当て、その Kubernetes サービス アカウントが IAM サービス アカウントとして機能するように構成する必要があります。

以下では、クラスタで GKE 用 Workload Identity 連携が有効になっている場合に、それを使用するようにアプリケーションを構成する方法について説明します。

  1. クラスタの認証情報を取得します。

    gcloud container clusters get-credentials CLUSTER_NAME \
        --region=COMPUTE_REGION
    

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

    • CLUSTER_NAME: GKE 用 Workload Identity 連携が有効になっているクラスタの名前。
    • COMPUTE_REGION: クラスタの Compute Engine のリージョン。
  2. Kubernetes サービス アカウントに使用する Namespace を作成します。デフォルトの Namespace を使用することも、既存の Namespace を使用することもできます。

    kubectl create namespace NAMESPACE
    
  3. アプリケーションで使用する Google サービス アカウントを作成します。また、default サービス アカウントを含む Namespace の既存の Kubernetes サービス アカウントを使用することもできます。

    kubectl create serviceaccount KSA_NAME \
        --namespace NAMESPACE
    

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

    • KSA_NAME: 新しい Kubernetes サービス アカウントの名前。
    • NAMESPACE: サービス アカウントの Kubernetes Namespace の名前。
  4. アプリケーションに IAM サービス アカウントを作成するか、既存の IAM サービス アカウントを使用します。組織内の任意のプロジェクトで、任意の IAM サービス アカウントを使用できます。Config Connector の場合は、選択したサービス アカウントに IAMServiceAccount オブジェクトを適用します。

    gcloud

    1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

      Cloud Shell をアクティブにする

      Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

    2. gcloud CLI を使用して新しい IAM サービス アカウントを作成するには、次のコマンドを実行します。

      gcloud iam service-accounts create GSA_NAME \
          --project=GSA_PROJECT
      

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

      • GSA_NAME: 新しい IAM サービス アカウントの名前。
      • GSA_PROJECT: IAM サービス アカウントの Google Cloud プロジェクトのプロジェクト ID。

    Config Connector

    Config Connector で新規または既存の IAM サービス アカウントを使用するには、次の構成ファイルを適用します。

    注: この手順には Config Connector が必要です。Config Connector をクラスタにインストールするには、インストール手順を実施してください。

    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMServiceAccount
    metadata:
      name: [GSA_NAME]
    spec:
      displayName: [DISPLAY_NAME]
    このマニフェストをデプロイするには、service-account.yaml という名前でマシンにダウンロードします。

    kubectl を使用してマニフェストを適用します。

    kubectl apply -f service-account.yaml
    

    IAM サービス アカウントから Google Cloud APIs へのアクセスを承認する方法については、サービス アカウントについてをご覧ください。

  5. 必要なロールが IAM サービス アカウントにあることを確認します。次のコマンドを使用して、追加のロールを付与できます。

    gcloud projects add-iam-policy-binding GSA_PROJECT \
        --member "serviceAccount:GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com" \
        --role "ROLE_NAME"
    

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

    • GSA_PROJECT: IAM サービス アカウントの Google Cloud プロジェクトのプロジェクト ID。
    • GSA_NAME: IAM サービス アカウントの名前。
    • ROLE_NAME: roles/spanner.viewer など、サービス アカウントに割り当てる IAM ロール。
  6. 2 つのサービス アカウントの間に IAM ポリシー バインディングを追加して、Kubernetes サービス アカウントが IAM サービス アカウントの権限の借用できるようにします。このバインドでは、Kubernetes サービス アカウントが IAM サービス アカウントとして機能します。

    gcloud

    1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

      Cloud Shell をアクティブにする

      Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

    2. 開発環境で次のコマンドを実行します。

      gcloud iam service-accounts add-iam-policy-binding GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"
      

    Config Connector

    注: この手順には Config Connector が必要です。Config Connector をクラスタにインストールするには、インストール手順を実施してください。

    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicy
    metadata:
      name: iampolicy-workload-identity-sample
    spec:
      resourceRef:
        apiVersion: iam.cnrm.cloud.google.com/v1beta1
        kind: IAMServiceAccount
        name: [GSA_NAME]
      bindings:
        - role: roles/iam.workloadIdentityUser
          members:
            - serviceAccount:[PROJECT_ID].svc.id.goog[[K8S_NAMESPACE]/[KSA_NAME]]
    このマニフェストをデプロイするには、policy-binding.yaml という名前でマシンにダウンロードします。GSA_NAMEPROJECT_IDNAMESPACEKSA_NAME を、実際の環境での値に置き換えます。次のコマンドを実行します。

    kubectl apply -f policy-binding.yaml
    
  7. Kubernetes サービス アカウントに IAM サービス アカウントのメールアドレスでアノテーションを付けます。

    kubectl

    1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

      Cloud Shell をアクティブにする

      Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

    2. 開発環境で次のコマンドを実行します。

      kubectl annotate serviceaccount KSA_NAME \
          --namespace NAMESPACE \
          iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com
      

    yaml

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      annotations:
        iam.gke.io/gcp-service-account: GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
      name: KSA_NAME
      namespace: NAMESPACE
    
  8. ノード上で GKE 用 Workload Identity 連携を使用するワークロードのスケジュールを設定して、アノテーション付きの Kubernetes サービス アカウントを使用するように、Pod の仕様を更新します。

    spec:
      serviceAccountName: KSA_NAME
      nodeSelector:
        iam.gke.io/gke-metadata-server-enabled: "true"
    
  9. 更新された構成をクラスタに適用します。

    kubectl apply -f DEPLOYMENT_FILE
    

    DEPLOYMENT_FILE は、更新された Pod 仕様のパスに置き換えます。

GKE 用 Workload Identity 連携の設定を確認する

サービス アカウントが正しく構成されていることを確認します。Kubernetes サービス アカウントを使用して、OS 固有のコンテナ イメージを実行する Pod を作成し、インタラクティブなセッションで Pod に接続します。

Linux

アノテーション付きの Kubernetes サービス アカウントを使用し、service-accounts エンドポイントを curl する Pod を作成します。

  1. 次の構成を wi-test.yaml として保存します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: workload-identity-test
      namespace: NAMESPACE
    spec:
      containers:
      - image: google/cloud-sdk:slim
        name: workload-identity-test
        command: ["sleep","infinity"]
      serviceAccountName: KSA_NAME
      nodeSelector:
        iam.gke.io/gke-metadata-server-enabled: "true"
    

    google/cloud-sdk イメージには Google Cloud CLI が含まれており、Google Cloud APIs を簡単に利用できます。イメージのダウンロードに時間がかかる場合があります。

  2. Pod を作成します。

    kubectl apply -f wi-test.yaml
    
  3. Pod でインタラクティブ セッションを開きます。

    kubectl exec -it workload-identity-test \
      --namespace NAMESPACE \
      -- /bin/bash
    
  4. Pod 内で次のコマンドを実行して、サービス アカウントのメールアドレスを取得します。

    curl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/email
    

    サービス アカウントが正しく構成されている場合、IAM サービス アカウントのメールアドレスがアクティブな唯一の ID になります。デフォルトでは、Google Cloud APIs を呼び出すときに Pod が IAM サービス アカウントの権限として動作します。

  5. Pod 内で次のコマンドを実行して、トークンを取得します。

    curl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token
    

    エラーが返された場合は、トラブルシューティングをご覧ください。

Windows

Kubernetes サービス アカウントを使用して、servercore コンテナ イメージを実行する Pod を作成します。

  1. 次のマニフェストを保存します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: workload-identity-test
      namespace: NAMESPACE
    spec:
      containers:
      - image: IMAGE_NAME
        name: workload-identity-test
        command: ["powershell.exe", "sleep", "3600"]
      serviceAccountName: KSA_NAME
      nodeSelector:
        kubernetes.io/os: windows
        cloud.google.com/gke-os-distribution: windows_ltsc
        iam.gke.io/gke-metadata-server-enabled: "true"
    

    IMAGE_NAME を、次のいずれかのコンテナ サーバーコア イメージの値に置き換えます。

    Windows Server ノードイメージ コンテナ servercore イメージ
    WINDOWS_LTSC
    WINDOWS_LTSC_CONTAINERD
    mcr.microsoft.com/windows/servercore:ltsc2019
    WINDOWS_SAC
    WINDOWS_SAC_CONTAINERD

    GKE ノード バージョンと Windows SAC バージョンの間のバージョン マッピングを確認します。Windows Server バージョン 1909 の場合は mcr.microsoft.com/windows/servercore:1909 を指定し、それ以外の場合は mcr.microsoft.com/windows/servercore:20H2 を指定します。

  2. Pod でインタラクティブ セッションを開きます。

    kubectl exec -it workload-identity-test \
      --namespace NAMESPACE -- powershell
    
  3. Pod 内で次の powershell コマンドを実行して、サービス アカウントのメールアドレスを取得します。

    Invoke-WebRequest  -Headers @{"Metadata-Flavor"="Google"} -Uri  http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/email  -UseBasicParsing
    

    サービス アカウントが正しく構成されている場合、IAM サービス アカウントのメールアドレスがアクティブな唯一の ID になります。デフォルトでは、Google Cloud APIs を呼び出すときに Pod が IAM サービス アカウントの権限を使用します。

  4. Pod 内で次のコマンドを実行して、トークンを取得します。

    Invoke-WebRequest  -Headers @{"Metadata-Flavor"="Google"} -Uri  http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token  -UseBasicParsing
    

    エラーが返された場合は、トラブルシューティングをご覧ください。

コードから GKE 用 Workload Identity 連携を使用する

コードで Google Cloud サービスに対する認証を行うプロセスは、Compute Engine のメタデータ サーバーを使用した認証と同じです。GKE 用 Workload Identity 連携を使用すると、インスタンス メタデータ サーバーへのリクエストが GKE メタデータ サーバーに転送されます。インスタンス メタデータ サーバーを使用して認証する既存のコードは(Google Cloud クライアント ライブラリを使用したコードと同様)、変更せずにそのまま使用できます。

GKE 用 Workload Identity 連携で別のプロジェクトの割り当てを使用する

GKE バージョン 1.24 以降を実行しているクラスタでは、IAM Service Account Credentials APIGenerateAccessToken メソッドと GenerateIdToken メソッドの呼び出し時に、別の Google Cloud プロジェクトの割り当てを使用するように、Kubernetes サービス アカウントを必要に応じて構成できます。これにより、メイン プロジェクトで割り当てのすべてを使用することを避け、クラスタ内のこれらのサービスに他のプロジェクトの割り当てを使用できます。

GKE 用 Workload Identity 連携を使用して割り当てプロジェクトを構成するには、次の操作を行います。

  1. 割り当てプロジェクトの serviceusage.services.use 権限を Kubernetes サービス アカウントに付与します。

    gcloud projects add-iam-policy-binding \
    --role=roles/serviceusage.serviceUsageConsumer \
    --member=serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME] \
    QUOTA_PROJECT_ID
    

    QUOTA_PROJECT_ID は、割り当てプロジェクトのプロジェクト ID に置き換えます。

  2. 割り当てプロジェクトを使用して Kubernetes サービス アカウントにアノテーションを付けます。

    kubectl annotate serviceaccount KSA_NAME \
    --namespace NAMESPACE \
    iam.gke.io/credential-quota-project=QUOTA_PROJECT_ID
    

構成が正しく機能することを確認するには、次の操作を行います。

  1. GKE 用 Workload Identity 連携の設定を確認するの説明に従って、Pod を作成してシェル セッションを開始します。

  2. サービス アカウント トークン リクエストを行います。

    curl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token
    
  3. Google Cloud コンソールで、割り当てプロジェクトの IAM Service Accounts Credentials API ページに移動します。

    [API] に移動

  4. トラフィックの変化を確認します。

クリーンアップ

GKE 用 Workload Identity 連携の使用を停止するには、IAM サービス アカウントへのアクセス権を取り消して、クラスタで GKE 用 Workload Identity 連携を無効にします。

アクセス権を取り消す

  1. IAM サービス アカウントへのアクセス権を取り消します。

    gcloud

    1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

      Cloud Shell をアクティブにする

      Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

    2. 開発環境で次のコマンドを実行します。

      gcloud iam service-accounts remove-iam-policy-binding GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"
      

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

      • PROJECT_ID: GKE クラスタのプロジェクト ID。
      • NAMESPACE: Kubernetes サービス アカウントが配置されている Kubernetes Namespace の名前。
      • KSA_NAME: アクセス権が取り消される Kubernetes サービス アカウントの名前。
      • GSA_NAME: IAM サービス アカウントの名前。
      • GSA_PROJECT: IAM サービス アカウントのプロジェクト ID。

    Config Connector

    Config Connector を使用してサービス アカウントを作成した場合は、kubectl を使用してサービス アカウントを削除します。

    kubectl delete -f service-account.yaml
    

    キャッシュ内のトークンの有効期限は 30 分です。キャッシュ内のトークンが期限切れになっているかどうかは、次のコマンドで確認できます。

    gcloud auth list
    

    このコマンドの出力に GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com が含まれない場合は、キャッシュ内のトークンはすでに期限切れです。

  2. Kubernetes サービス アカウントからアノテーションを削除します。IAM によってアクセス権が取り消されたため、このステップは省略可能です。

    kubectl annotate serviceaccount KSA_NAME \
        --namespace NAMESPACE iam.gke.io/gcp-service-account-
    

GKE 用 Workload Identity 連携を無効にする

GKE 用 Workload Identity 連携は、GKE Standard クラスタでのみ無効にできます。

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. 各ノードプールで GKE 用 Workload Identity 連携を無効にします。

    gcloud container node-pools update NODEPOOL_NAME \
        --cluster=CLUSTER_NAME \
        --workload-metadata=GCE_METADATA
    

    クラスタ内の各ノードプールに対してこのコマンドを繰り返します。

  3. クラスタで GKE 用 Workload Identity 連携を無効にします。

    gcloud container clusters update CLUSTER_NAME \
        --disable-workload-identity
    

コンソール

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [ノード] タブをクリックします。

  4. 各ノードプールで GKE 用 Workload Identity 連携を無効にするには、[ノードプール] セクションで、ノードプールごとに次の操作を行います。

    1. 変更するノードプールの名前をクリックします。
    2. [ノードプールの詳細] ページで、[ 編集] をクリックします。
    3. [ノードプールの編集] ページの [セキュリティ] セクションで、[GKE メタデータ サーバーを有効にする] チェックボックスをオフにします。
    4. [保存] をクリックします。
  5. クラスタで GKE 用 Workload Identity 連携を無効にするには、次の操作を行います。

    1. [詳細] タブをクリックします。
    2. [セキュリティ] セクションで、[Workload Identity] の横にある [ 編集] をクリックします。
    3. [Workload Identity の編集] ダイアログで、[Workload Identity を有効にする] チェックボックスをオフにします。
    4. [変更を保存] をクリックします。

組織で GKE 用 Workload Identity 連携を無効にする

セキュリティの面から見ると、GKE 用 Workload Identity 連携により、GKE は Google Cloud リソースの認証と認可が可能な Kubernetes サービス アカウント ID であることを表明しています。サービス アカウントの作成の無効化サービス アカウント キーの作成の無効化など、ワークロードを Google Cloud リソースから分離するための措置を講じた場合、組織の GKE 用 Workload Identity 連携の無効化が必要になる場合もあります。

組織の GKE 用 Workload Identity 連携を無効にする手順をご覧ください。

トラブルシューティング

トラブルシューティング情報については、GKE 用 Workload Identity 連携のトラブルシューティングをご覧ください。

次のステップ