【摘要】Harbor多用户如何高效管理。
【文章来源】《Harbor进阶实战》公众号
开源摘星计划(WeOpen Star) 是由腾源会 2022 年推出的全新项目,旨在为开源人提供成长激励,为开源项目提供成长支持,助力开发者更好地了解开源,更快地跨越鸿沟,参与到开源的具体贡献与实践中。
不管你是开源萌新,还是希望更深度参与开源贡献的老兵,跟随“开源摘星计划”开启你的开源之旅,从一篇学习笔记、到一段代码的提交,不断挖掘自己的潜能,最终成长为开源社区的“闪亮之星”。
我们将同你一起,探索更多的可能性!
项目地址: WeOpen-Star:github.com/weopenproje…
一、环境说明
本文基于Harbor 2.3.1版本为演示环境,其它版本可参考。
DevOps环境下Harbor的应用场景。
二、Harbor中的几种角色
系统管理员(admin)
即admin用户,Harbor 系统管理员”拥有最多的权限(权限最大),它可以列出所有项目、设置普通用户为管理员、删除用户以及为所有镜像设置漏洞扫描策略。所有项目也归管理员所有。
项目管理员
当系统管理员(admin)给某个用户“项目管理员”的角色后,该用户即可以”项目管理员“的身份管理该项目,其它未分配的项目无权限,”项目管理员“项目管理员有镜像上传/拉取、添加/删除成员、Helm Chart上传/下载、配置管理等权限。该角色在实际的业务场景通常是分配给某个项目的负责人。
开发者
开发者拥有项目的读写权限,即上传镜像到该项目和从该项目拉取镜像、上传/下载HelmChart、查看日志,其它权限没有。
维护人员(维护者)
维护者拥有超越“开发者”的权限,包括扫描镜像、查看复制任务以及删除镜像和Helm Chart上传/下载、删除的能力。
访客
访客对指定项目具有只读权限。他们可以拉取和重新标记图像,但不能推送,也可以登录Harbor UI界面。
受限访客
受限访客没有项目的完全读取权限。他们可以拉取图像但不能推送,而且他们看不到日志或项目的其他成员。例如,您可以为来自不同组织的共享项目访问权限的用户创建受限访客。
受限访客也可以登录Harbor,但是只具有镜像拉取权限,无法查看日志等权限。
三、Harbor UI管理界面给用户分配角色
如果要给指定项目(Project)分配给某个用户角色,需要先在【系统管理】——【用户管理】——【创建用户】来创建用户;再到指定的项目中,【成员】——【+用户】来给用户分配权限。
四、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的用户已经成功删除了。
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\"}"