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 安装脚本安装 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) 部分。认证后,你可以使用 访问仪表板。
### 使用 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 添加更多集群)
安装 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 安装,请参考以下文档: * *
### 使用 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)
点击展开 按照以下指南,快速将特定版本的 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
点击展开 在 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` 文件中找到。**
#### Docker Desktop、Colima 或 minikube
点击展开 在你选择的工作目录中运行以下命令: ``` git clone git@github.com:stackrox/stackrox.git cd stackrox MAIN_IMAGE_TAG=latest ./deploy/deploy-local.sh ``` 几分钟后,所有资源都应该被部署。 **'admin' 用户的凭据可以在 `./deploy/k8s/deploy-local/password` 文件中找到。**
### 访问 StackRox 用户界面 (UI)
点击展开 部署完成(Helm 或脚本安装)后,应存在端口转发,因此你可以连接到 https://localhost:8000/。运行以下命令: ``` kubectl port-forward -n 'stackrox' svc/central "8000:443" ``` 然后在浏览器中访问 https://localhost:8000/。 **用户名** = 默认用户为 `admin` **密码 (Helm)** = 密码位于手动安装后的 `$ROX_ADMIN_PASSWORD` 中,或显示在快速安装脚本的末尾。 **密码 (脚本)** = 密码将位于 `/deploy//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) ### 快速入门 #### 构建工具 以下工具对于测试代码和构建镜像必不可少:
点击展开 * [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 ``` 有关更多信息,请参见
#### 克隆 StackRox
点击展开 ``` # 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)。
#### 常用 Makefile 目标
点击展开 ``` # 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 # 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 进行开发,以下设置可以改善体验。 确保安装了 `Protocol Buffers` 插件。该插件默认安装在 GoLand 中。 如果没有,请使用 `Help | Find Action...`,输入 `Plugins` 并按回车,然后切换到 `Marketplace`,搜索插件名称并安装。 该插件默认不知道如何查找 `.proto` 导入,因此你需要显式配置路径。请参考 。 * 进入 `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 测试
点击展开 需要监听 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: central generate interactive > k8s.zip ``` 这将引导你完成安装程序并生成 `k8s.zip` 文件。 ``` unzip k8s.zip -d k8s ``` ``` bash k8s/central.sh ``` 现在 Central 已部署。使用 UI 部署 Sensor。
OpenShift 获取此仓库中的 `image-setup.sh` 脚本并运行它以执行拉取/推送到本地 OpenShift 注册表。这是每个新集群的先决条件。 ``` bash image-setup.sh ``` ``` docker run -i --rm quay.io/stackrox-io/main: central generate interactive > openshift.zip ``` 这将引导你完成安装程序并生成 `openshift.zip` 文件。 ``` unzip openshift.zip -d openshift ``` ``` bash openshift/central.sh ```
## 运行 StackRox 的依赖项和建议
点击展开 以下信息已收集,以帮助安装和操作开源 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截图, 上游代理, 可观测性, 子域名突变, 安全加固, 安全合规, 安全推荐, 容器安全, 容器生命周期, 数据投毒防御, 日志审计, 构建部署运行, 模型鲁棒性, 环境硬化, 网络代理, 网页分析工具, 请求拦截, 运行时告警, 风险分析