Docker 架构介绍:docker安全最佳实践

简介

docker 赖以生存的“Secure by Default”,docker EE 默认的配置和策略提供基础雄厚的安全环境,因此,他们可以非常容易的修改来适应不同组织的特殊需求。
docker 把重点放到了容器安全的三个关键领域:安全访问、安全内容、安全平台。这导致不仅在Docker EE中内置了隔离和包容功能,而且还启用了开箱即用功能,Linux内核的攻击面积减少。Docker守护进程的控制功能得到了改进,管理员可以构建,发布并运行更安全的应用程序。

你会学到什么

本文档概述了Docker EE的默认安全性以及进一步保护Universal Control Plane和Docker Trusted Registry的最佳做法。 Docker EE 2.0中引入的新功能,如Image Mirroring和Kubernetes也在探索中。

缩略语

UCP = Universal Control Plane
DTR = Docker Trusted Registry
RBAC = Role Based Access Control
CA = Certificate Authority
EE = Docker Enterprise Edition
HA = High Availability
BOM = Bill of Materials
CLI = Command Line Interface
CI = Continuous Integration

引擎和节点安全

已经有几个资源涵盖了Docker引擎安全性的基础知识:

限制节点的root访问

Docker EE使用来自主机的完全独立的身份验证后端,提供明确的职责分离,Docker EE可以利用现有的LDAP / AD基础设施进行身份验证。它甚至使用RBAC标签来控制对镜像和运行容器等对象的访问,这意味着用户团队可以完全访问正在运行的容器。 通过此访问,用户可以观看日志并在正在运行的容器内执行shell命令。 用户永远不需要登录到主机。 限制有权访问主机的用户数量会减少攻击面。

远程访问daemon

不要启用远程守护进程socket。 如果您必须打开它的引擎,那么总是使用证书来保护它。 使用通用控制平面时,不应该打开守护程序socket。 如果必须,请务必查看有关保护守护程序的socker说明。

Privileged 容器

尽可能避免运行特权容器,运行特权容器可以让容器访问所有主机的namespace(net\pid等等),这将给予容器控制主机的权限,通过保持容器和主机认证的独立性,确保您的基础设施安全。

容器UID管理

默认情况下,容器内的用户是root用户。 使用纵深防御模型,建议不是所有的容器都以root身份运行。 缓解这种情况的简单方法是在运行时使用–user声明。 该容器作为指定用户运行,实质上删除了根访问权限。
另请注意,容器内的文件的UID / GID组合与容器外部的文件是相同的,看下面的例子:一个容器以UID 10000和GID 10000运行。如果用户touch一个文件在/tmp/secret_file目录,则文件的UID / GID在容器内部和外部都是相同的,如下所示:

root @ ~  docker run --rm -it -v /tmp:/tmp --user 10000:10000 alpine sh
/ $ whoami
whoami: unknown uid 10000
/ $ touch /tmp/secret_file
/ $ ls -asl /tmp/secret_file
     0 -rw-r--r--    1 10000    10000            0 Jan 26 13:48 /tmp/secret_file
/ $ exit
root @ ~  ls -asl /tmp/secret_file
0 -rw-r--r-- 1 10000 10000 0 Jan 26 08:48 /tmp/secret_file

开发人员在容器中应该尽可能少的使用root权限,开发人员应该在他们的dockerfile中用USER声明创建运行容器的用户。

Seccomp

Seccomp(Secure Computing Mode的简写),是Linux内核的一项安全特性,用于限制给定进程的系统调用,这个特性出现在liunux内核2.6.12版本以后以及docker 1.10以后,当前的Docker Engine实现提供了一组默认的受限系统调用,并且还允许系统调用通过每个容器的白名单或黑名单进行过滤(不同的过滤器可以应用于运行在同一个引擎中的不同容器),Seccomp配置文件在容器创建时应用,在容器运行以后不能更改。
开箱即用,Docker带有一个默认的Seccomp配置文件,对绝大多数用例都非常有效。 一般来说,除非绝对必要,否则不建议应用自定义配置文件 有关构建自定义配置文件并应用它们的更多信息可以在Docker Seccomp文档中找到。
检查自己的系统是否支持seccomp,使用下面的命令:

