Dockerを使用する既存のGradleプロジェクトにJavaエージェントをインストール
ここでは、サンプルのGradleプロジェクトを使用します。このサンプルプロジェクトは、 アプリケーションプラグインとDockerプラグイン を使用して、JavaのWebアプリケーションを構築するものです。また、Webアプリケーションの動作を検証するJUnit 5の統合テストも実行します。テストに使用するDockerイメージにContrastを組み込む手順を行うことで、総合テスト中にContrast Assessでコードが解析されるようになります。サンプルプロジェクトは、弊社のGitHubリポジトリにあるGradleプロジェクトを参照ください。
注記
以下の手順において、パッケージングや配布に関して言及している部分はいかなる形式でも、全て組織内での使用を目的としています。ContrastをアプリケーションやDockerコンテナと一緒に組織外に配布しないでください。詳細についてはContrastのサービス利用規約を参照してください。
Dockerを使用する既存のGradleプロジェクトにJavaエージェントをインストールするには:
エージェントキーを使用して、ContrastエージェントがContrastサーバと通信するための設定をします。以下のキーが必要です。
Contrast URL:https://app.contrastsecurity.com/Contrast、もしくはオンプレミス版かプライベートクラウドのインスタンスのURLになります。
組織用APIキー
エージェントユーザ名
エージェントサービスキー
Unix系のオペレーティングシステムを使用している場合は、エージェントキーの値をContrastの環境変数としてエクスポートするためのファイルを作成します。
コマンドプロンプトを開き、以下のコマンドを実行します。
<contrast_url>
、<your_api_key>
、<agent_user_name>
、および<agent_user_service_key>
をContrastから取得したContrast URL、APIキー、ユーザ名、およびサービスキーの値に置き換えます。$ tee -a ~/.contrastrc > /dev/null export CONTRAST__API__URL=<contrast_url> export CONTRAST__API__API_KEY=<your_api_key> export CONTRAST__API__USER_NAME=<agent_user_name> export CONTRAST__API__SERVICE_KEY=<agent_user_service_key>
4行すべての入力が終了したら、
CTRL+D
を押して、値を$HOME/.contrastrcファイルに保存します。現在のシェルで
.contrastrc
スクリプトを実行して、変数を環境にエクスポートします。$ . ~/.contrastrc
注記
Windowsを使用している場合は、環境変数の設定方法についてMicrosoftのドキュメントを参照してください。
ヒント
Contrast Javaエージェントの設定には、ファイル、Javaシステムプロパティ、環境変数を使用することができます。認証情報およびContrastサーバへの接続情報は、ローカルの開発環境の各プロジェクトで変更することはほぼ無いと思われますので、このような値は環境変数を使用することを推奨します。この方法は、ビルドスクリプトに認証情報を直接記述するよりも安全です。
.contrastrc
スクリプトを実行したターミナルを閉じた場合、新しいターミナルを開いたときにこのスクリプトを再度実行する必要があります。対話シェルを初期化するスクリプトに~/.contrastrc
を追加すれば、ターミナルセッション間で設定が保持されます。例えば、シェルプログラムがBashの場合は、echo ~/.contrastrc` | tee -a ~/.bashrc
を実行します。コマンドプロンプトを開き、以下のコマンドを実行してContrastのexamplesリポジトリをクローンします。
$ git clone https://github.com/Contrast-Security-OSS/contrast-java-examples.git
gradle-docker
ディレクトリに移動するために以下のコマンドを実行します。$ cd contrast-java-examples/gradle-docker
テストビルドを実行して、正常に機能することを確認します。
$ ./gradlew build BUILD SUCCESSFUL in 3s 4 actionable tasks: 3 executed, 1 up-to-date
注記
Windowsでは、代わりに
gradlew.bat build
を実行してください。これが機能しない場合は、Java 8が正しくインストールされていることを確認してください。
$ java -version java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
何かしらの変更を行った場合は、ビルドを再度実行してください。それでも機能しない場合は、この問題の詳細を記載して問題を報告してください。
ContrastのJavaエージェントに関して、依存関係のコンフィギュレーションを追加し、依存関係の定義を追加します。
configurations { contrastAgent }
def contrast_version = "3.6.3.8220" dependencies { // ... other dependencies omitted contrastAgent "com.contrastsecurity:contrast-agent:$<contrast_version>" }
エージェントをプロジェクトのディレクトリにコピーするためのタスクを追加します。
task("copyAgent", type: Copy) { from configurations.contrastAgent into "$<projectDir>/lib" } run.dependsOn copyAgent assemble.dependsOn copyAgent
build.gradle
のapplication
ブロックを変更して、アプリケーションに渡されるJVM引数に-javaagent
プロパティを追加します。application { // ... rest of block omitted def agentBuildPath = "lib/contrast-agent-$<contrast_version>.jar" def agentProjectPath = Paths.get(getProjectDir().toURI()).resolve(agentBuildPath) applicationDefaultJvmArgs = [ "-javaagent:$<agentProjectPath.toString()>" ] }
アプリケーションを実行します。
$ ./gradlew run
注記
Windowsでは、代わりに
gradlew.bat run
を実行してください。これで、アプリケーションにContrastが組み込まれて、起動するようになります。手動でテストを実行すると、セキュリティに関連する検出結果がすべてContrastに報告されます。
CTRL+C
を押すと、アプリケーションを停止できます。gradle build
の実行時に作成されるバンドルにContrastエージェントのJARを含めるよう、配布プラグインの定義を設定します(配布プラグインは、アプリケーションプラグインの定義内に含めます。)。application { // ... rest of application config omitted distributions { main { contents { from("$<projectDir>/lib") { into "lib" } } } } }
-javaagent
は、アプリケーションのバンドル内のJARファイルではなく、プロジェクトディレクトリのJARファイルを指しています。正しいJARファイルを指定するには、バンドル内の正しいパスを使用するようにstartScriptsタスクの定義を追加します。application { // ... rest of application config omitted startScripts { doLast { def shFile = new File(getOutputDir(), project.name) shFile.text = shFile.text.replace(agentProjectPath.toString(), "\$APP_HOME/$<agentBuildPath>") def batFile = new File(getOutputDir(), "$<project.name>.bat") batFile.text = batFile.text.replace(agentProjectPath.toString(), "%APP_HOME%\\lib\\contrast-agent-$<contrast_version>.jar") } } }
build.gradle
のcreateContainer
タスクに以下のコマンドを追加し、Contrastの設定変数をコンテナに渡します。task createContainer(type: DockerCreateContainer) { // ... rest of the config omitted envVars = [ CONTRAST__API__URL: System.getenv("CONTRAST__API__URL"), CONTRAST__API__USER_NAME: System.getenv("CONTRAST__API__USER_NAME"), CONTRAST__API__SERVICE_KEY: System.getenv("CONTRAST__API__SERVICE_KEY"), CONTRAST__API__API_KEY: System.getenv("CONTRAST__API__API_KEY"), CONTRAST__APPLICATION__NAME: "${project.name}-how-to" ] }
ビルドを再度実行します。
./gradlew clean build
注記
Windowsでは、代わりに
gradlew.bat build
を実行します。Dockerコンテナで、Contrastを有効にしてアプリケーションを実行できるようになりました。総合テストを実行すると、脆弱なエンドポイントが検出され、Contrastサーバに報告されます。報告された脆弱性を参照するには、Contrast UIにログインして脆弱性ページにアクセスし、アプリケーション名のgradle-docker-how-toフィルターをかけます。
ヒント
ContrastをGradleビルドとさらに統合するには、Contrast Gradleプラグインを確認してください。テスト実行でContrastが脆弱性を検出したときに、Gradleビルドを失敗させるようcontrastVerify
タスクを設定できます。