
stackrox v4.11.3-rc.4
StackRox Kubernetes安全平台对容器环境进行风险分析,提供可见性和运行时警报,并提供建议以通过加固环境来主动提高安全性。
目录
StackRox Kubernetes 安全平台
StackRox Kubernetes 安全平台对容器环境进行风险分析,提供可见性和运行时告警,并通过强化环境来主动提高安全性。StackRox 集成了容器生命周期的每个阶段:构建、部署和运行时。
StackRox Kubernetes 安全平台基于原名为 Prevent 的产品构建,该产品本身曾被称为 Mitigate 和 Apollo。您可能会在代码或文档中找到对这些先前名称的引用。
社区
您可以通过 Slack (#stackrox) 联系我们。其他方式,请访问我们的社区中心 stackrox.io。
有关活动更新、博客和其他资源,请关注 StackRox 社区网站 stackrox.io。
关于 StackRox 行为准则。
要报告漏洞或错误。
部署 StackRox
使用 Operator 安装
从 4.10 版本开始,可以使用 operator 安装 StackRox。
[!WARNING] 以下安装方法已弃用。
使用 Helm 快速安装
StackRox 提供通过 Helm Charts 快速安装。请遵循 Helm 安装指南 在你的系统上获取 helm CLI。然后运行 helm 快速安装脚本,或前往使用 Helm 手动安装章节查看配置选项。
通过 Helm 安装脚本安装 StackRox
```sh /bin/bash <(curl -fsSL https://raw.githubusercontent.com/stackrox/stackrox/master/scripts/quick-helm-install.sh) ``` StackRox的默认部署有一定的CPU和内存请求,如果资源不足,可能会在小(例如开发)集群上失败。你可以使用`--small`命令行选项在资源有限的小集群上安装StackRox。不建议在生产部署中使用此选项。```sh /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) 部分了解更多关于警告的信息。认证后,你可以通过 https://localhost:8000/main/dashboard 访问仪表板。
使用 Helm 手动安装
按照 Helm 安装指南 在你的系统上获取 helm CLI。
使用 Helm 部署包括 4 个步骤:
- 将 StackRox 仓库添加到 Helm
- 使用 helm 启动 StackRox Central Services
- 创建集群配置和服务标识(初始化捆绑包)
- 使用该配置和凭证部署 StackRox Secured Cluster Services(此步骤可多次执行,以向 StackRox Central Service 添加更多集群)
安装 StackRox Central Services
首先,StackRox Central Services 将被添加到你的 Kubernetes 集群中。这包括 UI 和 Scanner。首先,将 stackrox/helm-charts/opensource 仓库添加到 Helm。```sh helm repo add stackrox https://raw.githubusercontent.com/stackrox/helm-charts/main/opensource/
若要查看仓库中所有可用的 Helm Chart,请运行(可以添加 `--devel` 选项以显示非发布版本)```sh
helm search repo stackrox
要安装 stackrox-central-services,您需要一个安全密码。该密码稍后在 UI 登录和创建 init bundle 时会用到。```sh ROX_ADMIN_PASSWORD="$(openssl rand -base64 20 | tr -d '/=+')"
从这里开始,您可以安装 stackrox-central-services 以在集群中部署 Central 和 Scanner 组件。
> **注意:**
> 即使您计划保护多个集群,也只需要部署一个 stackrox-central-services 实例。
要执行安装,请根据集群大小选择以下命令之一:
#### 默认 Central 安装
如果您要在大小合适的集群中安装,请使用默认安装命令:```sh
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"
在资源有限的集群中集中安装
如果您在单节点集群中安装,或者默认安装由于资源不足导致 Pod 卡在挂起状态,请改用以下命令来降低 stackrox-central-services 的资源需求。请记住,这些精简的资源设置不适合生产环境。```sh
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
</details>
<details><summary>安装 StackRox 安全集群服务</summary>
接下来,需要部署安全集群组件,用于从 Kubernetes 节点收集信息。
在 `CLUSTER_NAME` shell 变量中为安全集群设置一个有意义的集群名称。该集群将在 StackRox UI 的集群列表中以此名称标识。```sh
CLUSTER_NAME="my-secured-cluster"
设置安全集群服务应与Central通信的端点。如果在与stackrox-central-services相同的集群上部署stackrox-secured-cluster-services,请保持原样,否则将值更改为Central可访问的端点。```sh CENTRAL_ENDPOINT="central.stackrox.svc:443"
生成一个包含初始化秘密的 init bundle。init bundle 将保存在 `stackrox-init-bundle.yaml` 中,你将使用它来配置安全集群,如下所示。```sh
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(使用你刚刚生成的初始化包)。
要执行安装,请根据你的集群大小选择以下命令之一。
默认的安全集群服务安装
如果你在一个规模适中的集群中安装,请使用默认的安装命令:```sh
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"
#### 在资源受限的集群中安装安全集群服务
如果你在单节点集群中安装,或者默认安装导致 Pod 因资源不足而卡在 Pending 状态,请改用以下命令以降低 stackrox-secured-cluster-services 的资源需求。请记住,这些降低后的资源设置不适合生产环境。```sh
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 Chart 的附加信息
要进一步自定义 Helm 安装,请参考以下文档:
通过脚本安装
deploy 脚本将执行以下操作:
- 启动 StackRox Central Services
- 创建集群配置和服务身份
- 使用该配置和凭据部署 StackRox Secured Cluster Services
您可以在 shell 中设置环境变量 MAIN_IMAGE_TAG,以确保获得您想要的版本。
如果您检出了一个提交,脚本将默认启动与该提交对应的镜像。如果需要,系统会自动拉取该镜像。
后续步骤因编排器而异。
Kubernetes 发行版(EKS、AKS、GKE)
点击展开
按照以下指南,快速将特定版本的 StackRox 部署到您的 Kubernetes 集群的 stackrox 命名空间中。如果您想安装特定版本,请确保在 MAIN_IMAGE_TAG 中定义/设置它,否则将安装最新的夜间构建版本。
在您选择的工作目录中运行以下命令:``` git clone [email protected]:stackrox/stackrox.git cd stackrox MAIN_IMAGE_TAG=VERSION_TO_USE ./deploy/deploy.sh
几分钟后,所有资源应已部署完成。
**'admin' 用户的凭据可在 `./deploy/k8s/central-deploy/password` 文件中找到。**
> **注意:**
> 密码文件以明文形式存储在本地文件系统中,但 StackRox 据此创建的 Kubernetes Secret 是加密的。运行期间无法更改密码。如果丢失密码,则必须重新部署 central。
</details>
#### OpenShift
<details><summary>点击展开</summary>
在 OpenShift 上部署之前,请确保已安装 [oc - OpenShift Command Line](https://github.com/openshift/oc)。
按照以下指南,在 `stackrox` 命名空间中快速将特定版本的 StackRox 部署到你的 OpenShift 集群。请确保将最新的标签添加到 `MAIN_IMAGE_TAG` 变量中。
在你选择的工作目录中运行以下命令:```
git clone [email protected]:stackrox/stackrox.git
cd stackrox
MAIN_IMAGE_TAG=VERSION_TO_USE ./deploy/deploy.sh
几分钟后,所有资源应该都已部署。此过程将以以下消息完成。
'admin' 用户的凭据可以在 ./deploy/openshift/central-deploy/password 文件中找到。
注意: 虽然密码文件以明文形式存储在您的本地文件系统中,但 StackRox 使用的 Kubernetes Secret 是加密的,您将无法在运行时更改该 Secret。如果您丢失了密码,将不得不重新部署 central。
Docker Desktop、Colima 或 minikube
点击展开
请在您选择的工作目录中运行以下命令:``` git clone [email protected]:stackrox/stackrox.git cd stackrox MAIN_IMAGE_TAG=latest ./deploy/deploy-local.sh
几分钟后,所有资源应部署完成。
**'admin'用户的凭据可以在 `./deploy/k8s/deploy-local/password` 文件中找到。**
</details>
## 访问 StackRox 用户界面 (UI)
<details><summary>点击展开</summary>
部署完成后(Operator、Helm 或脚本安装),应存在端口转发,因此您可以连接到 https://localhost:8000/。运行以下命令```sh
kubectl port-forward -n 'stackrox' svc/central "8000:443"
然后,在您的网页浏览器中访问 https://localhost:8000/。
用户名 = 默认用户是 admin
密码(Helm) = 密码在手动安装后位于 $ROX_ADMIN_PASSWORD 中,或在快速安装脚本末尾打印。
密码(脚本) = 密码将位于脚本安装的 /deploy/<orchestrator>/central-deploy/password.txt 文件夹中。
开发
- 如果您计划贡献,请先阅读 拉取请求指南
- 对于非简单的代码提交,请查看 shepherding
- 查看我们的 AI 政策
- Go 编码风格指南:go-coding-style.md
- UI 开发文档:请参考 ui/README.md
- E2E 开发文档:请参考 qa-tests-backend/README.md
快速开始
构建工具
以下工具对于测试代码和构建镜像来说是必需的:
点击展开
- Make
- Go
- 可以使用
make reinstall-dev-tools安装的各种 Go 代码检查工具。 - 按照 ui/README.md 中指定的 UI 构建工具。
- Docker
- 注意:Docker Desktop 现在对大型企业公司需要付费订阅。
- 一些 StackRox 开发者推荐使用 Colima
- Xcode 命令行工具(仅 macOS)
- Bats 用于运行某些 shell 测试。
您可以通过
brew install bats或npm install -g bats获取它。 - oc OpenShift CLI 工具
- shellcheck 用于 shell 脚本的代码检查。
Xcode - 仅 macOS
通常您可能已经通过 brew 安装了这些工具。 然而,如果在构建 golang x/tools 时遇到错误, 请先确保已同意 EULA,方法如下:
- 启动 Xcode
- 新建一个空白应用项目
- 在模拟器中启动空白项目应用
- 关闭模拟器和 Xcode,然后
- 运行以下命令: ```bash xcode-select --install sudo xcode-select --switch /Library/Developer/CommandLineTools # Enable command line tools sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
更多信息,请参阅 <https://github.com/nodejs/node-gyp/issues/569>
</details>
#### 克隆 StackRox
<details><summary>点击展开</summary>```bash
# 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 [email protected]:stackrox/stackrox.git
本地开发
点击展开
为了提升体验,请事先安装工作流脚本。```bash $ 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/)。
> **注意:**
> Docker Desktop和Colima更适合macOS开发,因为集群可以直接访问本地使用`make image`构建的镜像而无需额外配置。此外,Collector对这些工具的支持比minikube更好,因为minikube的驱动可能不可用。```bash
# 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
更多信息请参阅通过脚本安装。要了解关于环境变量的更多信息,请查阅deploy/README.md。
常见的Makefile目标
点击展开
```bash # Build image, this will create `stackrox/main` with a tag defined by `make tag`. $ make imageCompile 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
</details>
#### 生产力
<details><summary>点击展开</summary>
[工作流仓库](https://github.com/stackrox/workflow) 包含一些帮助脚本,它们支持我们的开发工作流。使用 `roxhelp --list-all` 探索更多命令。```bash
# 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 <branch-name> # 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,输入插件名称并安装。
该插件默认不知道在 GoLand 中何处查找 .proto 导入,因此你需要显式配置路径。参见 https://github.com/jvolkman/intellij-protobuf-editor#path-settings。
- 前往
GoLand | Preferences | Languages & Frameworks | Protocol Buffers。 - 取消勾选
Configure automatically。 - 点击
+按钮,导航并选择仓库根目录中的./proto目录。 - 可选地,还可以添加
$HOME/go/pkg/mod/github.com/gogo/[email protected]和$HOME/go/pkg/mod/github.com/gogo/[email protected]/。 - 验证:使用菜单
Navigate | File...输入任意.proto文件名,例如alert_service.proto,并检查所有导入字符串是否显示为绿色而不是红色。
运行 sql_integration 测试
点击展开
带有 //go:build sql_integration 标注的 Go 测试需要一个监听在 5432 端口的 PostgreSQL 服务器。
由于身份验证在代码中的设置方式,最简单的方法是在容器中启动 Postgres,如下所示:```bash
$ docker run --rm --env POSTGRES_USER="$USER" --env POSTGRES_HOST_AUTH_METHOD=trust --publish 5432:5432 docker.io/library/postgres:15
With that running in the background, `sql_integration` tests can be triggered from IDE or command-line.
</details>
#### 调试
<details><summary>点击展开</summary>
**Kubernetes 调试器设置**
使用 GoLand,您可以在 IDE 中运行单元测试时自然地使用断点和调试器。
如果您想要调试本地甚至远程部署,请按照以下步骤操作。
1. 通过导出 `DEBUG_BUILD=yes` 在本地创建调试构建: ```bash
$ DEBUG_BUILD=yes make image
或者,当分支名称包含 -debug 子串时,也会创建调试构建。这在本地使用 make image 和在 CI 中均有效。
2. 使用此 README 文件中的说明部署镜像。既适用于 deploy-local.sh 也适用于 deploy.sh。
3. 在目标 Pod 中使用 workflow 仓库中的 roxdebug 命令启动调试器(以及端口转发)。 ```bash
For Central
$ roxdebug
For Sensor
$ roxdebug deploy/sensor
See usage help
$ 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)。
</details>
## Generating Portable Installers
<details><summary>Kubernetes</summary>```bash
docker run -i --rm quay.io/stackrox-io/main:<tag> central generate interactive > k8s.zip
这将引导您完成安装程序并生成一个 k8s.zip 文件。```bash
unzip k8s.zip -d k8s
\u2060```bash
bash k8s/central.sh
现在 Central 已部署完成。使用用户界面部署 Sensor。
OpenShift
注意: 如果使用主机挂载,你需要通过运行以下命令允许容器访问挂载点:
sudo chcon -Rt svirt_sandbox_file_t <full volume path>
从本仓库获取 image-setup.sh 脚本并运行它,以执行拉取/推送到本地 OpenShift 仓库。这是每个新集群的前提条件。```bash bash image-setup.sh
根据提供的输入,没有实际待翻译的内容。因此,输出为空。```bash
docker run -i --rm quay.io/stackrox-io/main:<tag> central generate interactive > openshift.zip
这将引导您完成安装程序,并生成一个 openshift.zip 文件。```bash
unzip openshift.zip -d openshift
(无内容,翻译结果为空)```bash
bash openshift/central.sh
运行 StackRox 的依赖与建议
点击展开
以下信息已收集用于帮助安装和运行开源 StackRox 项目。这些建议是为 Red Hat Advanced Cluster Security for Kubernetes 产品制定的,且尚未在上游的 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)
如果将 StackRox 部署到上述列表之外的 Kubernetes 发行版中,可能会遇到问题。
推荐的操作系统
已知 StackRox 可以在以下操作系统的最新版本上运行。
- Ubuntu
- Debian
- Red Hat Enterprise Linux (RHEL)
- CentOS
- Fedora CoreOS
- Flatcar Container Linux
- Google COS
- Amazon Linux
- Garden Linux
推荐的 Web 浏览器
下表列出了可以查看 StackRox Web 用户界面的浏览器。
- Google Chrome 88.0 (64-bit)
- Microsoft Internet Explorer Edge
- 版本 44 及更高版本(Windows)
- 版本 81(官方构建)(64位)
- MacOS (Mojave) 上的 Safari - 版本 14.0
- Mozilla Firefox 版本 82.0.2(64位)