Azure とコンテナーを使用したスキャン自動化の構成

HCL Harbor および HCL Software License Management Portal から入手できる、HCL® AppScan® Source コマンド行インターフェース (CLI) コンテナーを使用すると、AppScan® Source のフル・インスタンスをインストールしなくても、Azure による静的分析スキャンを自動化できます。

コンテナーを使用したスキャンの主な手順は次のとおりです。
  1. アプリケーションを準備します。
  2. Azure DevOps パイプライン環境を準備します。
  3. コンテナー・イメージからスキャンを開始します。

前提条件

開始する前に、環境が次の要件を満たしていることを確認してください。
  • Docker がインストールされた Linux エージェント/ホストを 1 つ以上含んだ Azure 環境。

    これが、CLI コンテナー を使用して静的分析スキャンを実行する対象となるシステムです。

  • AppScan® Source for Automation の有効なライセンスと関連するライセンス・サーバー情報。

  • AppScan® Source CLI コンテナー・イメージ

    HCL Harbor または HCL ソフトウェア・ライセンス管理ポータル から AppScan® Source CLI コンテナー・イメージをダウンロードします。有効なライセンスがあれば、HCL ID を使用して、これらの場所にアクセスできます。

  • AppScan® Source CLI スクリプト

    Jenkins パイプラインを使用してコンテナーでスキャンするには、スクリプトが必要です。

  • コンテナーから Azure ホスト/エージェントのコンテンツへのアクセス:

    スキャン対象のアプリケーションは、スキャンを実行する Azure ホストからアクセスできる必要があります。

    注: ボリューム・マッピング (コンテナー・ホスト上のパスからコンテナー内のパスへのマッピング) が、この目的でスキャンのインスタンス化中に使用されます。

スキャン対象のアプリケーションの準備

次のいずれかを使用して、アプリケーションをスキャンする準備をします。
  • paf/ppf ファイル
  • フォルダー・スキャン
paf/ppf ファイルを使用したスキャン対象のアプリケーションの準備
  1. HCL® AppScan® Source for Analysis がインストールされた Linux システム上の AppScan® Source クライアントを使用して、paf/ppf ファイルを生成します。

    paf および ppf ファイルがスキャン対象のアプリケーションのルートにあることを確認します。

  2. アプリケーション・ファイルと paf/ppf ファイルが、Jenkins ホスト/エージェントからアクセス可能であることを確認します。

    例えば、アプリケーションが Jenkins ホスト/エージェントのルート・パス、/usr/user1/SampleApp でアクセス可能な場合、paf/ppf ファイルは /usr/user1/SampleApp/SampleApp.paf および /usr/user1/SampleApp/SampleApp.ppf にあります。

  3. コンテナーから見えるボリュームの名前を特定します。
    例えば、ホスト上の /usr/user1 をコンテナー内の cvol にマッピングします。
    注: ボリューム・マッピングは、コンテナーで CLI を実行するときに指定されます。
  4. CLI スクリプトを作成します。例えば、/usr/user1/SampleAppSampleApp.script です。
    この例のスクリプトは、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 スクリプトを作成します。例えば、/usr/user1/SampleAppSampleApp.script です。
    login …
    oa /cvol/SampleApp/SampleAll.ppf
    scan
    …
    logout

Azure DevOps パイプライン環境の準備

この環境を準備するには、次の 3 つの方法があります。
  • HCL Software License Management Portal を使用して HCL Harbor のコンテナー・イメージを使用する。
  • クラシック・エディターを使用して HCL Harbor のコンテナー・イメージを使用する。
  • YAML 構成ファイルを使用して HCL Harbor のコンテナー・イメージを使用する。
クラシック・エディターで HCL ソフトウェア・ライセンス管理ポータル のコンテナー・イメージを使用して Azure DevOps パイプラインを準備するには:
  1. HCL ソフトウェア・ライセンス管理ポータル から Azure VM に AppScan® Source CLI コンテナーをダウンロードします。
  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=<ライセンス・サーバー 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. スキャン中に CLI コンテナーで使用できるようにする必要がある環境変数を含むファイル (env.list など) を作成します。次の必須情報を含めます。
    • 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
    • 表示名: 名前を指定するか、デフォルトを使用します。
    • Container Registry: レジストリー・タイプを指定するか、デフォルトを使用します。
    • アクション: 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

YAML で HCL Harbor のコンテナー・イメージを使用して 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 Agent プール内の Azure VM がオンラインであることを確認します。
  2. 「パイプライン」ページで、実行するパイプラインを選択します。
  3. 「パイプラインの実行」を選択して、静的分析スキャンを開始します。