容器非常的流行,容器安全也变得重要起来了!
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
镜像推荐