005.OpenShift访问控制-权限-角色
一 Kubetcl namespace
1.1 namespace描述
- 命名资源,以避免基本的命名冲突;
- 将管理权限授予受信任的用户;
- 限制用户资源消耗的能力;
- 用户和用户组隔离。
1.2 project
- Object:pod、service、rc等;
- Policies:决定用户可以或不能对对象执行哪些操作的规则;
- Constraints:可以限制的每种对象的配额。
1.3 cluster管理
1.4 创建project
二 OpenShift角色
2.1 角色概述
2.2 查看本地policy
2.3 管理role绑定
命令
|
描述
|
oc adm policy who-can verb resource
|
设置哪些用户可以对资源执行操作
|
oc adm policy add-role-to-user role username
|
将指定角色绑定到指定用户
|
oc adm policy remove-role-from-user role username
|
从指定用户中移除给定角色
|
oc adm policy remove-user username
|
删除指定的用户及其所有角色
|
oc adm policy add-role-to-group role groupname
|
将指定的角色绑定到指定的组
|
oc adm policy remove-role-fromgroup role groupname
|
从指定组中移除给定角色
|
oc adm policy remove-group groupname
|
删除指定的组及其所有角色
|
命令
|
描述
|
oc adm policy add-cluster-role-to-user role username
|
将集群中所有项目的指定角色绑定到指定用户
|
oc adm policy remove-cluster-role-from-user role username
|
为集群中的所有项目从指定用户中删除指定角色
|
oc adm policy add-cluster-role-togroup role groupname
|
为集群中的所有项目将指定的角色绑定到指定的组
|
oc adm policy remove-cluster-role-from-group role groupname
|
从集群中所有项目的指定组中移除给定角色
|
三 安全上下文约束(SCCS)
3.1 SCCS概述
1 [user@demo ~]$ oc get scc #列出可用的SCC
2 [user@demo ~]$ oc describe scc scc_name #现实特定SCC详细信息
3 [user@demo ~]$ oc adm policy add-scc-to-user scc_name user_name
4 [user@demo ~]$ oc adm policy add-scc-to-group scc_name group_name #要授予用户或组特定的SCC
5 [user@demo ~]$ oc adm policy remove-scc-from-user scc_name user_name
6 [user@demo ~]$ oc adm policy remove-scc-from-group scc_name group_name #从特定的SCC中删除用户或组
四 服务账户
4.1 服务账户
4.2 Web管理user成员
4.3 Cli管理user成员
4.4 身份验证和授权
- user和group
- Authentication Tokens
4.5 身份验证类型
- Basic Authentication (Remote)
- Request Header Authentication
- Keystone Authentication
- LDAP Authentication
- GitHub Authentication
五 管理项目及账户
5.1 前置准备
5.2 本练习准备
5.3 创建htpasswd账户
1 [kiosk@foundation0 ~]$ ssh root@master
2 [root@master ~]# htpasswd -b /etc/origin/master/htpasswd user1 redhat
3 [root@master ~]# htpasswd -b /etc/origin/master/htpasswd user2 redhat
4 #添加基于htpasswd形式的user1和user2,密码都为redhat。
5.4 设置策略
1 [student@workstation ~]$ oc login -u admin -p redhat https://master.lab.example.com #使用管理员登录
2 [student@workstation ~]$ oc adm policy remove-cluster-role-from-group \
3 self-provisioner system:authenticated:oauth
4 #删除所有赋予普通创建项目的功能,该命令可参考本环境如下目录中的命令。
5 [student@workstation ~]$ cat /home/student/DO280/labs/secure-resources/configure-policy.sh
6 #!/bin/bash
7 oc adm policy remove-cluster-role-from-group \
8 self-provisioner system:authenticated system:authenticated:oauth
5.5 验证策略
1 [student@workstation ~]$ oc login -u user1 -p redhat https://master.lab.example.com #使用普通用户user1登录
2 [student@workstation ~]$ oc new-project test #测试创建project
3 Error from server (Forbidden): You may not request a new project via this API.
5.6 创建项目
1 [student@workstation ~]$ oc login -u admin -p redhat https://master.lab.example.com #使用集群管理员登录
2 [student@workstation ~]$ oc new-project project-user1 #创建两个项目
3 [student@workstation ~]$ oc new-project project-user2
5.7 将项目与user关联
1 #选择项目1
2 Now using project "project-user1" on server "https://master.lab.example.com:443".
3 [student@workstation ~]$ oc policy add-role-to-user admin user1 #将user1添加为项目1的管理员
4 role "admin" added: "user1"
5 [student@workstation ~]$ oc policy add-role-to-user edit user2 #将user2添加为项目1的开发员
6 role "edit" added: "user2"
7
8 [student@workstation ~]$ oc project project-user2 #选择项目2
9 Now using project "project-user2" on server "https://master.lab.example.com:443".
10 [student@workstation ~]$ oc policy add-role-to-user edit user2 #将user2添加为项目2的开发员
11 role "edit" added: "user2"
5.8 验证访问
1 [student@workstation ~]$ oc login -u user1 -p redhat https://master.lab.example.com #使用user1登录
2 [student@workstation ~]$ oc project project-user1 #验证项目1的访问
3 Already on project "project-user1" on server "https://master.lab.example.com:443".
4 [student@workstation ~]$ oc project project-user2 #验证项目2的访问
5 error: You are not a member of project "project-user2".
6 You have one project on this server: project-user1
7
8 [student@workstation ~]$ oc login -u user2 -p redhat https://master.lab.example.com #使用user2登录
9 [student@workstation ~]$ oc project project-user1
10 Already on project "project-user1" on server "https://master.lab.example.com:443". #验证项目1的访问
11 [student@workstation ~]$ oc project project-user2
12 Now using project "project-user2" on server "https://master.lab.example.com:443". #验证项目2的访问
5.9 部署特权应用
1 [student@workstation ~]$ oc login -u user2 -p redhat https://master.lab.example.com
2 [student@workstation ~]$ oc project project-user1
3 Now using project "project-user1" on server "https://master.lab.example.com:443".
4 [student@workstation ~]$ oc new-app --name=nginx --docker-image=registry.lab.example.com/nginx:latest
5 #使用在项目1上不具备admin权限的用户user2登录,并部署应用,会出现如下提示:
5.10 验证部署
1 [student@workstation ~]$ oc get pods
5.11 故障排除
1 [student@workstation ~]$ oc login -u user1 -p redhat https://master.lab.example.com #使用项目1的admin账户登录
2 [student@workstation ~]$ oc create serviceaccount useroot #创建服务账户
3 serviceaccount "useroot" created
4 [student@workstation ~]$ oc login -u admin -p redhat https://master.lab.example.com #使用集群管理员登录
5 [student@workstation ~]$ oc project project-user1 #选择项目1
6 Already on project "project-user1" on server "https://master.lab.example.com:443".
7 [student@workstation ~]$ oc adm policy add-scc-to-user anyuid -z useroot #设置SCC策略
8 scc "anyuid" added to: ["system:serviceaccount:project-user1:useroot"] #将服务帐户与anyuid安全上下文关联,此操作需要集群管理员用户。
9 [student@workstation ~]$ oc login -u user2 -p redhat https://master.lab.example.com #切换user2用户
10 [student@workstation ~]$ oc project project-user1
11 Already on project "project-user1" on server "https://master.lab.example.com:443".
12 [student@workstation ~]$ oc patch dc nginx --patch='{"spec":{"template":{"spec":{"serviceAccountName": "useroot"}}}}'
5.12 验证确认
1 [student@workstation ~]$ oc get pods
2 NAME READY STATUS RESTARTS AGE
3 nginx-2-98k8f 1/1 Running 0 3m
4
5.13 暴露服务
1 [student@workstation ~]$ oc expose svc nginx
2 route "nginx" exposed
3 [student@workstation ~]$ oc get svc
4 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
5 nginx ClusterIP 172.30.118.63 <none> 80/TCP 13m
6 [student@workstation ~]$ oc get route
7 NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
8 nginx nginx-project-user1.apps.lab.example.com nginx 80-tcp None
5.14 测试访问
1 [student@workstation ~]$ curl -s http://nginx-project-user1.apps.lab.example.com
5.15 策略删除演示
1 [student@workstation ~]$ oc login -u admin -p redhat
2 [student@workstation ~]$ oc adm policy add-cluster-role-to-group self-provisioner system:authenticated system:authenticated:oauth
3 cluster role "self-provisioner" added: ["system:authenticated" "system:authenticated:oauth"]
4 [student@workstation ~]$ oc delete project project-user1
5 project "project-user1" deleted
6 [student@workstation ~]$ oc delete project project-user2
7 [root@master ~]# htpasswd -D /etc/origin/master/htpasswd user1
8 [root@master ~]# htpasswd -D /etc/origin/master/htpasswd user2
#为所有常规用户重新启用项目创建,即重置为初始状态。本环境中,相关操作命令可以从/home/student/DO280/labs/secure-resources文件夹中的restore-policy.sh脚本运行或复制。
六 管理加密信息
6.1 secret特性
- Secrets data可以独立于其定义引用。
- Secrets data Volume由临时文件存储支持。
- 可以在名称空间中共享Secrets data。
6.2 创建Secrets
1 [user@demo ~]$ oc create secret generic secret_name \
2 --from-literal=key1=secret1 \
3 --from-literal=key2=secret2 #用secret data创建secret对象
4 [user@demo ~]$ oc secrets add --for=mount serviceaccount/serviceaccount-name \
5 secret/secret_name #更新pod的服务帐户,允许引用该secrets。
6.3 使用secret暴露Pod
1 env:
2 - name: MYSQL_ROOT_PASSWORD
3 valueFrom:
4 secretKeyRef:
5 key: username
6 name: demo-secret
6.4 web端管理secret
6.5 Secret使用场景
- password和user names
- 传输层安全性(TLS)和密钥对
七 ConfigMap对象
7.1 ConfigMap概述
7.2 CLI创建ConfigMap
1 [user@demo ~]$ oc create configmap special-config \
2 --from-literal=serverAddress=172.20.30.40
3 [user@demo ~]$ oc get configmaps special-config -o yaml #查看configMap
4 apiVersion: v1
5 data:
6 key1: serverAddress=172.20.30.40
7 kind: ConfigMap
8 metadata:
9 creationTimestamp: 2017-07-10T17:13:31Z
10 name: special-config
11 ……
12 在配置映射的pod定义中填充环境变量APISERVER。
13 env:
14 - name: APISERVER
15 valueFrom:
16 configMapKeyRef:
17 name: special-config
18 key: serverAddress
7.3 web管理ConfigMap
八 加密练习
8.1 前置准备
8.2 本练习准备
8.3 创建项目
1 [student@workstation ~]$ oc login -u developer -p redhat
2 [student@workstation ~]$ cd /home/student/DO280/labs/secure-secrets/
3 [student@workstation secure-secrets]$ less mysql-ephemeral.yml #导入本环境MySQL模板
- 应用程序访问的数据库用户名由database-user定义。
- 数据库用户的密码由database-password定义。
- 数据库管理员密码由database-root-password定义
8.4 创建新secret
1 [student@workstation secure-secrets]$ oc create secret generic mysql \
2 --from-literal='database-user'='mysql' \
3 --from-literal='database-password'='redhat' \
4 --from-literal='database-root-password'='do280-admin'
5 [student@workstation secure-secrets]$ oc get secret mysql -o yaml #确认secret
8.5 创建应用
1 [student@workstation secure-secrets]$ oc new-app --file=mysql-ephemeral.yml
2 [student@workstation secure-secrets]$ oc get pods #确认应用
3 NAME READY STATUS RESTARTS AGE
4 mysql-1-j4fnz 1/1 Running 0 1m
8.6 端口转发
1 [student@workstation secure-secrets]$ cd
2 [student@workstation ~]$ oc port-forward mysql-1-j4fnz 3306:3306
8.7 确认验证
1 [student@workstation ~]$ mysql -uroot -pdo280-admin -h127.0.0.1 #新开终端测试MySQL
九 管理security policy
9.1 OCP authorization授权
默认角色
|
描述
|
cluster-admin
|
此角色中的所有用户都可以管理OpenShift集群。
|
cluster-status
|
此角色中的所有用户都提供对集群信息的只读访问。
|
默认角色
|
描述
|
edit
|
角色中的用户可以从项目中创建、更改和删除公共应用程序资源,比如service和dc。
但是不能对限制范围和配额等管理资源采取行动,也不能管理对项目的访问权限。
|
basic-user
|
角色中的用户具有对项目的读访问权。
|
self-provisioner
|
角色中的用户可以创建新项目。这是一个集群角色,而不是项目角色。
|
admin
|
角色中的用户可以管理项目中的所有资源,包括授予对项目的其他用户的访问权
|
9.2 相关命令
1 向集群用户添加角色
2 $ oc adm policy add-cluster-role-to-user cluster-role username
3 示例:将普通用户更改为集群管理员。
4 $ oc adm policy add-cluster-role-to-user cluster-role username
5 从用户中删除集群角色
6 $ oc adm policy remove-cluster-role-from-user cluster-role username
7 示例:将集群管理员更改为普通用户。
8 $ oc adm policy remove-cluster-role-from-user cluster-admin username
9 将指定的用户绑定到项目中的角色
10 $ oc adm policy add-role-to-user role-name username -n project
11 示例:在WordPress项目中dev用户绑定basic-user角色。
12 $ oc adm policy add-role-to-user basic-user dev -n wordpress
9.3 权限及规则
1 $ oc adm policy who-can delete user
9.4 user类型
9.5 安全上下文约束(SCCS)
- 运行特权容器
- 请求容器的额外功能
- 使用主机目录作为卷
- 更改容器的SELinux上下文
- 更改用户ID
- anyuid
- hostaccess
- hostmount-anyuid
- nonroot
- privileged
- restricted(默认)
9.6 OpenShift与SELinux
9.7 特权容器
十 资源访问控制综合实验
10.1 前置准备
10.2 本练习准备
1 [student@workstation ~]$ lab secure-review setup
10.3 创建用户
1 [root@master ~]# htpasswd /etc/origin/master/htpasswd user-review
2 New password: 【redhat】
3 Re-type new password: 【redhat】
10.4 修改策略
1 [student@workstation ~]$ oc login -u admin -p redhat
2 [student@workstation ~]$ oc adm policy remove-cluster-role-from-group \
3 self-provisioner system:authenticated system:authenticated:oauth
4 禁用所有常规用户的项目创建功能
10.5 确认验证
1 [student@workstation ~]$ oc login -u user-review -p redhat
2 [student@workstation ~]$ oc new-project test #普通用户无法创建项目
3 Error from server (Forbidden): You may not request a new project via this API.
10.6 创建项目
1 [student@workstation ~]$ oc login -u admin -p redhat
2 [student@workstation ~]$ oc new-project secure-review #使用管理员创建项目
10.7 授权用户
1 [student@workstation ~]$ oc project secure-review
2 Already on project "secure-review" on server "https://master.lab.example.com:443".
3 [student@workstation ~]$ oc policy add-role-to-user edit user-review #将edit的role和user-review进行关联
10.8 测试访问
1 [student@workstation ~]$ oc login -u user-review -p redhat
2 [student@workstation ~]$ oc project secure-review #测试访问
3 Already on project "secure-review" on server "https://master.lab.example.com:443".
10.9 检查模板
1 [student@workstation ~]$ cd /home/student/DO280/labs/secure-review/
2 [student@workstation secure-review]$ less mysql-ephemeral.yml
- 应用程序访问的数据库用户名由database-user定义。
- 数据库用户的密码由database-password定义。
- 数据库管理员密码由database-root-password定义
10.10 创建secret
1 [student@workstation secure-review]$ oc create secret generic mysql \
2 --from-literal='database-user'='mysql' \
3 --from-literal='database-password'='redhat' \
4 --from-literal='database-root-password'='do280-admin'
5 [student@workstation secure-review]$ oc get secret mysql -o yaml #确认验证secret
10.11 部署应用
1 [student@workstation secure-review]$ oc new-app --file=mysql-ephemeral.yml
2 [student@workstation secure-review]$ oc get pods
3 NAME READY STATUS RESTARTS AGE
4 mysql-1-2lr7t 1/1 Running 0 31s
10.12 转发端口
1 [student@workstation ~]$ oc port-forward mysql-1-2lr7t 3306:3306
10.13 测试访问
1 [student@workstation ~]$ mysql -umysql -predhat -h127.0.0.1
10.14 部署phpmyadmin应用
1 [student@workstation ~]$ oc new-app --name=phpmyadmin \
2 --docker-image=registry.lab.example.com/phpmyadmin/phpmyadmin:4.7 \
3 -e PMA_HOST=mysql.secure-review.svc.cluster.local
10.15 查看pod
1 [student@workstation ~]$ oc get pods
2 NAME READY STATUS RESTARTS AGE
3 mysql-1-2lr7t 1/1 Running 0 8m
4 phpmyadmin-1-v7tl7 0/1 Error 2 1m
5 因为没有root权限,因此部署失败,需要提权。
10.16 授予权限
1 [student@workstation ~]$ oc login -u admin -p redhat #使用管理员登录
2 [student@workstation ~]$ oc create serviceaccount phpmyadmin-account #首先创建服务账户
3 [student@workstation ~]$ oc adm policy add-scc-to-user anyuid -z phpmyadmin-account
4 scc "anyuid" added to: ["system:serviceaccount:secure-review:phpmyadmin-account"] #将服务帐户与anyuid安全上下文关联
10.17 更新应用
1 [student@workstation ~]$ oc patch dc phpmyadmin --patch='{"spec":{"template":{"spec":{"serviceAccountName": "phpmyadmin-account"}}}}'
10.18 确认验证
1 [student@workstation ~]$ oc login -u user-review -p redhat
2 [student@workstation ~]$ oc get pods #确认pod是否正常
3 NAME READY STATUS RESTARTS AGE
4 mysql-1-2lr7t 1/1 Running 0 13m
5 phpmyadmin-2-bdjvq 1/1 Running 0 1m
10.19 暴露服务
1 [student@workstation ~]$ oc expose svc phpmyadmin --hostname=phpmyadmin.apps.lab.example.com
10.20 访问测试
1 [student@workstation ~]$ curl -s http://phpmyadmin.apps.lab.example.com
10.21 确认及删除
1 [student@workstation ~]$ lab secure-review grade #环境脚本判断
2 [student@workstation ~]$ oc login -u admin -p redhat
3 [student@workstation ~]$ oc adm policy add-cluster-role-to-group \
4 self-provisioner system:authenticated system:authenticated:oauth
5 [student@workstation ~]$ oc delete project secure-review
6 [student@workstation ~]$ ssh root@master htpasswd -D \
7 /etc/origin/master/htpasswd user-review #删除用户
8 [student@workstation ~]$ oc delete user user-review #删除项目
005.OpenShift访问控制-权限-角色的更多相关文章
- Yii中 RBAC(基于角色的访问控制权限)表结构原理分析
这里有几个概念很重要,我简单用大白话说一下; 权限:就是指用户是否可以执行哪些操作. 如:小张可以发帖.回帖.浏览,小红只能回帖.浏览 角色:就是上面说的一组操作的集合. 如:高级会员有发帖.回帖.删 ...
- JeeSite | 访问控制权限
在各种后台系统中都会涉及到权限的管控,从功能权限的管控,到数据权限的管控,都是为了让系统的在使用的过程中更加的安全.功能权限管控是对针对不同的角色可以进行不同的功能操作,而数据权限管控是针对不同的角色 ...
- public/private/protected访问控制权限的区别
//public/private/protected访问控制权限的区别//时间:2016/8/16 //(一)修饰成员: //public: 在类内.类外都能使用 . //protected: 在类内 ...
- Java——private default protected public访问控制权限
访问控制权限 protected范例
- Oracle命令:授权-收回权限-角色
Oracle命令:授权-收回权限-角色 oracle grant 不论授予何种权限,每条授权(grant)语句总是由三部分组成: 1) 接受者部分是准备获得权限的一个或多个用户的列表. 2)关键字权限 ...
- Java 多态 父类和子类方法的访问控制权限
Java 多态 父类和子类方法的访问控制权限 @author ixenos 父类和子类方法的访问控制权限 继承是为了扩展类的功能,而这种扩展显然就是对一个原始类的扩展,目的还是向上转型来调用,所以这就 ...
- Java基础 -- 访问控制权限
一 包:库单元 假设我们存在两个类名相同的类,如果没有一定的措施对其进行区分,就会无法区别到底使用的是哪一个类.因此java引入了包来进行名字空间管理. 包(类库)包含有一组类,这些类在单一的名字空 ...
- Cmd下修改文件访问控制权限
保证自己的磁盘分区格式是NTFS.FAT32是不行的. 一.Cacls.exe命令的使用 这是一个在Windows 2000/XP/Server 2003操作系统下都可以使用的命令,作用是显示或者修改 ...
- 转 oracle 学习- 用户权限角色
创建和删除用户是Oracle用户管理中的常见操作,但这其中隐含了Oracle数据库系统的系统权限与对象权限方面的知识.掌握还Oracle用户的授权操作和原理,可以有效提升我们的工作效率. Oracle ...
随机推荐
- web自动化之键盘操作
简单介绍下web自动化怎么触发键盘操作 按键操作 需要导入的类from selenium.webdriver.common.keys import Keys 组合键Keys.CONTROL 也就是我们 ...
- SqlServer2008查询性能优化_第一章
- MVC案例之通过配置切换底层存储源(面向接口)
1.深入理解面向接口编程: 在类中调用接口的方法,而不必关心具体的实现.这将有利于代码的解耦.使程序有更好的可移植性 和可扩展性 动态修改 Customer 的存储方式:通过修改类路径下的 switc ...
- Rocket - diplomacy - LazyModule的实例化
https://mp.weixin.qq.com/s/9PsBt4_4qHx4i6C5XtuiUw 介绍LazyModule和Node构造方法的执行过程,即实例化过程. 1. NullIn ...
- 这才是你需要的最基础的.Net基础面试题(通俗易懂,最基础的.Net)2
51. 委托回调静态方法和实例方法有何区别? 当一个实例方法被调用时,需要通过实例对象来访问,绑定一个实例方法到委托必须同时让委托得到实例方法的代码段和实例对象的信息,这样在委托被回调时候.NET才能 ...
- Java实现 LeetCode 679 24 点游戏(递归)
679. 24 点游戏 你有 4 张写有 1 到 9 数字的牌.你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24. 示例 1: 输入: [4, 1, 8, 7] 输出: True 解释: ...
- Java实现洛谷 P1062 数列
P1062 数列 import java.util.ArrayList; import java.util.Scanner; public class Main { public static voi ...
- Java实现 蓝桥杯VIP 算法训练 开心的金明
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱 ...
- java实现土地测量
** 土地测量** 造成高房价的原因有许多,比如土地出让价格.既然地价高,土地的面积必须仔细计算.遗憾的是,有些地块的形状不规则,比如是如图[1.jpg]中所示的五边形. 一般需要把它划分为多个三角形 ...
- java实现第七届蓝桥杯煤球数量
煤球数量 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), - 如果一共有100层,共有多少个煤 ...