You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于命名空间的Docker Keycloak认证:分组配置可行性问询

Keycloak集成Docker:针对命名空间配置独立用户组的方案

好消息是,Keycloak完全支持为Docker的不同命名空间配置独立的用户组权限,核心思路是将Keycloak的用户组与Docker的命名空间访问权限做映射,结合Docker的OIDC认证和授权策略实现。下面是具体的实现步骤:

1. 为每个Docker命名空间创建对应Keycloak用户组

首先在Keycloak中为每个需要独立权限控制的Docker命名空间创建专属用户组:

  • 登录Keycloak控制台,进入目标Realm
  • 切换到「Groups」标签,点击「New」创建组,命名建议和Docker命名空间对应(比如docker-namespace-team-a对应Docker的team-a命名空间)
  • 将需要访问该命名空间的用户添加到对应的组中

2. 配置Keycloak客户端适配Docker认证

需要在Keycloak中创建一个专门用于Docker认证的客户端:

  • 进入Keycloak的「Clients」标签,点击「Create」
  • 客户端ID填写docker-registry(或自定义名称),客户端协议选择openid-connect
  • 配置「Access Type」为confidential,开启「Service Accounts Enabled」
  • 在「Credentials」标签下记录客户端密码,后续Docker配置会用到
  • 在「Mappers」标签中添加一个「Group Membership」映射器,将用户所属组信息注入到ID Token中(设置「Token Claim Name」为groups,「Full Group Path」设为false)

3. 配置Docker Daemon启用OIDC认证与命名空间授权

修改Docker Daemon的配置文件(通常是/etc/docker/daemon.json),添加OIDC认证和授权规则:

{
  "authorization-plugins": ["authz-keycloak"],
  "oidc-issuer-url": "https://your-keycloak-domain/auth/realms/your-realm",
  "oidc-client-id": "docker-registry",
  "oidc-client-secret": "your-client-secret",
  "oidc-username-claim": "preferred_username",
  "oidc-groups-claim": "groups"
}

之后重启Docker Daemon使配置生效:

sudo systemctl restart docker

4. 配置命名空间与用户组的权限映射

通过Keycloak的授权服务或Docker的授权规则,实现用户组与命名空间的绑定:

  • 如果使用Keycloak授权服务:在Docker客户端的「Authorization」标签下,创建权限策略,指定只有属于docker-namespace-team-a组的用户,才能对team-a命名空间执行拉取、推送等操作
  • 也可以通过Docker的本地授权规则文件(比如/etc/docker/authz.json)配置,示例规则:
{
  "rules": [
    {
      "action": ["pull", "push"],
      "resource": {
        "type": "namespace",
        "name": "team-a"
      },
      "principal": ["group:docker-namespace-team-a"]
    },
    {
      "action": ["pull", "push"],
      "resource": {
        "type": "namespace",
        "name": "team-b"
      },
      "principal": ["group:docker-namespace-team-b"]
    }
  ]
}

5. 验证配置效果

  • 使用属于docker-namespace-team-a组的用户执行docker login,尝试拉取/推送team-a命名空间的镜像,确认操作成功
  • 用该用户尝试访问team-b命名空间的镜像,应该会收到权限拒绝的提示,以此验证隔离效果

内容的提问来源于stack exchange,提问作者Pramod V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:00:06