Tripwire for DevOpsには、常に新機能が追加されています。最近では、Dockerコンテナに使用されるのと同様のTripwire for DevOpsワークフロー内で、Amazonマシンイメージ(AMI)の脆弱性スキャンを実行する機能が追加されています。このブログ記事では、AMIの作成方法と、Tripwire for DevOpsを使用してそれらの脆弱性を監視する方法について説明します。
Amazon Web Service(AWS)は、Amazonマシンイメージのメカニズムを使用して、よりモノリシックなアプリケーションスタックにいくつかのDevOpsプラクティスを提供します。AMIは、AWSに格納されるテンプレートであり、AWSクラウド内で新しいオペレーティングシステムインスタンスを起動するために使用されます。AMIは、多くの仮想化テクノロジーで使用されるインフラストラクチャーと仮想マシンのファイルフォーマットに相当するものです。すべてのアプリケーションやサービスが簡単にコンテナ化できるわけではありません。モノリシックなアプリケーションやサービスで継続的デリバリーを実現するための1つの方法として、AMIが使用されます。
Tripwire for DevOpsを使用すると、Amazonマシンイメージの脆弱性を、自分の環境内でインスタンス化する前のビルド時に評価することができます。そうすることにより、どのタイミングにおいても、脆弱性が存在するリスクが排除されます。
AWSにAMIをデプロイする最初のステップは、アプリケーションスタックに適したテンプレートを作成することです。新しいAMIを作成する方法は、他の一般的な仮想化フォーマットをAMIに変換する方法をはじめ、いくつか存在します。
Tripwireで使用しているツールの1つに、AMIの作成と設定を行えるHashiCorp社のPackerがあります。デモを行うために、私はオンラインで見つけたPackerテンプレートを使用して、ApacheウェブサーバーのAMIを作成しました。AMIは、次のコマンドでビルドします。
PackerのAMI作成コマンドを実行すると、AWS内で新しく作成されたAMIに対してAMI IDが付与されます。Tripwire for DevOpsでは、このようなAMI IDを使用します。
新しいAMI ID(この例ではami-00dd51d2)を使用して、Tripwire for DevOpsによるスキャンをリクエストできます。このプロセスは、Dockerコンテナをスキャンする場合と同様に、JenkinsやTeamCityなどのビルドツールで自動化できるように設計されています。
twdevopsコマンドラインツールで、Tripwire for DevOpsによるAMIのスキャンをリクエストできます。
Amazonマシンイメージのスキャン結果は、Tripwire for DevOpsのユーザーインターフェイスで表示することも、ビルドツール内で自動のクオリティゲートプロセスに使用することもできます。
以下にTripwire for DevOpsに表示されるスキャン結果の例を示します。ここでは、例を示すために、AMIビルドプロセスにディレクトリトラバーサルの脆弱性も付加しています。
Tripwire for DevOpsによるスキャン結果は、標準のJunit形式で取り込むことができるため、ビルドツールで直接利用することもできます。クオリティゲートの設定を行うことで、デフォルトのセキュリティ基準やお客様用にカスタマイズした基準に基づいて、ビルドジョブの合格/不合格の判定を行うことができます。
以下はJenkinsのテスト結果です。脆弱性が見つかったため、ビルドが失敗したことが示されています。
Tripwire for DevOpsは、AmazonマシンイメージまたはDockerコンテナイメージを利用しているユーザーが、ビルドプロセスの初期段階で、イメージや仮想マシンの脆弱性を評価することを可能にし、継続的デリバリープラクティスを実施するユーザーのセキュリティを強化します。
DockerコンテナとAWSマシンイメージを本場環境で使用する前に、脆弱性を排除しておく方法についてはこちらをご覧ください。