本页面介绍了如何管理加密的 Google Distributed Cloud (GDC) 网闸隔离存储桶。
准备工作
存储桶是限定于特定项目的资源。项目充当容器,对存储桶进行分组,并支持通过 Management API 服务器对其进行管理。您必须先创建一个新项目,或选择一个您拥有足够权限的现有项目,然后才能执行本页面上的操作。
所需 IAM 角色
请与您的 IAM 项目管理员联系,请求在项目命名空间中授予以下角色:
- Bucket Project Admin (
project-bucket-admin):创建、更新和删除存储桶。 - Bucket Object Project Viewer (
project-bucket-object-viewer):查看和检查存储桶和对象的详细信息。
如需了解详情,请参阅授予存储桶访问权限。
准备环境
如需针对管理 API 服务器或全局 API 服务器运行命令,请执行以下操作:
- 如果您没有可用区级管理 API 服务器的 kubeconfig 文件,请登录并生成该文件。
- 对于双可用区存储桶,请执行以下操作:
- 请与您的基础架构运维人员 (IO) 确认,是否已为您的配对可用区创建
BucketLocationConfig自定义资源。 - 为全局 API 服务器生成 kubeconfig 文件。
- 请与您的基础架构运维人员 (IO) 确认,是否已为您的配对可用区创建
管理加密资源
采用 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 的步骤操作。