为项目创建存储分区

本页面介绍了如何创建 Google Distributed Cloud (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 文件。

存储桶命名准则

存储桶名称必须遵循以下命名惯例:

  • 在项目中必须是唯一的。Management API 服务器会为存储桶的完全限定名称添加唯一前缀,以确保组织内不会发生冲突。如果不同组织的前缀和存储桶名称发生冲突(这种情况不太可能发生),则存储桶创建会失败,并显示“存储桶名称已被使用”错误。
  • 请勿包含任何个人身份信息 (PII)。
  • 符合 DNS 规范。
  • 包含至少 1 个字符,且不超过 55 个字符。
  • 以字母开头,且只能使用字母、数字和连字符。

创建存储桶

默认情况下,存储桶使用 Standard 存储类别。如果基础架构运维人员 (IO) 已启用 Nearline Storage,您还可以为访问频率较低的数据选择 Nearline 存储类别。单可用区和双可用区存储桶均支持 Nearline Storage。

控制台

  1. 在导航菜单中,点击对象存储。
  2. 在项目选择器中,选择要在其中创建存储桶的项目。
  3. 点击创建存储桶。
  4. 在存储桶创建流程中,为存储桶分配一个在项目内所有存储桶中唯一的名称。
  5. 请输入说明
  6. 在存储类别下,选择标准或 Nearline。只有在启用了 Nearline Storage 的情况下,Nearline 选项才会显示。
  7. 可选:点击 toggle_off 切换开关以设置保留政策,然后输入您偏好的天数。如果您需要超出保留政策限制,请与您的 IO 联系。
  8. 点击创建。系统会显示一条成功消息,并将您定向回存储桶页面。

如需验证您是否已成功创建新存储桶,请在几分钟后刷新存储桶页面,并检查存储桶状态是否已从 Not ready 更新为 Ready。

gdcloud

如需使用 Nearline 存储类别创建具有 gdcloud 的单可用区存储桶,请运行以下命令:

gdcloud storage buckets create BUCKET_NAME \
    --location=ZONE_NAME \
    --location-type=SingleZone \
    --storage-class=Nearline

如需使用全球位置创建具有 gdcloud 的双区域存储桶,请执行以下操作:

gdcloud storage buckets create BUCKET_NAME \
    --location=ZONE_1,ZONE_2 \
    --location-type=AsyncDualZone \
    --storage-class=Nearline

如果省略 --storage-class,则默认使用 Standard。

如需了解详情,请参阅 gdcloud storage buckets create。

API

如需创建可用区级存储桶,请将存储桶规范应用于项目命名空间:

kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f bucket.yaml

以下是使用 Standard 存储类别的存储桶规范示例:

apiVersion: object.gdc.goog/v1
kind: Bucket
metadata:
  name: BUCKET_NAME
  namespace: NAMESPACE_NAME
spec:
  description: DESCRIPTION
  storageClass: Standard
  bucketPolicy:
    lockingPolicy:
      defaultObjectRetentionDays: RETENTION_DAY_COUNT

以下是使用 Nearline 存储类别的存储桶规范示例:

apiVersion: object.gdc.goog/v1
kind: Bucket
metadata:
  name: BUCKET_NAME
  namespace: NAMESPACE_NAME
spec:
  description: DESCRIPTION
  storageClass: Nearline
  bucketPolicy:
    lockingPolicy:
      defaultObjectRetentionDays: RETENTION_DAY_COUNT

以下是加密版本为 v1 的存储桶规范示例:

apiVersion: object.gdc.goog/v1
kind: Bucket
metadata:
  name: BUCKET_NAME
  namespace: NAMESPACE_NAME
  labels:
    object.gdc.goog/encryption-version: v1
spec:
  description: DESCRIPTION
  storageClass: Standard
  bucketPolicy:
    lockingPolicy:
      defaultObjectRetentionDays: RETENTION_DAY_COUNT

如需了解详情,请参阅 Bucket API 参考文档。

以下是全球 API 服务器的双区域存储桶规范示例:

apiVersion: object.global.gdc.goog/v1
kind: Bucket
metadata:
  name: BUCKET_NAME
  namespace: PROJECT_NAME
spec:
  location: LOCATION_NAME
  description: Sample DZ Bucket
  storageClass: Standard

如需使用 Nearline Storage 创建双区域存储桶,请设置 storageClass: Nearline。

请注意,双区域存储桶仅支持 V2 加密,并且创建、更新或删除双区域存储桶资源的所有操作都必须针对全球 API 服务器执行。

如需创建双区域存储桶,请针对全局 API 服务器应用规范:

kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f bucket.yaml

创建存储桶后,运行以下命令以确认并查看存储桶的详细信息:

kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG describe buckets BUCKET_NAME -n PROJECT_NAMESPACE

Status 部分有两个重要字段:Encryption(用于加密详细信息)和 Fully Qualified Name(包含 FULLY_QUALIFIED_BUCKET_NAME)。

加密 v1

该信息涉及名为 obj-FULLY_QUALIFIED_BUCKET_NAME 的 AEADKey,该密钥用于引用对存储在存储桶中的对象进行加密的加密密钥。示例如下:

Status:
  Encryption:
    Key Ref:
      Kind: AEADKey
      Name: obj-FULLY_QUALIFIED_BUCKET_NAME
      Namespace: PROJECT_NAMESPACE
    Type: CMEK

加密 v2

这些信息与名为 kek-ref-FULLY_QUALIFIED_BUCKET_NAME 的 Secret 相关,该 Secret 用作有效默认 AEADKey 的引用。如果未指定特定 AEADKey,系统会从活跃的默认 AEADKey 中随机选择一个,用于加密上传到存储桶的对象。

示例如下:

Status:
  Encryption:
    Key Ref:
      Kind: Secret
      Name: kek-ref-FULLY_QUALIFIED_BUCKET_NAME
      Namespace: PROJECT_NAMESPACE
    Type: CMEK

您还可以运行以下命令,验证是否已创建所需的 AEADKeys:

kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get aeadkeys -n PROJECT_NAMESPACE -l  cmek.security.gdc.goog/resource-name=FULLY_QUALIFIED_BUCKET_NAME