安全的基础容器镜像


容器非常的流行,容器安全也变得重要起来了!

Kubernetes,经常被缩写为 K8s,是一个开源的容器或编排系统,用于自动部署、扩展和管理容器化应用程序。它管理着构成集群的所有元素,从应用中的每个微服务到整个集群。与单体软件平台相比,将容器化应用作为微服务使用可以提供更多的灵活性和安全优势,但也可能引入其他复杂因素。

安全的容器基础镜像


安全性: DistroLess > BinaryLess > ShellLess > RootLess

了解过 Docker 镜像构建的同学,可能或多或少都了解过 xxx-less 相关的容器。

  • Root-Less 容器
    • 不以 root 用户启动容器
    • 限制一下容器内进程的权限
    • 也可以抵御部分容器逃逸问题
  • Shell-Less 容器
    • 容器内不包含 shell 相关的命令
    • 可以免疫部分的 get shell 进行的攻击
    • 可以免疫部分利用任意命令执行漏洞进行的攻击
    • 可以免疫部分依赖 shell 的渗透攻击以及后渗透攻击
  • Binary-Less 容器
    • 容器内不包含除用户业务程序外的任何其他二进制可执行文件和脚本
    • 免疫更多的利用任意命令执行漏洞和依赖容器内二进制执行文件进行的攻击
  • Distro-Less 容器
    • 容器内只包含除用户业务程序及业务程序的运行时依赖
    • 不包含任何其他程序、库以及非必须的系统文件
    • 所以比 binaryless 容器能免疫更多的漏洞攻击

推荐使用 distroless 作为基础镜像

目前,有一些相关的 xxx-less 容器的实现,将其为作为基础镜像。

  • 利用 scratch 作为多段构建后的基础镜像
FROM golang:1.16 as builder
...
RUN go build xxx

FROM scratch
COPY --from=builder /path/to/buld-files  /path/to/save
...
  • 利用 gcr 提供的 distroless 作为基础镜像
FROM gcr.io/distroless/base-debian10
...
RUN go build xxx

FROM scratch
COPY --from=builder /path/to/buld-files  /path/to/save
...
  • 使用 docker-slim 工具对镜像做二次精简
# 删除不需要的内容,但是效果并不太好
$ docker-slim build --target archlinux:latest \
    --tag archlinux:curl --http-probe=false \
    --exec "curl checkip.amazonaws.com"

相关 xxx-less 镜像推荐


文章作者: Escape
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !