Docker環境でのPythonエージェント

  • 更新

エージェントインストールガイド 

 

概要

ここでは、Docker環境でContrastのPythonエージェントを使用する方法について紹介します。 本項を参考にご利用の環境に合わせた方法で、DockerのPythonアプリケーションにContrastエージェントをインストールし、必要に応じてチーム内で共有してください。

本項では主に、Docker上のPythonアプリケーションにContrastエージェントを組み込み、Contrastでセキュリティデータを確認するための最も一般的な方法について説明します。

また、DjanGoatというサンプルのPythonアプリケーションに関する情報も記載しています。自分のアプリケーションで作業をする前に、このサンプルアプリケーションで手順を確認してみるのも良いでしょう。DjanGoatのサンプルコードへのリンクは本項の最後にあります。サンプルコードを使用して、Docker環境のDjanGoatにContrastエージェントをインストールしてアプリケーションを検査してみてください。

 

主な手順

アプリケーションのDockerfileを更新する:

  1. Contrast Pythonエージェントを追加
  2. Contrast Pythonエージェントの設定を指定
  3. 環境の認証資格情報を追加

アプリケーションでエージェントを有効にして起動する:

  1. コンテナ化したアプリケーションで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にエージェントを追加する

contrast-agent==3.3.1
pip install -r requirements.txt

 

ミドルウェアを設定

各フレームワークの固有の設定については、Contrastドキュメントを参照:ミドルウェアの設定

例:Djangoでsettings.pyを更新する

MIDDLEWARE = [
  'contrast.agent.middlewares.django_middleware.DjangoMiddleware'
]

 


2) Contrastエージェントの設定を指定

Contrastエージェントの設定を指定するために、さまざまな値を使用できます。設定する値には有効になる優先順位があります。各レベルは、上位のレベルが指定された場合に無効になります。優先順位は以下のとおりで、最も優先されるのが1です。

  1. 企業の基準(例、期限切れのライセンスは、assess.enableより優先)
  2. 環境変数の値
  3. YAML設定ファイルの値
  4. Contrast UIで指定した値
  5. デフォルトの値

優先順位の詳細については、以下を参照してください:
エージェントの設定の優先順位

設定する値を組み合わせて利用することをお勧めします。

  • 共通の設定はYAMLファイルに保存してベースイメージに配置
  • 認証情報やアプリケーション固有の設定は環境変数を使用

共通の設定

以下は、基本となる設定をYAMLファイルに指定する方法です。ベースイメージに追加して、必要に応じて環境変数で上書きすることもできます。

 

手順は以下のとおりです。

  1. サービスとログの基本的な設定を追加します。
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

 

  1. 編集した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人がこの記事が役に立ったと言っています

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