Sysdig Secureを使ってECRイメージスキャン試してみた

2020.01.21

こんばんわ、札幌のヨシエです。

昨今コンテナの需要が高まっている中でセキュリティ面に懸念を持つ方向けにコンテナイメージのスキャンツールを試しております。

今回はSysdig Secureを使ってECRに保存されているコンテナイメージのスキャンを試してみました。

事前準備

IAMユーザーの用意

SysdigがECR内のコンテナイメージを参照するためにはIAMユーザーが必要になります。

今回は検証目的のため、AmazonEC2ContainerRegistryReadOnlyポリシーを使用してIAMユーザーを作成しました。

※ポリシーを大きくしたくない場合、個別に対象レジストリへアクセスできるポリシーが良いと思います

コンテナイメージレジストリ(ECR)を用意

脆弱性スキャンを実施するコンテナイメージを用意します。 以前のブログで使用したapache-struts2のコンテナイメージを配置したレジストリを用意しました。 piesecurity/apache-struts2-cve-2017-5638 - Docker Hub

また、コンテナイメージのチェックしやすくするために検証として以下のようなDockerfileを使用します。

FROM piesecurity/apache-struts2-cve-2017-5638

RUN apt-get -y update \
    && apt-get -y upgrade \
    && apt-get -y install git apache2 \
    && apt-get -y clean \
    && rm -rf /var/lib/apt/lists/*

ENV AWS_ACCESS_KEY_ID AKIXXXXXXXXXXXXXXXX
ENV AWS_SECRET_ACCESS_KEY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

ざっくりやっている事としては、上記のコンテナイメージにapt-getにてインストール済みパッケージのアップデートとgit,apacheをインストール、後片付けをやってた後にアンチパターンとされるIAMユーザーのAccessKeyとSecretAccessKeyを環境変数として渡しております。

実際に設定を追加してみる

以下のURLからsysdig Secureへアクセスします。

Secure DevOps Platform for Cloud-Native | Sysdig

最初にImage Scanning >> Image Scanning Policies >> Policiesを選択します。

ここではリポジトリ追加設定を行った後にどのようなスキャン内容をチェックするのか指定する箇所になりますので非常に重要な部分となります。

デフォルトでは最上部のDefaultPolicyが選択されており、これ以外にはDockerfileのベストプラクティスやNIST,PCI準拠の監査を行うポリシーがプリセットされております。

manage-scanning-policies

今回は準備段階で記載したようにAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYが環境変数で渡されていた際に検知出来るようにポリシーを追加するためにAdd Policyを押下します。 ※DefaultPolicyで既に定義されておりますが検知テストのため追加しております。

以下の画面が表示されるので、それぞれの項目を入力してSaveを押下します。

  • Name
    • ポリシー名を記載
  • Description:ポリシーの説明内容を記載
    • Rulesは複数の構成要素があるので本記事ではかいつまんで記載します。
  • Gate
    • Dockerfile(Dockerfile内のENV命令を指定するため)
  • Trigger
    • Instruction
  • Parameter
    • check:like
    • Instruction:ENV
    • Value:AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY

scanning-policy-gates-and-triggers

Saveが正常に完了すると以下のようにポリシー一覧へ追加ポリシーが表示されます。

次にPolicy Assignmentsを開いて、追加したポリシーをイメージスキャンで使用する設定を追加します。

Image Scanning >> Image Scanning Policies >> Policy Assignmentsを選択します。

以下のような画面が出力されるため、左上部のAdd Policy Assignmentを選択してAWS_ECR_Policyを追加後にSaveを選択します。

Image Scanning >> Registry Credentialsを選択します。

Add Registryを選択します。

ECRの必要情報を入力し、Saveを選択

この入力作業によって、リポジトリの設定は完了となります。

以上で一通りの設定は完了しました。 最後にコンテナイメージのスキャンに触れます。

Image Scanning >> Scan Resultsを選択します。

チェック対象のコンテナイメージ一覧が表示されます。 今回はCodePipelineのようなCI環境を導入していないため、ECRへのイメージプッシュ時にチェックを行うことは出来ませんが、右上のScan Imageを押下することでイメージチェックを行うことが可能です。

イメージスキャンが完了すると、以下のようなSummaryが確認できるようになります。 Summary画面からはどのような脆弱性が確認できているかを一目で確認できるようになっており、左部分の各種項目を選択することでイメージ内のOSレイヤーやアプリケーションレイヤーで報告されている脆弱性情報が見えるようになっております。

Breakdown部分では、Policyによって検出されたコンテナイメージの注意点が表示されており、どのような注意点が検出されたかを確認することが可能です。

最後に

今回はTrendMicroのSmartCheckに続きまして、sysdig secureを試してみました。
ポリシーを予め用意することで様々なDockerfileの内容をチェックする点は非常によく出来ており、イメージによって都度設定するわけではなく共通設定として管理出来るので 組織として守るべきポリシーを維持出来る点が使いやすい部分かと思いました。