制品库认证怎么选
登录凭据与认证方式的选择:docker login 交互式会把人凭据存到 ~/.docker/config.json(base64 编码,不是加密);CI 里应使用 --password-stdin 或凭据助手;Kubernetes 拉私有镜像用 imagePullSecrets;云平台走 OIDC 或工作负载身份换取临时令牌,避免长期密钥。目标是把认证从人治变成可轮换、可审计的机制。
基本信息
| docker login | 交互式存 ~/.docker/config.json(base64,非加密);CI 用 --password-stdin |
|---|---|
| Kubernetes | imagePullSecrets 引用 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.json | base64 非加密,拿到即可用 |
| --password-stdin | CI 变量临时注入 | 需防日志、构建缓存泄露 |
| credential helper | 系统凭据库 | 相对安全,受系统账号保护 |
| imagePullSecrets | K8s Secret | 注意 RBAC 谁能读 |
docker login -p 明文密码会进 shell 历史与进程列表:改用 stdin 或凭据助手。
config.json 里的 base64 不是加密:拿到文件就能登录,别把它当保险箱;多人共用的构建机上尤其危险。
Secret 权限同样重要:能读命名空间 Secret 的人就能取到凭据,RBAC 要一并收紧。
裸凭据的替代顺序:能走联邦身份就别发长期账号,迁移成本通常远小于泄露处置成本。