はじめに
JAVAアプリをビルドし、JenkinsのパイプラインでVeracodeのアプリケーション診断を実行してみます。
なお、フリースタイルプロジェクトではなく、パイプラインで実装します。
- Veracodeとは
- ソースコードの静的解析やアプリケーションに対する動的解析をクラウド上で行います。
- Webアプリケーションファイアウォール(WAF)と組み合わせることで、より堅牢なセキュリティになるかと思います。
- Veracode for AWS CodeStarやVeracode Azure DevOps Extensionもあるようです。
- Veracode Jenkins Plugin
- Veracode Scan | Jenkins plugin
環境
- Jenkins : 2.332.2
- Veracode Scanプラグイン : v22.5.17.2
事前準備
- Veracode Platformで実施すること
- API IDとSecretKeyを作成する
- JARファイルのアップロード先となるアプリケーション(ガワみたいなもの)を追加する
- アプリケーションの検査ポリシーのレベルや、Sandboxの使用可否を設定する
- Jenkinsで実施すること
Jenkinsパイプラインの設定
- なるべく少ないオプションで実現しています
- Jenkinsパイプライン内で、 Veracode Platformにアプリケーション(ガワみたいなもの)を追加したり、Sandboxを設定する事もできます
stage('VeracodePipelineスキャン') { steps { withCredentials([ usernamePassword ( // 認証情報をIDとSecretKeyに分割します credentialsId: '【認証情報のID】', usernameVariable: 'VERACODE_API_ID', passwordVariable: 'VERACODE_API_KEY' ) ]) { veracode applicationName: '【アプリケーション名】', // コンソールにデバッグ情報を表示します debug: true, sandboxName: '【サンドボックス名】', // scanNameがスキャン結果の名前になります。毎回変わる値が含まれていると良いです scanName: "${BUILD_TAG}", // Scanの待ち時間(分) timeout: 60, // ワークスペースのルートディレクトリが基準のようです uploadIncludesPattern: '**/【ファイル名】.jar', vid: "${VERACODE_API_ID}", vkey: "${VERACODE_API_KEY}", // スキャンが終わるまで待ちます。また、スキャン結果がJenkinsパイプラインの結果に表示されます // trueを指定しない場合、Veracodeにアプリケーションのアップロードとスキャン指示を出して、次の処理に進みます。スキャン結果は、Veracode Plaformでの確認になります waitForScan: true } } }
パイプラインの実行結果
- スキャン結果
- 6段階のSeverityで表示されます。
- ログ
[Pipeline] withCredentials Masking supported pattern matches of $VERACODE_API_ID or $VERACODE_API_KEY [Pipeline] { [Pipeline] veracode Warning: A secret was passed to "veracode" using Groovy String interpolation, which is insecure. Affected argument(s) used the following variable(s): [VERACODE_API_KEY, VERACODE_API_ID] See https://jenkins.io/redirect/groovy-string-interpolation for details. ------------------------------------------------------------------------ Upload and Scan with Veracode Pipeline ------------------------------------------------------------------------ [Debug mode is on] Can Fail Job: false Timeout: 60 Version information: VeracodeJavaAPI v22.1.9.3 cUnknown HPI location: var/lib/jenkins/plugins/veracode-scan/WEB-INF/lib/veracode-scan.jar Processing files in [remote] workspace: /var/jenkins/workspace/xxx Performing scan from [remote] workspace? true Invoking the following command in remote workspace: [xxx] $ java -jar /var/jenkins/veracode-scan/VeracodeJavaAPI.jar -action UploadAndScan -vid **** -vkey ******** -scantimeout 60 -appname 【アプリケーション名】 -createprofile false -sandboxname "Development Sandbox" -createsandbox false -version jenkins-xxx-22 -autoscan true -maxretrycount 5 -debug -filepath /var/jenkins/workspace/xxx.jar -useragent "VeracodeScanJenkins/22.5.17.2 (Jenkins/2.332.2; Java/Unknown)" [2022.06.08 07:21:17.069] VeracodeJavaAPI v22.1.9.3 c17.0.3 [2022.06.08 07:21:17.070] Wrapper action: UploadAndScan (略) [2022.06.08 07:41:55.212] Requesting analysis info again in 60 seconds. [2022.06.08 07:43:55.214] [2022.06.08 07:43:55.214] The status of the new analysis is "Results Ready". [2022.06.08 07:43:55.216] Invoking API https://analysiscenter.veracode.com/api/4.0/summaryreport.do [2022.06.08 07:43:55.216] Query string: build_id=xxx [2022.06.08 07:43:55.216] Connecting to host: analysiscenter.veracode.com [2022.06.08 07:43:55.322] Writing to request output stream [2022.06.08 07:43:55.322] Close request output stream [2022.06.08 07:43:55.322] Getting response status code from HTTP response message [2022.06.08 07:44:08.371] Server returned HTTP response code: 200 [2022.06.08 07:44:08.371] Retry is not required [2022.06.08 07:44:08.371] Connecting to response input stream [2022.06.08 07:44:08.371] Reading response input stream [2022.06.08 07:44:08.391] Close response input stream [2022.06.08 07:44:08.604] [2022.06.08 07:44:08.604] The scan finished with policy status 'Pass'. [2022.06.08 07:44:08.609] Wrapper return code 0 = Success [Pipeline] } [Pipeline] // withCredentials [Pipeline] }
参考
診断時間は早いのか遅いのか他と比較してないから分からないけど、JARファイル80MBで平均20分(試行回数10回)くらいでした。