如何使用Kubesec执行Kubernetes资源安全风险分析
关于Kubesec
Kubesec是一款针对Kubernetes的安全工具,在该工具的帮助下,广大研究人员可以轻松执行Kubernetes资源安全风险分析任务。
工具要求
Golang
工具安装
源码获取
直接使用下列命令即可获取工具源码:
$ git clone https://github.com/controlplaneio/kubesec.git
发布版本
广大研究人员还可以直接访问该项目的【Releases页面】下载Linux、macOS和Windows的二进制文件版本。
Go 1.16+
$ go install github.com/controlplaneio/kubesec/v2@latest
Go 版本 < 1.16
$ GO111MODULE="on" go get github.com/controlplaneio/kubesec/v2
基础使用
命令行用法:
$ kubesec scan k8s-deployment.yaml
使用示例:
$ cat <<EOF > kubesec-test.yaml apiVersion: v1 kind: Pod metadata: name: kubesec-demo spec: containers: - name: kubesec-demo image: gcr.io/google-samples/node-hello:1.0 securityContext: readOnlyRootFilesystem: true EOF $ kubesec scan kubesec-test.yaml
Docker使用
在 Docker 中运行下列的命令:
$ docker run -i kubesec/kubesec:v2 scan /dev/stdin < kubesec-test.yaml
指定自定义架构
使用上游的最新可用模式:
kubesec [scan|http]
使用上游的特定架构版本:
kubesec [scan|http] --kubernetes-version <version>
通过 HTTP 在隔离环境中使用特定的架构版本:
kubesec [scan|http] --kubernetes-version <version> --schema-location https://host.server
在具有本地文件的隔离环境中使用特定的架构版本:
kubesec [scan|http] --kubernetes-version <version> --schema-location /opt/schemas
打印扫描规则及其相关分数
所有扫描规则都可以以不同的格式打印(json(默认)、yaml 和表格):
kubesec print-rules
输出结果如下:
[ { "id": "AllowPrivilegeEscalation", "selector": "containers[] .securityContext .allowPrivilegeEscalation == true", "reason": "Ensure a non-root process can not gain more privileges", "kinds": [ "Pod", "Deployment", "StatefulSet", "DaemonSet" ], "points": -7, "advise": 0 }, ... ]
Kubesec HTTP 服务器
在后台启动 HTTP 服务器:
$ kubesec http 8080 & [1] 12345 {"severity":"info","timestamp":"2019-05-12T11:58:34.662+0100","caller":"server/server.go:69","message":"Starting HTTP server on port 8080"}
使用 curl 将文件发布到服务器:
$ curl -sSX POST --data-binary @test/asset/score-0-cap-sys-admin.yml http://localhost:8080/scan [ { "object": "Pod/security-context-demo.default", "valid": true, "message": "Failed with a score of -30 points", "score": -30, "scoring": { "critical": [ { "selector": "containers[] .securityContext .capabilities .add == SYS_ADMIN", "reason": "CAP_SYS_ADMIN is the most privileged capability and should always be avoided", "points": -30 }, { "selector": "containers[] .securityContext .runAsNonRoot == true", "reason": "Force the running image to run as a non-root user to ensure least privilege", "points": 1 }, // ...
最后,通过终止后台进程来停止 Kubesec 服务器:
$ kill %
Kubesec 即服务
命令行用法:
$ curl -sSX POST --data-binary @"k8s-deployment.yaml" https://v2.kubesec.io/scan
定义 BASH 函数:
$ kubesec () { local FILE="${1:-}"; [[ ! -e "${FILE}" ]] && { echo "kubesec: ${FILE}: No such file" >&2; return 1 }; curl --silent \ --compressed \ --connect-timeout 5 \ -sSX POST \ --data-binary=@"${FILE}" \ https://v2.kubesec.io/scan }
将 Kubernetes 资源发布到 v2.kubesec.io/scan:
$ kubesec ./deployment.yml
示例输出
Kubesec 返回一个 JSON 数组,并且可以在单个输入文件中扫描多个 YAML 文档。
[ { "object": "Pod/security-context-demo.default", "valid": true, "message": "Failed with a score of -30 points", "score": -30, "scoring": { "critical": [ { "selector": "containers[] .securityContext .capabilities .add == SYS_ADMIN", "reason": "CAP_SYS_ADMIN is the most privileged capability and should always be avoided", "points": -30 } ], "advise": [ { "selector": "containers[] .securityContext .runAsNonRoot == true", "reason": "Force the running image to run as a non-root user to ensure least privilege", "points": 1 }, { // ... } ] } } ]
许可证协议
本项目的开发与发布遵循Apache-2.0开源许可协议。
项目地址
Kubesec:【GitHub传送门】
参考资料
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
文章目录