cat /boot/config-uname -r | grep CONFIG_SECCOMP=

输入如下:
CONFIG_SECCOMP=y

AppArmor / SELinux

AppArmor和SELinux在使用配置文件方面与Seccomp类似,尽管他们在执行上有所不同,AppArmor和SELinux使用的配置文件语言不同,AppArmor仅适用于基于Debian的发行版,如Debian和Ubuntu。 SELinux可在Fedora / RHEL / CentOS / Oracle Linux上使用,而不是简单的系统调用和参数列表,都允许定义角色(通常是进程),动作(读取文件,网络操作)和目标(文件,IP,协议等)
要在Docker守护程序中启用SELinux,请修改/etc/docker/daemon.json并添加以下内容:

“selinux-enabled”: true

要检查SELinux是否启用:
docker info |grep -A 3 “Security Options”
输出如下:

vito@caas:~$ docker info |grep -A 3 "Security Options"
WARNING: No swap limit support
Security Options:
 apparmor
 seccomp
  Profile: default

AppArmor未应用于Docker守护进程。Apparmor配置文件需要在容器运行时应用:

docker run –rm -it –security-opt apparmor=docker-default hello-world

安装和设置AppArmor / SELinux一些很好的资源,例如:
http://www.tecmint.com/mandatory-access-control-with-selinux-or-apparmor-linux/
https://www.cyberciti.biz/tips/selinux-vs-apparmor-vs-grsecurity.html
底线是您应该始终将AppArmor或SELinux用于支持的操作系统。

Runtime Privilege 和 Linux Capabilities

https://success.docker.com/article/security-best-practices

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法直接提供脑图。但是我可以给你一个关于 Docker 学习的大致路线,你可以根据这个路线来安排自己的学习计划: 1. Docker 基础知识: - 了解 Docker 的概念和基本术语 - 学习 Docker架构和组件 - 安装和配置 Docker 2. Docker 容器操作: - 学习使用常用的 Docker 命令,如创建、启动、停止和删除容器 - 掌握容器和宿主机之间的文件共享和数据卷的使用 - 学习容器的网络配置和端口映射 3. Docker 镜像操作: - 学习使用 Docker 命令构建、推送和拉取镜像 - 了解如何使用 Dockerfile 定义镜像的构建过程 - 学习使用多阶段构建和缓存优化来优化镜像构建过程 4. Docker 网络和存储: - 掌握 Docker 网络的基本概念,如桥接网络、主机网络和覆盖网络 - 学习使用 Docker 命令创建和管理网络 - 了解 Docker 数据卷和持久化存储的使用方法 5. Docker Compose: - 学习使用 Docker Compose 来定义和管理多个容器的应用 - 掌握编写 Compose 文件来描述应用的服务、网络和存储 6. Docker Swarm: - 了解 Docker Swarm 的基本概念和架构 - 学习使用 Docker Swarm 命令创建和管理集群 - 掌握在 Swarm 集群上部署和管理应用的方法 7. Docker 安全和监控: - 了解 Docker安全特性和最佳实践 - 学习使用 Docker 命令和工具进行容器和镜像的安全扫描 - 了解如何监控和调优 Docker 容器和集群的性能 8. Docker 应用部署和管理: - 学习使用 Docker 部署常见的应用,如 Web 应用、数据库和消息队列等 - 了解如何通过容器编排工具(如 Kubernetes)来管理大规模的容器化应用 这只是一个大致的学习路线,你可以根据自己的需求和兴趣来调整和扩展。同时,结合实践和项目经验,会更加有助于你对 Docker 的理解和应用。祝你学习顺利!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值