本頁面將逐步說明如何管理 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
,授予使用者和服務帳戶存取權:
在系統上建立 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 ```
套用 YAML 檔案:
kubectl apply \ -f rolebinding-object-admin-all-buckets.yaml
取得 bucket 存取憑證
授予值區存取權時,系統會在 Secret 中建立存取憑證。
密鑰名稱的格式為 object-storage-key-std-SUBJECT_TYPE-SUBJECT_HASH
。
SUBJECT_TYPE
的值如下:user
:使用者。sa
:ServiceAccount
。
SUBJECT_HASH
是主體名稱的 base32 編碼 SHA256 雜湊。
舉例來說,使用者 bob@foo.com
擁有下列名稱的密鑰:
object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
存取使用者密鑰
如果是使用者主體,密鑰會位於 Management API 伺服器中的 object-storage-access-keys
命名空間。
找出密鑰名稱:
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]
取得對應 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==
解碼存取金鑰 ID 和密鑰:
echo "MEhYM08wWUMySjcyMkVKTFBKRU8=" | base64 -d \ && echo \ && echo "Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==" | base64 -d
您會收到類似以下的輸出內容:
0HX3O0YC2J722EJLPJEO Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
請按照「設定 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 權限:
- 取得
- 清單
- 觀看
S3 物件儲存空間權限:
GetObject
GetObjectAcl
GetObjectVersion
ListBucket
ListBucketVersions
ListBucketMultipartUploads
ListMultipartUploadParts
project-bucket-object-admin 權限
這個角色可授予在 bucket 中放置及刪除物件、物件版本和標記的權限。此外,這個角色也會授予 project-bucket-object-viewer
中的所有權限。
project-bucket-object-admin
角色具備下列物件儲存空間權限:
S3 物件儲存空間權限:
AbortMultipartUpload
DeleteObject
PutObject
專案值區管理員權限
這個角色可授予在專案命名空間中建立、更新或刪除 Bucket
資源的權限。此外,這個角色也會授予project-bucket-object-admin
中的所有權限。
project-bucket-object-admin
角色具備下列權限:
Bucket API 權限:
- 建立
- 更新
- 刪除