NetSkope 環境下の Docker Build について
NetSkope が導入されている環境では安心感がある一方で、ソフトウェアエンジニアの仕事をしていると場合によっては業務が困難になってしまうことがあるのもまた事実だと思います。新しい端末のセットアップや新規サービスの開発のための環境を整えたりという場合だけでなく、既存サービスで使っているライブラリの更新など、そのタイミングは日常的に訪れます。
そんな中で TypeScript を使うプロジェクトのコンテナ環境を整理する必要が生じたので、その際に NetSkope とうまく付き合っていくために調べたことや行ったことなどを記します。他の環境でも参考になれば幸いです。
背景
今どきの開発現場ではどんなプログラミング言語を使っていてもいろんなパッケージをダウンロード・インストールすることが多いと思いますが、 TypeScript をはじめとする Node.js のプロジェクトも npm でもりもりとパッケージをインストールします。NetSkope 導入環境下で Dockerfile 内で npm install を書いているとパッケージによっては証明書のエラーが起こります。また場合によっては curl や wget で何かをダウンロードする際にも証明書のエラーが起こることがあります。本稿ではこれらの問題を解消する方法を記します。
NetSkope と証明書
いきなり答えに辿り着きますが、 NesSkope の公式ドキュメントにコマンドラインツールや開発ツールを調整して NetSkope による SSL の遮断に対応する方法が記されています。
CA証明書のパスはそれぞれ以下となっています。
macOS : /Library/Application Support/Netskope/STAgent/data/nscacert.pem
Windows : %ProgramData%\Netskope\STAgent\data\nscacert.pem
そこにも書かれている通り、このファイルだけではダメでいくつかのファイルを結合しなければならない場合もあるようですが、自分はその必要は無かったのでそちらについては割愛します。
利用するツールごとにどうやって設定をするかということが表にまとめられていますが、 Node.js の場合は NODE_EXTRA_CA_CERTS という環境変数に、 curl の場合は CURL_CA_BUNDLE という環境変数に、 wget の場合は --ca-certificate オプションに CA 証明書を指定しておけば良いとのことです。
より具体的にどうしたか
証明書のコピー
コンテナ環境を使用する際に実行するシェルスクリプトを用意して、その中に以下のような処理を書きました。macOS の場合と Windows で WSL2 を使っている場合のみサポートするようにしましたが、他の環境でも適当に合わせられるのではないでしょうか。
if [ ! -f ./nscacert.pem ]; then
if [ "$(uname)" = "Darwin" ]; then
cp "/Library/Application Support/Netskope/STAgent/data/nscacert.pem" .
elif uname -a | grep -qi "microsoft"; then
cp /mnt/c/ProgramData/netskope/stagent/data/nscacert.pem .
else
echo "サポートされていないOSです"
exit 1
fi
fi
Dockerfile 内で使用する
...
# CA 証明書をホストからコンテナにコピー
COPY ./nscacert.pem /etc/ssl/certs/nscacert.pem
# Node 用設定と使用
ENV NODE_EXTRA_CA_CERTS=/etc/ssl/certs/nscacert.pem
RUN npm ci
...
# curl 用設定と使用
ENV CURL_CA_BUNDLE=/etc/ssl/certs/nscacert.pem
RUN curl https://example.com/foo.tar.gz
...
# wget で使用
RUN wget --ca-certificate=/etc/ssl/certs/nscacert.pem \
https://example.com/bar.tar.bz2
...
証明書は Git 管理の対象外としておく
.gitignore に nscacert.pem を追加しておきます
おわりに
コロナ禍でリモートワークが進むもオフィス回帰が進んでいるとも聞きます。リモートでも安心して仕事ができるような環境が確保される方がいいと思うので、 NetSkope が公式に情報を出してくれているのは助かります。