サービス アカウント キーのローテーション

このページでは、次のサービス アカウント キーをローテーションする方法について説明します。

サービス アカウント キーをローテーションするには:

  1. 現在のシークレットのバックアップを保存するディレクトリを作成します。

    mkdir backup
  2. 関連するサービス アカウントについて、次の情報をメモします。

    コンポーネント アクセス

    クラスタ シークレット 名前空間
    管理者 admin-cluster-creds kube-system
    管理者 user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt
    管理者 private-registry-creds kube-system
    ユーザー private-registry-creds kube-system
    • 非公開レジストリを使用していない場合、private-registry-creds Secret はコンポーネント アクセス サービス アカウント キーを保持します。
    • 非公開レジストリを使用している場合は、private-registry-creds Secret には、コンポーネント アクセス サービス アカウント キーではなく、非公開レジストリの認証情報が保持されます。

    Connect-register

    クラスタ シークレット 名前空間
    管理者 admin-cluster-creds kube-system
    管理者 user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt

    Logging-monitoring

    クラスタ シークレット 名前空間
    管理者 admin-cluster-creds kube-system
    管理者 user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt
    ユーザー google-cloud-credentials kube-system
    ユーザー stackdriver-service-account-key knative-serving

    監査ロギング

    クラスタ シークレット 名前空間
    管理者 admin-cluster-creds kube-system
    管理者 user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt
    管理者 kube-apiserver CLUSTER_NAME

    Stackdriver

    クラスタ シークレット 名前空間
    管理者 admin-cluster-creds kube-system
    管理者 user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt
    ユーザー google-cloud-credentials kube-system
    ユーザー stackdriver-service-account-key knative-serving
  3. 次のコマンドを使用して、各シークレットのバックアップを作成します。

    kubectl get secret SECRET --namespace NAMESPACE \
        --kubeconfig KUBECONFIG -o json > backup/SECRET-NAMESPACE.json

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

    • NAMESPACE は、シークレットが配置されている名前空間です。例: kube-system
    • KUBECONFIG: 管理クラスタまたはユーザー クラスタの kubeconfig ファイルへのパス。
    • SECRET: Secret の名前。例: admin-cluster-creds

    たとえば、監査ロギング サービス アカウントに対する次のコマンドを実行します。

    kubectl get secret admin-cluster-creds --namespace kube-system \
            --kubeconfig KUBECONFIG -o json > backup/admin-cluster-creds-kube-system.json
    
    kubectl get secret user-cluster-creds --namespace NAMESPACE \
            --kubeconfig KUBECONFIG -o json > backup/user-cluster-creds-NAMESPACE.json
    
    kubectl get secret kube-apiserver --namespace NAMESPACE \
            --kubeconfig KUBECONFIG -o json > backup/kube-apiserver-NAMESPACE.json
  4. 新しいサービス アカウント キー ファイルを作成するには、次のコマンドを実行します。

    gcloud iam service-accounts keys create NEW_KEY_FILE --iam-account IAM_ACCOUNT

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

    • NEW_KEY_FILE: 新しいサービス アカウント キー ファイルの名前
    • IAM_ACCOUNT: サービス アカウントのメールアドレス。
  5. 管理クラスタの構成ファイルで、componentAccessServiceAccountKeyPath フィールド、gkeConnect セクション、stackdriver セクション、cloudAuditLogging セクションを見つけます。これらの場所では、サービス アカウント キー ファイルへのパスを置き換えてください。

  6. ユーザー クラスタの構成ファイルで、componentAccessServiceAccountKeyPath フィールド、gkeConnect セクション、stackdriver セクション、cloudAudigLogging セクションを見つけます。これらの場所では、サービス アカウント キー ファイルへのパスを置き換えてください。

  7. 次のコマンドを実行して、変更を保存します。

    一度に 1 つのコンポーネントの鍵をローテーションすることも、コンポーネントを sakeys に設定してすべての鍵を一度にローテーションすることもできます。

    gkectl update credentials COMPONENT \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
        --config ADMIN_CLUSTER_CONFIG \
        --admin-cluster
    
    gkectl update credentials COMPONENT \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
        --config USER_CLUSTER_CONFIG
    

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

    • COMPONENT: 次のいずれか。

      • componentaccess
      • register
      • cloudauditlogging
      • stackdriver
      • sakeys(すべてのコンポーネント キーをローテーションします)
    • ADMIN_CLUSTER_KUBECONFIG は、管理クラスタの kubeconfig ファイルのパス。

    • ADMIN_CLUSTER_CONFIG: 管理クラスタの構成ファイルへのパス。

    • USER_CLUSTER_CONFIG: ユーザー クラスタの構成ファイルへのパス。

