このドキュメントでは、Google Distributed Cloud のユーザー クラスタに準備済みの認証情報を構成する方法について説明します。
準備済みの認証情報を使用すると、管理クラスタで Secret にユーザー クラスタ用の認証情報を保存できます。これにより、ユーザー クラスタを作成するときに、パスワードとサービス アカウント キーを管理ワークステーションに保持する必要がないため、セキュリティが強化されます。
Secret は、管理クラスタで事前に準備します。その後、ユーザー クラスタを作成する際、管理クラスタに準備済み Secret から特定の認証情報を取得するように指定できます。ユーザー クラスタで認証情報をローテーションするときに、準備済み Secret を使用することもできます。
始める前に
管理者クラスタを作成します(まだ作成していない場合)。
手順の概要
Secret 構成ファイルに入力します。
管理クラスタで Secret のグループを作成します。各 Secret グループは独自の Kubernetes Namespace にあります。
ユーザー クラスタを作成します。ユーザー クラスタの構成ファイルで、管理クラスタ内の特定の Namespace の Secret から認証情報を取得するように指定します。
必要に応じて、Secret グループと Secret のバージョンを追加します。
必要に応じて、既存のユーザー クラスタの認証情報を更新します。
必要に応じて、追加のユーザー クラスタを作成します。各ユーザー クラスタの構成ファイルで、Secret の Namespace を指定します。特定の認証情報に使用する Secret のバージョンを指定することもできます。
Secret 構成ファイルに入力する
Secret 構成ファイルのテンプレートを生成します。
gkectl create-config secrets
上記のコマンドにより、secrets.yaml
という名前のファイルが生成されます。このファイルの名前と場所は、必要に応じて変更できます。
Secret 構成ファイルのドキュメントを読み、構成ファイルの内容を把握します。このドキュメントは、別のタブやウィンドウで開くこともできます。
Secret の構成ファイルに、実際の状況に合う値を入力します。namespace
には gke-onprem-secrets-
で始まる値を入力する必要があります。
以下の例では、Secret 構成ファイルに Secret のグループが 1 つ存在します。このグループには、vCenter 認証情報と 4 つのサービス アカウント キーの値があります。
apiVersion: v1 kind: ClusterSecrets secretGroups: - namespace: "gke-onprem-secrets-user-cluster-1" secrets vCenter: username: "my-vcenter-account" password: "U$icUKEW#INE" componentAccessServiceAccount: serviceAccountKeyPath: "my-key-folder/component-access-key.json" registerServiceAccount: serviceAccountKeyPath: "my-key-folder/connect-register-key.json" stackdriverServiceAccount: serviceAccountKeyPath: "my-key-folder/log-mon-key.json" cloudAuditLoggingServiceAccount: serviceAccountKeyPath: "my-key-folder/audit-log-key.json"
準備済み Secret を作成する
準備済み Secret を管理クラスタに作成します。
gkectl prepare secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG --secret-config SECRETS_CONFIG
次のように置き換えます。
ADMIN_CLUSTER_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス
SECRETS_CONFIG: Secret 構成ファイルのパス
準備済み Secret を表示する
管理クラスタの準備済み Secret を一覧表示します。
gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG
出力例:
The following secrets have been found: - namespace: gke-onprem-secrets-user-cluster-1 - secrets with name prefix: component-access-sa-creds name: component-access-sa-creds.1, version 1, age: 58s - secrets with name prefix: cloud-audit-logging-service-account-creds name: cloud-audit-logging-service-account-creds.1, version: 1, age: 58s - secrets with name prefix: register-service-account-creds name: register-service-account-creds.1, version: 1, age: 58s - secrets with name prefix: stackdriver-service-account-creds name: stackdriver-service-account-creds.1, version: 1, age: 58s - secrets with name prefix: vsphere-creds name: vsphere-creds.1, version: 1, age: 58s
kubectl get secrets
を実行して、Namespace 内の Secret を一覧表示することもできます。次に例を示します。
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secrets --namespace gke-onprem-secrets-user-cluster-1
出力例:
component-access-sa-creds ... cloud-audit-logging-service-account-creds ... register-service-account-creds.1 ... stackdriver-service-account-creds.1 ... vsphere-creds.1 ...
上記の出力から、各 Secret 名に Secret のバージョンを示す拡張子が付いていることがわかります。この例では、Secret のバージョンはすべて 1 です。
ユーザー クラスタを作成する
ユーザー クラスタを作成するの手順に沿って操作します。
ユーザー クラスタの構成ファイルに入力するときに、preparedSecrets.namespace
の値を入力します。この値は、Secret 構成ファイルで前に指定した Namespace と一致する必要があります。
例:
preparedSecrets: namespace: "gke-onprem-secrets-user-cluster-1"
ユーザー クラスタの構成ファイルでは、次のフィールドに値を指定しないでください。Google Distributed Cloud は、準備済み Secret から認証情報と鍵を取得するため、これらのフィールドは不要です。
vCenter.credentials.fileRef.path
componentAccessServiceAccountKeyPath
loadBalancer.f5BigIP.credentials.fileRef.path
gkeConnect.registerServiceAccountKeyPath
stackdriver.serviceAccountKeyPath
usageMetering.bigQueryServiceAccountKeyPath
cloudAuditLogging.serviceAccountKeyPath
privateRegistry.credentials.fileRef.path
ユーザー クラスタの構成ファイルで、使用する準備済み Secret のバージョンを指定します。次の例では、5 つの Secret のそれぞれにバージョン 1 を指定しています。
vCenter: credentials: secretRef: version "1" ... componentAccessServiceAccountKey: secretRef: version: "1" ... gkeConnect: registerServiceAccountKey: secretRef: version: "1" ... stackdriver: serviceAccountKey: secretRef: version: "1" ... cloudAuditLogging: serviceAccountKey: secretRef: version: "1"
version
の値は、整数文字列か「latest」という文字列にする必要があります。version
の値を指定しない場合は、最新バージョンが使用されます。
ユーザー クラスタを作成するの説明に従って、ユーザー クラスタの作成を完了します。
追加の準備済み Secret を作成する
このセクションでは、既存の Namespace でバージョン 2 の Secret をいくつか作成する方法について説明します。
secrets-2.yaml
という名前の新しい構成ファイルを作成します。既存の Namespace を指定し、選択した Secret の認証情報を指定します。
例:
apiVersion: v1 kind: ClusterSecrets secretGroups: - namespace: "gke-onprem-secrets-user-cluster-1" secrets: stackdriverServiceAccount: serviceAccountKeyPath: "log-mon-sa-2.json" cloudAuditLoggingServiceAccount: serviceAccountKeyPath: "audit-log-sa-2.json"
上の例では、gke-onprem-secrets-user-cluster-1
Namespace 内の次の Secret のキーパスを指定しています。
stackdriver-service-account-creds
Secret のバージョン 2cloud-audit-logging-service-account-creds
Secret のバージョン 2
新しい Secret を作成します。
gkectl prepare secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG --secret-config secrets-2.yaml
管理クラスタの準備済み Secret を一覧表示します。
gkectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG list secrets
出力例:
The following secrets have been found: - namespace: gke-onprem-secrets-user-cluster-1 - secrets with name prefix: component-access-sa-creds name: component-access-sa-creds.1, version 1, age: 11h - secrets with name prefix: cloud-audit-logging-service-account-creds name: cloud-audit-logging-service-account-creds.1, version: 1, age: 11h name: cloud-audit-logging-service-account-creds.2, version: 2, age: 33m - secrets with name prefix: register-service-account-creds name: register-service-account-creds.1, version: 1, age: 11h - secrets with name prefix: stackdriver-service-account-creds name: stackdriver-service-account-creds.1, version: 1, age: 11h name: stackdriver-service-account-creds.2, version: 2, age: 33m - secrets with name prefix: vsphere-creds name: vsphere-creds.1, version: 1, age: 11h
上記の出力では、2 つのバージョンの stackdriver-service-account-creds
Secret と 2 つのバージョンの cloud-audit-logging-service-account-creds
Secret があることがわかります。
ユーザー クラスタの認証情報をローテーションする
このセクションでは、既存のユーザー クラスタで選択した認証情報をローテーションする方法について説明します。
認証情報をローテーションする前に、クラスタで使用されている現在の Secret バージョンを確認します。
gkectl list secrets cluster --cluster-name USER_CLUSTER_NAME kubeconfig ADMIN_CLUSTER_KUBECONFIG
出力例:
The following prepared secrets have been used for cluster "user-cluster-1": - namespace: gke-onprem-secrets-user-cluster-1 secret: vsphere-creds.1, version: 1 secret: f5-creds.1, version: 1 secret: component-access-sa-creds.1, version 1 secret: register-service-account-creds.1, version: 1 secret: stackdriver-service-account-creds.1, version: 1 secret: cloud-audit-logging-service-account-creds.1, version: 1
ユーザー クラスタ構成ファイルを user-cluster-update.yaml
という名前のファイルにコピーします。
user-cluster-update.yaml
に serviceAccountKey
セクションを追加します。たとえば、次の例では、stackdriver
と cloudAuditLogging
の下に serviceAccountKey
セクションがあります。
stackdriver: projectID: "my-project-123" clusterLocation: "us-central1" serviceAccountKey: secretRef: version: "2" cloudAuditLogging: projectID: "my-project-123" clusterLocation: "us-central-1" serviceAccountKey: secretRef: version: "latest"
上の例では、ユーザー クラスタの更新時に次のものを使用するように指定しています。
stackdriver-service-account-creds
Secret のバージョン 2cloud-audit-logging-service-account-creds
Secret の最新バージョン。この例では、バージョン 2 です。
ユーザー クラスタの認証情報を更新します。
gkectl update credentials stackdriver --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config user-cluster-2.yaml gkectl update credentials cloudauditlogging --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config user-cluster-2.yaml
これで、ユーザー クラスタが次の準備済み Secret を使用するようになりました。
vsphere-creds
のバージョン 1component-access-sa-creds
のバージョン 1register-service-account-creds
のバージョン 1stackdriver-service-account-creds
のバージョン 2cloud-audit-logging-service-account-creds
のバージョン 2
追加の Secret とユーザー クラスタを作成する
追加のユーザー クラスタを作成する場合は、準備済み Secret をどのように整理するかを検討します。管理クラスタには、ユーザー クラスタごとに個別の Namespace を作成することができます。あるいは、複数またはすべてのユーザー クラスタに対して、同じ準備済み Secret の Namespace を共有することもできます。
たとえば、Alice、Bob、Carol のそれぞれがユーザー クラスタを持つとします。次の例に示すように、3 つの Secret グループを作成できます。
apiVersion: v1 kind: ClusterSecrets secretGroups: - namespace: "gke-onprem-secrets-alice" secrets: vCenter: username: "alice" password: "zC7r^URDPq2t" componentAccessServiceAccount: serviceAccountKeyPath: "component-access-sa-a.json" registerServiceAccount: serviceAccountKeyPath: "register-sa-a.json" stackdriverServiceAccount: serviceAccountKeyPath: "log-mon-sa-a.json" cloudAuditLoggingServiceAccount: serviceAccountKeyPath: "audit-log-sa-a.json" - namespace: "gke-onprem-secrets-bob" secrets: vCenter: username: "bob" password: "zC8r^URDPq2t" componentAccessServiceAccount: serviceAccountKeyPath: "component-access-sa-b.json" registerServiceAccount: serviceAccountKeyPath: "register-sa-b.json" stackdriverServiceAccount: serviceAccountKeyPath: "log-mon-sa-b.json" cloudAuditLoggingServiceAccount: serviceAccountKeyPath: "audit-log-sa-b.json" - namespace: "gke-onprem-secrets-carol" secrets: vCenter: username: "carol" password: "zC9r^URDPq2t" componentAccessServiceAccount: serviceAccountKeyPath: "component-access-sa-c.json" registerServiceAccount: serviceAccountKeyPath: "register-sa-c.json" stackdriverServiceAccount: serviceAccountKeyPath: "log-mon-sa-c.json" cloudAuditLoggingServiceAccount: serviceAccountKeyPath: "audit-log-sa-c.json"
時間の経過とともに、各 Secret グループには Secret の追加バージョンを作成できます。
ユーザー クラスタの構成ファイルで、serviceAccountKey.secretRef.version
の値を指定して、使用する Secret のバージョンを指定します。値は "latest"
、空の文字列、整数文字列に設定できます。
たとえば、すべての Secret にバージョン 1、2、3 があるとします。これは、Alice のユーザー クラスタ構成ファイルの一部とします。
apiVersion: v1 kind: UserCluster name: "user-cluster-alice" preparedSecrets: namespace: "gke-onprem-secrets-alice" ... vCenter: credentials: gkeConnect: projectID: "project-a" serviceAccountKey: secretRef: version: "2" stackdriver: projectID: "project-a" clusterLocation: "us-central1" serviceAccountKey: secretRef: version: "latest" cloudAuditLogging: projectID: "project-a" clusterLocation: "us-central-1" serviceAccountKey: secretRef: version: ""
この例では、次のことを確認できます。
vCenter で
secretRef
が指定されていないため、クラスタはgke-onprem-secrets-alice
Namespace 内の最新バージョンのvsphere-creds
Secret を使用します。クラスタは、
gke-onprem-secrets-alice
Namespace 内のregister-service-account-creds
Secret のバージョン 2 を使用します。クラスタは、
gke-onprem-secrets-alice
Namespace 内のstackdriver-service-account-creds
Secret の最新バージョンを使用します。この例では、バージョン 3 です。cloudAuditLogging
のバージョンは空の文字列であるため、クラスタはgke-onprem-secrets-alice
Namespace 内のcloud-audit-logging-service-account-creds
Secret の最新バージョンを使用します。この例では、バージョン 3 です。コンポーネント アクセス サービス アカウントに
secretRef.version
が指定されていないため、クラスタは最新バージョンを使用します。
準備済み Secret を削除する
すべての準備済み Secret とその Namespace を一覧表示するには:
gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG
準備済み Secret の Namespace がユーザー クラスタで使用されていない場合は、Namespace を削除できます。
準備済み Secret の Namespace と、その中のすべての Secret を削除するには:
gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
個々の準備済み Secret をユーザー クラスタが使用していない場合は、Secret を削除できます。
個々の準備済み Secret を削除するには:
gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --secret-name SECRET