概述:
容器是在linux命名空间和CGroup的基础上,通过SELinux限制容器进程对资源的读取访问或限制容器的容量。容器的安全隔离已经达到了生产可用级别。
容器安全涉及到多个层面:1、容器自身安全;2、容器镜像安全;3、宿主机安全
用户认证:
openshift通过OAuth进行用户认证,OAuth是一个开源的认证和授权框架,OAuth通过用户登录认证以后,返回一个token,用户可以在有效的时间内对系统进行访问。
获取token:oc whoami -t
获取tokenAPI:/oauth/token/request
身份验证 identity provider
openshift提供不同的适配器链接不同的用户信息管理系统:LDAP、Active
Directory、HTPasswd。
openshift默认采用HTPasswd的文件存储用户信息。该文件存储位置在:/etc/origin/master/htpasswd
使用htpasswd命令可以对用户数据库进行增删改查
用户组
查看provider来源:oc get identity
认证系统:authentication
授权系统:authorization
角色访问控制系统:RBAC (role based access control)
权限cluster local
role:角色,一组权限的集合,RBAC系统中,权限–>role–>用户或者组
rule:规则,rule三要素:角色role、资源resource、动作verb。
policy:策略,若干role组成的集合
role binding ,角色与用户或者组的绑定关系
policy binding,若干role组成的集合与用户或者组的绑定关系。
权限操作
- 授予用户查看当前项目权限:
oc policy add-role-to-user view user2
- 编辑权限:
oc policy add-role-to-user edit user2
删除:oc policy remove-role-from-user edit user2
- 查看角色绑定关系:
oc get rolebinding
- 查看role的详细信息
oc describe clusterrole admin
- 创建组:
oc adm groups new newgroups
- 增加用户到组
oc adm groups add-users newgroups user2
- 绑定cluster-admin role到新建组
oc adm policy add-cluster-role-to-group cluster-admin newgroups
cluster-admin是系统管理员角色,这个角色可以在系统中对任意对象执行任意操作。
Service Account
builder对象:用于S2I
default对象:用于运行容器
depolyer对象:用于部署容器
| 每个service account包含secret 和token |
|---|
| ./media/image1.png |
安全上下文SCC
privileged权限最大,restricted权限最小,普通用户及其创建的项目,都属于restricted组。这个组不允许容器以root用户运行,如该要容器以root权限运行,可以把项目默认的default
service account加入到高权限的组中,
比如加入到anyuid组中,因为anyuid组中的RUNASUSER属性值为:RUNASANY,命令如下:
oc adm policy add-scc-to-user anyuid -z default -n projectname
| 查看当前用户的scc(Security content constraint) |
|---|
| ./media/image2.png |
Quota额度配置
额度的控制通过资源额度对象resource quota管理(集群用clusterresourcequota),
resource
quota是基于项目的,以项目为单位对资源进行额度管理,资源的额度对象分为两种:
- 计算资源:compute resource
- 计算资源:对CPU、内存资源的额度管理
CPU:
| limits.cpu: “40” #limits :容器所能使用的cpu上限值。 limits.memory: 40Gi requests.cpu: “4” #requests:容器运行所需的cpu下限值。 requests.memory: 4Gi |
|---|
CPU资源的度量最小单位是Millicore,一个计算节点上CPU核数乘以1000,即为该节点CPU资源总量。
例如:4Core=4000m
注意:设置计算资源以后,用户部署容器的时候,必须显示的为每一个容器指定CPU和内存的requests及limits的值,否则容器无法部署。
- 对象数量额度:pod、rc、rq、svc、cm、pvc、is、secrets
| openshift.io/imagestreams: “400” persistentvolumeclaims: “400” pods: “40” replicationcontrollers: “40” resourcequotas: “40” secrets: “100” services: “100” |
|---|
- cluster resource quota
ClusterResourceQuota允许限制多个project,多个project可以通过annotation 或者
label
进行选择,比如某个用户下的所有project就可以通过:annotations:openshift.io/requester=
进行限制。项目管理员不能创建和修改ClusterResourceQuota,但是可以查看集群限额在当前项目的应用情况,通过以下命令查看:
| oc describe AppliedClusterResourceQuota |
|---|
Limit Range 资源限制
资源限制是更具体的控制每个容器具体使用多少CPU和内存资源。
可以通过两个层面进行定义:
项目级别统一定义每个容器资源是用总量
容器级别单独定义某个容器资源是用总量