使用 Azure 和容器配置扫描自动化

HCL® AppScan® Source 命令行界面 (CLI) 容器可从 HCL Harbor 和 HCL FlexNet Operations 门户网站 (FNO) 中获得,可用于使用 Azure 自动执行静态分析扫描,而无需安装 AppScan® Source 的完整实例。

使用容器扫描的主要步骤包括:
  1. 准备应用程序。
  2. 准备 Azure DevOps 管道环境。
  3. 从容器映像启动扫描。

先决条件

开始之前,确保您的环境符合以下需求:
  • Azure 环境,其中包含多个安装了 Docker 的 Linux 代理程序/主机。

    这是旨在使用 CLI 容器运行静态分析扫描的系统。

  • AppScan® Source for Automation 的有效许可证和相关许可证服务器信息。

  • AppScan® Source CLI 容器映像

    HCL HarborHCL FNO 下载 AppScan® Source CLI 容器映像。使用有效的许可证,您的 HCL 标识将授予对这些位置的访问权。

  • AppScan® Source CLI 脚本

    在 Jenkins 管道中使用容器进行扫描时需要脚本。

  • 从容器访问 Azure 主机/代理程序相关的内容:

    要扫描的应用程序必须可以从运行扫描的 Azure 主机进行访问。

    注: 卷映射(将容器主机上的路径映射到容器中的路径)在扫描实例化期间用于此目的。

准备要扫描的应用程序

使用以下任一方法准备用于扫描的应用程序:
  • paf/ppf 文件
  • 文件夹扫描
准备要使用 paf/ppf 文件扫描的应用程序
  1. 在安装了 HCL® AppScan® Source for Analysis 的 Linux 系统上使用 AppScan® Source 客户机生成 paf/ppf 文件。

    确保 pafppf 文件位于要扫描的应用程序的根目录。

  2. 确保可以从 Jenkins 主机/代理程序访问应用程序文件和 paf/ppf 文件。

    例如,如果应用程序可从 Jenkins 主机/代理程序上的根路径 /usr/user1/SampleApp 访问,则 paf/ppf 文件位于 /usr/user1/SampleApp/SampleApp.paf/usr/user1/SampleApp/SampleApp.ppf

  3. 确定容器所看到的卷的名称。
    例如,将主机上的 /usr/user1 映射到容器中的 cvol
    注: 在容器中运行 CLI 时指定了卷映射。
  4. 创建 CLI 脚本。例如,SampleApp.script 位于 /usr/user1/SampleApp
    在本示例中,脚本指示容器使用 cvol 路径访问应用程序内容。列出的命令是与 AppScan® Source CLI 结合使用的命令(在没有手动干预的情况下扫描)。
    login …
    oa /cvol/SampleApp/SampleAll.ppf
    scan
    …
    logout
准备用于文件夹扫描的应用程序
  1. 确保可以从 Jenkins 主机/代理程序访问应用程序文件。

    例如,应用程序可从 Jenkins 主机/代理程序上的路径 /usr/user1/SampleApp 访问。

  2. 确定容器所看到的卷的名称。
    例如,将主机上的 /usr/user1 映射到容器中的 cvol
    注: 在容器中运行 CLI 时指定了卷映射。
  3. 创建 CLI 脚本。例如,SampleApp.script 位于 /usr/user1/SampleApp
    login …
    oa /cvol/SampleApp/SampleAll.ppf
    scan
    …
    logout

准备 Azure DevOps 管道环境

有三种方法准备该管道环境:
  • 使用 HCL FlexNet Operations 中的容器映像和经典编辑器。
  • 使用 HCL Harbor 中的容器映像和经典编辑器。
  • 使用 HCL Harbor 中的容器映像和 YAML 配置文件。
