コンテナを使用してNode.jsエージェントをインストール
インストールを行う前に
本項では、Dockerを例として、コンテナ化されたアプリケーションにContrast Node.jsエージェントをインストールするための一般的な手順について説明します。
コンテナや関連ソフトウェアの仕組みを基本的に理解している必要があります。実際の手順は、ご利用の環境に合わせて調整してください。
エージェントをインストール
以下のいずれかの方法で、Nodejsエージェントをインストールします。
アプリケーションの開発時にエージェントを追加 (推奨)
この方法の場合、アプリケーションの
package.json
でエージェントを取り込みます。次のコマンドを使用して、パイプラインやコンテナイメージにエージェントを追加します。
npm install @contrast/agent --no-optional
Dockerfileにエージェントを追加
アプリケーションのイメージを別々に管理したい場合(Contrastエージェントを使用する場合と使用しない場合)は、コンテナのビルド時にエージェントを追加します。
次のコマンドを使用して、既存のDockerfile、またはアプリケーションのイメージをベースイメージとして使用する新規のDockerfileにエージェントを追加します。
npm install @contrast/agent --no-optional
注意 バージョン4.xのエージェントのProtect機能が、サポート終了(EOS)になりました。フル機能を備えたバージョン5.xのNode.jsエージェントが、2023年後半にリリースされるまで、Node.jsアプリケーションを保護する必要のあるユーザ向けに、Protectのみの新しいエージェントがリリースされています。 アプリケーションのルートディレクトリから次のコマンドを実行することで、npmからProtectのみのエージェントの最新バージョンをインストールできます。 npm install @contrast/protect-agent または、yarnを使用する場合、次のコマンドを実行してエージェントをインストールします。 yarn add @contrast/protect-agent |
エージェントを設定
Node.jsエージェントをDockerなどのコンテナにデプロイしたアプリケーションで設定する場合は、以下の手順に従ってください(そうでない場合は、通常のNode.jsエージェントの設定を参照してください)。Node.jエージェントの設定には、設定した値が有効になる優先順位があります。
YAML設定ファイルを作成します。
作成したYAML設定ファイル(
contrast_security.yaml
)は、コンテナのファイルシステムにコピーされるように、アプリケーションのディレクトリに置いてください。YAML設定ファイルでは:
<YourURL>、<YourUserName>、<YourAPIKey>、<YourServiceKey>の箇所をご利用の認証情報に置き換えます。認証情報の検索については、こちらの説明を参照。
コンテナにインストールする場合の一般的なYAML設定ファイルは、以下のようになります。
api: url: <URLtoContrast> user_name: <YourUserName> api_key: <YourAPIKey> service_key: <YourServiceKey> agent: service: grpc: true assess: enable_lazy_tracking: false
以下のコマンドを使用して、ベースイメージにYAMLファイルをコピーします(この例では、
/app/contrast_security.yaml
はイメージ内のアプリケーションのベースディレクトリにあります)。COPY WORKSPACE/contrast_security.yaml /app/contrast_security.yaml
環境変数を使用して、アプリケーション固有の設定値を指定します。これらは、Dockerfile内でENV命令を定義するか、Docker runコマンドの実行時に
-e
オプションで指定することができます。 アプリケーション固有の値を設定するためによく使用される環境変数の一覧をご覧ください。
実行して確認
Node.jsエージェントのリライタCLII(バージョン4.x以降より利用可)を使用する場合は、
RUN
命令を追加して、contrast-transpile
実行ファイルを呼び出すコマンドを指定します。そして、アプリケーションのエントリポイントを指定します。RUN npx -p @contrast/agent --no contrast-transpile index.js
npxコマンドがContrast Securityからのものであり、サプライチェーン攻撃を試みる悪意のある人物からではないことを確認するために、
-p @contrast/agent --no
オプションを使用することが重要です。-p
は、--package
の省略形で、@contrast/agent
パッケージにのみコマンドを使用するようnpxに指定します。--no
は、 非推奨となった--no-install
オプションの新しいオプション名で、 コマンドのバイナリが見つからない場合にnpmからインストールを行わないようnpxに指定します。npxコマンドを実行する前に、Contrastエージェントとnpxバイナリが正常にインストールされていることを想定しています。
アプリケーションを起動する際に、Contrastエージェントを先にロードしておく必要があります。通常は、これはDockerfileのCMD文で行いますが、
package.json
に定義したnpmスクリプトも使用できます。例えば、通常アプリケーションを次のように起動する場合:
CMD [“node”, “app”]
次のコマンドを使用すると、Contrastを有効にしてアプリケーションを実行できます。
CMD [“node”, “-r”, “@contrast/agent”, “app”]
エージェントが起動すると、YAML設定ファイルに記述されたエージェントの認証キーを使用してContrastサーバに接続します。
ヒント
エージェントの認証情報を保護するために、Docker secretを利用して、デプロイ時に環境変数として渡すこともできます。例:
docker run -e CONTRAST__API_ -e CONTRAST__API__API_KEY=<value> -e CONTRAST__API__SERVICE_KEY=<value> -e CONTRAST__API__USER_NAME=<value> -e CONTRAST__SERVER__ENVIRONMENT=<value> image_with_contrast
コンテナのログのアクティビティをチェックして、Contrastが実行されていることを確認します。
例えば、ログアクティビティは以下のようになります。
@contrast/agent 2.16.8-------------------------------------- 2020-07-20T19:05:14.407Z INFO contrast-service: BUILD {"progname": "Contrast Service", "version": "2.8.1", "buildTime": ""} 2020-07-20T19:05:14.407Z INFO Building timer for orphan request cleanup {"progname": "Contrast Service", "cleanupMs": 5000} 2020-07-20T19:05:14.408Z INFO Building timer for orphan app cleanup {"progname": "Contrast Service", "time": 5000} 2020-07-20T19:05:14.450Z INFO Creating New Application Server {"progname": "Contrast Service", "uuid": "96299b72-f867-4354-b9c9-1eb23511cb8a", "serverName": "bc1bd6e5cd3a", "clientId": "1", "pid": 1} 2020-07-20T19:05:14.450Z WARN Failed to initialize secure client, falling back to insecure client {"progname": "Contrast Service"} 2020-07-20T19:05:15.473Z INFO setting new server features for context{"progname": "Contrast Service", "uuid": "96299b72-f867-4354-b9c9-1eb23511cb8a", "serverName": "bc1bd6e5cd3a"} 2020-07-20T19:05:15.474Z ERROR Error setting up CEF syslog {"progname": "Contrast Service", "err": "open /juice-shop/security.log: permission denied"} 2020-07-20T19:05:15.475Z INFO starting event scanner {"progname": "Contrast Service", "report": {}} 2020-07-20T19:05:15.486Z INFO Creating new application {"progname": "Contrast Service", "uuid": "96299b72-f867-4354-b9c9-1eb23511cb8a", "serverName": "bc1bd6e5cd3a", "appName": "juiceshop-guide", "language": "Node", "clientId": "1", "pid": 1} 2020-07-20T19:05:15.486Z INFO AppCreate: creating and initializing new application {"progname": "Contrast Service", "uuid": "96299b72-f867-4354-b9c9-1eb23511cb8a", "server_name": "bc1bd6e5cd3a", "app_name": "juiceshop-guide", "app_lang": "Node", "client_id": "1", "pid": 1} 2020-07-20T19:05:15.921Z INFO setting new application settings {"progname": "Contrast Service", "uuid": "96299b72-f867-4354-b9c9-1eb23511cb8a", "serverName": "bc1bd6e5cd3a", "appName": "juiceshop-guide", "language": "Node"} 2020-07-20T19:05:15.922Z INFO Setting session id on app context: {"progname": "Contrast Service", "uuid": "96299b72-f867-4354-b9c9-1eb23511cb8a", "clientid": "1", "appname": "juiceshop-guide", "applang": "Node", "apppath": "/juice-shop/package.json", "sessionid": "cd0b271e66974162bf5fcca8b32e37b1"} Entering main at /juice-shop/appinfo: All dependencies in ./package.json are satisfied (OK)...
注記
また、Dockerイメージの作成時にエージェントをインストールしたり、distrolessのNode.jsコンテナを使用してコンテナにインストールすることも可能です。
関連項目
Contrastサポートポータル:KubernetesでのNode.jsエージェント
Contrastサポートポータル:AWS FargateとContrastエージェント