以下の内容はhttps://techblog.techfirm.co.jp/entry/aws-codeguru-security-terraform-scanより取得しました。


【AWS】Amazon CodeGuru SecurityでTerraformコードをスキャン

[追記]サポート終了について

※※※Amazon CodeGuru Securityのサポート終了が発表されました※※※
docs.aws.amazon.com 2025年11月20日をもって、サポート終了となります。

はじめに

AWSでの機械学習系サービスの検証として、Amazon CodeGuru Securityを使ってみる機会がありました。

テックファームではIaCツールとして主にTerraformを使用しているため、新しく作成したTerraformコードを機械的にレビューできると開発スピードの向上につながるのではと考えました。
そこで、まずは身近なAWSでサービス提供されている、Amazon CodeGuru Securityを試してみることにしました。

この記事では、Amazon CodeGuru Securityを使って、TerraformコードのZipファイルスキャンを試した方法と、結果の表示などについてまとめています。
※検証を行った2025年5月時点の情報となります。

Amazon CodeGuru Securityとは

※Amazon CodeGuru Securityは現在プレビューリリースのサービスです。

Amazon CodeGuru Securityは、AWSが提供する静的アプリケーションセキュリティテスト(SAST)ツールです。
機械学習を使ったコードスキャンでセキュリティ脆弱性を検出し、修正方法の提案、修正完了までの追跡を行います。

Java、C#、CloudFormation、Terraformなどの言語に対応しており、APIによってIDEやGitHub、CodeCommitなどとの統合も可能です。

セキュリティ脆弱性として何を検出するのかについてですが、以下の記載がありました。

CodeGuru セキュリティは、オープンワールドワイドアプリケーションセキュリティプロジェクト (OWASP) の上位 10 件の問題、共通弱点列挙 (CWE) の上位 25 件の問題、ログインジェクション、シークレット、AWS API と SDK の安全な使用を検出します。

また、検出器ライブラリという検出対象のリストが公開されています。

https://docs.aws.amazon.com/codeguru/detector-library/

たとえばTerraformの項目を表示すると、以下のように「IAMパスワードの再利用制限」や「EBSボリュームの暗号化」などがスキャン対象になっていることが分かります。

Terraform検出器ライブラリページの一部のスクリーンショット

これらのスキャン対象に引っかかる記述がないかをスキャンしてくれるサービスということになります。
なお、記事執筆時点(2025年5月)では、検出器ライブラリの編集(追加や除外)はできませんでした。

スキャンしてみる

では、実際にAmazon CodeGuru Securityを使用したTerraformコードスキャンを試してみます。

スキャン対象

試験用のスキャン対象として用意したTerraformコードがあり、これには以下が含まれています。

  • VPCなどのネットワークリソース
  • 踏み台想定のEC2インスタンス

スキャン方法

コードスキャンのやり方はいくつかあるのですが、今回はもっともシンプルに実行できるzipファイルスキャンを行いました。
コードを固めたzipファイルをAWSマネジメントコンソール上からアップロードするだけの簡単操作です。

AWSマネジメントコンソールでCodeGuru > セキュリティ > スキャンを選択します。
CodeGuru画面のサンプル画像

新しいスキャンを作成を選択すると、zipファイルのアップロード画面に移ります。
ファイルを選択から対象のzipファイルを選択すると、スキャン名が自動で入りました。スキャン名とタグはお好みで編集してください。
スキャンを作成画面でアップロードファイルを選択し、スキャン名が自動入力されている

最後にスキャンを作成ボタンで、アップロードとスキャンが開始されます。
一覧画面に戻ると、作成したスキャンのステータスが進行中 > 完了になりました。
スキャンの一覧で、スキャン名と完了ステータスが表示されている

スキャン結果の確認

スキャン名を選択すると結果を確認できます。

上部にはリビジョン数やスキャン完了日時などが表示されます。
メトリクスタブでは未解決の検出結果数や重要度分布などが表示されます。
スキャン結果画面、メトリクスタブを表示

検出結果タブではスキャンされた脆弱性が重要度ごとに表示されます。
スキャン結果画面、検出結果タブを表示、4件の脆弱性が並んでいる

例として、CWE-311 - Unencrypted EBS Volumesの脆弱性を開いてみます。
まず、上部にこの脆弱性に対する説明が表示されています。また、検出器ライブラリへのリンクもあります。リンク先

