エージェントインストールガイド
概要
ここでは、Docker環境でContrastのPythonエージェントを使用する方法について紹介します。 本項を参考にご利用の環境に合わせた方法で、DockerのPythonアプリケーションにContrastエージェントをインストールし、必要に応じてチーム内で共有してください。
本項では主に、Docker上のPythonアプリケーションにContrastエージェントを組み込み、Contrastでセキュリティデータを確認するための最も一般的な方法について説明します。
また、DjanGoatというサンプルのPythonアプリケーションに関する情報も記載しています。自分のアプリケーションで作業をする前に、このサンプルアプリケーションで手順を確認してみるのも良いでしょう。DjanGoatのサンプルコードへのリンクは本項の最後にあります。サンプルコードを使用して、Docker環境のDjanGoatにContrastエージェントをインストールしてアプリケーションを検査してみてください。
主な手順
アプリケーションのDockerfileを更新する:
Contrast Pythonエージェントを追加
Contrast Pythonエージェントの設定を指定
環境の認証資格情報を追加
アプリケーションでエージェントを有効にして起動する:
コンテナ化したアプリケーションでContrastを有効にして実行・動作を確認
サポート対象のテクノロジ
作業を開始する前に、ご利用のPythonのツールや環境がContrastでサポートされていることを確認してください: Pythonエージェントのサポート対象テクノロジ
本項は以下を前提としております:
DevOpsの実践とDockerの仕組みに関してある程度の知識があること
Contrastエージェントの PyPIリポジトリ へアクセスできること
アプリケーションにPythonエージェントを組み込みContrastで検出結果を確認したことや知識があること: Pythonエージェントのインストール
手順
まず、アプリケーションのDockerfileを編集します。
1) Contrast Pythonエージェントを追加
ここでは、DockerイメージにContrastエージェントを追加して、基本の設定を行う方法について2つ紹介します。最適な方法をお選びください。
方法 1: Dockerfileに追加
この方法では、アプリケーションのDockerfileにContrastエージェントを追加します。最新のエージェントを追加できます。
RUN pip install contrast-agent
もしくは、特定のバージョンを対象とすることもできます。
RUN pip install contrast-agent=3.3.1
例:Dockerfileの設定
FROM python:2.7-buster # Install packages RUN apt-get update -qq RUN apt-get install -y build-essential # Add application components ADD ./app /myapp/app # Install application and dependencies RUN make install # Add Contrast Agent and YAML Configuration ADD ./contrast_security.yaml /myapp/contrast_security.yaml RUN pip install contrast-agent # Run the Application ENTRYPOINT ["make","run"]
方法 2:requirements.txtに追加
この方法では、requirements.txtファイルにエージェントを追加します。手順は、以下のとおりです。
アプリケーションのrequirements.txt ファイルにContrastエージェントを追加します。必要に応じて、エージェントのバージョンを指定してください。
requirements.txtからのインストールが行われていない場合は、Dockerfileに追加します。
例:requirements.txtにエージェントを追加する
pip install -r requirements.txt
ミドルウェアを設定
各フレームワークの固有の設定については、Contrastドキュメントを参照: ミドルウェアの設定
例:Djangoでsettings.pyを更新する
MIDDLEWARE = [ 'contrast.agent.middlewares.django_middleware.DjangoMiddleware' ]
2) Contrastエージェントの設定を指定
Contrastエージェントの設定を指定するために、さまざまな値を使用できます。設定する値には有効になる優先順位があります。各レベルは、上位のレベルが指定された場合に無効になります。優先順位は以下のとおりで、最も優先されるのが1です。
企業の基準(例、期限切れのライセンスは、assess.enableより優先)
環境変数の値
YAML設定ファイルの値
Contrast UIで指定した値
デフォルトの値
優先順位の詳細については、以下を参照してください: エージェントの設定の優先順位
設定する値を組み合わせて利用することをお勧めします。
共通の設定 はYAMLファイルに保存してベースイメージに配置
認証情報やアプリケーション固有 の設定は環境変数を使用
共通の設定
以下は、基本となる設定をYAMLファイルに指定する方法です。ベースイメージに追加して、必要に応じて環境変数で上書きすることもできます。
手順は以下のとおりです。
サービスとログの基本的な設定を追加します。
agent: logger: path: /proc/1/fd/1 level: INFO progname: Contrast Agent security_logger: path: /proc/1/fd/1 level: ERROR service: host: localhost port: 30555 logger: path: /proc/1/fd/1 level: INFO application: path: /myapp
編集したYAMLファイルをベースイメージのDockerfileにコピーします。
コンテナ内の以下のいずれかの場所にコピーします:
<approot>/contrast_security.yaml
/etc/contrast_security.yaml
/etc/contrast/python/contrast_security.yaml
その他のオプションについては、Contrastのドキュメントを参照: YAML設定
例:
COPY WORKSPACE /contrast_security.yaml approot/contrast_security.yaml
アプリケーション固有の設定
アプリケーション固有の設定には、アプリケーションのコンテナで環境変数を指定します。以下は、一般的によく使用される設定オプションです。注:アンダースコアは2つ付けてください。
詳細については、Contrastのドキュメントを参照: Pythonエージェントの設定
アプリケーション名 :Contrastサーバに報告されるアプリケーション名を指定 CONTRAST__APPLICATION__NAME
アプリケーショングループ :このアプリケーションを関連付けるアクセスグループをオンボード時に指定(注:アプリケーションのアクセスグループは、先にContrastで作成しておく必要あり) CONTRAST__APPLICATION__GROUP
アプリケーションのタグ :アプリケーションにタグを指定 CONTRAST__APPLICATION__TAGS
サーバ名 :Contrastに報告されるサーバ名を指定 CONTRAST__SERVER__NAME
サーバの環境 :アプリケーションを実行する環境を指定、 このオプションで有効な値:development、qa、production CONTRAST__SERVER__ENVIRONMENT
サーバのタグ :サーバにタグを追加 CONTRAST__SERVER__TAG
3) 環境の認証資格情報を追加
PythonエージェントがContrastサーバにデータを送信するには、APIのURLとサーバに対するエージェントの認証情報が必要です。このデータは機密情報となりますので、取り扱いにはご注意ください。
CONTRAST__API__URL=https://app.contrastsecurity.com/Contrast CONTRAST__API__API_KEY={Your API KEY} CONTRAST__API__SERVICE_KEY={Your Service key} CONTRAST__API__USER_NAME={Your agent user}
APIの値(エージェントキー)は、Contrast UIで取得するか、PythonエージェントのYAMLファイルをダウンロードすることで取得できます。詳細は、Contrastのドキュメントを参照: エージェントキーの検索
4) アプリケーションでエージェントを有効にして起動
これで、Contrastを有効にしてアプリケーションイメージを実行できます。アプリケーションの起動時にContrastエージェントが組み込まれて解析が始まり、Contrastサーバに脆弱性が報告されます。
Contrastが実行されているかを確認するには、コンテナのログをチェックしてください。次のようなメッセージが表示されるはずです。
web_1 | Django version 1.11.1, using settings 'pygoat.settings' web_1 | Starting development server at http://0.0.0.0:8000/ web_1 | Quit the server with CONTROL-C. web_1 | 2020-08-28T14:43:02+0000 [Contrast Security] (base_middleware.py:log_initialize:541) - INFO - Initializing Contrast Agent DjangoMiddleware [id=140453305847952] web_1 | 2020-08-28T14:43:02+0000 [Contrast Security] (base_middleware.py:log_initialize:544) - INFO - Contrast Python Agent Version: 3.3.1 web_1 | web_1 | 2020-08-28T14:43:02+0000 [Contrast Security] (configuration_utils.py:load_yaml_config:59) - INFO - Loading configuration file: /myapp/contrast_security.yaml web_1 | 2020-08-28T14:43:02+0000 [Contrast Security] (settings_state.py:init:74) - INFO - Contrast Agent finished loading settings. web_1 | 2020-08-28T14:43:02+0000 [Contrast Agent] (service_client.py:start_service:90) - INFO - Attempted to start bundled Contrast Service for application DjanGoat-Test. web_1 | 2020-08-28T14:43:02+0000 [Contrast Agent] (service_client.py:start_service:94) - INFO - If socket already exists at ('127.0.0.1', 30555), will attempt to connect to that instead web_1 | 2020-08-28T14:43:02+0000 [Contrast Agent] (service_client.py:initialize_and_send_messages:132) - INFO - Will communicate with Contrast Service web_1 | 2020-08-28T14:43:02.406Z INFO Initializing working directory {"dir": "/myapp"} web_1 | 2020-08-28T14:43:02.406Z INFO Config: loading file {"path": "contrast_security.yaml"} web_1 | setting logger level to: INFO web_1 | 2020-08-28T14:43:02.407Z INFO contrast-service: BUILD {"progname": "Contrast Service", "version": "2.11.1", "buildTime": ""} web_1 | 2020-08-28T14:43:02.407Z INFO Building timer for orphan request cleanup {"progname": "Contrast Service", "cleanupMs": 5000} web_1 | 2020-08-28T14:43:02.407Z INFO Building timer for orphan app cleanup {"progname": "Contrast Service", "time": 5000} web_1 | 2020-08-28T14:43:03.384Z INFO Creating New Application Server {"progname": "Contrast Service", "uuid": "c7189c0d-fd0b-4c12-98d7-bc8ce7d33ba7", "serverName": "Docker", "clientId": "DjanGoat-Test-8", "pid": 10} web_1 | 2020-08-28T14:43:03.908Z INFO setting new server features for context {"progname": "Contrast Service", "uuid": "c7189c0d-fd0b-4c12-98d7-bc8ce7d33ba7", "serverName": "Docker"} web_1 | 2020-08-28T14:43:03.908Z INFO starting event scanner {"progname": "Contrast Service", "report": {}} web_1 | 2020-08-28T14:43:03.910Z INFO Creating new application {"progname": "Contrast Service", "uuid": "c7189c0d-fd0b-4c12-98d7-bc8ce7d33ba7", "serverName": "Docker", "appName": "DjanGoat-Test", "language": "Python", "clientId": "DjanGoat-Test-8", "pid": 10} web_1 | 2020-08-28T14:43:03.910Z INFO AppCreate: creating and initializing new application {"progname": "Contrast Service", "uuid": "c7189c0d-fd0b-4c12-98d7-bc8ce7d33ba7", "server_name": "Docker", "app_name": "DjanGoat-Test", "app_lang": "Python", "client_id": "DjanGoat-Test-8", "pid": 10}
ソースコードのサンプル:DjanGoat
以下のGitHubのリポジトリにあるサンプルアプリケーションを参考にしてください。Docker環境のPythonアプリケーションにContrastエージェントを組み込むための手順や設定を理解するのに役立ちます。 https://github.com/marklacasse/DjanGoat/tree/docker
この記事は役に立ちましたか?
はい
いいえ
0人中0人がこの記事が役に立ったと言っています
他にご質問がございましたら、リクエストを送信 してください