授予和获取项目的存储桶访问权限

本页面将引导您了解如何管理对 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 以向用户和服务账号授予访问权限:

  1. 在您的系统上创建一个 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.
    
  2. 应用 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 有两个密钥,分别命名为:

  1. object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja

获取用户访问权限

对于用户正文,Secret 位于管理 API 服务器中的 object-storage-access-keys 命名空间中。

  1. 运行以下命令以查找密钥名称:

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

    您将收到类似如下所示的输出:

    secrets        []        [object-storage-key-nl-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja,object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja]        [get]
    
  2. 获取相应 Secret 的内容,以访问 Standard 存储类中的存储分区:

    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. 按照配置 gdcloud CLI 部分中的说明,使用生成的信息进行操作。

获取服务账号访问权限

对于服务账号 (SA) 主题,请从用户集群中找到 Secret 名称。

  1. 对于标准存储类,请运行以下命令以获取 Secret 名称:

    kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o json | jq -r '.secrets[] | select(.name | test("object-storage-key-std"))'
    
  2. 然后,您可以手动查看列出的 secret 名称,也可以使用 grep 查找 object-storage-key-(std|nl)。对于后一种方案,请运行以下命令:

    kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o=jsonpath='{.secrets}{"\n"}' | grep object-storage-key-(std|nl)
    
  3. 您可以在 pod 中将 Secret 引用为环境变量文件

预设角色权限

请注意,预定义角色也可在全局 API 服务器中使用,以便对双区域存储分区进行管理和操作访问。

project-bucket-object-viewer 权限

此角色授予以下权限:获取和列出存储桶中的对象以及对象的元数据。

project-bucket-object-viewer 动词授予的所有对象存储权限如下:

  • 存储分区 API 权限

    1. get
    2. list
    3. 监测
  • S3 对象存储权限

    1. GetObject
    2. GetObjectAcl
    3. GetObjectLegalHold
    4. GetObjectRetention
    5. GetObjectTagging
    6. GetObjectVersion
    7. GetObjectVersionTagging
    8. ListBucket
    9. ListBucketVersions
    10. ListBucketMultipartUploads
    11. ListMultipartUploadParts

project-bucket-object-admin 权限

此角色授予在存储桶中放置和删除对象、对象版本和标记的权限。此外,它还会授予 project-bucket-object-viewer 中的所有权限。

角色授予的所有其他对象存储权限如下:

  • S3 对象存储权限

    1. AbortMultipartUpload
    2. DeleteObject
    3. DeleteObjectTagging
    4. DeleteObjectVersion
    5. DeleteObjectVersionTagging
    6. PutObject
    7. PutObjectTagging
    8. PutObjectVersionTagging
    9. PutOverwriteObject
    10. RestoreObject

project-bucket-admin 权限

此角色授予在项目命名空间中创建、更新或删除存储分区资源的权限。此外,它还会授予 project-bucket-object-admin 中的所有权限。

该角色授予的额外权限包括:

  • 存储分区 API 权限

    1. 创建
    2. 更新
    3. 删除