Instances and Launch configurations with unencrypted EBS volumes is detected. Ensure that encryption should be implemented to enhance security of data stored in the launch configuration EBS.
(暗号化されていないEBSボリュームを持つインスタンスと起動構成が検出されました。起動構成のECSに保存されるデータのセキュリティを強化するために、暗号化を実装する必要があります。)

概要欄にはどのファイルで検出されたのかなどが表示されます。
そして、推奨される是正欄には、どう修正すればこの脆弱性を解消できるのかについて具体的なコード修正案が表示されます。
検出した脆弱性に対する詳細画面、概要と推奨される是正欄が表示されている

個人的にはかなり使いやすい表示だと思いました。脆弱性の情報はもちろん、どのファイルをどう修正すればよいかまで教えてくれるのはとても便利です。

脆弱性検出結果の追跡

Amazon CodeGuru Securityでは、脆弱性検出結果の追跡が可能です。
メトリクスタブなどで、検出されてからの経過日数や、解決済みの検出結果数を確認できますので、どのように表示されるのか試してみます。

上で確認したEBSボリュームの脆弱性に対して修正を行い、改訂版のスキャンを実施してみます。
スキャン結果画面の上部にある改定されたファイルをスキャンを選択し、修正したzipファイルを再度アップロードします。
スキャン結果画面の右上にあるボタンを表示

少し待って、再度ステータスが進行中 > 完了になったことを確認してから開いてみます。
メトリクスタブで解決済みの検出結果が1件に増え、解決率が上昇したことが確認できました。
スキャン結果画面、メトリクスタブを表示

検出結果タブでも、すべてのステータスで表示すると該当の脆弱性が「終了済み」となっています。
スキャン結果画面、検出結果タブを表示、1件の脆弱性が終了済みステータスになっている

このように、検出された脆弱性が修正されたのかをAmazon CodeGuru Securityの画面から追跡できます。
修正漏れを防げるため、追跡機能は必要になると思います。
一方、特定の脆弱性は対応しないと決めた場合でも、それを除外することはできないため、総数は管理しづらいかもしれません。

検出器ライブラリにない脆弱性を入れてみる

次に、検出器ライブラリにない脆弱性をコードに入れて、どのような動きになるか試してみました。
EC2のセキュリティグループで、インバウンドを「0.0.0.0/0」に解放するというコードに変更してみます。
この設定はCISベンチマークなどでは検出対象となっていますが、Terraform検出器ライブラリの検出対象にはありません。
Terraformコードのスクリーンショット、セキュリティグループのインバウンド記述を修正している

再度、改定されたファイルをスキャンから、スキャンを実行しました。
結果ですが、追加した脆弱性は検出されませんでした。
スキャン結果画面、検出結果タブを表示、脆弱性件数は変わっていない

この検証結果からは、検出器ライブラリに存在しない脆弱性は検知できないように見えます。
こちらで検出器ライブラリのカスタマイズはできないため、AWSによる拡充を待つしかなさそうです。

おわりに

Amazon CodeGuru Securityを使ってみた感想ですが、AWSアカウントがあれば使え、操作はシンプル、結果も分かりやすいので、導入しやすいテストツールかと思いました。
最近は生成AIのコードアシスタントでもセキュリティチェックまでやってくれるようですが、Amazon CodeGuru SecurityはAWSによって定義された脆弱性がチェックされるという点で違いがあるかと思います。

活用方法としては、生成AIに作成させたコードをスキャンし、最低限のセキュリティチェックを実現する、などを考えました。
脆弱性ライブラリにないものは検出できないようなので、Amazon CodeGuru Securityにすべてを任せるというよりは、とりあえず通してみるチェックという立ち位置がよいかと思います。

統合機能ではGitなどと連携して、コミット時にスキャンさせるようなことが可能のようです。
機会がありましたら、そのあたりも記事にしたいと思います。

※記事執筆時点(2025年5月)でプレビューリリース版のサービスとなります。機能などに大きな変更が入る可能性があるため、ご注意ください。

参考

  1. Amazon CodeGuru セキュリティ
    https://aws.amazon.com/jp/codeguru/
  2. Terraform detectors
    https://docs.aws.amazon.com/codeguru/detector-library/terraform/



以上の内容はhttps://techblog.techfirm.co.jp/entry/aws-codeguru-security-terraform-scanより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14