本页面将引导您了解如何管理对 Google Distributed Cloud (GDC) 气隙项目中的存储分区的访问权限,以便合适的人员拥有合适的权限。本文档介绍了使用角色绑定和预定义角色获取和授予用户和服务账号访问权限的前提条件和步骤。借助这些信息,您可以有效控制对存储资源的访问权限,同时确保安全性和运营效率。
本页面面向基础架构运维人员组中的 IT 管理员或应用运维人员组中的开发者等受众群体,他们负责管理 GDC 气隙环境中存储分区的访问权限设置。如需了解详情,请参阅 GDC 气隙环境文档的受众群体。
准备工作
项目命名空间用于管理 Management API 服务器中的存储桶资源。您必须拥有项目才能使用存储分区和对象。
授予存储桶访问权限
您可以在 Management API 服务器中创建并应用具有预定义角色的 RoleBinding,以向其他用户或服务账号提供存储桶访问权限。
预定义角色
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
获取存储桶访问凭据
授予对存储桶的访问权限后,系统会在 Secret 中创建访问凭据。
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
拥有一个名为以下内容的 Secret:
object-storage-key-std-user-l74gbpyrsbmwy4mivocr3nur6dzrnhcfhe3otyplul42i732aama
获取用户访问凭据
对于用户正文,Secret 位于管理 API 服务器中的 object-storage-access-keys
命名空间中。
运行以下命令,列出您有权在命名空间
object-storage-access-keys
中查看的 Secret 资源:kubectl auth can-i --list --namespace object-storage-access-keys
注意:如果您是管理员,有权查看所有 Secret 资源或模拟其他用户,则可以运行以下命令之一来查找指定用户的 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'
模拟用户以查看他们可以查看哪些 Secret:
export USER_NAME=bob@example.com kubectl auth can-i --list --namespace object-storage-access-keys --as "${USER_NAME:?}"
如果您可以查看此命名空间中的任何 Secret,则应看到包含类似于以下内容的 Secret 名称的输出:
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 是在与服务账号相同的命名空间中创建的。
运行以下命令以验证您是否可以获取和列出命名空间中的 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 权限
此角色授予以下权限:获取和列出存储桶中的对象以及对象的元数据。
project-bucket-object-viewer 动词授予的所有对象存储权限如下:
存储分区 API 权限:
- get
- list
- 监测
S3 对象存储权限:
- GetBucketVersioning
- GetObject
- GetObjectAcl
- GetObjectLegalHold
- GetObjectRetention
- GetObjectTagging
- GetObjectVersion
- GetObjectVersionTagging
- ListBucket
- ListBucketVersions
- ListBucketMultipartUploads
- ListMultipartUploadParts
project-bucket-object-admin 权限
此角色授予在存储桶中放置和删除对象、对象版本和标记的权限。此外,它还会授予 project-bucket-object-viewer
中的所有权限。
角色授予的所有其他对象存储权限如下:
S3 对象存储权限:
- AbortMultipartUpload
- DeleteObject
- DeleteObjectTagging
- DeleteObjectVersion
- DeleteObjectVersionTagging
- PutObject
- PutObjectTagging
- PutObjectVersionTagging
- PutOverwriteObject
- RestoreObject
project-bucket-admin 权限
此角色授予在项目命名空间中创建、更新或删除存储分区资源的权限。此外,它还会授予 project-bucket-object-admin
中的所有权限。
该角色授予的额外权限包括:
存储分区 API 权限:
- 创建
- 更新
- 删除