AWS環境でAquaを導入するハンズオンをやってみた

こんにちは。 枡川です。
コンテナセキュリティ系の機能が盛りだくさんなAqua Enterpriseについて学ぶため下記ハンズオンを実施しました。
Application Modernization with Aqua
EKS環境でのセットアップやCodePipelineとの連携方法などをざっと学ぶことができますよ!

画像引用: ハンズオン内のModule1の説明資料より

前提・注意点について

本記事における検証においては、Aqua社から提供いただいたトライアルアカウントを利用しています。
ハンズオンを実施する際もAqua Enterpriseのライセンスが必要となるためご注意下さい。

ハンズオン

ハンズオン概要

本ハンズオンは下記3つのModuleに分かれています。

  • Module1(DevSecOps):GitHub+CodePipelineを使用したCI/CDパイプラインとAqua Enterpriseの連携
  • Module2(Secure ECR Registry):ECRにあるコンテナイメージのスキャン
  • Module3(Secure the Workloads):ランタイムポリシーについて

英語のテキストで所要時間は2時間程度と記載されています。
2時間弱で終わりましたが、eksctlでのクラスター作成に20分近くかかったりしたので実際に手を動かしていたのは1時間30分程度です。

一番良かった点

CI/CDパイプラインとAqua Enterpriseを連携させる際のイメージを掴むことができたことです。
単体のバイナリでイメージスキャンが可能なTrivy等と比較してCI/CDパイプラインに埋め込むのが大変かと思いましたが、CodeBuildでの設定は簡単でした。
コンテナでセットアップしている部分はTrivyより大変ですが、セットアップが完了してしまえば楽に組み込むことができます。
それにAqua Enterpriseであればイメージスキャン以外にも豊富な機能を使えるので、Trivy等と単純な比較はできないですね。
ちなみにハンズオン内で使用したbuildspec.ymlにおいてAqua Enterpriseでのスキャンに関係する部分は下記です。
./scannercliを使用してAqua Enterpriseでのスキャンを実行しています。

version: 0.2
phases:
  install:
    commands:
      -------------------------中略-------------------------
      - wget --quiet https://aqua-binary.s3.amazonaws.com/scannercli
      - chmod +x scannercli
  -------------------------中略-------------------------
  build:
    commands:
      - docker build --tag $REPOSITORY_URI:$TAG .
      - ./scannercli scan --host $AQUA_URL --user $AQUA_USER --password $AQUA_PASSWORD --local $REPOSITORY_URI:$TAG --no-verify --htmlfile aqua.html
      -------------------------中略-------------------------
  files: 
    - build-devsecops.json
    - aqua.html
  name: build-devsecops-${CODEBUILD_BUILD_NUMBER}

ハンズオンやってみた(Module1)

CI/CDパイプラインとAqua Enterpriseを連携するModule1について紹介します。
イメージスキャンをCI/CDパイプラインに埋め込む際はAqua側で設定が可能です。
Fail the Aqua step in CI/CDにチェックを入れることで、セキュリティ基準に満たない場合にビルドを失敗させることができます。
逆に言えばここにチェックが入っていない場合はAqua EnterpriseはCI/CDパイプラインを止めません。
CI/CDパイプラインを失敗させる脆弱性のレベル等も指定することができます。

実際にAqua Enterpriseでのスキャンを組み込んでCodePipelineを実行してみました。
実行結果からAqua Enterpriseでのスキャン時にビルドが失敗していることを確認できます。

スキャン実施時に検出された脆弱性情報を記載したHTMLファイルを生成することもできます。
Aquaのコンソールまで見にいかなくても脆弱性情報を確認できます。

もちろんAquaのコンソールでもCI/CDの途中で実施されたスキャンの結果を確認することができます。

ハンズオンやってみた(Module3)

Aqua Enterpriseではランタイムポリシーを設定することができ、ポリシーによってコンテナの動作を制御・制限することができます。
ランタイムポリシーは豊富な機能がありますが、一部を試すことができました。
ランタイムポリシーの設定画面は下記になります。

たとえば、Block Unregistered ImagesはAquaでスキャンしていないイメージの実行を防止することができます。
イメージスキャンを通さずにコンテナを実行しようとすると下記のようにブロックされます。

最後に

Aqua Enterpriseは機能が豊富なので何から試して良いか迷いますが、最初の一歩として取り組みやすいハンズオンだと感じました。
Aqua Enterpriseの導入を考えている方は是非試して見て下さい!