Azure とコンテナーを使用したスキャンの自動化の構成
HCL Harbor および HCL FlexNet Operations ポータル (FNO) から使用可能な HCL®AppScan® ソース コマンド行インターフェース (CLI) コンテナーを使用すると、AppScan® ソース の完全なインスタンスをインストールせずに、Azure での静的分析スキャンを自動化することができます。
- アプリケーションの準備。
- Azure DevOps パイプライン環境の準備。
- コンテナー・イメージからのスキャンの開始。
前提条件
- 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
ファイルを使用したスキャン対象のアプリケーションの準備- AppScan® ソース がインストールされている Linux システム上で、HCL®AppScan® Source for Analysis クライアントを使用して
paf
/ppf
ファイルを生成します。paf
およびppf
ファイルが、スキャン対象のアプリケーションのルートにあることを確認します。 - アプリケーション・ファイルと
paf
/ppf
ファイルが、Jenkins ホスト/エージェントからアクセス可能であることを確認します。例えば、アプリケーションが Jenkins ホスト/エージェント上のルート・パス
/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® ソース CLI で使用されるコマンドです (「手動による介入のないスキャン」)。login … oa /cvol/SampleApp/SampleAll.ppf scan … logout
- アプリケーション・ファイルが、Jenkins ホスト/エージェントからアクセス可能であることを確認します。
例えば、アプリケーションが Jenkins ホスト/エージェント上のパス /
usr/user1/SampleApp
でアクセス可能です。 - コンテナーから確認されるボリュームの名前を決定します。例えば、ホスト上の
/usr/user1
をコンテナー内のcvol
にマップします。注: ボリューム・マッピングは、コンテナーで CLI を実行するときに指定されます。 - CLI スクリプトを作成します。例えば、
/usr/user1/SampleApp
にSampleApp.script
があります。login … oa /cvol/SampleApp/SampleAll.ppf scan … logout
Azure DevOps パイプライン環境の準備
- 従来のエディターを使用した、HCL FlexNet Operations からのコンテナー・イメージの使用。
- 従来のエディターを使用した、HCL Harbor からのコンテナー・イメージの使用。
- YAML 構成ファイルを使用した、HCL Harbor からのコンテナー・イメージの使用。
- HCL FlexNet Operations (FNO) から、AppScan® ソース CLI コンテナーを Azure VM にダウンロードします。
docker load
コマンドを使用して CLI コンテナー・イメージをロードします。- Azure DevOps 組織内で、従来のエディターを使用して新しいパイプラインを作成します。「従来のエディターを使用」をクリックします。
- スキャン対象のプロジェクトと CLI スクリプトが保管されているリポジトリーとブランチを選択し、「続行」をクリックします。
- ソースとして「Azure Repos Git」を選択します。
- 「チーム・プロジェクト」を選択します。
- 「リポジトリー」を選択します。
- AppScan® ソース CLI コンテナーを使用して構成された Azure VM が存在する Azure の「エージェント・プール」を選択します。
- イメージをロードするための新しい Docker タスクを追加します。以下の仕様を含めます。
- タスクのバージョン:0
- 表示名: 名前を指定するか、デフォルトの名前を使用します。
- コンテナーのレジストリー・タイプ: レジストリー・タイプを指定するか、デフォルトのタイプを使用します。
- Docker レジストリー・サービス接続: 接続を指定するか、デフォルトの接続を使用します。
- アクション:Docker コマンドの実行
- コマンド:load -i /usr/user1/appscan-src-cli-10.2.0.tar.gz
- 以下の仕様でイメージを実行するための新しい 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
- 以下の仕様でクリーンアップを実行するための新しい Docker タスクを追加します。
- タスクのバージョン:0
- 表示名: 名前を指定するか、デフォルトの名前を使用します。
- コンテナーのレジストリー・タイプ: レジストリー・タイプを指定するか、デフォルトのタイプを使用します。
- Docker レジストリー・サービス接続: 接続を指定するか、デフォルトの接続を使用します。
- アクション:Docker コマンドの実行
- コマンド:rmi appscan/appscan-src-cli:10.2.0
- スキャン中に CLI コンテナーで使用可能にする必要がある環境変数を含むファイル (例えば、
env.list
) を作成します。以下の必須情報を含めます。-
AS_INSTALL_MODE=standalone
-
AS_LICENSE_TYPE=CLS
-
AS_LICENSE_SERVER_ID=<the license server ID>
パラメーターの完全なリストは、こちらから見つけることができます。
-
- Azure DevOps 組織内で、従来のエディターを使用して新しいパイプラインを作成します。「従来のエディターを使用」をクリックします。
- スキャン対象のプロジェクトと CLI スクリプトが保管されているリポジトリーとブランチを選択し、「続行」をクリックします。
- ソースとして「Azure Repos Git」を選択します。
- 「チーム・プロジェクト」を選択します。
- 「リポジトリー」を選択します。
- AppScan® ソース CLI コンテナーを使用して構成された Azure VM が存在する Azure の「エージェント・プール」を選択します。
- 以下の仕様でイメージを実行するための新しい 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
- 以下の仕様でクリーンアップを実行するための新しい 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'
コンテナー・イメージを使用した静的分析スキャンの開始
パイプラインを使用してスキャンを開始するには、以下のようにします。
- Azure で、Azure エージェント・プール内の Azure VM がオンラインであることを確認します。
- 「パイプライン」ページから、実行するパイプラインを選択します。
- 「パイプラインの実行」を選択して、静的分析スキャンを開始します。