首页 > 解决方案 > Docker 使用单独的凭据进行推送和拉取

问题描述

出于安全原因,我正在尝试为 docker 注册表创建单独的推送和拉取。是否可以在任何容器注册表中创建它。

标签: dockerauthenticationdocker-swarm

解决方案


Docker Registry 2.0 引入了一种新的、基于令牌的身份验证和授权协议。如果您对 docker 注册表使用基于令牌的身份验证,则支持 ACL。您可以使用这样的预构建 ACL 解决方案https://github.com/cesanta/docker_auth。它提供了细粒度的 ACL 规则,例如

acl:
  - match: {account: "admin"}
    actions: ["*"]
    comment: "Admin has full access to everything."
  - match: {account: "user"}
    actions: ["pull"]
    comment: "User \"user\" can pull stuff."
  # Access is denied by default.

查看完整示例https://github.com/cesanta/docker_auth/blob/master/examples/simple.yml

对于您的方案,您可以创建两个仅具有推送和拉取权限的用户,然后以适当的用户身份登录以进行操作(推送或拉取)。

如果您使用 Docker Hub,那么已经有一种适用于组织的 ACL。

Docker Hub 组织允许您创建团队,以便您可以让同事访问共享图像存储库。Docker Hub 组织可以包含公共和私有存储库,就像用户帐户一样。通过定义用户团队然后将团队权限分配给特定存储库来分配这些存储库的推送拉取访问权限。存储库创建仅限于组织所有者组中的用户。这允许您分发受限访问 Docker 映像,并选择哪些 Docker Hub 用户可以发布新映像。

https://docs.docker.com/docker-hub/orgs/#repository-team-permissions

权限是累积的。例如,如果您有写入权限,您将自动拥有读取权限:

  • 读取权限允许用户以与公共存储库相同的方式查看、搜索和提取私有存储库。

  • 写入权限允许用户推送到 Docker Hub 上的非自动化存储库。

  • 管理员访问权限允许用户修改存储库“描述”、“协作者”权限、“公共/私人”可见性和“删除”。

在您的方案中,您必须至少有两个注册中心用户,然后其中一个可能是具有只读权限的团队成员,另一个用户可能是具有写入(并自动读取)访问权限的团队成员。

注意:尚未验证其电子邮件地址的用户只有对存储库的读取访问权限,无论其团队成员授予他们什么权限。


推荐阅读