管理加密资源

本页面介绍了如何管理加密的 Google Distributed Cloud (GDC) 网闸隔离存储桶。

准备工作

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

所需 IAM 角色

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

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

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

准备环境

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

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

管理加密资源

采用 v2 加密的存储桶会有一个 Secret kekRef 和多个已创建的 AEADKey,其中 kekRef 用于引用正在使用的有效默认 AEADKey,而 AEADKey 包括属于该存储桶的有效和归档 AEADKey。

刷新存储桶的有效默认 AEADKeys

最佳实践是,在写入大约 420 亿个对象后,刷新存储桶的默认 AEADKey。这一主动措施可提高安全性并防止密钥耗尽。刷新过程将创建一个新的 kekRef 并停用之前的 AEADKeys。如需启动刷新流程,请删除与存储桶关联的 kekRef 密钥。

您可以通过运行以下命令来检索之前的 kekRef:

kubectl get secrets -n NAMESPACE_NAME -l  object.gdc.goog/bucket-name=BUCKET_NAME

然后,您可以运行以下命令来删除现有的 kekRef:

kubectl delete secrets OLD_KEKREF_NAME -n  NAMESPACE_NAME

成功删除后,您可以运行以下命令,确认已基于 AGE 创建新的 kekRef:

kubectl get secrets -n NAMESPACE_NAME -l  object.gdc.goog/bucket-name=BUCKET_NAME

验证是否已根据 AGE 创建了新的默认 AEADKeys:

kubectl get aeadkeys -n NAMESPACE_NAME -l  cmek.security.gdc.goog/resource-name=BUCKET_NAME

轮替存储桶的默认 AEADKey

如果存储桶的 AEADKey 遭到破解,您必须手动轮替与该存储桶关联的密钥加密密钥。

如需开始此流程,您必须先刷新活跃的默认密钥。此操作会创建新的活跃默认 AEADKeys,并将之前的密钥加密密钥标记为已停用。默认密钥刷新后,后续的对象上传操作将使用新的 AEADKeys 作为密钥加密密钥。之前的 AEADKeys 不会被销毁,因此您仍然可以对之前使用这些密钥加密的现有对象进行解密。

接下来,按照步骤下载并重新上传存储桶中的对象,然后删除旧对象。

重新上传存储桶中的所有对象后,您可以清理非活跃 AEADKey 和旧对象。根据 AGE 识别已停用的 AEADKeys:

kubectl get aeadkeys -n NAMESPACE_NAME -l  cmek.security.gdc.goog/resource-name=BUCKET_NAME

最后,按照删除 AEADKeys 的步骤操作。