stackrox/stackrox
GitHub: stackrox/stackrox
StackRox 提供基于 Kubernetes 的容器安全平台,实现风险分析、可见性与运行时告警。
Stars: 1275 | Forks: 174
## 目录
- [StackRox Kubernetes Security Platform](#stackrox-kubernetes-security-platform)
- [目录](#table-of-contents)
- [社区](#community)
- [部署 StackRox](#deploying-stackrox)
- [使用 Helm 快速安装](#quick-installation-using-helm)
- [使用 Helm 手动安装](#manual-installation-using-helm)
- [使用 Operator 安装](#installation-using-the-operator)
- [通过脚本安装](#installation-via-scripts)
- [Kubernetes 发行版 (EKS、AKS、GKE)](#kubernetes-distributions-eks-aks-gke)
- [OpenShift](#openshift)
- [Docker Desktop、Colima 或 minikube](#docker-desktop-colima-or-minikube)
- [访问 StackRox 用户界面 (UI)](#accessing-the-stackrox-user-interface-ui)
- [开发](#development)
- [快速入门](#quickstart)
- [构建工具](#build-tooling)
- [克隆 StackRox](#clone-stackrox)
- [本地开发](#local-development)
- [常用 Makefile 目标](#common-makefile-targets)
- [工作效率](#productivity)
- [GoLand 配置](#goland-configuration)
- [运行 sql_integration 测试](#running-sql_integration-tests)
- [调试](#debugging)
- [生成可移植安装程序](#generating-portable-installers)
- [运行 StackRox 的依赖项和建议](#dependencies-and-recommendations-for-running-stackrox)
# StackRox Kubernetes 安全平台
StackRox Kubernetes 安全平台对容器环境进行风险分析,提供可见性和实时告警,并通过加固环境来主动提升安全性。
StackRox 与容器生命周期的每个阶段集成:构建、部署和运行时。
StackRox Kubernetes 安全平台建立在以前被称为 Prevent 的产品基础上,该产品本身曾被称为 Mitigate 和 Apollo。你可能会在代码或文档中找到对这些先前名称的引用。
## 部署 StackRox
### 使用 Helm 快速安装
StackRox 提供通过 Helm Charts 快速安装的功能。请按照 [Helm 安装指南](https://helm.sh/docs/intro/install/) 在系统上获取 `helm` CLI。
然后运行 Helm 快速安装脚本,或继续查看 [使用 Helm 手动安装](#manual-installation-using-helm) 部分了解配置选项。
访问仪表板。
### 使用 Helm 手动安装
请按照 [Helm 安装指南](https://helm.sh/docs/intro/install/) 在系统上获取 `helm` CLI。
使用 Helm 部署包含 4 个步骤:
1. 将 StackRox 仓库添加到 Helm
2. 启动 **StackRox Central Services**,使用 helm
3. 创建集群配置和服务身份(初始化包)
4. 使用该配置和这些凭据部署 **StackRox Secured Cluster Services**(此步骤可以执行多次,以向 StackRox Central Service 添加更多集群)
*
### 使用 Operator 安装
从 4.10 版本开始,可以 [使用 Operator 安装 StackRox](operator/install)。
我们鼓励你尝试并提供反馈。
### 通过脚本安装
`deploy` 脚本将:
1. 启动 **StackRox Central Services**
2. 创建集群配置和服务身份
3. 使用该配置和这些凭据部署 **StackRox Secured Cluster Services**
你可以在 shell 中设置环境变量 `MAIN_IMAGE_TAG` 来
确保获取到所需的版本。
如果你检出某个提交,脚本将默认启动与该提交对应的镜像。必要时将拉取镜像。
进一步的步骤取决于编排器。
#### Kubernetes 发行版 (EKS、AKS、GKE)
#### OpenShift
#### Docker Desktop、Colima 或 minikube
### 访问 StackRox 用户界面 (UI)
/central-deploy/password.txt` 文件夹中(脚本安装)。
## 开发
- 从 [**拉取请求指南**](./.github/contributing.md) 开始,如果你计划做出贡献
- 查看 [**shepherding**](./.github/shepherding.md) 了解非平凡代码提交
- 查看我们的 [**AI 策略**](./.github/using-llms.md)
- **Go 编码风格指南**: [go-coding-style.md](./.github/go-coding-style.md)
- **UI 开发文档**: 参考 [ui/README.md](./ui/README.md)
- **E2E 开发文档**: 参考 [qa-tests-backend/README.md](./qa-tests-backend/README.md)
### 快速入门
#### 构建工具
以下工具对于测试代码和构建镜像必不可少:
#### 克隆 StackRox
#### 本地开发
#### 常用 Makefile 目标
#### 工作效率
# create new branch
... work on branch...
$ smart-rebase # rebase from parent branch
... continue working on branch...
$ smart-diff # check diff relative to parent branch
... git push, etc.
```
#### GoLand 配置
。
* 进入 `GoLand | Preferences | Languages & Frameworks | Protocol Buffers`。
* 取消勾选 `Configure automatically`。
* 点击 `+` 按钮,导航并选择 `./proto` 目录。
* 可选地,添加 `$HOME/go/pkg/mod/github.com/gogo/googleapis@1.1.0`
和 `$HOME/go/pkg/mod/github.com/gogo/protobuf@v1.3.1/`。
* 验证:使用菜单 `Navigate | File...` 输入任何 `.proto` 文件名,例如 `alert_service.proto`,并检查所有
导入字符串是否显示为绿色,而不是红色。
#### 运行 sql_integration 测试
#### 调试
## 生成可移植安装程序
central generate interactive > k8s.zip
```
这将引导你完成安装程序并生成 `k8s.zip` 文件。
```
unzip k8s.zip -d k8s
```
```
bash k8s/central.sh
```
现在 Central 已部署。使用 UI 部署 Sensor。
central generate interactive > openshift.zip
```
这将引导你完成安装程序并生成 `openshift.zip` 文件。
```
unzip openshift.zip -d openshift
```
```
bash openshift/central.sh
```
## 运行 StackRox 的依赖项和建议
通过 Helm 安装脚本安装 StackRox
``` /bin/bash <(curl -fsSL https://raw.githubusercontent.com/stackrox/stackrox/master/scripts/quick-helm-install.sh) ``` 默认的 StackRox 部署具有特定的 CPU 和内存请求,如果资源不足,可能会在不小的(例如开发)集群上失败。你可以使用 `--small` 命令行选项在资源有限的较小集群上安装 StackRox。不建议在生产部署中使用此选项。 ``` /bin/bash <(curl -fsSL https://raw.githubusercontent.com/stackrox/stackrox/master/scripts/quick-helm-install.sh) --small ``` 该脚本会添加 StackRox Helm 仓库,生成管理员密码,安装 stackrox-central-services,创建用于预配 stackrox-secured-cluster-services 的初始化包,最后在同一集群上安装 stackrox-secured-cluster-services。 最后,脚本会自动打开浏览器并引导你登录 StackRox。由于证书是自签名的,可能会显示证书警告。有关警告的更多信息,请参阅 [访问 StackRox 用户界面 (UI)](#accessing-the-stackrox-user-interface-ui) 部分。认证后,你可以使用安装 StackRox Central Services
首先,将 StackRox Central Services 添加到你的 Kubernetes 集群。这包括 UI 和 Scanner。要开始,请将 [stackrox/helm-charts/opensource](https://github.com/stackrox/helm-charts/tree/main/opensource) 仓库添加到 Helm。 ``` helm repo add stackrox https://raw.githubusercontent.com/stackrox/helm-charts/main/opensource/ ``` 要查看仓库中所有可用的 Helm 图表,请运行(你可以添加 `--devel` 选项以显示非发布版本): ``` helm search repo stackrox ``` 要安装 stackrox-central-services,你需要一个安全密码。此密码稍后用于 UI 登录和创建初始化包。 ``` ROX_ADMIN_PASSWORD="$(openssl rand -base64 20 | tr -d '/=+')" ``` 从这里,你可以安装 stackrox-central-services,以在集群上部署 Central 和 Scanner 组件。 要执行安装,请根据集群大小选择以下命令之一。 #### 默认 Central 安装 如果你在合理大小的集群中安装,请使用默认安装命令: ``` helm upgrade --install -n stackrox --create-namespace stackrox-central-services \ stackrox/stackrox-central-services \ --set central.adminPassword.value="${ROX_ADMIN_PASSWORD}" \ --set central.persistence.none="true" ``` #### Central 在资源受限集群中的安装 如果你在单节点集群中安装,或者默认安装导致 Pod 因资源不足而卡在挂起状态,请使用以下命令来降低 stackrox-central-services 的资源要求。请记住,这些降低的资源设置不适用于生产环境。 ``` helm upgrade --install -n stackrox --create-namespace stackrox-central-services \ stackrox/stackrox-central-services \ --set central.adminPassword.value="${ROX_ADMIN_PASSWORD}" \ --set central.persistence.none="true" \ --set central.resources.requests.memory=1Gi \ --set central.resources.requests.cpu=1 \ --set central.resources.limits.memory=4Gi \ --set central.resources.limits.cpu=1 \ --set central.db.resources.requests.memory=1Gi \ --set central.db.resources.requests.cpu=500m \ --set central.db.resources.limits.memory=4Gi \ --set central.db.resources.limits.cpu=1 \ --set scanner.autoscaling.disable=true \ --set scanner.replicas=1 \ --set scanner.resources.requests.memory=500Mi \ --set scanner.resources.requests.cpu=500m \ --set scanner.resources.limits.memory=2500Mi \ --set scanner.resources.limits.cpu=2000m ```安装 StackRox Secured Cluster Services
接下来,需要将 Secured Cluster 组件部署到 Kubernetes 节点以收集信息。 为你的 Secured Cluster 设置一个有意义的集群名称,存储在 `CLUSTER_NAME` shell 变量中。该集群将在 StackRox UI 的集群列表中通过此名称进行标识。 ``` CLUSTER_NAME="my-secured-cluster" ``` 设置 Secured Cluster Services 应与之通信的 Central 端点。如果在与 stackrox-central-services 相同的集群上部署 stackrox-secured-cluster-services,请保留默认值;否则,更改该值为 Central 可访问的端点。 ``` CENTRAL_ENDPOINT="central.stackrox.svc:443" ``` 生成包含初始化密钥的初始化包。初始化包将保存在 `stackrox-init-bundle.yaml` 中,你可以使用它来预配后续的安全集群,如下所示。 ``` echo "$ROX_ADMIN_PASSWORD" | \ kubectl -n stackrox exec -i deploy/central -- bash -c 'ROX_ADMIN_PASSWORD=$(cat) roxctl --insecure-skip-tls-verify \ central init-bundles generate stackrox-init-bundle --output -' > stackrox-init-bundle.yaml ``` 然后安装 stackrox-secured-cluster-services(使用刚刚生成的初始化包)。 要执行安装,请根据集群大小选择以下命令之一。 #### 默认 Secured Cluster Services 安装 如果你在合理大小的集群中安装,请使用默认安装命令: ``` helm upgrade --install -n stackrox --create-namespace stackrox-secured-cluster-services \ stackrox/stackrox-secured-cluster-services \ -f stackrox-init-bundle.yaml \ --set clusterName="$CLUSTER_NAME" \ --set centralEndpoint="$CENTRAL_ENDPOINT" ``` #### Secured Cluster Services 在资源受限集群中的安装 如果你在单节点集群中安装,或者默认安装导致 Pod 因资源不足而卡在挂起状态,请使用以下命令来降低 stackrox-secured-cluster-services 的资源要求。请记住,这些降低的资源设置不适用于生产环境。 ``` helm upgrade --install -n stackrox --create-namespace stackrox-secured-cluster-services \ stackrox/stackrox-secured-cluster-services \ -f stackrox-init-bundle.yaml \ --set clusterName="$CLUSTER_NAME" \ --set centralEndpoint="$CENTRAL_ENDPOINT" \ --set sensor.resources.requests.memory=500Mi \ --set sensor.resources.requests.cpu=500m \ --set sensor.resources.limits.memory=500Mi \ --set sensor.resources.limits.cpu=500m ```有关 Helm 图表的更多信息
要进一步自定义 Helm 安装,请参考以下文档: *点击展开
按照以下指南,快速将特定版本的 StackRox 部署到 `stackrox` 命名空间中的 Kubernetes 集群。如果要安装特定版本,请确保在 `MAIN_IMAGE_TAG` 中定义/设置它,否则将安装最新的夜间构建版本。 在你选择的工作目录中运行以下命令: ``` git clone git@github.com:stackrox/stackrox.git cd stackrox MAIN_IMAGE_TAG=VERSION_TO_USE ./deploy/deploy.sh ``` 几分钟后,所有资源都应该被部署。 **'admin' 用户的凭据可以在 `./deploy/k8s/central-deploy/password` 文件中找到。**点击展开
在 OpenShift 上部署之前确保已安装 [oc - OpenShift 命令行](https://github.com/openshift/oc)。 按照以下指南,快速将特定版本的 StackRox 部署到 OpenShift 集群的 `stackrox` 命名空间。确保将最新的标签添加到 `MAIN_IMAGE_TAG` 变量。 在你选择的工作目录中运行以下命令: ``` git clone git@github.com:stackrox/stackrox.git cd stackrox MAIN_IMAGE_TAG=VERSION_TO_USE ./deploy/deploy.sh ``` 几分钟后,所有资源都应该被部署。过程将完成并显示此消息。 **'admin' 用户的凭据可以在 `./deploy/openshift/central-deploy/password` 文件中找到。**点击展开
在你选择的工作目录中运行以下命令: ``` git clone git@github.com:stackrox/stackrox.git cd stackrox MAIN_IMAGE_TAG=latest ./deploy/deploy-local.sh ``` 几分钟后,所有资源都应该被部署。 **'admin' 用户的凭据可以在 `./deploy/k8s/deploy-local/password` 文件中找到。**点击展开
部署完成(Helm 或脚本安装)后,应存在端口转发,因此你可以连接到 https://localhost:8000/。运行以下命令: ``` kubectl port-forward -n 'stackrox' svc/central "8000:443" ``` 然后在浏览器中访问 https://localhost:8000/。 **用户名** = 默认用户为 `admin` **密码 (Helm)** = 密码位于手动安装后的 `$ROX_ADMIN_PASSWORD` 中,或显示在快速安装脚本的末尾。 **密码 (脚本)** = 密码将位于 `/deploy/点击展开
* [Make](https://www.gnu.org/software/make/) * [Go](https://golang.org/dl/) * 可以通过 `make reinstall-dev-tools` 安装的多种 Go Linter。 * UI 构建工具,如 [ui/README.md](ui/README.md#Build-Tooling) 中所述。 * [Docker](https://docs.docker.com/get-docker/) * 注意:Docker Desktop 现在需要付费订阅才能用于大型企业。 * 一些 StackRox 开发者推荐 [Colima](https://github.com/abiosoft/colima) * [Xcode](https://developer.apple.com/xcode/) 命令行工具(仅限 macOS) * [Bats](https://github.com/sstephenson/bats) 用于运行某些 Shell 测试。 你可以通过 `brew install bats` 或 `npm install -g bats` 获取它。 * [oc](https://github.com/openshift/cli) OpenShift CLI 工具 * [shellcheck](https://www.shellcheck.net/) 用于 Shell 脚本 linting。 **仅限 macOS 的 Xcode** 通常你已经通过 brew 安装了这些工具。 然而,如果你在构建 golang x/tools 时遇到错误, 请先确保同意 EULA: 1. 启动 Xcode 2. 创建一个新的空白应用程序项目 3. 在模拟器中启动该空白项目 4. 关闭模拟器和 Xcode 5. 然后运行以下命令: ``` xcode-select --install sudo xcode-select --switch /Library/Developer/CommandLineTools # Enable command line tools sudo xcode-select -s /Applications/Xcode.app/Contents/Developer ``` 有关更多信息,请参见点击展开
``` # Create a GOPATH: this is the location of your Go "workspace". # (Note that it is not – and must not – be the same as the path Go is installed to.) # The default is to have it in ~/go/, or ~/development, but anything you prefer goes. # Whatever you decide, create the directory, set GOPATH, and update PATH: export GOPATH=$HOME/go # Change this if you choose to use a different workspace. export PATH=$PATH:$GOPATH/bin # You probably want to permanently set these by adding the following commands to your shell # configuration (e.g. ~/.bash_profile) cd $GOPATH mkdir -p bin pkg mkdir -p src/github.com/stackrox cd src/github.com/stackrox git clone git@github.com:stackrox/stackrox.git ```点击展开
为了获得更好的体验,请先安装 [工作流脚本](#productivity)。 ``` $ cd $GOPATH/src/github.com/stackrox/stackrox $ make install-dev-tools $ make image ``` 现在,你需要自己启动一个 Kubernetes 集群,然后才能继续。 开发可以在 GCP 中进行,也可以在本地使用 [Docker Desktop](https://docs.docker.com/desktop/kubernetes/)、[Colima](https://github.com/abiosoft/colima#kubernetes)、[minikube](https://minikube.sigs.k8s.io/docs/start/) 进行。 ``` # To keep the StackRox Central's Postgres DB state between database upgrades and restarts, set: $ export STORAGE=pvc # To save time on rebuilds by skipping UI builds, set: $ export SKIP_UI_BUILD=1 # To save time on rebuilds by skipping CLI builds, set: $ export SKIP_CLI_BUILD=1 # When you deploy locally make sure your kube context points to the desired kubernetes cluster, # for example Docker Desktop. # To check the current context you can call a workflow script: $ roxkubectx # To deploy locally, call: $ ./deploy/deploy-local.sh # Now you can access StackRox dashboard at https://localhost:8000 # or simply call another workflow script: $ logmein ``` 请参阅 [通过脚本安装](#installation-via-scripts) 以获取更多信息。要了解环境变量,请参考 [deploy/README.md](https://github.com/stackrox/stackrox/blob/master/deploy/README.md#env-variables)。点击展开
``` # Build image, this will create `stackrox/main` with a tag defined by `make tag`. $ make image # Compile all binaries $ make main-build-dockerized # Displays the docker image tag which would be generated $ make tag # Note: there are integration tests in some components, and we currently # run those manually. They will be re-enabled at some point. $ make test # Apply and check style standards in Go and JavaScript $ make style # enable pre-commit hooks for style checks $ make init-githooks # Compile and restart only central $ make fast-central # Compile only sensor $ make fast-sensor # Only compile protobuf $ make proto-generated-srcs ```点击展开
[工作流仓库](https://github.com/stackrox/workflow) 包含一些辅助脚本 支持我们的开发流程。探索更多命令使用 `roxhelp --list-all`。 ``` # Change directory to rox root $ cdrox # Handy curl shortcut for your StackRox central instance # Uses https://localhost:8000 by default or ROX_BASE_URL env variable # Also uses the admin credentials from your last deployment via deploy.sh $ roxcurl /v1/metadata # Run quickstyle checks, faster than stackrox's "make style" $ quickstyle # The workflow repository includes some tools for supporting # working with multiple inter-dependent branches. # Examples: $ smart-branch点击展开
如果你使用 GoLand 进行开发,以下设置可以改善体验。 确保安装了 `Protocol Buffers` 插件。该插件默认安装在 GoLand 中。 如果没有,请使用 `Help | Find Action...`,输入 `Plugins` 并按回车,然后切换到 `Marketplace`,搜索插件名称并安装。 该插件默认不知道如何查找 `.proto` 导入,因此你需要显式配置路径。请参考点击展开
需要监听 5432 端口的 PostgreSQL 服务器。 由于代码中的认证设置,最简单的方法是在容器中启动 Postgres,例如: ``` $ docker run --rm --env POSTGRES_USER="$USER" --env POSTGRES_HOST_AUTH_METHOD=trust --publish 5432:5432 docker.io/library/postgres:15 ``` 启动后,可以在 IDE 中或通过命令行触发 `sql_integration` 测试。点击展开
**Kubernetes 调试器设置** 使用 GoLand,你可以自然地在 IDE 中使用断点和调试器运行单元测试。 如果你希望调试本地或远程部署,请按照以下步骤操作。 1. 在本地创建调试构建,设置 `DEBUG_BUILD=yes`: $ DEBUG_BUILD=yes make image 或者,当分支名称包含 `-debug` 子字符串时,也会自动创建调试构建。这在本地使用 `make image` 和 CI 中都有效。 2. 使用本 README 中的说明部署镜像。适用于 `deploy-local.sh` 和 `deploy.sh`。 3. 使用 `roxdebug` 命令在目标 Pod 中启动调试器(和端口转发),该命令来自 `workflow` 仓库。 # 对于 Central $ roxdebug # 对于 Sensor $ roxdebug deploy/sensor # 查看使用帮助 $ roxdebug --help 4. 在 GoLand 中配置远程调试(只需执行一次): 1. 打开 `Run | Edit Configurations …`,点击 `+` 图标添加新配置,选择 `Go Remote` 模板。 2. 设置 `Host:` 为 `localhost`,`Port:` 为 `40000`。为这个配置命名。 3. 选择 `On disconnect:` 为 `Leave it running`(这将防止 GoLand 在重新连接时忘记断点)。 5. 附加 GoLand 到调试端口:选择 `Run | Debug…` 并选择你创建的配置。 如果一切正常,你应该会在 `Debug | Debugger | Variables` 窗口底部 `Connected` 消息。 6. 设置一些代码断点,触发相应操作并愉快地调试! 有关更多信息,请参阅 [Debugging go code running in Kubernetes](https://github.com/stackrox/dev-docs/blob/main/docs/knowledge-base/%5BBE%5D%20Debugging-go-code-running-in-Kubernetes.md)。Kubernetes
``` docker run -i --rm quay.io/stackrox-io/main:OpenShift
获取此仓库中的 `image-setup.sh` 脚本并运行它以执行拉取/推送到本地 OpenShift 注册表。这是每个新集群的先决条件。 ``` bash image-setup.sh ``` ``` docker run -i --rm quay.io/stackrox-io/main:点击展开
以下信息已收集,以帮助安装和操作开源 StackRox 项目。这些建议是为 [Red Hat Advanced Cluster Security for Kubernetes](https://www.redhat.com/en/resources/advanced-cluster-security-for-kubernetes-datasheet) 产品开发的,尚未针对上游 StackRox 项目进行测试。 **推荐的 Kubernetes 发行版** StackRox 已在以下 Kubernetes 平台上部署,且问题最少: - Red Hat OpenShift Dedicated (OSD) - Azure Red Hat OpenShift (ARO) - Red Hat OpenShift Service on AWS (ROSA) - Amazon Elastic Kubernetes Service (EKS) - Google Kubernetes Engine (GKE) - Microsoft Azure Kubernetes Service (AKS) 如果部署到上述列表之外的 Kubernetes 发行版,可能会遇到问题。 **推荐的操作系统** StackRox 已知在以下操作系统的最新版本上运行良好: - Ubuntu - Debian - Red Hat Enterprise Linux (RHEL) - CentOS - Fedora CoreOS - Flatcar Container Linux - Google COS - Amazon Linux - Garden Linux **推荐的网络浏览器** 下表列出了可以查看 StackRox Web 用户界面的浏览器: - Google Chrome 88.0 (64-bit) - Microsoft Internet Explorer Edge - Version 44 and later (Windows) - Version 81 (Official build) (64-bit) - Safari on MacOS (Mojave) - Version 14.0 - Mozilla Firefox Version 82.0.2 (64-bit)标签:API集成, CI/CD 安全, Cloudflare, DevSecOps, EVTX分析, GitHub Advanced Security, Helm 安装, Kubernetes 安全, Kubernetes 平台, MITRE ATT&CK, Operator 安装, StackRox, Web截图, 上游代理, 可观测性, 子域名突变, 安全加固, 安全合规, 安全推荐, 容器安全, 容器生命周期, 数据投毒防御, 日志审计, 构建部署运行, 模型鲁棒性, 环境硬化, 网络代理, 网页分析工具, 请求拦截, 运行时告警, 风险分析