ステージ2のコンテナ
これらのコンテナは、Build User 設定 (Job) の入力(具体的には定義した testSession の数)に基づいて、purpleteam CLI に供給された動的に起動されます。
以下の設定は、purpleteam バックエンドを local 環境で実行する場合に関係します。cloud ではすべて自動で行われます。
このリポジトリをクローンしてください。
テストでは、app-slave ディレクトリ内で直接 .env ファイルを使用します。
ZAP_API_KEY
ZAP_API_KEY 環境変数に値を割り当てていることを確認してください。
ZAP_API_KEY は任意の値に設定できますが、app-slave で定義するだけでなく、app-scanner プロジェクト設定にも追加するようにしてください。app-scanner プロジェクトでは、ステージ2コンテナで実行されている Zap に対して認証するために Zap API キーを設定する必要があります。app-scanner プロジェクトでは、以下で設定する必要があります:
{ "slave": { "apiKey": <zap-api-key-here> } }
HOST_ZAP_LOG4J_PROPERTIES_PATH と ZAP_LOG4J_PROPERTIES_PATH_MOUNT_TARGET
Zap のデバッグログが必要な場合は、LOG4J デバッグ設定用の環境変数も追加する必要があります。
.env ファイル
.env ファイルを使用する場合、これらすべての環境変数を追加すると、次のようになります:
ZAP_API_KEY=<zap-api-key-here>
HOST_ZAP_LOG4J_PROPERTIES_PATH=<絶対パス>/purpleteam-s2-containers/app-slave/log4j.properties>
ZAP_LOG4J_PROPERTIES_PATH_MOUNT_TARGET=/home/zap/.ZAP/log4j.properties
上記で説明した環境変数を設定している場合:
local 環境で実行される app-slave (Zap) コンテナのデバッグログを有効にするには、volumes 配列と、source キーに環境変数 HOST_ZAP_LOG4J_PROPERTIES_PATH を含む要素のコメントを解除します。
実際のログを表示する方法は以下を参照してください。
テストの実行中に Zap と連携(Zap UI へのクエリ)できます。これは過去に app-scanner をデバッグする際に Zap の状態を確認するために役立ちました。
docker stats
docker container ls
これは docker-compose.yml で定義されているように、8080 から 8091 までの任意のポートになる可能性があります。
コンテナ内の Zap がリッスンしているポートは常に 8080 です。
オプション:FoxyProxy に次の URL パターンを設定します:zap:8080/*
URL パターンを使用すると、FoxyProxy をオンにしたまま、「事前定義されたパターンと優先順位に基づいてプロキシを使用する」を選択できます。それができない場合は、作成した特定のプロキシを選択するだけです。http://zap:8080/ にアクセスします。
リクエストはホストポートを介してプロキシされ、FoxyProxy 設定で指定されたホストポートのコンテナ内の zap プロセスによって応答されます。local 環境で実行される Selenium コンテナのデバッグログを有効にするには、environment 配列と、chrome および/または firefox の SE_OPTS=-debug 要素のコメントを解除します。
実際のログを表示する方法は以下を参照してください。
以下に、このプロジェクトから実行される任意の Selenium コンテナ内のブラウザを表示するために必要な手順を示します。
-debug イメージに置き換えます。-debug イメージはコメントアウトされている可能性があるため、通常のイメージをコメントアウトして、末尾に -debug が付いたイメージのコメントを解除するだけで問題ありません。5900 ポート範囲のコメントを解除します。外部ポートとして範囲(例:5900-5901)を指定すると、複数のコンテナに同時に VNC 接続できます。この例では、同時に2つのセッションを開くことを許可しています。2つ以上 VNC 接続する必要がある場合は、外部ポート範囲を広げてください。コンテナ内の VNC サーバーへの接続を開くには、VNC クライアントが必要です。Linux Mint では Remmina Remote Desktop Client を使用して成功しました。Software Manager から Remmina-plugin-vnc をインストールしてください。
Remmina Remote Desktop Client を起動します。
新しいエントリを作成します。複数の Selenium コンテナに同時に VNC 接続する場合は、次のようにそれぞれ設定できます:
| キー | 値 |
|---|---|
| 名前 | seleniumstandalone_chrome_1 |
| プロトコル | VNC - Virtual Network Computing |
| Basic タブ | |
| サーバー | 127.0.0.1:5900 |
| パスワード | secret |
| 色深度 | True color (24 bit) # これだけが動作しました |
| 品質 | 低(最速) |
| キー | 値 |
|---|---|
| 名前 | seleniumstandalone_chrome_2 |
| プロトコル | VNC - Virtual Network Computing |
| Basic タブ | |
| サーバー | 127.0.0.1:5901 |
| パスワード | secret |
| 色深度 | True color (24 bit) # これだけが動作しました |
| 品質 | 低(最速) |
詳細については SeleniumHQ github を参照してください。
Selenium コンテナが実行中になったら(確認にはターミナルで docker stats を実行し続けると便利です)、docker container ls を使用して各 Selenium コンテナがどの外部ポートを使用しているかを確認できます。Docker は VNC クライアントエントリに割り当てたポートを認識しないため、特定の VNC クライアントエントリの名前が同じ名前の Selenium コンテナと一致しない可能性があります。そのため、docker container ls でポートマッピングを確認することをお勧めします。
複数のテストセッションがある場合、どの Selenium コンテナがどのテストセッションに使用されているかを関連付けるには、実行中の app-scanner ログを確認する必要があるかもしれません。また、app-scanner がログレベル debug に設定されていることを確認し、以下のログメッセージの一部またはすべてを確認できるようにする必要があるかもしれません:
[app.parallel] cucCli process with PID "28" has been spawned for test session with Id "lowPrivUser"
[app.parallel] cucCli process with PID "34" has been spawned for test session with Id "adminUser"
[pid-28,world] seleniumContainerName is: seleniumstandalone_chrome_1
[pid-34,world] seleniumContainerName is: seleniumstandalone_chrome_2
この例では、Build User 設定(Job)に2つのテストセッションが設定されています。1つは id が lowPrivUser、もう1つは id が adminUser です。この例では、lowPrivUser テストセッションは PID 28 のプロセスを持ち、adminUser テストセッションは PID 34 のプロセスを持っています。
その後の2つのログメッセージで、PID を関連付けることで、lowPrivUser テストセッションが seleniumstandalone_chrome_1 という名前のコンテナを実行し、adminUser テストセッションが seleniumstandalone_chrome_2 という名前のコンテナを実行していることがわかります。
どのテストセッションがどの seleniumstandalone_chrome_[n] コンテナを実行するかは保証されないため、確実に確認する必要がある場合はこの関連付け手法を使用してください。
Selenium コンテナに VNC 接続するには、Remmina を起動したら、上記で作成した VNC エントリを1つ以上ダブルクリックします。ブラウザが操作されているのを見ることができるはずです... app-scanner の Cucumber テストステップがその時点まで進んでいる場合に限ります。 もちろん、テストを遅くしたり、一時停止したり、デバッガでステップ実行したりすることもできます。これらの詳細は purpleteam wiki のワークフローページにあります。
local 環境では、docker stats を実行し続けると、どのコンテナが実行中で、いつ起動・停止されているかを確認できます。これにより、以下のコマンドに使用するコンテナ名も取得できます。
ステージ2コンテナのログを表示するには、コンテナの stdout(および Docker が stdout と stderr を統合するため stderr)を tail します:
docker logs --follow [コンテナ名]
これらのログをファイルにも送信する場合:
docker logs --follow [コンテナ名] |tee output.log$(date '+%Y-%m-%d_%T')
ターミナルで表示せずにログをファイルに送信する場合:
docker logs --follow [コンテナ名] > output.log$(date '+%Y-%m-%d_%T')