Aqua Enterpriseを使用して、コンテナイメージに適切なラベルの付与を強制してみた

こんにちは。枡川です。
Aqua Enterpriseを使用して、指定したラベルを付与していない場合にパイプラインが失敗するように設定してみました。
これはLabel Requiredと呼ばれるポリシーを使用することで実現可能です。
コンテナイメージに適切にラベルを付与することで、イメージの管理者やビルドに使用したソースコード等を明確にすることが可能です。
社内ガイドライン等でラベルの付与を義務付けている場合、Aqua Enterpriseを使用して簡単に強制することができます。

前提・注意点について

本記事における検証においては、Aqua社から提供いただいたトライアルアカウントを利用しています。
コンテナイメージや、セットアップ用のドキュメントなどは、公式ドキュメントアクセス用のアカウントが必要となりますのでご留意ください。

セットアップについて

パイプラインとは別にAqua Enterprise自体のセットアップが必要です。
EC2にDockerをインストールしてセットアップしたり、ECS Fargateを使用したりできます。
詳細な内容は下記ブログを参照下さい。

シナリオ

下図のような単純なパイプラインを想定します。
GitHubへのpushをトリガーにして、ビルドとECRへのpush、ECSへのデプロイを実施するものになります。
CodeBuild内で下記のように専用CLIを使用してAqua Enterpriseでのイメージスキャンを実施します。

./scannercli scan --host $AQUA_URL --user $AQUA_USER --password $AQUA_PASSWORD --local $REPOSITORY_URI:$TAG --no-verify --htmlfile aqua.html

CodeBuild内でのAqua Enterpriseの呼び出しについては、下記ブログおよびブログ内で紹介しているハンズオンにより詳細な記載があります。

やってみた

Aqua EnterpriseのImage Assurance Policyに移動して、イメージスキャン用のDefaultポリシーを編集します。
この中でFail the Aqua step in CI/CDにチェックがついていることを確認します。
+ボタンでLabels Requiredを追加して、必要なラベルを定義します。
KeyとValueのセットで指定することもできますし、Valueを空欄にすることでそのKeyのラベルがついていること自体を強制することができます。
今回はOCIの事前定義されたラベルを付けてみます。
設定を終えてパイプラインを実行すると、CodeBuildの中でスキャンを実行するコマンドが失敗判定されていることがわかります。
Aquaのコンソールを見に行くとFailedとされており、どのラベルが必要なのかも指摘してくれています。
再度下記をDockerfileに追加してパイプラインを実行します。

LABEL org.opencontainers.image.authors="Kentaro Masukawa <kentaro.masukawa@mail>"

今回はパイプラインが成功し、Aqua Enterpriseのコンソールでもcompletedと表示されました。

まとめ

コンテナイメージのラベルは適切に付与することでトレーサビリティを上げることができるため、積極的に活用するべきだと思います。
一方で、無くても動くために忘れがちになので、仕組みで強制していくのも面白いなと思いました。