GitHub Action とコンテナーを使用したスキャン自動化の構成
HCL Harbor および HCL FlexNet Operations ポータル (FNO) から入手できる、HCL® AppScan® Source コマンド行インターフェース (CLI) コンテナーを使用すると、AppScan® Source のフル・インスタンスをインストールしなくても、GitHub による静的分析スキャンを自動化できます。
- アプリケーションを準備します。
- HCL FNO のコンテナー・イメージを使用して、GitHub Action を準備します。
- GitHub Action を使用してスキャンを開始します。
前提条件
- GitHub Action 環境: Docker がインストールされた 1 つ以上の Linux RHEL 7.9 ベースの GitHub Action ランナー。
これが、CLI コンテナー を使用して静的分析スキャンを実行する対象となるシステムです。
-
AppScan® Source for Automation の有効なライセンスと関連するライセンス・サーバー情報。
-
AppScan® Source CLI コンテナー・イメージ
HCL Harbor または HCL FNO から AppScan® Source CLI コンテナー・イメージをダウンロードします。有効なライセンスがあれば、HCL ID を使用して、これらの場所にアクセスできます。
-
AppScan® Source CLI スクリプト
GitHub Action を使用してコンテナーでスキャンするには、スクリプトが必要です。
- AppScan® Source プロジェクト (.ppf) およびアプリケーション (.paf) ファイル: AppScan® Source for Analysis を使用して構成ファイルを生成します (スキャン・ターゲットにアクセスできる Linux システムに AppScan® Source がインストールされている必要があります)。
- コンテナーから GitHub Action のコンテンツへのアクセス:
- スキャン対象のアプリケーションが GitHub に存在し、スキャンを実行する GitHub Action からアクセスできる必要があります。
.paf
/.ppf
ファイル
注: ボリューム・マッピング (コンテナー・ホスト上のパスからコンテナー内のパスへのマッピング) が、この目的でスキャンのインスタンス化中に使用されます。
スキャン対象のアプリケーションの準備
.paf
/.ppf
ファイル- フォルダー・スキャン
paf
/ppf
ファイルを使用したスキャン対象のアプリケーションの準備- HCL® AppScan® Source for Analysis がインストールされた Linux システム上の AppScan® Source クライアントを使用して、
.paf
/.ppf
ファイルを生成します。.paf
および.ppf
ファイルがスキャン対象のアプリケーションのルートにあることを確認します。 - アプリケーション・ファイルと
paf
/ppf
ファイルが、GitHub Action ランナーからアクセス可能であることを確認します。例えば、アプリケーションがルート・パス、
/usr/user1/SampleApp
でアクセス可能な場合、.paf
/.ppf
ファイルは、/usr/user1/SampleApp/SampleApp.paf
および/usr/user1/SampleApp/SampleApp.ppf
にあります。 - コンテナーがホスト/エージェント・システム上のアプリケーション・ファイルにアクセスできるようにするには、ボリューム・マッピングが必要です。コンテナーから見えるボリュームの名前を特定します。例えば、ホスト上の
/usr/user1
をコンテナー内のcvol
にマッピングします。注: ボリューム・マッピングは、コンテナーで CLI を実行するときに指定されます。 - CLI スクリプトを作成します。例えば、/
usr/user1/SampleApp
のSampleApp.script
です。この例のスクリプトは、cvol
パスを使用して、アプリケーション・コンテンツにアクセスするようにコンテナーに伝えます。リストされているコマンドは、AppScan® Source CLI (手動介入なしのスキャン) で使用されるコマンドです。login … oa /cvol/SampleApp/SampleAll.ppf scan … logout
- アプリケーション・ファイルは GitHub Action ランナーからアクセス可能であることを確認します。
例えば、アプリケーションは GitHub Action ランナー上のパス /
usr/user1/SampleApp
でアクセスできます。 - コンテナーから見えるボリュームの名前を特定します。例えば、ホスト上の
/usr/user1
をコンテナー内のcvol
にマッピングします。注: ボリューム・マッピングは、コンテナーで CLI を実行するときに指定されます。 - CLI スクリプトを作成します。例えば、
/usr/user1/SampleApp
のSampleApp.script
です。login … oa /cvol/SampleApp/SampleAll.ppf scan … logout
CLI コンテナー・イメージを使用した GitHub Action の準備
- HCL FNO から GitHub ホストに AppScan® Source CLI コンテナーをダウンロードするか、HCL Harbor から直接アクセスします。
HCL FNO からダウンロードした場合は、
docker load
コマンドを使用して CLI コンテナー・イメージをロードします。 - HCL Harbor から AppScan® Source 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 ランナーを使用した静的分析スキャンの開始
- GitHub Action ランナーがオンラインであることを確認します。
ランナーがセルフホストの場合は、GitHub からダウンロードした実行スクリプトを手動で実行します。
- GitHub で、
.yaml
スクリプトを使用して、静的分析スキャンが開始します。
を選択すると、ブランチ内に存在する