授予及取得儲存空間 bucket 存取權

本頁面將逐步說明如何管理 Google Distributed Cloud (GDC) 氣隙裝置專案中儲存空間值區的存取權,確保適當人員具備適當權限。本文將說明使用角色繫結和預先定義角色,取得及授予使用者和服務帳戶存取權的先決條件和步驟。這項資訊可協助您有效控管儲存空間資源的存取權,同時維持安全性和作業效率。

本文適用對象為基礎架構營運商群組的 IT 管理員,或是應用程式營運商群組的開發人員,他們負責管理 GDC 氣隙環境中儲存空間值區的存取權設定。

事前準備

專案命名空間可管理 Management API 伺服器中的 bucket 資源。您必須擁有專案,才能使用值區和物件。

授予 bucket 存取權

您可以建立並套用 RoleBindings 和預先定義的角色,為其他使用者或服務帳戶提供 bucket 存取權。

預先定義的角色

  • project-bucket-object-viewer:這個角色可讓使用者列出專案中的所有值區、列出這些值區中的物件,以及讀取物件和物件中繼資料。這個角色無法對物件執行寫入作業,例如上傳、覆寫或刪除。

  • project-bucket-object-admin:這個角色可讓使用者列出專案中的所有值區,並對物件執行寫入和讀取作業,例如上傳、覆寫或刪除。

  • project-bucket-admin:這個角色可讓使用者管理指定命名空間中的所有值區,以及這些值區中的所有物件。

如要查看這些角色獲授權限的完整清單,請參閱「預設角色權限」一節。

如要取得建立專案角色繫結所需的權限,請要求專案 IAM 管理員授予您專案 IAM 管理員 (project-iam-admin) 角色。

以下範例會建立 RoleBinding,授予使用者和服務帳戶存取權:

  1. 在系統上建立 YAML 檔案,例如 rolebinding-object-admin-all-buckets.yaml

     apiVersion: rbac.authorization.k8s.io/v1
     kind: RoleBinding
     metadata:
       namespace: NAMESPACE_NAME
       name: readwrite-all-buckets
     roleRef:
       kind: Role
       name: project-bucket-object-admin
       apiGroup: rbac.authorization.k8s.io
     subjects:
     - kind: ServiceAccount
       namespace: NAMESPACE_NAME
       name: SA_NAME
     - kind: User
       namespace: NAMESPACE_NAME
       name: bob@example.com  # Could be bob or bob@example.com based on your organization settings.
       apiGroup: rbac.authorization.k8s.io
     ```
    
  2. 套用 YAML 檔案:

    kubectl apply \
    -f rolebinding-object-admin-all-buckets.yaml
    

取得 bucket 存取憑證

授予值區存取權時,系統會在 Secret 中建立存取憑證。

密鑰名稱的格式為 object-storage-key-std-SUBJECT_TYPE-SUBJECT_HASH

  • SUBJECT_TYPE 的值如下:
    • user:使用者。
    • saServiceAccount
  • SUBJECT_HASH 是主體名稱的 base32 編碼 SHA256 雜湊。

舉例來說,使用者 bob@foo.com 擁有下列名稱的密鑰:

object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja

存取使用者密鑰

如果是使用者主體,密鑰會位於 Management API 伺服器中的 object-storage-access-keys 命名空間。

  1. 找出密鑰名稱:

    kubectl auth can-i --list --namespace object-storage-access-keys | grep object-storage-key-std
    

    您會收到類似以下的輸出內容:

    secrets        []        [object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja,object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja]        [get]
    
  2. 取得對應 Secret 的內容,以存取值區:

    kubectl get -o yaml --namespace object-storage-access-keys secret
    object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
    

    您會收到類似以下的輸出內容:

    data:
      access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8=
      create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3
      secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==
    
  3. 解碼存取金鑰 ID 和密鑰:

    echo "MEhYM08wWUMySjcyMkVKTFBKRU8=" | base64 -d \
        && echo \
        && echo "Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==" | base64 -d
    

    您會收到類似以下的輸出內容:

    0HX3O0YC2J722EJLPJEO
    Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
    
  4. 請按照「設定 s3cmd」一節的說明,使用產生的資訊進行設定。

存取服務帳戶密鑰

如果是服務帳戶 (SA) 主體,系統會在與服務帳戶相同的命名空間中建立密鑰。如要找出名稱,請執行下列指令:

  kubectl get --namespace NAMESPACE_NAME secrets -o=jsonpath=
  '{.items[?(@.metadata.annotations.object\.gdc\.goog/subject=="SA_NAME")].metadata.name}'

您會收到類似以下的輸出內容:

  object-storage-key-std-sa-mng3olp3vsynhswzasowzu3jgzct2ert72pjp6wsbzqhdwckwzbq

您可以在 Pod 中將 Secret 參照為環境變數 (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables) 或檔案 (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod)。

預設角色權限

使用物件儲存空間時,您可能需要要求下列角色。

project-bucket-object-viewer 權限

這個角色可授予權限,以取得及列出值區中的物件和物件中繼資料。

project-bucket-object-viewer 角色具備下列權限:

  • Bucket API 權限

    1. 取得
    2. 清單
    3. 觀看
  • S3 物件儲存空間權限

    1. GetObject
    2. GetObjectAcl
    3. GetObjectVersion
    4. ListBucket
    5. ListBucketVersions
    6. ListBucketMultipartUploads
    7. ListMultipartUploadParts

project-bucket-object-admin 權限

這個角色可授予在 bucket 中放置及刪除物件、物件版本和標記的權限。此外,這個角色也會授予 project-bucket-object-viewer 中的所有權限。

project-bucket-object-admin 角色具備下列物件儲存空間權限:

  • S3 物件儲存空間權限

    1. AbortMultipartUpload
    2. DeleteObject
    3. PutObject

專案值區管理員權限

這個角色可授予在專案命名空間中建立、更新或刪除 Bucket 資源的權限。此外,這個角色也會授予project-bucket-object-admin中的所有權限。

project-bucket-object-admin 角色具備下列權限:

  • Bucket API 權限

    1. 建立
    2. 更新
    3. 刪除