微信号:david-share

介绍:乐于分享,才有进步.

Openshift容器云安全加固措施70项

2018-03-06 23:25 魏新宇

前言

企业中使用容器承载业务,除了考虑到容器的优势之外,容器的安全更是很多客户关心的话题。本篇文章就此进行讨论。本文在书写过程中,参考了一些文档,文后给出了链接。本文仅提供技术参考,并不能直接用于生产上的建议。


一、宿主机配置

1.为容器创建单独的分区

 即为docker创建单独的逻辑卷。

在Openshift中,可以设置独立的磁盘做docker-vg


2. 宿主机使用最新的Linux内核

Openshift宿主机使用RHEL7,其内核不低于3.10。


3.为宿主机做安全加固

Openshift要求宿主机RHEL启用SELinux。


4.尽量保持Docker新版本

OpenShift包含红帽企业Linux,其中包含一个稳定且完全技术支持的Docker引擎。 Red Hat为OpenShift和RHEL用户维护Docker运行时,这包括相关的错误修正和安全更新。目前红帽的Openshift最新版本中的Docker和K8S是社区最新版本的次新版本。


5.仅允许受信的用户访问docker进程

Openshift不允许用户访问宿主机上的docker进程,如果想访问,需要Openshift授权。



6.审计docker进程

7-14.审计目录和其下的文件: 

/var/lib/docker、/etc/docker、docker.service、docker.socket、 /etc/default/docker、 /etc/docker/daemon.json、/usr/bin/docker-containerd、 /usr/bin/docker-runc

Openshift的宿主机默认没有对这些进程和目录进行审计。参照社区步骤可以打开这些配置:https://github.com/docker/docker-bench-security


二、Docker守护进程配置


1.限制容器之间的网络流量

目前Openshift默认的SDN--OVS支持三种模式,OVS-subnet、OVS多租户、OVS Network Policy,后两种模式可以做项目之间的pod流量隔离。

2.配置日志管理

Openshift集成EFK,提供日志管理。

3.允许Docker守护进程修改iptables

OpenShift进一步实现了在租户隔离的kubernetes级别上自动执行iptables。


4.不适用不安全的容器仓库

Openshift内部集成了一个安全的docker-registry。也可以与第三方镜像仓库集成。


5.不要使用aufs存储驱动程序

OpenShift使用RHEL附带的Docker引擎,默认情况下利用Device Mapper文件系统,也可以使用OverlayFS。 Red Hat完全支持这两种方式。


6.使用授权插件

OpenShift提供了自己的完全集成的认证和授权机制,可以控制对Docker引擎的访问。 它与作为OpenShift一部分的Kubernetes编排引擎集成在一起。


7.不适用V1版本的registry

Openshift默认使用V2版本的docker registry。


三、Docker守护进程配置文件


1.确认docker.service文件属组是root:root; 

2.docker.service文件属性设置为644;

3./etc/docker目录属组是root:root,权限是644; 

4.registry certificate文件的属组是root:root,权限不高于444;

 5./etc/default/docker 文件属组是root:root,权限是644,或者更加严格;


Openshift已经对以上配置文件做了安全加固,默认即为安全值。


四、容器镜像和Build File


1.为容器创建独立的账户

OpenShift默认使用分配的用户标识运行容器,并且还利用由defailt配置的OpenShift安全上下文(scc)来阻止特权容器。


2.使用安全受信的容器基础镜像

红帽官方提供经过安全加固的容器镜像仓库,里面有几百种容器镜像。registry.access.redhat.com


3.不要在容器中安装不需要的包


4.允许重建镜像,以便让他们包含安全补丁

OpenShift提供了集成的构建自动化功能(S2I)。 这也可用于在修补映像并将这些更新部署到正在运行的容器中,而这个过程是自动完成的。



五、容器运行时

1.不要使用特权容器

Openshift中,特权容器只能在Master或Infra节点上运行。Node节点上不需要特权容器。


2.不要在容器上mount很重要的的宿主机系统目录


3.容器之间不要开放ssh


4.不要映射容器内的特权端口,在容器上只打开需要的端口


5.不要共享宿主机的network namespace。


6.限制容器的内存使用量

OpenShift通过配置limits可以实现。


7.容器在mount宿主机根文件系统时,权限设置为只读。

8.将入口容器流量绑定到特定的宿主机网卡


9.将'on-failure'容器重启策略设置为5

OpenShift默认使用这一策略来控制租户和群集稳定性。


10.不要共享宿主机 process namespace、IPC namespace和UTS namespace。


11.不要将宿主机设备直接expose给容器


12.仅在需要时才在运行容器时覆盖默认的ulimit

在Openshift中,只有平台管理员才可以进行此操作。


13.不要使用特权选项执行docker exec命令

OpenShift利用SELinux和docker配置,禁止使用docker特权。SCC默认不会开放这个权限。


14.限制容器获取额外的权限

Openshift通过scc实现。



六、Docker的安全操作


1.定期对宿主机系和容器进行安全审计

Openshift可以利用atomic scan来扫描容器镜像的安全。也可以通过CloudForms自动扫描并配置不合规告警。


2.监视Docker容器的使用情况、性能和计量。

红帽通过CloudForms实现。


3.备份容器数据

Openshift中,容器可以对接ceph、GlusterFS、NAS等持久存储。备份的操作需要持久存储提供。


