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

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

コンテナーを使用したスキャンの主な手順は次のとおりです。
  1. アプリケーションを準備します。
  2. HCL FNO のコンテナー・イメージを使用して、GitHub Action を準備します。
  3. GitHub Action を使用してスキャンを開始します。

前提条件:

開始する前に、環境が次の要件を満たしていることを確認してください。
  • GitHub Action 環境: Docker がインストールされた 1 つ以上の Linux RHEL 7.9 ベースの GitHub Action ランナー。

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

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

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

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

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

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

  • AppScan® ソース プロジェクト (.ppf) およびアプリケーション (.paf) ファイル: AppScan® ソース for Analysis を使用して構成ファイルを生成します (スキャン・ターゲットにアクセスできる Linux システムに AppScan® ソース がインストールされている必要があります)。
  • コンテナーから GitHub Action のコンテンツへのアクセス:
    • スキャン対象のアプリケーションが GitHub に存在し、スキャンを実行する GitHub Action からアクセスできる必要があります。
    • .paf/.ppfファイル
    注: ボリューム・マッピング (コンテナー・ホスト上のパスからコンテナー内のパスへのマッピング) が、この目的でスキャンのインスタンス化中に使用されます。

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

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

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

  2. アプリケーション・ファイルと paf/ppf ファイルが、GitHub Action ランナーからアクセス可能であることを確認します。

    例えば、アプリケーションがルート・パス、/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. アプリケーション・ファイルは GitHub Action ランナーからアクセス可能であることを確認します。

    例えば、アプリケーションは GitHub Action ランナー上のパス /usr/user1/SampleApp でアクセスできます。

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

CLI コンテナー・イメージを使用した GitHub Action の準備

GitHub Action でランタイム環境を準備するには:
  1. HCL FNO から GitHub ホストに AppScan® ソース CLI コンテナーをダウンロードするか、HCL Harbor から直接アクセスします。

    HCL FNO からダウンロードした場合は、docker load コマンドを使用して CLI コンテナー・イメージをロードします。

  2. HCL Harbor から AppScan® ソース CLI コンテナーを使用して、静的分析スキャンを実行するための yaml スクリプト・ファイルを作成し、適切なブランチに配置します。以下に例を示します。
    # This is a basic workflow to help you get started with Actions
    
    name: CI
    
    # Controls when the workflow will run
    on:
      # Triggers the workflow on push or pull request events but only for the development branch
      push:
        <name of the branch used for running SAST scan>
      pull_request:
            <name of the branch used for running SAST scan>
    
      # Allows you to run this workflow manually from the Actions tab
      workflow_dispatch:
    
    # A workflow run is made up of one or more jobs that can run sequentially or in parallel
    jobs:
      # This workflow contains a single job called "build"
      SAST_SCAN:
        # The type of runner that the job will run on , here we used a self-hosted runner
        runs-on: [ self-hosted ]
    
        # Steps represent a sequence of tasks that will be executed as part of the job
        steps:
          # Checks-out your repository under $GITHUB_WORKSPACE, so our job can access it
          - uses: actions/checkout@v2
          
           # Displays current working path
          - name: Display current workspace
            run: echo $GITHUB_WORKSPACE
            
    .
          - name: Docker cleanup
            run : docker system prune -a -f
         
          - name: Docker run
            run : docker run --rm --env-file $GITHUB_WORKSPACE/env.list -v $GITHUB_WORKSPACE/:/wa  hclcr.io/appscan/appscan-src-cli:10.1.0 script /wa/CLI.script
          - name: Docker cleanup
            run : docker system prune -a -f
          - name: Success
            run: echo Scan completed successfully.
    

GitHub Action ランナーを使用した静的分析スキャンの開始

静的分析スキャンを実行するには:
  1. GitHub Action ランナーがオンラインであることを確認します。

    ランナーがセルフホストの場合は、GitHub からダウンロードした実行スクリプトを手動で実行します。

  2. GitHub で、「アクション」 > 「ワークフローの実行」 を選択すると、ブランチ内に存在する .yaml スクリプトを使用して、静的分析スキャンが開始します。