DockerでJavaエージェントをデプロイしてみる

  • 更新

本項の目的

Contrast JavaエージェントをDocker環境に組み込む方法について、サンプルアプリケーションを使用したシンプルな手順を紹介します。DockerコンテナのWebgoat(意図的に脆弱性を持たせたWebアプリケーション)というサンプルアプリケーションにJavaエージェントを設定していきます。Docker環境でContrastを利用するための基本的な手順を理解するための参考にしてください。

 

手順

1. サンプルアプリケーション用のフォルダを作成しそのフォルダに移動し、ブランクのDockerfileを作成します。

mkdir ~/DockerWebgoat7/
cd ~/DockerWebgoat7/
touch Dockerfile

2. テキストエディタでDockerfileを開き、以下をコピーします。

# Contrastエージェントを組み込んでWebGoat7.1を実行するDockerfile
FROM openjdk:8-jre-alpine
RUN mkdir /webgoat7
WORKDIR /webgoat7

# WebGoatアプリケーションをインストール
ADD https://github.com/WebGoat/WebGoat/releases/download/7.1/webgoat-container-7.1-exec.jar /webgoat7/webgoat-container-7.1-exec.jar

# Contrastエージェントをインストール
RUN mkdir /opt/contrast
RUN apk --no-cache add curl
RUN curl --fail --silent --location "https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=com.contrastsecurity&a=contrast-agent&v=LATEST" -o /opt/contrast/contrast.jar

# 起動時にContrastエージェントを有効にする

CMD ["java","-javaagent:/opt/contrast/contrast.jar","-jar","webgoat-container-7.1-exec.jar"]
EXPOSE 8080

上記Dockerfileの説明

  • Contrastエージェントのインストール:Contrast JavaエージェントはMavenDebianRPMなどの公開リポジトリから取得できますが、上記の記述例では、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 .
4.  作成したイメージからコンテナを生成して起動します。
Contrastサーバに接続するための認証情報を環境変数を使用して指定します。<value>の箇所を組織のエージェントキーに置き換えてください。
docker run --rm -it -p 8080:8080 \
-e CONTRAST__API__API_KEY=<value> \
-e CONTRAST__API__SERVICE_KEY=<value> \
-e CONTRAST__API__URL=<value> \
-e CONTRAST__API__USER_NAME=<value> \
webgoat7

または、YAMLファイルにContrastの認証情報を指定し、YAMLファイルをDockerボリュームとしてマウントすることもできます。Contrast UIのエージェントを追加の画面よりJavaエージェントのYAML設定ファイルをダウンロードし、そのYAML設定ファイルのパスを<path-to-yaml-file>に置き換えます。

docker run --rm -it -p 8080:8080 \
-v <path-to-yaml-file>:/etc/contrast/java/contrast_security.yaml \
webgoat7

5. WebGoatが正常に起動しているかを確認するために、ブラウザでhttp://localhost:8080/WebGoat を開きます。WebGoatのページをメニューをいくつかクリックしてみてください。

WebgoatLogin.png

6. Contrast UIを開き、アプリケーションが表示されていることを確認します(以下のイメージは、appnameとserverオプションを指定した場合のものです)。

アプリケーション一覧画面:

WebgoatApp.png

サーバ一覧画面: 

WebgoatServer.png

 

備考:

Dockerは、同じDockerfileで次に行われるビルドを高速化するために、レイヤをキャッシュします。そのため、curlコマンドを実行する前のステップで何も変更がない場合、Contrastエージェントの最新バージョンをダウンロードするためにcurlコマンドは再実行されません。

本項の方法でContrastエージェントの最新バージョンを常に取得するには、定期的にイメージ全体を再ビルドし、最新バージョンが使用されるようにする必要があります。そのためには、docker buildに--no-cacheおよび--pull オプションを指定して実行します。

(例)

docker build --no-cache --pull .

 

関連情報

この記事は役に立ちましたか?

0人中0人がこの記事が役に立ったと言っています

他にご質問がございましたら、リクエストを送信してください