ノードの再作成

一部のサービス アカウント キーのローテーションでは、ノードの再作成が必要なため、さらに時間がかかることがあります。

サービス アカウント ノードの再作成が必要
コンポーネント アクセス Artifact Registry を使用する場合: はい
限定公開レジストリを使用する場合: いいえ
監査ロギング 管理クラスタ: はい。ただし、コントロール プレーン ノードのみ
kubeception を使用するユーザー クラスタ: いいえ
Controlplane V2 を使用するユーザー クラスタ: はい。ただし、コントロール プレーン ノードのみ
logging-monitoring ×
connect-register ×

ノードの再作成が必要な鍵のローテーションでは、ノードはローリング アップデート プロセスで置き換えられます。つまり、ノードは 1 つずつ再作成されます。

鍵のローテーション中に発生する可能性のあるダウンタイムは、クラスタのアップグレード時のダウンタイムと同様です。詳細については、アップグレード中のダウンタイムをご覧ください。

バックアップの復元

前の手順で作成したシークレットのバックアップを復元する必要がある場合は、次のコマンドを実行します。

kubectl apply -f backup/

サービス アカウント キーのローテーションに関する高度なクラスタの違い

高度なクラスタでは、gkectl update credentials コマンドは部分的にサポートされています。次の表に、サポートされているコマンドとサポートされていないコマンドのバリエーションを示します。

コマンド 説明 サポート
gkectl update credentials certificate-authorities rotate 認証局のローテーションを行います。 サポート対象
gkectl update credentials certificate-authorities status プレビュー)認証局のローテーション ステータスを表示します。 サポート対象
gkectl update credentials certificate-authorities update-kubeconfig 最新のクライアント証明書を含む kubeconfig ファイルをダウンロードします。 サポート対象
gkectl update credentials cloudauditlogging Cloud Audit Logs の認証情報を更新します。 サポート対象外
gkectl update credentials componentaccess VMware 用 Google Distributed Cloud で作成されたクラスタのコンポーネント アクセス サービス アカウント キーの認証情報を更新します。 サポート対象
gkectl update credentials f5bigip F5 BIG-IP ロードバランサの認証情報を更新します。 不要
gkectl update credentials ksa-signing-key rotate Kubernetes サービス アカウント(KSA)トークン署名鍵をローテーションします。 サポート対象外
gkectl update credentials ksa-signing-key status 進行中の KSA トークン署名鍵のローテーションのステータスを表示します。 サポート対象外
gkectl update credentials クラスタ認証情報を更新します。 サポート対象
gkectl update credentials privateregistry クラスタの非公開レジストリの認証情報を更新します。 サポート対象
gkectl update credentials register 登録サービス アカウント キーの認証情報を更新します。 サポート対象
gkectl update credentials sakeys クラスタのサービス アカウント キーの認証情報を更新します。 サポート対象
gkectl update credentials stackdriver プレビュー)Google Cloud Observability の認証情報を更新します。 サポート対象
gkectl update credentials vsphere クラスタの vSphere 認証情報を更新します。 サポート対象

高度なクラスタでサポートされている VMware 用 Google Distributed Cloud の機能とサポートされていない機能の一覧については、高度なクラスタの実行時の違いをご覧ください。