目标
本文档将实现在多个用户之间对Project对象访问进行授权。这些场景包括:
- 用admin1创建project1项目,因此admin1具有project1项目的管理员权限。
- admin1可以将project1项目的管理员权限授权给admin2,此时admin2拥有admin1相同权限。
- admin2可以将project1项目的管理员权限从admin1收回。
- admin2可以将project1项目的编辑权限授权给admin3,并将project1项目的查看权限授权给admin4。
- admin3无法将project1的查看权限授权给admin5。
- admin4可以将project1的编辑权限授权给admin5。
实现和验证
- 参照《OpenShift 4之增加用户》创建admin1-admin5用户。
- 用admin1登录,然后创建project1项目。
$ oc login -u admin1 -p admin1
$ oc new-project project1
- 用admin2登录,确认无法访问project1项目。
$ oc login -u admin2 -p admin2
$ oc project project1
- 用admin1登录,执行命令将project1项目的管理员权限授权给admin2,
$ oc login -u admin1 -p admin1
$ oc adm policy add-role-to-user admin admin2 -n project1
- 重新执行第3步,确认这次admin2可以访问project1项目。
- 用admin2执行命令将project1项目的管理员权限从admin1收回。
$ oc adm policy remove-role-from-user admin admin1 -n project1
- 用admin1登录,确认已经无法访问project1项目了。
$ oc login -u admin1 -p admin1
$ oc get project project1
- 用admin2登录,给admin3编辑project1项目的权限、给admin4查看project1项目的权限。
$ oc adm policy add-role-to-user edit admin3 -n project1
$ oc adm policy add-role-to-user view admin4 -n project1
- 用admin3登录,确认可以访问project1项目。
$ oc login -u admin3 -p admin3
$ oc get project project1
- 用admin3执行以下命令,确认admin3无法把查看project1的权限授权给admin5,这是因为admin3没有project1的管理权限。
$ oc adm policy add-role-to-user view admin5 -n project1
- 用admin4执行以下命令,确认admin4不可以把编辑project1权限授权给admin5,这是因为admin4没有project1的管理权限。
$ oc login -u admin4 -p admin4
$ oc adm policy add-role-to-user view admin5 -n project1
- 用admin2用户登录并执行查看project1项目有权限,都是哪些用户有这些权限。
$ oc login -u admin2 -p admin2
$ oc get rolebindings
NAME AGE
admin-0 29m
edit 13m
system:deployers 29m
system:image-builders 29m
system:image-pullers 29m
view 12m
$ oc describe rolebindings admin-0
Name: admin-0
Labels: <none>
Annotations: <none>
Role:
Kind: ClusterRole
Name: admin
Subjects:
Kind Name Namespace
---- ---- ---------
User admin2
$ oc describe rolebindings edit
Name: edit
Labels: <none>
Annotations: <none>
Role:
Kind: ClusterRole
Name: edit
Subjects:
Kind Name Namespace
---- ---- ---------
User admin3
$ oc describe rolebindings view
Name: view
Labels: <none>
Annotations: <none>
Role:
Kind: ClusterRole
Name: view
Subjects:
Kind Name Namespace
---- ---- ---------
User admin4