更改平台 OIDC 客户端密钥

ACP 使用 OIDC 客户端密钥在平台组件之间进行身份验证。出于安全合规要求、定期凭证轮换或潜在凭证泄露后的处理,您可能需要轮换此密钥。在 global 集群上更新密钥后,平台会自动将其同步到所有成员集群。

先决条件

  • 具备 kubectl 访问 global 集群 的权限,并拥有 cluster-admin 权限。
  • 平台管理的所有集群均已升级到 ACP v4.3。
  • 具有 Agnostic 生命周期的以下插件已升级到与 ACP v4.3 兼容的版本:
    • Alauda Container Platform Gitops
    • Alauda Service Mesh Console(之前为 Alauda Build of Kiali)
    • Kubeflow Base
    • Alauda AI
  • 已准备新的客户端密钥值。建议使用至少 32 个字符的密码学随机字符串。
WARNING

更改客户端密钥会导致受影响的组件重启,从而造成暂时的身份验证中断。请在维护窗口期间执行此操作。

OIDC 密钥概览

平台 OIDC 凭证存储在 Kubernetes Secret 中,详细信息如下:

属性值
Secret 名称cpaas-oidc-secret
Namespacecpaas-system

该 Secret 包含两个数据键:

  • client-id — OIDC 客户端标识符,默认值为 alauda-auth。请勿修改此值。
  • client-secret — OIDC 客户端密钥。这是您要轮换的值。

操作步骤

备份当前密钥

在进行更改之前,请备份当前的 Secret 清单,以便在需要时进行回滚。

kubectl get secret cpaas-oidc-secret -n cpaas-system -o yaml > cpaas-oidc-secret-backup.yaml
WARNING

备份文件包含敏感的凭证数据。请将其存储在安全位置,并在操作完成后删除。

记录当前的 client-secret 哈希,以便在更新后进行非明文验证:

OLD_SECRET_SHA256="$(kubectl get secret cpaas-oidc-secret -n cpaas-system \
  -o jsonpath='{.data.client-secret}' | base64 -d | openssl dgst -sha256 -r | awk '{print $1}')"
echo "Current client-secret SHA256: ${OLD_SECRET_SHA256}"

更新客户端密钥

DANGER

请勿修改 client-id 值,也不要删除并重新创建 Secret。这样做可能会导致整个平台出现级联身份验证故障。

使用以下方法之一,仅更新 client-secret 数据字段。

方法 1:使用 kubectl patch(推荐)

从安全的交互式输入中读取新密钥:

read -rs NEW_CLIENT_SECRET
echo
kubectl patch secret cpaas-oidc-secret -n cpaas-system \
  --type merge \
  -p "{\"data\":{\"client-secret\":\"$(printf %s "$NEW_CLIENT_SECRET" | base64 | tr -d '\n')\"}}"
unset NEW_CLIENT_SECRET

方法 2:使用 kubectl edit

在默认编辑器中打开 Secret,并将 client-secret 值替换为新的 base64 编码值。

kubectl edit secret cpaas-oidc-secret -n cpaas-system
TIP

您可以提前生成 base64 编码值:

read -rs NEW_CLIENT_SECRET
echo
printf %s "$NEW_CLIENT_SECRET" | base64
unset NEW_CLIENT_SECRET

在不暴露明文的情况下,验证 global 集群上的 Secret 已更新:

NEW_SECRET_SHA256="$(kubectl get secret cpaas-oidc-secret -n cpaas-system \
  -o jsonpath='{.data.client-secret}' | base64 -d | openssl dgst -sha256 -r | awk '{print $1}')"
echo "Updated client-secret SHA256: ${NEW_SECRET_SHA256}"
test "${OLD_SECRET_SHA256}" != "${NEW_SECRET_SHA256}" && \
  echo "Verification passed: client-secret has changed."
unset OLD_SECRET_SHA256 NEW_SECRET_SHA256

验证组件运行状况

更新 Secret 后,base-operator 会自动将其同步到所有成员集群。依赖 OIDC 凭证的部分组件将重启以加载新值。请特别验证 frontend 和 apollo 部署是否正常运行:

kubectl get deploy -n cpaas-system frontend apollo

验证所有 Pod 均为 READY 和 UP-TO-DATE。重启完成可能需要几分钟。

INFO

如果组件无法启动,请验证 cpaas-oidc-secret Secret 是否存在于 cpaas-system namespace 中,并且包含有效的 client-id 和 client-secret 值。

回滚

如果更改 Secret 后出现问题,请从在步骤 1中创建的备份恢复之前的值:

kubectl apply -f cpaas-oidc-secret-backup.yaml

或者,如果您知道之前的 Secret 值:

read -rs PREVIOUS_CLIENT_SECRET
echo
kubectl patch secret cpaas-oidc-secret -n cpaas-system \
  --type merge \
  -p "{\"data\":{\"client-secret\":\"$(printf %s "$PREVIOUS_CLIENT_SECRET" | base64 | tr -d '\n')\"}}"
unset PREVIOUS_CLIENT_SECRET

回滚后,重复验证步骤以确认所有组件均运行正常。