要使用 HCL FlexNet Operations 中的容器映像和经典编辑器准备 Azure DevOps 管道,请执行以下操作:
  1. 从 HCL FlexNet Operations (FNO) 将 AppScan® Source CLI 容器下载到 Azure VM。
  2. 使用 docker load 命令装入 CLI 容器映像。
  3. 在 Azure DevOps 组织内部,使用经典编辑器创建一个新管道。单击使用经典编辑器
  4. 选择要在其中扫描项目和存储 CLI 脚本的存储库和分支,然后单击继续
    1. 选择 Azure Repos Git 作为源。
    2. 选择团队项目
    3. 选择存储库
  5. 选择存在使用 AppScan® Source CLI 容器配置的 Azure VM 所在的 Azure 代理程序池
  6. 添加新的 Docker 任务以装入映像。包括以下规范:
    • 任务版本:0
    • 显示名称:指定名称或使用缺省值。
    • 容器注册表类型:指定注册表类型或使用缺省值。
    • Docker 注册表服务连接:指定连接或使用缺省值。
    • 操作:运行 Docker 命令
    • 命令:load -i /usr/user1/appscan-src-cli-10.2.0.tar.gz
  7. 添加新的 Docker 任务以运行具有以下规范的映像:
    • 任务版本:1
    • 显示名称:指定名称或使用缺省值。
    • 容器注册表类型:指定注册表类型或使用缺省值。
    • Docker 注册表服务连接:指定连接或使用缺省值。
    • 命令:run
    • 参数: --rm
    • 映像名称:appscan/appscan-src-cli:10.2.0
    • 卷: /usr/user1:/wa
    • 环境变量:
      • AS_INSTALL_MODE=standalone
      • AS_LICENSE_TYPE=CLS
      • AS_LICENSE_SERVER_ID=<the license server ID>
      • AS_LICENSE_SERVER=hclsoftware
    • 容器命令:script /wa/cli.script
  8. 添加新的 Docker 任务以根据以下规范进行清理:
    • 任务版本:0
    • 显示名称:指定名称或使用缺省值。
    • 容器注册表类型:指定注册表类型或使用缺省值。
    • Docker 注册表服务连接:指定连接或使用缺省值。
    • 操作:运行 Docker 命令
    • 命令:rmi appscan/appscan-src-cli:10.2.0
要使用 HCL Harbor 中的容器映像和经典编辑器准备 Azure DevOps 管道,请执行以下操作:
  1. 创建一个文件(例如 env.list),其中包含在扫描期间必须可供 CLI 容器使用的环境变量。包括以下必需信息:
    • AS_INSTALL_MODE=standalone

    • AS_LICENSE_TYPE=CLS

    • AS_LICENSE_SERVER_ID=<the license server ID>

    可在此处找到完整的参数列表。

  2. 在 Azure DevOps 组织内部,使用经典编辑器创建一个新管道。单击使用经典编辑器
  3. 选择要在其中扫描项目和存储 CLI 脚本的存储库和分支,然后单击继续
    1. 选择 Azure Repos Git 作为源。
    2. 选择团队项目
    3. 选择存储库
  4. 选择存在使用 AppScan® Source CLI 容器配置的 Azure VM 所在的 Azure 代理程序池
  5. 添加新的 Docker 任务以运行具有以下规范的映像:
    • 任务版本:2
    • 显示名称:指定名称或使用缺省值。
    • 容器注册表:指定注册表类型或使用缺省值。
    • 操作:运行 Docker 命令
    • 命令:run
    • 参数: --rm --env-file /usr/user1/env.list -v $(Agent.BuildDirectory)/s:/wa hclcr.io/appscan/appscan-src-cli:10.2.0 script /wa/cli.script
  6. 添加新的 Docker 任务以根据以下规范进行清理:
    • 任务版本:0
    • 显示名称:指定名称或使用缺省值。
    • 容器注册表类型:指定注册表类型或使用缺省值。
    • Docker 注册表服务连接:指定注册表类型或使用缺省值。
    • 操作:运行 Docker 命令
    • 命令:rmi appscan/appscan-src-cli:10.2.0

要使用 HCL Harbor 中的容器映像和 YAML 准备 Azure DevOps 管道,请执行以下操作:

使用以下示例脚本作为指南,使用 HCL Harbor 中的 AppScan Source CLI 容器运行静态分析扫描。

# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml

trigger:
- main

pool:
  name: Ubuntu-VM-pool
  #vmImage: ubuntu-latest

#steps:
#- script: echo Hello, world!
#  displayName: 'Run a one-line script'

steps:
- task: CmdLine@2
  inputs:
    script: |
- task: Docker@1
  displayName: 'Run an image'
  inputs:
    containerregistrytype: 'Container Registry'
    dockerRegistryEndpoint: 'MyConnection’
    command: 'Run an image'
    arguments: '--rm'
    imageName: 'hclcr.io/appscan/appscan-src-cli:10.2.0 '
    volumes: '$(Agent.WorkFolder)<path to downloaded source files>:/wa'
    envVars: |
     AS_INSTALL_MODE=standalone
     AS_LICENSE_TYPE=CLS
     AS_LICENSE_SERVER_ID=<specify the license server ID>
     AS_LICENSE_SERVER=<specify the license server name>
    containerCommand: 'script /wa/cli.script'
    runInBackground: false
- task: Docker@0
  displayName: Clean
  inputs:
    containerregistrytype: 'Container Registry'
    dockerRegistryConnection: 'MyConnection'
    action: 'Run a Docker command'
    customCommand: ' rmi hclcr.io/appscan/appscan-src-cli:10.2.0'

使用容器映像启动静态分析扫描

要使用管道启动扫描,请执行以下操作:

  1. 在 Azure 中,确保 Azure 代理程序池中的 Azure VM 处于在线状态。
  2. 在“管道”页面中,选择要运行的管道。
  3. 选择运行管道以启动静态分析扫描。