このページでは、次のサービス アカウント キーをローテーションする方法について説明します。
サービス アカウント キーをローテーションするには:
現在のシークレットのバックアップを保存するディレクトリを作成します。
mkdir backup
関連するサービス アカウントについて、次の情報をメモします。
コンポーネント アクセス
クラスタ シークレット 名前空間 管理 admin-cluster-creds kube-system 管理 ユーザー クラスタ証明書 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 管理 ユーザー クラスタ証明書 CLUSTER_NAME-gke-onprem-mgmt logging-monitoring
クラスタ シークレット 名前空間 管理 admin-cluster-creds kube-system 管理 ユーザー クラスタ証明書 CLUSTER_NAME-gke-onprem-mgmt ユーザー google-cloud-credentials kube-system ユーザー stackdriver-service-account-key knative-serving 監査ロギング
クラスタ シークレット 名前空間 管理 admin-cluster-creds kube-system 管理 ユーザー クラスタ証明書 CLUSTER_NAME-gke-onprem-mgmt 管理 kube-apiserver CLUSTER_NAME 使用状況測定
クラスタ シークレット 名前空間 管理 ユーザー クラスタ証明書 CLUSTER_NAME-gke-onprem-mgmt ユーザー usage-metering-bigquery-service-account-key kube-system Stackdriver
クラスタ シークレット 名前空間 管理 admin-cluster-creds kube-system 管理 ユーザー クラスタ証明書 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
、usageMetering
を見つけます。これらの場所では、サービス アカウント キー ファイルへのパスを置き換えてください。次のコマンドを実行して、変更を保存します。一度に 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
usagemetering
stackdriver
sakeys
(複数のコンポーネントの鍵をローテーションします)
ADMIN_CLUSTER_KUBECONFIG
: 管理クラスタの kubeconfig ファイルのパス。ADMIN_CLUSTER_CONFIG
: 管理クラスタの 構成ファイルへのパス。USER_CLUSTER_CONFIG
: ユーザー クラスタの構成ファイルへのパス。
ノードの再作成
一部のサービス アカウント キーのローテーションでは、ノードの再作成が必要なため、さらに時間がかかることがあります。
サービス アカウント | ノードの再作成が必要 |
---|---|
コンポーネント アクセス | Container Registry を使用する場合: はい 非公開レジストリを使用する場合: いいえ |
監査ロギング | 管理クラスタ: はい、ただしコントロール プレーン ノードのみ kubeception を使用するユーザー クラスタ: いいえ Controlplane V2 を使用するユーザー クラスタ: はい、ただしコントロール プレーン ノードのみ |
logging-monitoring | いいえ |
connect-register | いいえ |
使用状況測定 | いいえ |
ノードの再作成が必要な鍵のローテーションでは、ノードはローリング アップデート プロセスで置き換えられます。つまり、ノードは 1 つずつ再作成されます。
鍵のローテーション中に発生する可能性のあるダウンタイムは、クラスタのアップグレード時のダウンタイムと同様です。詳細については、アップグレード中のダウンタイムをご覧ください。
バックアップを復元する
前の手順で作成したシークレットのバックアップを復元する必要がある場合は、次のコマンドを実行します。
kubectl apply -f backup/