Google Distributed Cloud (GDC) 经过网闸隔离的设备对象存储由 OTS (ONTAP Select) 提供。OTS 有自己的对象存储用户管理系统。每个 OTS 对象存储用户凭据都以 Secret 形式存储在集群中。
本文档介绍了轮替 OTS 对象存储用户凭据的步骤。在以下情况下轮替对象存储用户凭据:
- 定期安排密钥轮替,以轮替所有用户密钥。
- 降低密钥泄露风险。您应尽快轮换泄露的用户密钥。
准备工作
请完成以下步骤:
- 确认您符合笔记本电脑前提条件。
- 确保您可以登录到 OTS 集群并运行
vserver object-store-serverCLI 命令。 - 确保您可以使用
kubectl以管理员身份登录基础架构集群和管理集群。
翻译 UID
每个对象存储用户都有一个访问密钥和密钥,这些密钥以 Kubernetes Secret 的形式存储,并由 Kubernetes 工作负载用于访问后端对象存储。轮换用户密钥包括更新所有密钥。
您可以使用以下命令登录到三个节点之一,以获取对象存储用户的列表:
vserver object-store-server user show
输出是一份 UID 列表,应类似于:
[
"root",
"k8ssa_gpc-system_inventory-export-images",
"k8ssa_gpc-system_inventory-export-hardware",
"k8su_test-user@example.com"
]
用户分为三种类型:
| UID | 用户类型 | 密钥名称 | Secret 命名空间 |
|---|---|---|---|
| root | 系统管理员 | objectstorage-tenant-bucket-controller-standard-system-s3-sa | gpc-system |
| objectstorage-tenant-bucket-controller-standard-user-s3-sa | |||
| objectstorage-tenant-bucket-controller-nearline-user-s3-sa | |||
| k8ssa_<namespace>_<sa> | Kubernetes 服务账号 | object-storage-key-std-sa-<encoded-sa> | <namespace> |
| k8su_<username> | Kubernetes 用户 | object-storage-key-std-user-<encoded-username> | object-storage-access-keys |
root 用户有三个相同的密文,与数据中心的结构相对应,其中包含多个存储类别和租户类别。相比之下,设备版仅提供一个层级的对象存储。与根用户关联的所有三个密钥必须同时轮换。
用户标识 (UID)(不包括 root 用户)应遵循 k8ssa_<namespace>_<sa> 或 k8su_<username> 格式。获取 <encoded-sa> 或 <encoded-username>:
echo -n 'UID_SUFFIX' | shasum -a 256 | cut -d " " -f 1 | xxd -r -p | base32 | awk '{print tolower($0)}' | sed 's/=*$//g'
将 UID 中的 UID_SUFFIX 替换为 <sa>,即可得到 <encoded-sa>。
将 UID 中的 UID_SUFFIX 替换为 <username>,即可得到 <encoded-username>。
轮替用户密钥
登录 OTS 集群。
获取对象存储用户 UID 的列表。
vserver object-store-server user show结果是一个 UID 列表。您可以在转换 UID 中找到相关示例。针对列表中的每个 UID 重复执行以下步骤。
获取目标用户的旧访问密钥和密钥。
set -privilege advanced vserver object-store-server user show -user UID将
UID替换为目标用户 UID。为对象存储中的目标用户生成新的访问密钥和密钥。 完成此步骤后,旧密钥和新密钥会共存,并且都可以用于访问。
vserver object-store-server user regenerate-keys -vserver root-admin -user UID使用新的访问密钥和密钥更新 Kubernetes Secret。您只需更新根基础架构集群或管理集群中的 Secret,该 Secret 就会根据需要传播到其他集群。
kubectl --kubeconfig KUBECONFIG patch secret -n SECRET_NAMESPACE SECRET_NAME --type='json' -p='[{"op": "replace", "path": "/data/access-key-id", "value": "'"$(echo -n "ACCESS_KEY" | base64)"'"}, {"op": "replace", "path": "/data/secret-access-key", "value": "'"$(echo -n "ACCESS_KEY" | base64)"'"}]'替换以下内容:
使用该密钥的工作负载必须实现为自动刷新。如果不是,您必须重启工作负载,才能反映出密钥的更改。
例如,对于
root用户,您需要在基础架构集群中重启以下工作负载:kubectl --kubeconfig KUBECONFIG rollout restart deployment obj-bucket-cm-backend-controller -n obj-system
验证
按照对象存储创建存储桶和上传和下载对象中的说明,创建新存储桶并使用 RBAC 授予访问权限。如果成功创建了存储桶,并且正文拥有访问该存储桶的必要权限,则对象存储密钥轮换完成。