现在要求集群运行 Kubernetes >=1.19。
使用未注册的
kubernetes.io注解进行覆盖标签将被弃用。很快将要求改用kubeaudit.io。 更多背景请参考此讨论。
Kubeaudit 计划于 2024 年 10 月之前弃用。
我们正在积极寻找愿意接手该项目的维护者。如果您对继续开发和维护它充满热情,请与我们联系。
对于寻找替代方案的用户,我们建议迁移到 Kubebench,它提供类似功能且正在积极维护。
感谢社区的支持和贡献。
kubeaudit 是一个命令行工具和一个 Go 包,用于审计 Kubernetes 集群中的各种安全关注点,例如:
简而言之,kubeaudit 确保你部署的容器是安全的!
如需将 kubeaudit 作为 Go 包使用,请参阅包文档。
本 README 的其余部分将重点介绍如何将 kubeaudit 用作命令行工具。
brew install kubeaudit
Kubeaudit 有经过验证的稳定官方发布版本: 官方发布
main 分支可能包含比稳定发布版本更新的功能。如果你需要尚未包含在发布版本中的新功能,请确保使用最新的 Go 并运行以下命令:
go get -v github.com/Shopify/kubeaudit
从快速开始开始使用 kubeaudit,或查看所有支持的命令。
前提条件:kubectl 1.12.0 或更高版本
kubectl 1.12.0 引入了外部函数的易插拔性,kubeaudit 可以通过以下方式作为 kubectl audit 调用:
运行 make plugin 并将 $GOPATH/bin 添加到你的 PATH 中。
或者将二进制文件重命名为 kubectl-audit 并将其放在 PATH 中。
我们不再向 Docker Hub 发布镜像(因为 Docker Hub 已停止为免费团队组织提供服务)。目前,旧镜像仍然可用,但可能会随时停止提供。我们将很快开始向 Github 容器注册表发布镜像。
如需在集群中将 kubeaudit 作为作业运行,请参阅在集群中运行 kubeaudit。
kubeaudit 有三种模式:
如果使用 -f/--manifest 标志提供了 Kubernetes 清单文件,kubeaudit 将审计该清单文件。
示例命令:
kubeaudit all -f "/path/to/manifest.yml"
示例输出:
$ kubeaudit all -f "internal/test/fixtures/all_resources/deployment-apps-v1.yml"
---------------- Results for ---------------
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
namespace: deployment-apps-v1
--------------------------------------------
-- [error] AppArmorAnnotationMissing
Message: AppArmor annotation missing. The annotation 'container.apparmor.security.beta.kubernetes.io/container' should be added.
Metadata:
Container: container
MissingAnnotation: container.apparmor.security.beta.kubernetes.io/container
-- [error] AutomountServiceAccountTokenTrueAndDefaultSA
Message: Default service account with token mounted. automountServiceAccountToken should be set to 'false' or a non-default service account should be used.
-- [error] CapabilityShouldDropAll
Message: Capability not set to ALL. Ideally, you should drop ALL capabilities and add the specific ones you need to the add list.
Metadata:
Container: container
Capability: AUDIT_WRITE
...
如果未发现达到指定最低严重级别的错误,则返回以下内容:
All checks completed. 0 high-risk vulnerabilities found
清单模式还支持使用 autofix 命令自动修复所有安全问题:
kubeaudit autofix -f "/path/to/manifest.yml"
要将修复后的清单写入新文件而非修改源文件,请使用 -o/--output 标志。
kubeaudit autofix -f "/path/to/manifest.yml" -o "/path/to/fixed"
要根据 kubeaudit 配置文件中指定的自定义规则修复清单,请使用 -k/--kconfig 标志。
kubeaudit autofix -k "/path/to/kubeaudit-config.yml" -f "/path/to/manifest.yml" -o "/path/to/fixed"
Kubeaudit 可以检测自身是否在集群内的容器中运行。如果是,它将尝试审计该集群中的所有 Kubernetes 资源:
kubeaudit all
Kubeaudit 将尝试使用本地 kubeconfig 文件($HOME/.kube/config)连接到集群。可以通过 --kubeconfig 标志指定不同的 kubeconfig 路径。使用 -c/--context 标志指定 kubeconfig 的上下文。
kubeaudit all --kubeconfig "/path/to/config" --context my_cluster
有关 Kubernetes 配置文件的更多信息,请参阅 https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/
Kubeaudit 生成三种严重级别的结果:
Error:安全问题或无效的 Kubernetes 配置Warning:最佳实践建议Info:信息性,无需操作。包括已覆盖的结果可以使用 --minSeverity/-m 标志设置最低严重级别。
默认情况下,kubeaudit 以人类可读的方式输出结果。如果输出需要进一步处理,可以使用 --format json 标志将其设置为 JSON 格式。要输出为日志(之前的默认格式),请使用 --format logrus。某些输出格式包含颜色,便于在终端中阅读。要禁用颜色(例如,将输出发送到文本文件),可以使用 --no-color 标志。
你可以使用 --format sarif 标志生成 SARIF 格式的 kubeaudit 报告。要写入 SARIF 结果到文件,可以使用 > 重定向输出。例如:
kubeaudit all -f path-to-my-file.yaml --format="sarif" > example.sarif
如果存在严重级别为 error 的结果,kubeaudit 将以退出码 2 退出。可以使用 --exitcode/-e 标志更改此行为。
有关 kubeaudit 所有自定义选项,请参阅全局标志。
| 命令 | 描述 | 文档 |
|---|---|---|
all | 运行所有可用的审计器,或使用 kubeaudit 配置指定的审计器。 | docs |
autofix | 自动修复安全问题。 | docs |
version | 打印当前 kubeaudit 版本。 |
审计器也可以单独运行。