ちょっと話題の記事

コンテナセキュリティの決定版「Aqua Container Security Platform」を試してみた(インストール〜イメージスキャン編)

コンテナワークロードのセキュリティ対策の重要性がますます高くなる昨今、aqua社のContainer Security Platformを試す機会があったので、まずはその概要とクイックスタートによるインストール手順をまとめてみました。
2019.02.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

「コンテナセキュリティって、決定打無いよなぁ…」

プロダクション環境でのコンテナ利用がどんどん普及するにつれ、そのコンテナ環境のセキュリティ対策も今まで以上に重要になってきています。

特に、AWSのFargateなどに代表されるホストOSがないコンテナ実行環境においては、従来のホストOSインストール型セキュリティソフトが使えないということもあり、よりコンテナ環境に特化したセキュリティソリューションが求められているのが現状です。

そんな昨今、弊社ではコンテナセキュリティソリューションとして一歩先を行くAqua Container Security Platformを試す機会をいただきました。

この記事では、Aqua Container Security Platformの概要と、最初の基本的なセットアップから、コンテナイメージのスキャン結果の様子をお届けします。

ちょっと触ってみたけど、これ、なんか、ごっつ機能豊富ですごそうな匂いがします。お値段も結構しますが。

Aqua Container Security Platformシリーズ * (本記事)コンテナセキュリティの決定版「Aqua Container Security Platform」を試してみた(インストール〜イメージスキャン編) * (近日公開)コンテナイメージスキャンのさらなる活用 * (近日公開)CI/CDツール(CodePipeline)への統合 * (近日公開)機械学習によるコンテナ動作制御 * (近日公開)コンテナネットワーク接続情報の可視化

