Google Distributed Cloud (GDC) 實體隔離設備物件儲存空間是由 OTS (ONTAP Select) 提供。OTS 有自己的物件儲存空間使用者管理系統。每個 OTS 物件儲存空間使用者憑證都會以密鑰形式儲存在叢集中。
本文說明如何輪替 OTS 物件儲存空間使用者憑證。在下列情況下,請輪替物件儲存空間使用者憑證:
- 定期排定金鑰輪替作業,輪替所有使用者金鑰。
- 降低主要風險。請盡快輪替外洩的使用者金鑰。
事前準備
操作步驟如下:
- 確認符合筆電先決條件。
- 確認您可以登入 OTS 叢集,並執行
vserver object-store-serverCLI 指令。 - 確認您可以使用
kubectl以管理員身分登入基礎架構叢集和管理叢集。
翻譯 UID
每個物件儲存空間使用者都有存取金鑰和私密金鑰,這些金鑰會儲存為 Kubernetes 密鑰,並由 Kubernetes 工作負載用於存取後端物件儲存空間。輪替使用者金鑰包括更新所有密鑰。
如要取得物件儲存空間使用者清單,請使用下列指令登入其中一個節點:
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"
]
使用者分為三種類型:
| UID | 使用者類型 | 密鑰名稱 | 密鑰命名空間 |
|---|---|---|---|
| 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使用者有三個相同的密鑰,反映出資料中心的結構,其中包含多個儲存空間類別和租戶類別。相較之下,Appliance 只有單一層級的物件儲存空間。與根使用者相關聯的所有三個密碼都必須同時輪替。
使用者 ID (UID) (不含 root 使用者) 應採用 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 清單。如需範例,請參閱「翻譯 UID」。針對清單中的每個 UID 重複執行下列步驟。
取得目標使用者的舊存取金鑰和密鑰。
set -privilege advanced vserver object-store-server user show -user UID將
UID替換為目標使用者 UID。在物件儲存空間中,為目標使用者產生新的存取金鑰和密鑰。 完成這個步驟後,新舊金鑰會並存,兩者皆可用於存取。
vserver object-store-server user regenerate-keys -vserver root-admin -user UID使用新的存取金鑰和密鑰更新 Kubernetes 密鑰。您只需要更新根基礎架構叢集或管理叢集中的密鑰,必要時,密鑰會傳播至其他叢集。
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)"'"}]'更改下列內容:
必須實作會取用密鑰的工作負載,才能自動重新整理。如果不是,您必須重新啟動工作負載,才能反映密碼的變更。
舉例來說,如果是
root使用者,您需要在基礎架構叢集中重新啟動下列工作負載:kubectl --kubeconfig KUBECONFIG rollout restart deployment obj-bucket-cm-backend-controller -n obj-system
驗證
請按照 Object Storage 的建立 bucket 和上傳及下載物件操作說明,建立新 bucket 並使用 RBAC 授予存取權。如果成功建立 bucket,且主體具備存取 bucket 的必要權限,即表示物件儲存金鑰輪替完成。