首页/开发/CI/CD 与发布速查/制品库认证方式
构建与制品管理58 条

制品库认证方式

登录凭据的安全管理:密码走 stdin 或 credential helper,不用命令行明文;CI 用机器人账号、作业令牌或云联邦身份。

CI/CD 与发布速查开发更新于 2026-10-13

制品库认证怎么选

登录凭据与认证方式的选择:docker login 交互式会把人凭据存到 ~/.docker/config.json(base64 编码,不是加密);CI 里应使用 --password-stdin 或凭据助手;Kubernetes 拉私有镜像用 imagePullSecrets;云平台走 OIDC 或工作负载身份换取临时令牌,避免长期密钥。目标是把认证从人治变成可轮换、可审计的机制。

基本信息

docker login交互式存 ~/.docker/config.json(base64,非加密);CI 用 --password-stdin
KubernetesimagePullSecrets 引用 docker-registry 类型 Secret
云平台OIDC/工作负载身份换取临时令牌,避免长期密钥
凭据助手用 credential helper 存系统凭据库,而非明文文件
机器人账号与个人账号分离,按最小权限发放

典型使用场景

  • CI 登录:密码走 stdin 注入,不进命令行历史
  • K8s 拉私有镜像:创建拉取用 Secret 并在 Pod 引用
  • 多仓库并存:不同域名的凭据各自独立存放
  • 凭据轮换:定期更换机器人令牌并回收旧值
  • 云上免密钥:OIDC 联邦换取临时令牌
  • 审计追溯:拉取行为绑定到具名身份而不是共享账号

CI 安全登录

CI 安全登录
# 密码走 stdin,不进命令行历史与进程列表
echo "$REGISTRY_PASSWORD" | docker login registry.example.com \
  -u "$REGISTRY_USER" --password-stdin
# Kubernetes:创建拉取用 Secret 并在 Pod 里引用
kubectl create secret docker-registry regcred \
  --docker-server=registry.example.com \
  --docker-username="$REGISTRY_USER" \
  --docker-password="$REGISTRY_PASSWORD"

凭据存放位置对照

方式存放位置风险
交互登录~/.docker/config.jsonbase64 非加密,拿到即可用
--password-stdinCI 变量临时注入需防日志、构建缓存泄露
credential helper系统凭据库相对安全,受系统账号保护
imagePullSecretsK8s Secret注意 RBAC 谁能读
docker login -p 明文密码会进 shell 历史与进程列表:改用 stdin 或凭据助手。
config.json 里的 base64 不是加密:拿到文件就能登录,别把它当保险箱;多人共用的构建机上尤其危险。
Secret 权限同样重要:能读命名空间 Secret 的人就能取到凭据,RBAC 要一并收紧。
裸凭据的替代顺序:能走联邦身份就别发长期账号,迁移成本通常远小于泄露处置成本。

易错点

  • config.json 被提交或打入镜像:查看 docker 凭据存储位置并做泄露扫描
  • 机器人账号共用且无审计:一人一凭据或联邦身份,操作可追溯,交接与吊销都有据可查
  • CI 日志打印完整登录命令:密码随日志扩散,用变量注入并开启脱敏
  • 凭据从不轮换:泄露后长期可用,给机器人令牌定轮换周期
  • 用个人账号当 CI 机器人:人离职流程直接断,机器身份独立管理
  • 在多台主机间复制 config.json:泄露面成倍扩大,每台主机独立登录或走助手

数据来源与参考

  • Docker Docs《docker login》
  • Kubernetes 文档《Pull an Image from a Private Registry》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