(祭) ∧ ∧
 Y  ( ゚Д゚)
 Φ[_ソ__y_l〉     コンテナセキュリティ マツリダワッショイ
    |_|_|
    し'´J

Aquaコンテナセキュリティプラットフォームとは?

Container Security - Aqua's Enterprise Security Platform

正式名称はAqua Container Securiy Platform

CI/CDの保護、実行時アプリケーションの保護、セキュリティ脅威の検出とブロック、可視化、およびコンプライアンスの監査の提供など、クラウドネイティブなコンテナアプリケーションの開発〜運用における様々なセキュリティ対策を総合的に提供します。

全体アーキテクチャーは公式のこちらの画像がわかりやすい(公式サイトより引用)。

動作コンポーネントについては、こちらを参考に。

今回は、クイックスタートによる導入となるので、以下の2種類のインストールとセットアップを解説します。

Aqua Server

Aquaセキュリティプラットフォームのメインとなるサーバー。UIコンソールの提供、イメージスキャン結果の確認、各Aqua Enforcer(後述)からのスキャン結果の受領などを実施する。上の図では、CSP All-In-One Containerに対応。

Aqua Enforcer

コンテナ実行環境にインストールするエージェント。ホストOSインストール、もしくはFargateなどで利用するSideCarコンテナの2種類があり、コンテナセキュリティ対象とするホストやコンテナに対して、エージェントとして登録して利用。上の図では、aqua-enforcerに対応。

記事の前提「トライアルアカウントでの検証」

今回の記事は、Aqua社と交渉の上、検証用のトライアルアカウントを利用しています。コンテナイメージや、セットアップ用のドキュメントなどは、公式ドキュメントアクセス用のアカウントが必要となりますのでご留意ください。

「Aqua CSP All-In-One」コンポーネントのインストール

サーバーにAqua CSP All-In-Oneコンポーネントをインストールしていきます。今回はAmazon Linux2(EC2)を利用し、インスタンスタイプはとりあえずミニマムのt3.microとします。Dockerイメージなどをダウンロードするため、ディスク容量は30GBほど確保しておきます。

Dockerをインストールし、システム起動時のdocker自動起動を有効化。

$sudo yum install -y docker
〜〜中略〜〜
$sudo systemctl start docker.service
$sudo usermod -a -G docker ec2-user
$sudo systemctl enable docker

Dockerのバージョンを表示し、インストールを確認。

$ docker --version
Docker version 18.06.1-ce, build e68fc7a215d7133c34aa18e3b72b4a21fd0c6136

事前に提供されている、Aquaユーザー名とパスワードでAqua社提供のリポジトリにログイン。

$ docker login registry.aquasec.com
Username: <username>
Password: <password>
〜〜中略〜〜
Login Succeeded

ログイン成功したら、CSPサーバー用のイメージをダウンロード。

$docker pull registry.aquasec.com/all-in-one:3.5
〜〜中略〜〜
Digest: sha256:9156ba9451004b4795a708ec42bae3e52a52b5cb83235c95af361b8092d82fde
Status: Downloaded newer image for registry.aquasec.com/all-in-one:3.5

ホストOS上でデータベースを動作させるためのボリュームを作成。

docker volume create csp-database

以下のコマンドで、CPSコンテナを機動します。ホストOS側のポート8080をコンテナポート8080にマッピングしてます。

docker run -d -p 8080:8080 -p 3622:3622 -v /var/run/docker.sock:/var/run/docker.sock -v csp-database:/var/lib/postgresql/data registry.aquasec.com/all-in-one:3.5

ブラウザから、以下のアドレスにアクセス。

http://<HOST-IP>:8080

以下の画面が表示されたら、最初のインストールは完了です。ちょっと興奮。

管理者用(administrator)のパスワードを入力し、次へ。

ライセンストークン入力画面が表示されるので、事前に発行されたトークンを入力し、次へ。

そうして、ダッシュボードが表示されたらOK!!まだ何も登録されてないので真っ白ですが、ここまで感無量といった感じです。よござんすな!

左側メニューにはダッシュボードの他「Images」「Workloads」「Functions」「Services」「Audit」といったメニューが並んでいます。

ここまでで、aqua CSPのメインサーバーのセットアップ完了です。

Aqua Enforcerのデプロイ

メインサーバーが起動したところで、一番最初に、Aqua Enforcerをデプロイします。

Aqua Enforcerとは

ホストOS(Linux or Windows)で稼働するコンテナで、そのホストOS上で動作するコンテナの挙動やイメージの正当性、ランタイム制御、ネットワークポリシー設定などを行う、aqua CSPにおけるメインコンポーネントとなります。

デフォルト状態では、Enforcerは一つも登録されておらず、defaultグループのみが登録されている状態です。

右側のスリードットをクリックすると、「Copy Install Command」が表示されるので、クリックすると例として以下のコマンドがコピーされます。

docker run --rm -e SILENT=yes -e AQUA_TOKEN=1234-5678-9012-3456 -e AQUA_SERVER=<gateway_ip_address>:<gateway_port> -e AQUA_LOGICAL_NAME="Default"  -e RESTART_CONTAINERS="no" -v /var/run/docker.sock:/var/run/docker.sock registry.aquasec.com/enforcer:3.5.1

上記コマンド中、gateway_ip_addressgateway_portは、AQUAServerへ接続するためのAqua Gatewaysの情報を入力する必要があります。

サーバー管理画面の左側メニューで「Systems」→「Aqua Gateways」をクリックすると、Aqua Gatewaysの情報が表示されます。この中のPublic Addressを、上記コマンド中に設定します。また、EnforcerからServerへの接続はデフォルトでポート番号3622を利用するので、AWSであれば該当のセキュリティグループを開放しておく必要があります。

docker runが無事完了した後、コンソール上のEnforcers画面をリロードし、そこに、Enforcersが登録されていればOKです。

ここまで、無事に完了しましたでしょうか。最低限のセットアップは完了していますが、これだけでは味気ないので、コンテナセキュリティ製品としては必須と言って良い、コンテナイメージの脆弱性スキャンを実施してみます。

リポジトリのイメージの脆弱性スキャンの概要

Aquaコンテナセキュリティ(以下、Aqua CSP)のメイン機能の一つに、コンテナイメージの脆弱性スキャンがあります。

  • コンテナイメージの脆弱性の検証
  • 脆弱性発見時の通知
  • 実行中イメージの停止措置実行

コンテナイメージの脆弱性スキャン方法は、以下の3種類。

  • 手動スキャン
  • 事前にAqua CSPに登録したレジストリーのコンテナイメージの手動スキャン
  • 自動スキャン
  • レジストリーの変更など、事前設定したトリガーにより実行される自動スキャン
  • プログラムによるスキャン
  • REST APIによるイメージスキャンの実行

ここでは、一番基本となる、手動スキャンをDockerHubに対して実施してみます。

イメージスキャンの方法

Aqua Serverにログインし、左側メニューから「Images」をクリックします。初期状態では、イメージが登録されていないので、右側の「ADD IMAGES」ボタンをクリックします。

Restry Search画面が起動するので、Docker.Hubを選択し、テキスト入力欄にmongo:latestと入力し、「Add」ボタンをクリックします。

すると、イメージ一覧に指定したイメージが登録され自動的に脆弱性スキャンが起動し、しばらく待つとスキャン結果が表示されます。

イメージスキャン結果の評価

Aqua CSPにおいて、セキュリティ評価は以下の観点で実施されます。

  • 脆弱性
  • 機密情報
  • マルウェア

前段では手動でイメージスキャンを実施しました。Aqua CSPでは、mongo:latestにいくつかの脆弱性をみつけましたが、ここでは、その評価方法をもう少し詳細に解説します。

イメージの評価結果は、このようなグラフでも確認できます。この場合、リスクレベルは以下で分類されています。

  • 0個、High(赤)
  • 1個、Middium(オレンジ)
  • 6個、Low(黄色)
  • 4個、Negligible(青)

イメージ名をクリックすると、上部に脆弱性情報の詳細を確認できるメニューが表示されます。

Vulnerabilitiesには、脆弱性情報の概要、各脆弱性情報の詳細を確認可能です。

例として、CVE-2016-4074の脆弱性の詳細を確認してみると、脆弱性の概要と対策方法、および米国脆弱性情報データベース(NVD)へのリンクや、関連ベンダーページへのリンクも含まれており、脆弱性の対策を取る上で、有用な情報が満載です。

Resourcesタブではその脆弱性が含まれている関連リソース、Sensitive Dataではイメージ中に含まれる機密情報の有無、Malwareではマルウェアの有無などが確認できます。

次回予告「Aqua CSPを利用した、さらに踏み込んだイメージスキャン方法」

ここまで駆け足でしたが、Aqua CSP(Container Security Platform) All-In-OneコンポーネントのEC2へのインストールと、ホスト側エージェントのAqua Enforcerのインストール、および手動によるコンテナイメージの脆弱性スキャンを実施しました。

ここまでは基本機能だけでしたが、Aqua CSPにはその他にも様々な機能があるので、シリーズ化して順にその様子をお届けできればと思います。

それでは、今日はこのへんで。濱田(@hamako9999)でした。

おまけ

Aquaでは無料で使えるコンテナイメージの脆弱性スキャンサービスであるaquasecurity/microscannerも提供しています。これも、ごっつ便利です。

こちらで、使ってみた様子をお届けしているので、気になる方はこちらも合わせて参照ください。

無料で脆弱性検査!Dockerfileに4行追加で導入できるmicroscannerを試してみた