部署 AppScan 360° Static Analysis 集群

AppScan 360° Static Analysis 可以部署到任何 Kubernetes 环境中。可以从 HCL Harbor 或从 HCL 许可证和下载门户下载的存档文件 (tar.gz) 存档文件访问 AppScan 360° SAST 部署相关 Helm 图表。任一捆绑包都包含一个脚本 (sast-service.sh),以简化部署步骤。

使用 HCL Harbour 中的 Helm 图表部署 AppScan 360° Static Analysis

从 Harbor 下载 Helm 图表后:
  1. 确保连接到正确的 Kubernetes 集群。

    验证 .kube 文件夹中是否具有正确的集群配置文件。

  2. 获取 ASCP 服务器主机名。

    例如, ascp.example.com

  3. ASCP 服务器检索到当前计算机的认证令牌、证书和专用密钥文件。
    • 可以使用选项 --auth-token 将认证令牌指定给 AppScan 360° SAST 部署。例如,--auth-token AgentsApiKey.txt
    • 可以使用选项 --cert 将 CA 证书指定给 AppScan 360° SAST 部署。例如,--cert AppScan360_RootCA.crt
    • 可以使用选项 --cert-key 将专用密钥指定给 AppScan 360° SAST 部署。例如,--cert-key AppScan360_RootCA.key
  4. HCL Harbour > 用户配置文件 > CLI 密钥获取用户认证令牌,并将其保存到文件中。

    例如,registry-token.txt

  5. 创建文件以存储 RabbitMQ 密码。
    例如,rabbitmq-pwd.txt。在安装后可在 RabbitMQ 中配置此密码。
    注: 配置后,不能更改此密码。
  6. 识别要使用的存储提供程序。

    Azure 支持 azurefile,但如果要使用任何其他存储提供程序,请确保它支持 ReadWriteMany

  7. 运行 AppScan 360° SAST 脚本,其中包含在本地部署集群的选项。例如:
    > ./sast-service.sh --install 
                      --ingress-host <sast-ingress-fqdn> \
                      --server <ascp-fqdn> \
                      --cert AppScan360_RootCA.crt \
                      --cert-key AppScan360_RootCA.key \
                      --auth-token AgentsApiKey.txt \
                      --rabbitmq-password rabbitmq-pwd.txt \
                      --registry-user <harbor-username> \
                      --registry-token registry-token.txt \
                      --storage-class azurefile \
                      --ingress-class nginx
    注:
    • 为脚本文件提供执行许可权。例如,chmod -R +x sast-service.sh scripts/*
    • 使用选项 -f 指定 yaml 文件的文件路径,并按 部署配置参数 中所述进行定制值。例如,-f values.yaml
  8. 验证部署是否成功。
    > kubectl get pods -n <NAMESPACE>
    其中 <NAMESPACE> 是安装了 AppScan 360° SAST 的名称空间。缺省值为 hcl-appscan-sast
  9. 如下所示,验证所有 AppScan 360° SAST 相关 Pod 是否都已启动且正常运行:
    Pod 名称 就绪 状态 重新启动 年龄
    analyzer-<pod-id> 1/1 正在运行 X X
    ascp-adapter-<pod-id> 1/1 正在运行 X X
    gateway-<pod-id> 1/1 正在运行 X X
    preparer-<pod-id> 1/1 正在运行 X X
    sast-service-rabbitmq-0 1/1 正在运行 X X
    scan-manager-<pod-id> 1/1 正在运行 X X
    workflow-manager--<pod-id> 1/1 正在运行 X X
  10. 确保 AppScan 360° SAST 可以使用 URL https://<sast-ingress-fqdn> 从浏览器访问。

    (例如,https://sast.example.com)。

从存档文件部署 AppScan 360° Static Analysis

下载并抽取 tar.gz 文件后:
  1. 要将容器映像上载到 ACR 或任何其他所选注册表,请使用以下参数选项为部署脚本提供注册表凭证:
    注: AppScan 360° SAST 容器映像必须上载到远程 OCI 兼容注册表。
    • --registry <registry>:用于推送容器映像的注册表。例如:appscanregistry.azurecr.io, docker.io
    • --registry-user <registry-username>:用于认证的注册表用户名。
    • --registry-token <registry-token-file>:包含注册表用户认证令牌的文件。例如:--registry-token ./registry-token.txt
    • --load-images:此选项表示容器映像应从文件系统装入到注册表。容器映像可以位于路径 sast-service-base/images/*.image 中。
  2. 确保连接到正确的 Kubernetes 集群。

    验证 .kube 文件夹中是否具有正确的集群配置文件。

  3. 获取 ASCP 服务器的主机名。

    例如, ascp.example.com

  4. ASCP 服务器检索到当前计算机的认证令牌、证书和专用密钥文件。
    • 可以使用选项 --auth-token 将认证令牌指定给 AppScan 360° SAST 部署。例如,--auth-token AgentsApiKey.txt
    • 可以使用选项 --cert 将 CA 证书指定给 AppScan 360° SAST 部署。例如,--cert AppScan360_RootCA.crt
    • 可以使用选项 --cert-key 将专用密钥指定给 AppScan 360° SAST 部署。例如,--cert-key AppScan360_RootCA.key
  5. 创建文件以存储 RabbitMQ 密码。
    例如,rabbitmq-pwd.txt。在安装后可在 RabbitMQ 中配置此密码。
    注: 配置后,不能更改此密码。
  6. 识别要使用的存储提供程序。

    Azure 支持 azurefile,但如果要使用任何其他存储提供程序,请确保它支持 ReadWriteMany

  7. 运行 AppScan 360° SAST 脚本,其中包含在本地部署集群的选项。例如:
    > ./sast-service.sh --install 
                        --ingress-host <sast-ingress-fqdn> \
                        --server <ascp-fqdn>
                        --cert AppScan360_RootCA.crt \
                        --cert-key AppScan360_RootCA.key \
                        --auth-token AgentsApiKey.txt \
                        --rabbitmq-password rabbitmq-pwd.txt \
                        --registry <registry-name> \
                        --registry-user <registry-username> \
                        --registry-token <registry-token-file> \
                        --storage-class azurefile \
                        --ingress-class nginx \
                        --load-images
    注: 使用选项 -f 指定 yaml 文件的文件路径,并按 部署配置参数 中所述进行定制值。例如,-f values.yaml
  8. 验证部署是否成功。
    > kubectl get pods -n <NAMESPACE>
    其中 <NAMESPACE> 是安装了 AppScan 360° SAST 的名称空间。缺省 hcl-appscan-sast
  9. 如下所示,验证所有 AppScan 360° SAST 相关 Pod 是否都已启动且正常运行:
    Pod 名称 就绪 状态 重新启动 年龄
    analyzer-<pod-id> 1/1 正在运行 X X
    ascp-adapter-<pod-id> 1/1 正在运行 X X
    gateway-<pod-id> 1/1 正在运行 X X
    preparer-<pod-id> 1/1 正在运行 X X
    sast-service-rabbitmq-0 1/1 正在运行 X X
    scan-manager-<pod-id> 1/1 正在运行 X X
    workflow-manager--<pod-id> 1/1 正在运行 X X
  10. 确保 AppScan 360° SAST 可以使用 URL https://<sast-ingress-fqdn> 从浏览器访问。

    (例如,https://sast.example.com)。

ASCP 集成

必须在 ASCP 中配置 AppScan 360° Static Analysis 入口 URL,才能在 AppScan 360° 组件之间成功集成。可以在安装或重新配置 ASCP 服务器时配置 URL,也可以作为安装后步骤进行配置。

配置 AppScan 360° SAST 入口

要将提供的入口配置为使用 https,请使用 nginx.ingress.kubernetes.io/backend-protocol 注释指示 NGINX 应如何与后端服务通信。

  • 参数
    global.ingress.additionalAnnotations
  • 描述

    要在 AppScan 360° Static Analysis 入口中配置的注释列表。

  • 示例
    nginx.ingress.kubernetes.io/backend-protocol: HTTPS

重新配置 AppScan 360° Static Analysis

AppScan 360° Static Analysis 的初始部署后,部署脚本的后续使用将使用最近指定的部署选项重新配置 Kubernetes 集群。不需要先删除集群。

要验证部署脚本是否正在重新配置现有安装,请检查脚本输出消息中是否有以下消息:
Namespace 'hcl-appscan-sast' already exists. The SAST deployment will be upgraded.
注: 在某些情况下,名称空间可能仍处于正在终止状态,而集群上没有可用的部署。在这种场景中,重新配置会失败。手动删除名称空间并重新尝试部署。

部署命令选项

参数 描述 缺省值 需要
-h|-help 显示可用命令和相应用法。
-i|--install 部署 AppScan 360° SAST.此标志不需要任何选项值。 不适用
-s|--server hostname 提供 ASCP 服务器的主机名 (FQDN)。ASCP 服务器配置为 AppScan 360° 平台安装的一部分,是用户启动 AppScan 360° Static Analysis 扫描的方式。
-cc|--cert cert-file-path 要设置 TLS 和 HTTPS,请提供已签名证书文件的完全限定路径。
-ck|--cert-key key-file-path 提供指定证书的专用密钥的相应路径。
-at|--auth-token token 使用 SAST 服务进行的 ASCP 连接授权。它还有助于 ASCP 平台服务和 ASCP 之间的通信和交换。
-p |--rabbitmq-passwords pwd-file-path 指定 RabbitMQ 用户密码的文件路径。:配置 RabbitMQ 密码后,就不能更改。
-sc|--storage-class name 允许用户配置存储提供程序以满足所有 AppScan 360° SAST 存储需求。示例包括 local-pathazurefilelonghorn
-r |--registry registry 用于装入图像的注册表名称。
注: 对于使用包含 SAST 映像的存档文件的云部署,必须提供可通过云 K8S 注册表访问的注册表,以确保在部署过程中可以拉取映像。
  • 指定 -x 用于图像装入时。
  • 当使用存档部署进行部署时。
-ru|--registry-user username 提供的注册表的用户名。 是,但使用存档文件部署到本地 Kubernetes 集群(例如 K3S)时除外。
-rt--registry-token token-file-path 包含指定注册表的用户认证令牌的文件的路径。
注: 出于安全原因,只能使用文件提供令牌。
是,但使用存档文件部署到本地 Kubernetes 集群(例如 K3S)时除外。
-ro|-repo|--repository repository 用于找到图像和 Helm 图表的存储库路径。 appscan360-sast/sast-service
-v--version 要下载的 AppScan 360° SAST 版本。 缺省为用于当前部署的脚本版本。
-t--tag image-tag 要安装的 AppScan 360° SAST 版本。未指定时,将使用存储库或存档中的最新版本。 最新可用版本。
-n|--namespace 部署 AppScan 360° SAST 的名称空间。 hcl-appscan-sast
-f|--config-file yaml-file-path 使用指定配置详细信息的 yaml 文件,配置或定制容器部署。有关配置 yaml 文件的信息,请参阅 部署配置参数 不适用
-ih|--ingress-host hostname

部署后用于访问 AppScan 360° SAST 的完全限定域名 (FQDN)。

如果提供的 FQDN 在 DNS 中无法解析,请确保更新了“‘/etc/hosts”文件,以将 FQDN 与相应的 IP 地址映射。

sast.example.com
-ic|--ingress-class name 入口控制器用于通过网关服务呈现 AppScan 360° SAST。如果未指定,则不配置入口控制器。
-x--load-images 从 FNO 下载存档时,此参数指示要从文件系统装入容器映像并将其推送到指定的容器注册表。 此选项只能用于气隙方式部署。
-verbose 生成与控制台中的部署相关的完整消息。

示例

使用来自 HCL Harbor 的 Helm 图表的云 (Azure) 部署:
> az login ...
> ./sast-service.sh --install \
                    --ingress-host test.sast.example.com \
                    --server test.ascp.example.com \
                    --cert ./AppScan360_RootCA.crt \
                    --cert-key ./AppScan360_RootCA.key \
                    --auth-token ./AgentsApiKey.txt \
                    --rabbitmq-password ./rabbitmq-pwd.txt \
                    --registry-user hcl-harbor-user \
                    --registry-token ./registry-token.txt \
                    --ingress-class nginx \
                    --storage-class azurefile
使用存档文件的云 (Azure) 部署:
> az login ...
> ./sast-service.sh --install \
                    --ingress-host test.sast.example.com \
                    --server test.ascp.example.com \
                    --cert ./AppScan360_RootCA.crt \
                    --cert-key ./AppScan360_RootCA.key \
                    --auth-token ./AgentsApiKey.txt \
                    --rabbitmq-password ./rabbitmq-pwd.txt \
                    --registry appscanregistry.azurecr.io \
                    --registry-user azure-user \
                    --registry-token ./registry-token.txt \
                    --ingress-class nginx \
                    --storage-class azurefile \
                    --load-images
使用来自 HCL Harbour 的 Helm 图表的本地 Kubernetes:
> ./sast-service.sh --install \
                    --ingress-host test.sast.example.com \
                    --server test.ascp.example.com \
                    --cert ./AppScan360_RootCA.crt \
                    --cert-key ./AppScan360_RootCA.key \
                    --auth-token ./AgentsApiKey.txt \
                    --rabbitmq-password ./rabbitmq-pwd.txt \
                    --registry-user hcl-harbor-user \
                    --registry-token ./registry-token.txt \
                    --ingress-class nginx \
                    --storage-class local-path
使用存档文件的本地 Kubernetes 部署:
> ./sast-service.sh --install \
                    --ingress-host test.sast.example.com \
                    --server test.ascp.example.com \
                    --cert ./AppScan360_RootCA.crt \
                    --cert-key ./AppScan360_RootCA.key \
                    --auth-token ./AgentsApiKey.txt \
                    --rabbitmq-password ./rabbitmq-pwd.txt \
                    --registry docker.io \
                    --ingress-class nginx \
                    --storage-class local-path \
                    --load-images

部署后访问 AppScan 360° SAST

成功部署后,可以使用 swager-ui 访问 AppScan 360° SAST REST API:
> https://<appscan sast url>/swagger-ui/index.html
AppScan 360° SAST 使用在部署过程中使用 —auth-token 选项指定的基于令牌的认证。可以使用以下命令访存令牌:
> kubectl get secrets -n hcl-appscan-sast sast-service-secret -o jsonpath="{.data.SAST_AUTH_TOKEN}" | base64 -d