首页  >  文章  >  运维  >  docker安全特性有哪些

docker安全特性有哪些

青灯夜游
青灯夜游原创
2022-01-28 15:21:423008浏览

docker安全特性有:1、加密节点ID;2、基于TLS的认证机制;3、安全准入令牌;4、支持周期性证书自动更新的CA配置;5、加密集群存储;6、加密网络;7、Docker安全扫描;8、Docker内容信任;9、Docker密钥等等。

docker安全特性有哪些

本教程操作环境:linux5.9.8系统、docker-1.13.1版、Dell G3电脑。

Docker 平台还引入了大量自有安全技术。Swarm 模式基于 TLS 构建,并且配置上极其简单灵活。安全扫描对镜像进行二进制源码级别扫描,并提供已知缺陷的详细报告。

Docker 内容信任允许用户对内容进行签名和认证,密钥目前也是 Docker 中的一等公民。Docker 为这些安全技术设定了合理的默认值,但是用户也可以自行修改配置,或者禁用这些安全技术。

Swarm 模式

Swarm 模式是 Docker 未来的趋势。Swarm 模式支持用户集群化管理多个 Docker 主机,同时还能通过声明式的方式部署应用。

每个 Swarm 都由管理者和工作者节点构成,节点可以是 Linux 或者 Windows。管理者节点构成了集群中的控制层,并负责集群配置以及工作负载的分配。工作者节点就是运行应用代码的容器。

正如所预期的,Swarm 模式包括很多开箱即用的安全特性,同时还设置了合理的默认值。这些安全特性包括以下几点。

  • 加密节点 ID。

  • 基于 TLS 的认证机制。

  • 安全准入令牌。

  • 支持周期性证书自动更新的 CA 配置。

  • 加密集群存储(配置 DB)。

  • 加密网络。

Docker 安全扫描

快速发现代码缺陷的能力至关重要。Docker 安全扫描功能使得对 Docker 镜像中已知缺陷的检测工作变得简单。

Docker 安全扫描已经可以用于 Docker Hub 上私有仓库的镜像了。同时该技术还可以作为 Docker 可信服务本地化部署解决方案的一部分。最后,所有官方 Docker 镜像都经过了安全扫描,扫描报告在其仓库中可以查阅。

Docker 安全扫描对 Docker 镜像进行二进制代码级别的扫描,对其中的软件根据已知缺陷数据库(CVE 数据库)进行检查。在扫描执行完成后,会生成一份详细报告。

打开浏览器访问 Docker Hub,并搜索 Alpine 仓库。下图展示了官方 Alpine 仓库的 Tags 标签页。

1.gif

Alpine 仓库是官方仓库,这意味着该仓库会自动扫描并生成对应报告。可以看到,镜像标签为 edge、lates 以及 3.6 的镜像都通过了已知缺陷的检查。但是 alpine:3.5 镜像存在已知缺陷(标红)。

如果打开 alpine:3.5 镜像,可以发现如下图所示的详细信息。

2.gif

这是发现自己软件中已知缺陷详情的一种简单方式。

Docker 可信镜像仓库服务(Docker Trusted Registry, DTR),属于 Docker 企业版中本地化镜像仓库服务的一部分内容,提供了相同的 Capability,同时还允许用户自行控制其镜像扫描时机以及扫描方式。

例如,DTR 允许用户选择镜像是在推送时自动触发扫描,还是只能手工触发。同时 DTR 还允许用户手动更新 CVE 数据库,这对于 DTL 无法进行联网来自动更新 CVE 数据的场景来说,是一种理想的解决方案。

这就是 Docker 安全扫描,一种深入检测 Docker 镜像是否存在已知安全缺陷的好方式。当然,能力越大责任越大,当用户发现缺陷后,就需要承担解决相应缺陷的责任了。

Docker 内容信任

Dockr 内容信任(Docker Content Trust,DCT)使得用户很容易就能确认所下载镜像的完整性以及其发布者。在不可信任的网络环境中下载镜像时,这一点很重要。

从更高层面来看,DCT 允许开发者对发布到 Docker Hub 或者 Docker 可信服务的镜像进行签名。当这些镜像被拉取的时候,会自动确认签名状态。下图展示了这一过程。

3.gif

DCT 还可以提供关键上下文,如镜像是否已被签名从而可用于生产环境,镜像是否被新版本取代而过时等。

DTC 提供的上下文还在初期,配置起来相当复杂。在 Docker 主机上启用 DCT 功能,所要做的只是在环境中将 DOCKER_CONTENT_TRUST 变量设置为 1。

$ export DOCKER_CONTENT_TRUST=1

在实际环境中,用户可能希望在系统中默认开启该特性。

如果使用 Docker 统一配置层(Docker 企业版的一部分),需要勾选下图所示 Run Only Signed Images 复选项。这样会强制所有在 UCP 集群中的节点只运行已签名镜像。

4.gif

由上图中可知,UCP 在 DCT 的基础上进行进一步封装,提供了已签名镜像的安全首选项信息。例如,用户可能有这样的需求:在生产环境中只能使用由 secops 签名的镜像。

一旦 DCT 功能开启,就不能获取并使用未签名镜像了。下图展示了开启 DCT 之后,如果再次尝试通过 Docker CLI 或者 UCP Web UI 界面拉取未签名镜像时所报的错误(两个示例都尝试拉取标签为“unsigned”的镜像)。

5.gif

下图展示了 DCT 是如何阻止 Docker 客户端拉取一个被篡改的镜像的。

6.gif

下图展示了 DCT 如何阻止客户端拉取旧镜像。

7.gif

Docker 内容信任是一种很重要的技术,能帮助用户检查从 Docker 服务中拉取的镜像。该技术的基础模式配置起来非常简单,但是类似上下文等一些高级特性,现阶段配置起来还是非常复杂的。

Docker 密钥

很多应用都需要密钥。比如密码、TLS 证书、SSH key 等。

在 Docker1.13 版本之前,没有一种标准且安全的方式能让密钥在应用间实现共享。常见的方式是开发人员将密钥以文本的方式写入环境变量。这与理想状态差距甚远。

Docker1.13 引入了 Docker 密钥,将密钥变成 Docker 生态系统中的一等公民。例如,增加了一个新的子命令 docker secret 来管理密钥。在 Docker 的 UCP 界面中,也有专门的地方来创建和管理密钥。

在后台,密钥在创建后以及传输中都是加密的,使用时被挂载到内存文件系统,并且只对那些已经被授权了的服务开放访问。这确实是一种综合性的端到端解决方案。

下图展示了其总体流程。

8.gif

下面依次介绍上图中所示工作流的每一步。

1) 密钥被创建,并且发送到 Swarm。

2) 密钥存放在集群存储当中,并且是加密的(每个管理者节点都能访问集群存储)。

3) B 服务被创建,并且使用了该密钥。

4) 密钥传输到 B 服务的任务节点(容器)的过程是加密的。

5) B 服务的容器将密钥解密并挂载到路径 /run/secrets 下。这是一个临时的内存文件系统(在 Windows Docker 中该步骤有所不同,因为 Windows 中没有内存文件系统这个概念)。

6) 一旦容器(服务任务)完成,内存文件系统关闭,密钥也随之删除。

7) A 服务中的容器不能访问该密钥。

用户可以通过 docker secret 子命令来管理密钥,可以通过在运行 docker service create 命令时附加 --secret,从而为某个服务指定密钥。

推荐学习:《docker视频教程

以上是docker安全特性有哪些的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn