本頁面將逐步說明如何管理 Google Distributed Cloud (GDC) 實體隔離專案中的 Storage bucket 存取權,確保合適的人員具備適當權限。包括必要條件,以及使用角色繫結和預先定義的角色,取得及授予使用者和服務帳戶存取權的步驟。這項資訊可讓您有效控管儲存空間資源的存取權,同時維持安全性及作業效率。
本文適用於基礎架構營運商群組中的 IT 管理員,或應用程式營運商群組中的開發人員,他們負責管理 Google Distributed Cloud 實體隔離方案環境中 Storage bucket 的存取權設定。詳情請參閱「GDC 實體隔離方案說明文件的目標對象」。
事前準備
專案命名空間會管理 Management API 伺服器中的 bucket 資源。您必須有專案,才能使用 bucket 和物件。
授予 bucket 存取權
您可以建立並套用 RoleBinding,參照 Management API 伺服器中預先定義的角色,將 S3 API 資源 (例如 bucket 和 bucket 中的物件) 的存取權授予 User 和 ServiceAccount 主體。
預先定義的角色
project-bucket-object-viewer:可讓使用者列出專案中的所有 bucket、列出這些 bucket 中的物件,以及讀取物件和物件中繼資料。無法對物件執行寫入作業。例如上傳、覆寫、刪除。具備組織及其專案中雙可用區 bucket 的唯讀權限,以及這些 bucket 中物件的唯讀權限。
project-bucket-object-admin:可讓使用者列出專案中的所有 bucket,並對物件執行寫入和讀取作業。例如上傳、覆寫、刪除。具備組織及其專案中雙可用區 bucket 的唯讀權限,以及這些 bucket 中物件的讀寫權限。
project-bucket-admin:使用者可以管理指定命名空間中的所有 bucket,以及這些 bucket 中的所有物件。具備組織及其專案中雙可用區 bucket 的唯讀權限,以及這些 bucket 中物件的讀寫權限。
如要查看上述角色授予的完整權限清單,請參閱「預先定義的角色權限」一節。
您必須具備專案的 IAM 專案管理員角色,才能在該專案中建立角色繫結。以下範例說明如何建立 RoleBinding 資源,將存取權授予使用者和服務帳戶:
在系統上建立 YAML 檔案,例如
rolebinding-object-admin-all-buckets.yaml。# Example file name: # rolebinding-object-admin-all-buckets.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: namespace: PROJECT_NAMESPACE name: readwrite-all-buckets roleRef: kind: Role name: project-bucket-object-admin apiGroup: rbac.authorization.k8s.io subjects: - kind: ServiceAccount namespace: PROJECT_NAMESPACE name: SA_NAME - kind: User namespace: PROJECT_NAMESPACE name: bob@example.com apiGroup: rbac.authorization.k8s.io # Could be bob or bob@example.com based on your organization settings.替換下列內容:
PROJECT_NAMESPACE:專案命名空間的名稱SA_NAME:服務帳戶名稱
套用 YAML 檔案:
kubectl apply \ -f rolebinding-object-admin-all-buckets.yaml
取得 bucket 存取憑證
授予 bucket 存取權後,系統會在 Secret 中建立存取憑證。
密鑰名稱的格式為 object-storage-key-STORAGE_CLASS-SUBJECT_TYPE-SUBJECT_HASH。
STORAGE_CLASS的值如下:Standard儲存空間級別的std。
SUBJECT_TYPE的值如下:user:使用者。sa:ServiceAccount。
SUBJECT_HASH是主體名稱的 base32 編碼 SHA256 雜湊。
舉例來說,使用者 bob@foo.com 有兩個密鑰,名稱分別為:
object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
取得使用者存取權
如果是使用者主體,Secret 位於 Management API 伺服器的 object-storage-access-keys 命名空間中。
執行下列指令,找出 Secret 名稱:
kubectl auth can-i --list --namespace object-storage-access-keys | grep "object-storage-key-"輸出內容大致如下:
secrets [] [object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja] [get]取得對應密鑰的內容,以存取
Standard儲存空間級別中的 bucket: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==解碼存取金鑰 ID 和密鑰:
echo "MEhYM08wWUMySjcyMkVKTFBKRU8=" | base64 -d \ && echo \ && echo "Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==" | base64 -d輸出內容大致如下:
0HX3O0YC2J722EJLPJEO Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT按照「設定 gdcloud CLI」一節的說明,使用產生的資訊。
取得服務帳戶存取權
只有在專案命名空間中存在 bucket 時,系統才會建立並提供 S3 密鑰憑證。
如果是服務帳戶 (SA) 主體,請從使用者叢集找出 Secret 名稱。
如為 Standard Storage 儲存空間級別,請執行下列指令來取得 Secret 名稱:
kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o json | jq -r '.secrets[] | select(.name | test("object-storage-key-std"))'手動查看列出的密鑰名稱,或使用
grep尋找object-storage-key-(std|nl):kubectl get -n=PROJECT_NAME \ serviceaccount SA_NAME \ -o=jsonpath='{.secrets}{"\n"}' | grep -E 'object-storage-key-(std|nl)'更改下列內容:
PROJECT_NAME:專案名稱。SA_NAME:服務帳戶名稱。
預設角色權限
全域 API 伺服器提供預先定義的角色,可用於管理及操作雙區域 bucket。這些角色也會授予可用區 bucket 的存取權,但前提是使用 IAMRoleBinding 資源,而非 RoleBinding 或 ClusterRoleBinding 資源。如要進一步瞭解角色繫結,請參閱「授予及撤銷存取權」。
project-bucket-object-viewer 權限
這個角色可授予權限,讓使用者取得及列出 bucket 中的物件和物件中繼資料。
project-bucket-object-viewer Role 授予的所有物件儲存空間權限清單如下:
Bucket API 權限:
- get
- list
- watch
S3 物件儲存空間權限:
- GetObject
- GetObjectAcl
- GetObjectLegalHold
- GetObjectRetention
- GetObjectTagging
- GetObjectVersion
- GetObjectVersionTagging
- ListBucket
- ListBucketVersions
- ListBucketMultipartUploads
- ListMultipartUploadParts
project-bucket-object-admin 權限
這個角色可授予權限,允許在 bucket 中放置及刪除物件,以及物件版本和標記。此外,這項角色也會授予 project-bucket-object-viewer 中的所有權限。
Role 授予的所有其他物件儲存空間權限清單如下:
S3 物件儲存空間權限:
- AbortMultipartUpload
- DeleteObject
- DeleteObjectTagging
- DeleteObjectVersion
- DeleteObjectVersionTagging
- PutObject
- PutObjectTagging
- PutObjectVersionTagging
- PutOverwriteObject
- RestoreObject
project-bucket-admin 權限
這項角色可授予權限,在專案命名空間中建立、更新或刪除 Bucket 資源。此外,這項角色也會授予 project-bucket-object-admin 中的所有權限。
Role 授予的其他權限清單如下:
Bucket API 權限:
- 建立
- 更新
- 刪除