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

HCL Harbor および HCL FlexNet Operations ポータル (FNO) から使用可能な HCL®AppScan® ソース コマンド行インターフェース (CLI) コンテナーを使用すると、AppScan® ソース の完全なインスタンスをインストールせずに、Azure での静的分析スキャンを自動化することができます。

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

前提条件

始める前に、ご使用の環境が以下の要件を満たしていることを確認してください。
  • Azure 環境 (Docker を備えた 1 つ以上の Linux エージェント/ホストを含む) がインストールされている。

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

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

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

    HCL Harbor または HCL FNO から AppScan® ソース CLI コンテナー・イメージをダウンロードします。有効なライセンスがあると、使用している HCL ID にこれらの場所へのアクセス権限が付与されます。

  • AppScan® ソース CLI スクリプト

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

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

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

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

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

以下のいずれかを使用して、スキャン用のアプリケーションを準備します。
  • paf/ppf ファイル
  • フォルダー・スキャン
paf/ppf ファイルを使用したスキャン対象のアプリケーションの準備
  1. AppScan® ソース がインストールされている Linux システム上で、HCL®AppScan® Source for Analysis クライアントを使用して 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® ソース 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 FlexNet Operations からのコンテナー・イメージの使用。
  • 従来のエディターを使用した、HCL Harbor からのコンテナー・イメージの使用。
  • YAML 構成ファイルを使用した、HCL Harbor からのコンテナー・イメージの使用。
HCL FlexNet Operations からのコンテナー・イメージと従来のエディターを使用して Azure DevOps パイプラインを準備するには、以下のようにします。
  1. HCL FlexNet Operations (FNO) から、AppScan® ソース CLI コンテナーを Azure VM にダウンロードします。
  2. docker load コマンドを使用して CLI コンテナー・イメージをロードします。
  3. Azure DevOps 組織内で、従来のエディターを使用して新しいパイプラインを作成します。「従来のエディターを使用」をクリックします。
  4. スキャン対象のプロジェクトと CLI スクリプトが保管されているリポジトリーとブランチを選択し、「続行」をクリックします。
    1. ソースとして「Azure Repos Git」を選択します。
    2. 「チーム・プロジェクト」を選択します。
    3. 「リポジトリー」を選択します。
  5. AppScan® ソース 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 レジストリー・サービス接続: 接続を指定するか、デフォルトの接続を使用します。
    • コマンド:実行
    • 引数:--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® ソース CLI コンテナーを使用して構成された Azure VM が存在する Azure の「エージェント・プール」を選択します。
  5. 以下の仕様でイメージを実行するための新しい Docker タスクを追加します。
    • タスクのバージョン:2
    • 表示名: 名前を指定するか、デフォルトの名前を使用します。
    • コンテナーのレジストリー: レジストリー・タイプを指定するか、デフォルトのタイプを使用します。
    • アクション:Docker コマンドの実行
    • コマンド:実行
    • 引数:--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 エージェント・プール内の Azure VM がオンラインであることを確認します。
  2. 「パイプライン」ページから、実行するパイプラインを選択します。
  3. 「パイプラインの実行」を選択して、静的分析スキャンを開始します。