本頁面將逐步說明如何管理 Google Distributed Cloud (GDC) 氣隙專案中儲存空間值區的存取權,確保適當人員擁有適當權限。本文將說明使用角色繫結和預先定義角色,取得及授予使用者和服務帳戶存取權的先決條件和步驟。這項資訊可協助您有效控管儲存空間資源的存取權,同時兼顧安全性和作業效率。
本頁面適用於基礎架構營運商群組的 IT 管理員,或應用程式營運商群組的開發人員,這些對象負責管理 GDC 氣隙環境中儲存空間值區的存取權設定。詳情請參閱 GDC air-gapped 的目標對象說明文件。
事前準備
專案命名空間可管理 Management API 伺服器中的 bucket 資源。您必須擁有專案,才能使用 bucket 和物件。
授予 bucket 存取權
您可以在 Management API 伺服器中,使用預先定義的角色建立及套用 RoleBinding,為其他使用者或服務帳戶提供 bucket 存取權。
預先定義的角色
project-bucket-object-viewer:使用者可藉此列出專案中的所有值區、列出這些值區中的物件,以及讀取物件和物件中繼資料。但無法對物件執行寫入作業。例如上傳、覆寫、刪除。具備機構及其專案中雙區域值區的唯讀權,以及這些值區中物件的唯讀權。
project-bucket-object-admin:使用者可列出專案中的所有值區,並對物件執行寫入和讀取作業。例如上傳、覆寫、刪除。具備機構及其專案中雙區域值區的唯讀權,以及這些值區中物件的讀寫權。
project-bucket-admin:使用者可管理指定命名空間中的所有值區,以及這些值區中的所有物件。具備機構及其專案中雙區域值區的唯讀權,以及這些值區中物件的讀寫權。
如要查看上述角色授予的完整權限清單,請參閱「預設角色權限」一節。
請專案 IAM 管理員授予您建立 RoleBinding 的權限。以下範例說明如何建立 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: 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 apiGroup: rbac.authorization.k8s.io # Could be bob or bob@example.com based on your organization settings.
套用 YAML 檔案:
kubectl apply \ -f rolebinding-object-admin-all-buckets.yaml
取得 bucket 存取憑證
授予值區存取權後,系統會在 Secret 中建立存取憑證。
密鑰名稱的格式為 object-storage-key-STORAGE_CLASS-SUBJECT_TYPE-SUBJECT_HASH
。
STORAGE_CLASS
的值包括:std
儲存空間級別。Standard
SUBJECT_TYPE
的值包括:user
。sa
,適用於 ServiceAccount。
SUBJECT_HASH
是主體名稱的 base32 編碼 SHA256 雜湊。
舉例來說,使用者 bob@foo.com
有一個名為:
object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama
取得使用者存取憑證
如果是使用者主體,Secret 會位於 Management API 伺服器的 object-storage-access-keys
命名空間中。
執行下列指令,列出您有權在
object-storage-access-keys
命名空間中查看的 Secret 資源:kubectl auth can-i --list --namespace object-storage-access-keys
注意:如果您是管理員,且有權查看所有 Secret 資源或模擬其他使用者,可以執行下列其中一個指令,找出特定使用者的 Secret 名稱:
列出屬於特定使用者的所有密鑰:
export USER_NAME=bob@example.com kubectl get secrets --namespace object-storage-access-keys -o json | jq -r --arg USER_NAME "${USER_NAME:?}" '.items[] | select( (.metadata.annotations."object.gdc.goog/subject"==$USER_NAME)) | .metadata.name'
模擬使用者,查看他們可以查看哪些祕密:
export USER_NAME=bob@example.com kubectl auth can-i --list --namespace object-storage-access-keys --as "${USER_NAME:?}"
如果您可以查看這個命名空間中的任何密鑰,輸出內容應會包含類似下列的密鑰名稱:
object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama
取得對應 Secret 的內容:
kubectl get -o yaml --namespace object-storage-access-keys secret object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama
您會收到類似以下的輸出內容:
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」一節的說明,使用產生的資訊。
取得服務帳戶存取權
如果是服務帳戶 (SA) 主體,系統會在與服務帳戶相同的命名空間中建立密鑰。
執行下列指令,確認您可以在命名空間中取得及列出 Secret 資源。如果無法,請與管理員聯絡:
export SA_NAMESPACE=NAMESPACE_NAME
kubectl auth can-i --list --namespace $SA_NAMESPACE
如要找出 Secret 名稱,請執行下列指令:
export SA_NAME=SA_NAME
kubectl get secrets --namespace $SA_NAMESPACE -o json | jq -r --arg USER_NAME "${SA_NAME:?}" '.items[] | select( (.metadata.annotations."object.gdc.goog/subject"==$USER_NAME)) | .metadata.name'
您會收到類似以下的輸出內容:
object-storage-key-std-sa-mng3olp3vsynhswzasowzu3jgzct2ert72pjp6wsbzqhdwckwzbq
您可以在 Pod 中將 Secret 參照為環境變數或檔案。
預設角色權限
請注意,您也可以在全域 API 伺服器中使用預先定義的角色,取得雙區域儲存空間的管理和作業存取權。
project-bucket-object-viewer 權限
這個角色可授予權限,以取得及列出值區中的物件和物件中繼資料。
專案值區物件檢視者動詞授予的所有物件儲存空間權限如下:
Bucket API 權限:
- get
- list
- watch
S3 物件儲存空間權限:
- GetBucketVersioning
- GetObject
- GetObjectAcl
- GetObjectLegalHold
- GetObjectRetention
- GetObjectTagging
- GetObjectVersion
- GetObjectVersionTagging
- ListBucket
- ListBucketVersions
- ListBucketMultipartUploads
- ListMultipartUploadParts
project-bucket-object-admin 權限
這個角色可授予在 bucket 中放置及刪除物件、物件版本和標記的權限。此外,這個角色也會授予 project-bucket-object-viewer
中的所有權限。
角色授予的所有其他物件儲存空間權限如下:
S3 物件儲存空間權限:
- AbortMultipartUpload
- DeleteObject
- DeleteObjectTagging
- DeleteObjectVersion
- DeleteObjectVersionTagging
- PutObject
- PutObjectTagging
- PutObjectVersionTagging
- PutOverwriteObject
- RestoreObject
專案值區管理員權限
這個角色可授予在專案命名空間中建立、更新或刪除 Bucket 資源的權限。此外,這個角色也會授予project-bucket-object-admin
中的所有權限。
角色授予的額外權限清單如下:
Bucket API 權限:
- 建立
- 更新
- 刪除