「开源摘星计划」多用户场景的Harbor,我是如何轻松管理的!

324 阅读5分钟

【摘要】Harbor多用户如何高效管理。
【文章来源】《Harbor进阶实战》公众号
开源摘星计划(WeOpen Star) 是由腾源会 2022 年推出的全新项目,旨在为开源人提供成长激励,为开源项目提供成长支持,助力开发者更好地了解开源,更快地跨越鸿沟,参与到开源的具体贡献与实践中。
不管你是开源萌新,还是希望更深度参与开源贡献的老兵,跟随“开源摘星计划”开启你的开源之旅,从一篇学习笔记、到一段代码的提交,不断挖掘自己的潜能,最终成长为开源社区的“闪亮之星”。
我们将同你一起,探索更多的可能性!
项目地址: WeOpen-Star:github.com/weopenproje…


一、环境说明

本文基于Harbor 2.3.1版本为演示环境,其它版本可参考。

DevOps环境下Harbor的应用场景。

二、Harbor中的几种角色

image.png

系统管理员(admin)

即admin用户,Harbor 系统管理员”拥有最多的权限(权限最大),它可以列出所有项目、设置普通用户为管理员、删除用户以及为所有镜像设置漏洞扫描策略。所有项目也归管理员所有。

项目管理员

当系统管理员(admin)给某个用户“项目管理员”的角色后,该用户即可以”项目管理员“的身份管理该项目,其它未分配的项目无权限,”项目管理员“项目管理员有镜像上传/拉取、添加/删除成员、Helm Chart上传/下载、配置管理等权限。该角色在实际的业务场景通常是分配给某个项目的负责人。

image.png

开发者

开发者拥有项目的读写权限,即上传镜像到该项目和从该项目拉取镜像、上传/下载HelmChart、查看日志,其它权限没有。

维护人员(维护者)

维护者拥有超越“开发者”的权限,包括扫描镜像、查看复制任务以及删除镜像和Helm Chart上传/下载、删除的能力。

访客

访客对指定项目具有只读权限。他们可以拉取和重新标记图像,但不能推送,也可以登录Harbor UI界面。

受限访客

受限访客没有项目的完全读取权限。他们可以拉取图像但不能推送,而且他们看不到日志或项目的其他成员。例如,您可以为来自不同组织的共享项目访问权限的用户创建受限访客。

受限访客也可以登录Harbor,但是只具有镜像拉取权限,无法查看日志等权限。


三、Harbor UI管理界面给用户分配角色

如果要给指定项目(Project)分配给某个用户角色,需要先在【系统管理】——【用户管理】——【创建用户】来创建用户;再到指定的项目中,【成员】——【+用户】来给用户分配权限。

image.png

image.png

四、Harbor中管理用户的API

GET/users/search按用户名搜索用户
GET/users/current/permissions获取当前用户的权限
GET/users/current获取当前用户的信息
GET/users列出用户
GET/users/{user_id}获取某个用户的信息
PUT/users/{user_id}/cli_secret/users/{user_id}/cli_secret
PUT/users/{user_id}/sysadmin将注册用户更新为 Harbor 的管理员。
PUT/users/{user_id}/password修改已存在用户的密码。
PUT/users/{user_id}更新用户的个人资料。
DELETE/users/{user_id}删除指定用户
POST/users创建本地用户,该 API 只能在认证方式为本地 DB 时使用。禁用自我注册时。

五、通过Harbor API对用户的自动管理

5.1 获取Harbor中的用户信息

$ curl -u admin:Harbor12345 -H "Content-Type: application/json" \  
-X GET https://192.168.2.250:443/api/v2.0/users \  
-k | python -m json.tool  
  
[  
{  
"admin_role_in_auth": false, # 是否是admin角色权限  
"creation_time": "2022-04-14T02:39:08.053Z", # 用户创建时间  
"email": "libai@qq.com", # 邮箱  
"realname": "libai", # 用户全名  
"sysadmin_flag": false, # 系统管理员标签(false表示不是系统管理员)  
"update_time": "2022-04-14T02:39:08.053Z", # 更新时间  
"user_id": 5, # 用户ID(全局唯一)  
"username": "libai" # 用户名  
},  
{  
"admin_role_in_auth": false,  
"creation_time": "2022-04-14T01:18:47.260Z",  
"email": "lidabai@qq.com",  
"realname": "lidabai",  
"sysadmin_flag": true, # true表示该用户是系统管理员  
"update_time": "2022-04-14T01:18:47.260Z",  
"user_id": 4,  
"username": "lidabai"  
}  
]

-u指定用户名和密码;

5.2 删除指定用户

[root@Over ~]# curl -u admin:Harbor12345 \  
-H "Content-Type: application/json" -X DELETE \  
https://192.168.2.250:443/api/v2.0/users/5 -k

再次查看发现刚才ID为5的用户已经成功删除了。

image.png

5.3 查找指定用户

查找lidabai这个用户,通过?username=用户名条件来查找用户,结果会显示该用户的ID和用户名,如果用户不存在,则返回空值。

[root@Over ~]# curl -u admin:Harbor12345 \  
-H "Content-Type: application/json" -X GET \  
https://192.168.2.250:443/api/v2.0/users/search?username=lidabai \  
-k | python -m json.tool  
  
% Total % Received % Xferd Average Speed Time Time Time Current  
Dload Upload Total Spent Left Speed  
100 37 100 37 0 0 1468 0 --:--:-- --:--:-- --:--:-- 1480  
[  
{  
"user_id": 4,  
"username": "lidabai"  
}  
]

5.4 查询当前用户的详细信息

当前用户指本次的连接用户。

[root@Over ~]# curl -u admin:Harbor12345 \  
-H "Content-Type: application/json" -X GET \  
https://192.168.2.250:443/api/v2.0/users/current \  
-k | python -m json.tool  
{  
"admin_role_in_auth": false,  
"comment": "admin user", # 描述/注释,即该用户是admin角色  
"creation_time": "2021-11-05T07:45:36.052Z",  
"realname": "system admin", # 系统用户  
"sysadmin_flag": true, # 是(否)是管理员  
"update_time": "2022-04-13T09:02:08.704Z",  
"user_id": 1,  
"username": "admin"  
}

5.5 命令行创建Harbor用户

该 API 只能在认证方式为本地 DB 时使用。禁用自我注册时。

[root@Over ~]# curl -X POST "http://192.168.2.250/api/v2.0/users" \  
-H "accept: application/json" \  
-H "Content-Type: application/json" \  
-d "{ \  
"comment\": \"hanxin\", \  
"username\": \"hanxin\", \  
"password\": \"Harbor12345\", \  
"email\": \"dabai@qq.com\", \  
"realname\": \"hanxin\"}"