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

本页面将引导您了解如何管理对 Google Distributed Cloud (GDC) 空气隔离设备项目中的存储分区的访问权限,以便合适的人员拥有合适的权限。本文档介绍了使用角色绑定和预定义角色获取和授予用户和服务账号访问权限的前提条件和步骤。借助这些信息,您可以有效控制对存储资源的访问权限,同时确保安全性和运营效率。

本页面面向基础架构运维人员组中的 IT 管理员或应用运维人员组中的开发者等受众群体,他们负责管理 GDC 气隙环境中存储分区的访问权限设置。

准备工作

项目命名空间用于管理 Management API 服务器中的存储桶资源。您必须拥有一个项目才能使用存储分区和对象。

授予存储桶访问权限

您可以通过创建和应用具有预定义角色的 RoleBinding,向其他用户或服务账号提供存储桶访问权限。

预定义角色

  • project-bucket-object-viewer::此角色允许用户列出项目中的所有存储桶、列出这些存储桶中的对象,以及读取对象和对象元数据。此角色不允许您对对象执行写入操作,例如上传、覆盖或删除。

  • project-bucket-object-admin::此角色允许用户列出项目中的所有存储桶,并对对象执行写入和读取操作,例如上传、覆盖或删除。

  • project-bucket-admin::此角色允许用户管理给定命名空间中的所有存储桶,以及这些存储桶中的所有对象。

如需查看这些角色授予的权限的完整列表,请参阅预设角色权限部分。

如需获得创建项目角色绑定的权限,请让您的项目 IAM 管理员向您授予项目 IAM 管理员 (project-iam-admin) 角色。

以下示例展示了如何创建 RoleBinding 以向用户和服务账号授予访问权限:

  1. 在您的系统上创建一个 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
     ```
    
  2. 应用 YAML 文件:

    kubectl apply \
    -f rolebinding-object-admin-all-buckets.yaml
    

获取存储桶访问凭据

当您授予对存储桶的访问权限时,访问凭据会在 Secret 中创建。

Secret 名称的格式为 object-storage-key-std-SUBJECT_TYPE-SUBJECT_HASH

  • SUBJECT_TYPE 的值如下:
    • user:用户。
    • saServiceAccount
  • SUBJECT_HASH 是正文名称的 base32 编码 SHA256 哈希值。

例如,用户 bob@foo.com 拥有名为以下内容的 Secret:

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-std
    

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

    secrets        []        [object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja,object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja]        [get]
    
  2. 获取相应 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==
    
  3. 解码访问密钥 ID 和密钥:

    echo "MEhYM08wWUMySjcyMkVKTFBKRU8=" | base64 -d \
        && echo \
        && echo "Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==" | base64 -d
    

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

    0HX3O0YC2J722EJLPJEO
    Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
    
  4. 按照配置 s3cmd 部分中的信息操作。

访问服务账号密钥

对于服务账号 (SA) 正文,Secret 是在与服务账号相同的命名空间中创建的。如需查找名称,请运行以下命令:

  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 角色具有以下权限:

  • 存储分区 API 权限

    1. 获取
    2. 列表
    3. 观看
  • S3 对象存储权限

    1. GetObject
    2. GetObjectAcl
    3. GetObjectVersion
    4. ListBucket
    5. ListBucketVersions
    6. ListBucketMultipartUploads
    7. ListMultipartUploadParts

project-bucket-object-admin 权限

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

project-bucket-object-admin 角色具有以下对象存储权限:

  • S3 对象存储权限

    1. AbortMultipartUpload
    2. DeleteObject
    3. PutObject

project-bucket-admin 权限

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

project-bucket-object-admin 角色具有以下权限:

  • 存储分区 API 权限

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