このページでは、次のサービス アカウント キーをローテーションする方法について説明します。
サービス アカウント キーをローテーションするには:
- 現在のシークレットのバックアップを保存するディレクトリを作成します。 - mkdir backup 
- 関連するサービス アカウントについて、次の情報をメモします。 - コンポーネント アクセス - クラスタ - シークレット - 名前空間 - 管理者 - 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-credsSecret はコンポーネント アクセス サービス アカウント キーを保持します。
- 非公開レジストリを使用している場合は、private-registry-credsSecret には、コンポーネント アクセス サービス アカウント キーではなく、非公開レジストリの認証情報が保持されます。
 - 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 
- 非公開レジストリを使用していない場合、
- 次のコマンドを使用して、各シークレットのバックアップを作成します。 - 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
- 新しいサービス アカウント キー ファイルを作成するには、次のコマンドを実行します。 - gcloud iam service-accounts keys create NEW_KEY_FILE --iam-account IAM_ACCOUNT - 次のように置き換えます。 - NEW_KEY_FILE: 新しいサービス アカウント キー ファイルの名前
- IAM_ACCOUNT: サービス アカウントのメールアドレス。
 
- 管理クラスタの構成ファイルで、 - componentAccessServiceAccountKeyPathフィールド、- gkeConnectセクション、- stackdriverセクション、- cloudAuditLoggingセクションを見つけます。これらの場所では、サービス アカウント キー ファイルへのパスを置き換えてください。
- ユーザー クラスタの構成ファイルで、 - componentAccessServiceAccountKeyPathフィールド、- gkeConnectセクション、- stackdriverセクション、- cloudAudigLoggingセクションを見つけます。これらの場所では、サービス アカウント キー ファイルへのパスを置き換えてください。
- 次のコマンドを実行して、変更を保存します。 - 一度に 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 の機能とサポートされていない機能の一覧については、高度なクラスタの実行時の違いをご覧ください。