Google Distributed Cloud(GDC)エアギャップ アプライアンス オブジェクト ストレージは、OTS(ONTAP Select)によって提供されます。OTS には独自のオブジェクト ストレージ ユーザー管理システムがあります。各 OTS オブジェクト ストレージ ユーザー認証情報は、クラスタ内の Secret として保存されます。
このドキュメントでは、OTS オブジェクト ストレージのユーザー認証情報をローテーションする手順について説明します。次のような状況では、オブジェクト ストレージのユーザー認証情報をローテーションします。
- すべてのユーザー鍵をローテーションする定期的な鍵のローテーション。
- 重要な露出を軽減します。公開されたユーザーキーはできるだけ早くローテーションする必要があります。
始める前に
次の手順を行います。
- ノートパソコンの前提条件を満たしていることを確認します。
- OTS クラスタにログインして
vserver object-store-serverCLI コマンドを実行できることを確認します。 kubectlを使用して、管理者としてインフラストラクチャ クラスタと管理クラスタにログインできることを確認します。
UID を変換
各オブジェクト ストレージ ユーザーには、Kubernetes Secret として保存され、Kubernetes ワークロードがバックエンド オブジェクト ストレージにアクセスするために使用するアクセスキーとシークレット キーがあります。ユーザー鍵のローテーションには、すべてのシークレットの更新が含まれます。
オブジェクト ストレージ ユーザーのリストを取得するには、次のコマンドを使用して 3 つのノードのいずれかにログインします。
vserver object-store-server user show
出力は UID のリストで、次のようになります。
[
"root",
"k8ssa_gpc-system_inventory-export-images",
"k8ssa_gpc-system_inventory-export-hardware",
"k8su_test-user@example.com"
]
ユーザーには次の 3 種類があります。
| UID | ユーザーの種類 | シークレット名 | シークレット Namespace |
|---|---|---|---|
| root | システム管理者 | objectstorage-tenant-bucket-controller-standard-system-s3-sa | gpc-system |
| objectstorage-tenant-bucket-controller-standard-user-s3-sa | |||
| objectstorage-tenant-bucket-controller-nearline-user-s3-sa | |||
| k8ssa_<namespace>_<sa> | Kubernetes サービス アカウント | object-storage-key-std-sa-<encoded-sa> | <namespace> |
| k8su_<username> | Kubernetes ユーザー | object-storage-key-std-user-<encoded-username> | object-storage-access-keys |
root ユーザーには 3 つの同一のシークレットがあり、複数のストレージ クラスとテナント カテゴリを含むデータセンターの構造を反映しています。一方、アプライアンスにはオブジェクト ストレージの単一の階層しかありません。root ユーザーに関連付けられている3 つのシークレットすべてを同時にローテーションする必要があります。
root ユーザーを除くユーザー識別子(UID)は、k8ssa_<namespace>_<sa> または k8su_<username> のいずれかの形式に準拠する必要があります。<encoded-sa> または <encoded-username> のいずれかを取得します。
echo -n 'UID_SUFFIX' | shasum -a 256 | cut -d " " -f 1 | xxd -r -p | base32 | awk '{print tolower($0)}' | sed 's/=*$//g'
UID の UID_SUFFIX を <sa> に置き換えると、<encoded-sa> が得られます。
UID の UID_SUFFIX を <username> に置き換えると、<encoded-username> が得られます。
ユーザー鍵をローテーションする
OTS クラスタにログインします。
オブジェクト ストレージ ユーザーの UID のリストを取得します。
vserver object-store-server user show結果は UID のリストです。例については、Translate UID をご覧ください。リスト内の各 UID に対して次の手順を繰り返します。
ターゲット ユーザーの古いアクセスキーとシークレット キーを取得します。
set -privilege advanced vserver object-store-server user show -user UIDUIDは、ターゲット ユーザーの UID に置き換えます。オブジェクト ストレージ内のターゲット ユーザーの新しいアクセスキーとシークレット キーを生成します。このステップの後、古いキーと新しいキーが共存し、どちらもアクセスに使用できます。
vserver object-store-server user regenerate-keys -vserver root-admin -user UID新しいアクセスキーとシークレット キーで Kubernetes Secret を更新します。ルート インフラストラクチャ クラスタまたは管理クラスタのシークレットを更新するだけで、必要に応じてシークレットが他のクラスタに伝播されます。
kubectl --kubeconfig KUBECONFIG patch secret -n SECRET_NAMESPACE SECRET_NAME --type='json' -p='[{"op": "replace", "path": "/data/access-key-id", "value": "'"$(echo -n "ACCESS_KEY" | base64)"'"}, {"op": "replace", "path": "/data/secret-access-key", "value": "'"$(echo -n "ACCESS_KEY" | base64)"'"}]'次のように置き換えます。
KUBECONFIG: kubeconfig へのパス。API サーバーはrootユーザーのコントロール プレーン API サーバーである必要があります。そうでない場合は、管理 API サーバーである必要があります。SECRET_NAME: ユーザーの Secret 名。UID の変換セクションから取得できます。ユーザーに複数の Kubernetes Secret(rootユーザー)に置き換えて、コマンドを実行します。SECRET_NAMESPACE: ユーザーの Secret 名前空間。UID の変換セクションから導出できます。ACCESS_KEY: 前の手順で生成された新しいアクセスキー。SECRET_KEY: 前の手順で生成された新しいシークレット キー。
シークレットを使用するワークロードは、自動的に更新されるように実装する必要があります。そうでない場合は、ワークロードを再起動して、シークレットの変更を反映する必要があります。
たとえば、
rootユーザーの場合は、インフラストラクチャ クラスタで次のワークロードを再起動する必要があります。kubectl --kubeconfig KUBECONFIG rollout restart deployment obj-bucket-cm-backend-controller -n obj-system
検証
オブジェクト ストレージのバケットの作成とオブジェクトのアップロードとダウンロードに沿って、新しいバケットを作成し、RBAC を使用してアクセス権を付与します。バケットが正常に作成され、サブジェクトにアクセスに必要な権限が付与されている場合、オブジェクト ストレージ キーのローテーションは完了します。