4.避免容器和容器镜像泛滥

而CloudForms可以提供容器/容器镜像使用频率。对于十分不常用的容器镜像,Openshift将会删除。


七、Openshift的用户和角色


1.为项目和用户配置阈值

Openshift可以配置实现。

https://docs.openshift.com/container-platform/3.7/admin_solutions/user_role_mgmt.html#setting-limits-users-projects

2.监控资源利用率

Openshift默认对容器的资源使用率进行监控。

https://docs.openshift.com/container-platform/3.7/admin_solutions/user_role_mgmt.html#control-monitor-resources

3.用角色控制用户权限

Openshift默认功能。

 https://docs.openshift.com/container-platform/3.7/admin_solutions/user_role_mgmt.html#control-user-roles

4.在对用户赋予cluster-admin角色是要慎重

https://docs.openshift.com/container-platform/3.7/admin_solutions/user_role_mgmt.html#create-cluster-admin


5.使用default groups

https://docs.openshift.com/container-platform/3.7/admin_solutions/user_role_mgmt.html#leveraging-default-groups


八、OpenShift身份验证


1.必须使用带基本认证的HTTPS

Openshift默认使用https认证

 https://docs.openshift.com/container-platform/3.7/admin_solutions/authentication.html#basic-auth-remote


2.启用service account认证

Openshift默认使用service account 

https://docs.openshift.com/container-platform/3.7/admin_guide/service_accounts.html#enabling-service-account-authentication


3.设置SSSD以进行LDAP故障转移

https://docs.openshift.com/container-platform/3.7/install_config/advanced_ldap_configuration/sssd_for_ldap_failover.html#setting-up-for-ldap-failover


九、OpenShift功能

1.使用Seccomp限制应用程序功能

https://docs.openshift.com/container-platform/3.7/admin_guide/seccomp.html#seccomp-enabling-seccomp

2.使用ImagePolicy控制容器镜像的权限

 https://docs.openshift.com/container-platform/3.7/admin_guide/image_policy.html


3.使用qouta限制使用的资源和对象

https://docs.openshift.com/container-platform/3.7/admin_guide/quota.html


4.禁用默写全局build策略

https://docs.openshift.com/container-platform/3.7/admin_guide/securing_builds.html#disabling-a-build-strategy-globally


5.限制某些全局用户的构建策略

https://docs.openshift.com/container-platform/3.7/admin_guide/securing_builds.html#restricting-build-strategies-to-a-user-globally


6.在项目中限制某些用户的构建策略

 https://docs.openshift.com/container-platform/3.7/admin_guide/securing_builds.html#restricting-build-strategies-to-a-user-within-a-project


7.使用OpenSCAP对容器镜像进行合规性检查

使用CloudForms可以实现。

 https://access.redhat.com/documentation/en-us/red_hat_cloudforms/4.6/html/policies_and_profiles_guide/appendix#openscap-schedule


十、OpenShift设置和配置


1.确保 internal registry的安全

https://docs.openshift.com/container-platform/3.7/install_config/registry/securing_and_exposing_registry.html#securing-the-registry


2.配置自定义证书

https://docs.openshift.com/container-platform/3.4/install_config/certificate_customization.html


3.检查证书是否过期

https://docs.openshift.com/container-platform/3.7/install_config/redeploying_certificates.html#install-config-cert-expiry


4.使用多租户为Pod和服务提供项目级别/网络隔离

https://docs.openshift.com/container-platform/3.6/architecture/additional_concepts/sdn.html#network-isolation-multitenant


5.使用Ipsec加密主机

https://docs.openshift.com/container-platform/3.7/admin_guide/ipsec.html


6.使用路由器分片来过滤名称空间/路由

https://docs.openshift.com/container-platform/3.7/install_config/router/default_haproxy_router.html#using-router-shards


7.防止DDoS攻击

https://docs.openshift.com/container-platform/3.7/install_config/router/default_haproxy_router.html#deploy-router-protecting-against-ddos-attacks


8.防止CLI版本与用户代理不匹配

 https://docs.openshift.com/container-platform/3.7/install_config/configuring_authentication.html#configuring-user-agent


大卫分享:

魏新宇

"大卫分享"运营者、红帽资深解决方案架构师

专注开源云计算、容器及自动化运维在金融行业的推广

拥有红帽RHCE/RHCA、VMware VCP-DCV、VCP-DT、VCP-Network、VCP-Cloud、ITIL V3、Cobit5、C-STAR、AIX、HPUX等相关认证。





参考文献:

https://www.redhat.com/cms/managed-files/cl-container-security-openshift-cloud-devops-tech-detail-f7530kc-201705-en.pdf

http://www.infoq.com/cn/news/2017/02/Docker-Containerd-RunC

http://cn.linux.vbird.org/linux_basic/0440processcontrol_5.php


 
大卫分享 更多文章 从一张图看Devops全流程 企业级容器云安全,你需要考虑的九个方面! 解读:红帽再次获得Gartner Positive评价 Openshift高阶探索实验 干货分享:基于JBoss的七个Java应用场景
猜您喜欢 CSDN雅安地震寻人平台开通 DDD CQRS架构和经典架构的优缺点比较 对于进入社会的程序员来说,学历真的很重要……么? Go 语言在 Uber 的应用 电商系统中的商品模型的分析与设计