CloudFormationテンプレートをデプロイ前にセキュリティチェック!Checkov(+Bridgecrew platform)のハンズオンをやってみた

こんにちは。 枡川です。

Iacテンプレートのセキュリティチェックを行うOSSであるcheckovについてハンズオンで試してみました。
セキュリティについて意識しようと思っても、いざ何を気をつければ良いかと言われるとなかなか難しいと感じます。
Bridecrew社が提供しているプラットフォームも合わせて使用することで作成したテンプレートのセキュリティチェックが非常に捗りそうです!

checkovとは?

Iacテンプレートを静的に解析してセキュリテイチェックを行うOSSです。
CloudFormation、AWS SAM、Terraformのテンプレートだけでなく、Dockerfileなどもスキャン可能です。
開発時にクラウドセキュリティを支援するためのプラットフォームであるBridgecrewと簡単に連携することが可能です。
(checkov自体がBridgecrew社が管理するプロジェクトとなります)
下記AWS Partner Network Blogでも紹介されていますね。

checkovのリポジトリは下記です。

pythonで開発されており、pip経由でダウンロードできます。

pip3 install checkov

macの場合はhomebrew経由でもインストール可能です。

brew install checkov

インストールしたら-fでファイル名を指定してスキャンできます。

checkov -f hoge.yml

チェック項目はポリシーとして定義されていますが、使用可能なポリシーのリストは下記コマンドで参照可能です。

checkov --list

-cオプションで指定すれば特定のポリシーのみのチェックも可能です。

ハンズオンを実施することでBridgecrewと連携させてダッシュボード等を確認したり、Codeシリーズで構築したパイプラインに組み込んだりすることができます。
時間の無い方は上記で簡単なチェックだけしてみても気づきがあると思います。

ハンズオン

ハンズオンは下記リンク先です。

ハンズオンで構築するパイプラインを図にしてみました。

Bridgecrew社がセキュリティリスクを埋め込んだテスト用テンプレートとしてcfngoatを提供しています。
適当なテンプレートを使用して試すことも可能ですが、セキュリテイリスクを埋め込んだサンプルテンプレートまで用意してくれているのでハンズオンがとてもおすすめです!

ハンズオン構成

ハンズオンは下記で構成されます。

  1. DevSecWhat?
  2. CloudFormation Overview
  3. Prerequisites
    AWSアカウントの用意、Bridgecrewのサインアップ
  4. Module - Scan
    簡単なスキャンをCloud9で実行してBridgecrewのダッシュボードで確認
  5. Module - Automate
    Codepipeline + Codebuildで作成したパイプラインへの連携
  6. Module - Fix
    Bridgecrewダッシュボードを使用していかにしてセキュリテイリスクを減らしていくか
  7. Module - Trace
    Yorの紹介
    ※一貫性のあるタグを追加するのに役立つOSSです。
    このツールの紹介は別記事でしようと思います。
  8. Conclusion
  9. Cleanup

CheckovとBridgecrewダッシュボードの連携

まず、Bridgecrewのサインアップを行います。
Googleアカウント連携やGithubアカウント連携も使用可能です。 サインアップ後、APIキーを取得することができます。
CLI実行時に--bc-api-keyでAPIキーを指定すればBridecrewプラットフォームと連携可能です。
APIキーを設定してCloud9からcfngoatをスキャンしてみます。
コマンド実行後に違反しているポリシーについて指摘されます。

Guideとして表示されているリンクを参照することで指摘事項の詳細を確認できます。
APIキーを使用して連携させたので、Bridgecrewのダッシュボードを見てみます。

チェック内容ひとつひとつの詳細についてもチェック可能です。

下記ではSSHを0.0.0.0/0に開放するなと言われています。

EBSを暗号化しなさいと注意してくれています。
この場合は暗号化を有効化するための書き方まで指摘してくれています。

パイプラインへの統合

CodeBuildとの連携については、BridgecrewのIntegrationのステップに沿って行うと簡単に連携可能です。
APIキーを発行してbuildspec.ymlの設定まで指示通り行えば完了します。
checkovはJunitXmlでのテスト結果出力に対応しているため、それらをCodeBuildのレポートに渡す所まで設定してくれます。
ハンズオンではセキュリティ上不備があるとみなされてパイプラインが失敗します。
テスト結果のレポートも出力されています。
buildspec.yml内でAPIキーを設定していれば、Bridgecrewのプラットフォームとも連携可能ですし、連携させずに使用することも可能です。

まとめ

テンプレートをデプロイする前にセキュリティチェック可能なcheckovとBridgecrewのハンズオンがあったのでやってみました。
セキュリティリスクを埋め込んだサンプルテンプレートも用意してくれているためちょっと試してみたい方には非常におすすめです。
IaCに一貫性のあるタグを追加するのに役立つOSSとしてYorも紹介されていたのでこちらも触ってみようと思います!