輪替物件儲存空間憑證

Google Distributed Cloud (GDC) 實體隔離設備物件儲存空間是由 OTS (ONTAP Select) 提供。OTS 有自己的物件儲存空間使用者管理系統。每個 OTS 物件儲存空間使用者憑證都會以密鑰形式儲存在叢集中。

本文說明如何輪替 OTS 物件儲存空間使用者憑證。在下列情況下,請輪替物件儲存空間使用者憑證:

  • 定期排定金鑰輪替作業,輪替所有使用者金鑰。
  • 降低主要風險。請盡快輪替外洩的使用者金鑰。

事前準備

操作步驟如下:

  1. 確認符合筆電先決條件
  2. 確認您可以登入 OTS 叢集,並執行 vserver object-store-server CLI 指令。
  3. 確認您可以使用 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_&ltnamespace>_&ltsa> Kubernetes 服務帳戶 object-storage-key-std-sa-&ltencoded-sa> &ltnamespace>
k8su_&ltusername> Kubernetes 使用者 object-storage-key-std-user-&ltencoded-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>

輪替使用者金鑰

  1. 登入 OTS 叢集。

  2. 取得物件儲存空間使用者 UID 清單。

    vserver object-store-server user show
    

    結果會是 UID 清單。如需範例,請參閱「翻譯 UID」。針對清單中的每個 UID 重複執行下列步驟。

  3. 取得目標使用者的舊存取金鑰和密鑰。

    set -privilege advanced
    vserver object-store-server user show -user UID
    

    UID 替換為目標使用者 UID。

  4. 在物件儲存空間中,為目標使用者產生新的存取金鑰和密鑰。 完成這個步驟後,新舊金鑰會並存,兩者皆可用於存取。

    vserver object-store-server user regenerate-keys -vserver root-admin -user UID
    
  5. 使用新的存取金鑰和密鑰更新 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)"'"}]'
    

    更改下列內容:

    • KUBECONFIG:kubeconfig 的路徑。API 伺服器必須是 root 使用者的控制層 API 伺服器;否則,必須是管理 API 伺服器。
    • SECRET_NAME:使用者的祕密名稱,可從「Translate UID」部分衍生而來。如果使用者有多個 Kubernetes Secret (即 root 使用者),請將每個密碼名稱替換為並執行指令。
    • SECRET_NAMESPACE:使用者的私密命名空間,可從「翻譯 UID」部分衍生。
    • ACCESS_KEY:上一步中產生的新存取金鑰。
    • SECRET_KEY:在上一步中產生的新密鑰。
  6. 必須實作會取用密鑰的工作負載,才能自動重新整理。如果不是,您必須重新啟動工作負載,才能反映密碼的變更。

    舉例來說,如果是 root 使用者,您需要在基礎架構叢集中重新啟動下列工作負載:

    kubectl --kubeconfig KUBECONFIG rollout restart deployment obj-bucket-cm-backend-controller -n obj-system
    

驗證

請按照 Object Storage 的建立 bucket上傳及下載物件操作說明,建立新 bucket 並使用 RBAC 授予存取權。如果成功建立 bucket,且主體具備存取 bucket 的必要權限,即表示物件儲存金鑰輪替完成。