创建存储 WORM 桶

本页面将引导您了解如何在 Google Distributed Cloud (GDC) 气隙环境中创建一次写入多次读取 (WORM) 存储分区。本文介绍了创建具有明确保留期限的 WORM 存储桶的前提条件和步骤,以及如何使用角色绑定授予访问权限。借助这些信息,您可以强制执行严格的数据保留实践和不可变性,从而为记录和审核日志记录等用例提供强大且合规的数据存储。

本页面面向的受众群体包括基础设施运维人员组中的 IT 管理员或应用运维人员组中的开发者,他们负责管理 GDC 网闸隔离配置环境中存储分区的数据保留和合规性设置。如需了解详情,请参阅 GDC 气隙环境文档的受众群体。

准备工作

存储分区是限定于特定项目的资源。项目充当容器,用于对您的存储分区进行分组,并通过 Management API 服务器实现对这些存储分区的管理。您必须先创建新项目或选择您拥有足够权限的现有项目,然后才能执行本页面上的操作。

所需 IAM 角色

请与您的 IAM 项目管理员联系,请求在项目命名空间中授予以下角色:

  • Project Bucket Admin (project-bucket-admin):创建、更新和删除存储分区。
  • Project Bucket Object Viewer (project-bucket-object-viewer):查看和检查存储分区及对象的详细信息。

如需了解详情,请参阅授予存储桶访问权限。

准备环境

如需针对管理 API 服务器或全局 API 服务器运行命令,请执行以下操作:

  1. 登录并生成区域管理 API 服务器的 kubeconfig 文件(如果您还没有)。
  2. 对于双可用区存储分区,请执行以下操作:
    • 与您的基础设施运维人员 (IO) 确认是否已为配对的可用区创建 BucketLocationConfig 自定义资源。
    • 为全局 API 服务器生成 kubeconfig 文件。

创建 WORM 存储桶

WORM 存储桶可确保没有其他内容会覆盖对象,并确保对象至少保留一段时间。审核日志记录是 WORM 存储桶的一个用例。

请按以下步骤创建 WORM 存储桶:

  1. 在创建存储桶时设置保留期限。保留期限定义了每个对象版本在多少天内无法删除或修改。此保留期限与存储类别的最短存储时长(例如 Standard 存储类别的最短存储时长为 30 天)不同。例如,以下存储桶设置的保留期限为 365 天。如果您需要超出保留政策限制,请与您的基础设施运营商 (IO) 联系。

    apiVersion: object.gdc.goog/v1
    kind: Bucket
    metadata:
      name: foo-logging-bucket
      namespace: foo-service
    spec:
      description: "Audit logs for foo"
      storageClass: Standard
      bucketPolicy:
        lockingPolicy:
          defaultObjectRetentionDays: 365
    
  2. 向需要只读访问权限的所有用户授予 project-bucket-object-viewer 角色:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      namespace: foo-service
      name: object-readonly-access
    roleRef:
      kind: Role
      name: project-bucket-object-viewer
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - kind: ServiceAccount
      namespace: foo-service
      name: foo-log-processor
    - kind: User
      name: bob@example.com
      apiGroup: rbac.authorization.k8s.io
    
  3. 向需要向存储桶写入内容的用户授予 project-bucket-object-admin 角色:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      namespace: foo-service
      name: object-write-access
    roleRef:
      kind: Role
      name: project-bucket-object-admin
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - kind: ServiceAccount
      namespace: foo-service
      name: foo-service-account