本項の目的
Contrast JavaエージェントをDocker環境に組み込む方法について、サンプルアプリケーションを使用したシンプルな手順を紹介します。DockerコンテナのWebgoat(意図的に脆弱性を持たせたWebアプリケーション)というサンプルアプリケーションにJavaエージェントを設定していきます。Docker環境でContrastを利用するための基本的な手順を理解するための参考にしてください。
手順
1. サンプルアプリケーション用のフォルダを作成しそのフォルダに移動し、ブランクのDockerfileを作成します。
mkdir ~/DockerWebgoat7/
|
2. テキストエディタでDockerfileを開き、以下をコピーします。
# Contrastエージェントを組み込んでWebGoat7.1を実行するDockerfile
|
上記Dockerfileの説明
- Contrastエージェントのインストール:Contrast JavaエージェントはMaven、Debian、RPMなどの公開リポジトリから取得できますが、上記の記述例では、Javaエージェントの最新版をMavenリポジトリから取得してベースイメージに追加します。Javaエージェントの特定のバージョンをダウンロードしたい場合、以下の例のようにバージョンを指定します。利用可能なバージョンは、こちらを検索してください。
RUN curl --fail --silent --location "https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=com.contrastsecurity&a=contrast-agent&v=3.8.5.20294" -o /opt/contrast/contrast.jar
|
- Contrastエージェントを有効にする:Javaエージェントを有効にするには、Javaの起動コマンドに
-javaagent
オプションでJavaエージェントのjarファイルを指定する必要があります。Javaエージェントのその他のオプションは任意ですが、必要な場合は以下の例のように指定することもできます。
CMD ["java","-javaagent:/opt/contrast/contrast.jar","-Dcontrast.standalone.appname=WebGoatDocker","-Dcontrast.server=DockerServer","-jar","webgoat-container-7.1-exec.jar"]
|
3. Dockerfileをビルドしてイメージを作成します。
docker build -t webgoat7 --rm .
|
docker run --rm -it -p 8080:8080 \
|
または、YAMLファイルにContrastの認証情報を指定し、YAMLファイルをDockerボリュームとしてマウントすることもできます。Contrast UIのエージェントを追加の画面よりJavaエージェントのYAML設定ファイルをダウンロードし、そのYAML設定ファイルのパスを<path-to-yaml-file>に置き換えます。
docker run --rm -it -p 8080:8080 \
|
5. WebGoatが正常に起動しているかを確認するために、ブラウザでhttp://localhost:8080/WebGoat を開きます。WebGoatのページをメニューをいくつかクリックしてみてください。
6. Contrast UIを開き、アプリケーションが表示されていることを確認します(以下のイメージは、appnameとserverオプションを指定した場合のものです)。
アプリケーション一覧画面:
サーバ一覧画面:
備考:
Dockerは、同じDockerfileで次に行われるビルドを高速化するために、レイヤをキャッシュします。そのため、curlコマンドを実行する前のステップで何も変更がない場合、Contrastエージェントの最新バージョンをダウンロードするためにcurlコマンドは再実行されません。
本項の方法でContrastエージェントの最新バージョンを常に取得するには、定期的にイメージ全体を再ビルドし、最新バージョンが使用されるようにする必要があります。そのためには、docker buildに--no-cacheおよび--pull オプションを指定して実行します。
(例)
docker build --no-cache --pull .
関連情報
- Docker環境でJavaエージェントを設定するための方法は、Docker環境でのJavaエージェントを参照ください。
- その他の設定例として、Docker環境のPetClinic(サンプルコード)も参考にしてください。