Amazon CodeGuru Securityを用いて、TerraformのDevSecOpsを実現する

AWS

2024.4.19

Topics

はじめに

こんにちは、Shunです。

皆さん、Terraformのデプロイ時にセキュリティチェックは行っていますか?
多くの人は「terraform fmt」や「terraform validate」で基本的な構文チェックを行った後、セキュリティの設定値の確認は目視で行っているのではないでしょうか。

今回は、CodeGuru Securityを使用してTerraformのコードに静的解析を施し、DevSecOpsを実現する方法を紹介します。

想定読者

  • AWSのセキュリティに興味がある方
  • DevSecOpsに興味がある方
  • CodeGuru Securityに興味がある方

本記事で取り扱う内容

  • CodeGuru Securityの導入方法
  • CodeGuru Securityの検出結果の確認方法

本記事で取り扱わない内容

  • CodePipelineに紐づくリソースの説明と設定方法

CodeGuru Securityとは

概要

CodeGuru Securityは、機械学習と自動推論を活用してコードの脆弱性を特定し、修正推奨を提供するセキュリティツールです。
このツールは統合開発環境やCI/CDプラットフォームに容易に統合可能で、リアルタイムでの脆弱性検出と自動修正が可能です。

参考: Amazon CodeGuru Security

過去の記事でCodeGuru Reviewerをご紹介しておりますが、CodeGuru Securityとは異なるサービスです。

関連記事
Amazon CodeGuru Reviewerによる静的解析(SAST)をやってみた

CodeGuru Security は CodeGuru Reviewer とどう違うのですか?
CodeGuru Security は、CodeGuru Reviewer の再設計および再設計されたバージョンです。 CodeGuru Security は、CodeGuru Reviewer 用に開発された検出器に加えて、数百の新しいセキュリティ検出器を使用してコードをスキャンします。 CodeGuru Security には、アプリケーションのセキュリティ体制の監視に役立つ脆弱性追跡やメトリクス ダッシュボードなど、多くの追加機能も含まれています。
出典: CodeGuru Security は CodeGuru Reviewer とどう違うのですか?

両方のサービスを使用して感じた違いは、
CodeGuru Reviewerがリポジトリをスキャンするのに対し、CodeGuru SecurityはAPIベースでスキャンを行うという点です。

対応言語

CodeGuru Securityは、以下の言語での脆弱性検出が可能です。

料金

CodeGuru Securityは現在プレビュー版として無料で提供されています。(2024年4月12日現在)

引用: Amazon CodeGuru の料金

構成図

構成は以下の通りです。

今回実装する構成の基本的な考え方については、過去の記事で紹介しています。

関連記事
AWS CodePipelineでTerraformパイプラインを実装する

前提

  • TerraformのCI/CDがCodePipelineで組まれていること

Terraformのパイプラインを構築がまだの方は、以下の記事をご覧ください。

関連記事
Terraform を運用するについて考える ~第2回 Terraformを始める~

環境構築

1. CodeGuru Securityの設定

CodeGuru Securityから、[セキュリティ] > [統合] > [AWS CodePipelineと統合] を選択します。

CloudFormationテンプレートから、CodeBuildプロジェクトを作成します。

以下は、CodeBuildプロジェクトへデフォルト登録されているbuildspec.ymlです。
/usr/app/codeguru/command.pyが脆弱性のスキャンを実行しています。

version: 0.2
phases:
  build:
    commands:
      - SCAN_NAME=$(echo $CODEBUILD_INITIATOR | sed 's/\//-/g')
      - python /usr/app/codeguru/command.py --source_path . --aws_region ap-northeast-1 --output_file_prefix codeguru-security-results --scan_name $SCAN_NAME
      - cat codeguru-security-results.sarif.json

2. CodePipelineへCodeGuruステージの追加

CloudFormationでデプロイしたCodeGuru SecurityをBuildステージの前に追加します。
追加するには、既存のCodePipelineの「編集」を選択します。

ソースステージとビルドステージの間にSASTステージを定義します。

SASTステージは、以下のように設定を行います。

  • アクション名: 任意の名前
  • アクションプロバイダー: AWS CodeBuild
  • 入力アーティファクト: SourceArtifact
  • プロジェクト名: [CodeGuru Security](CloudFormationから立ち上がったCodeBuild)

これでCodePipelineへCodeGuru Securityを組み込むことができました。

3. CodeGuru Securityを確認

実際に、CodeGuru Securityからどのような推奨項目が見ることができるのかを確認してみます。

適当なコードをpushしてCodePipelineを実行し、SASTステージを進行させます。
以下のように、SASTステージがソースステージの次に進行します。

数分でSASTステージは完了します。

CodeGuru Securityの推奨事項を見てみましょう。
推奨事項は、CodeGuru Securityのスキャンから確認することができます。

何件脆弱性が検出され、それがどのくらいの重要度やどの程度解決できたかを一覧で確認することが可能です。

検出結果からは、どのような脆弱性が見つかったかが表示されます。

検出結果を確認してみると、IAMのアクション許可が * で定義されていることが引っかかっています。
どのtfファイルの何行目かまで表示してくれるのは非常に便利です。

以下では、アクセスキー、シークレットキーをハードコーディングしていることが検出されています。

CodeGuru Securityでは、他にも多くのTerraformの脆弱性を検出することが可能です。

■検出可能な脆弱性一覧
Terraform detectors

■検出例
* Avoid hardcoded AWS access keys and secrets credentials
* Unencrypted EBS Volumes
* Public READ bucket ACL

CodeGuru Securityをデプロイステージ前の承認ステージで確認することにより、デプロイするコードのセキュリティを向上させることができます。

まとめ

本記事では、CodeGuru Securityを用いたDevSecOpsの実装方法をご紹介しました。
CodeGuru SecurityはAWSが提供するサービスであるため、非常に簡単にCodePipelineに組み込むことができました。
これにより、Terraformの実装に一貫したセキュリティチェックを実現することが可能になります。

CodeGuru Securityは、現在は無料で利用可能かつ容易に導入できるため、この機会にCodeGuru Securityを試してみてください!

最後まで読んでいただきありがとうございます!

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

Shun

Google Cloud Partner Top Engineer 2025、2024 AWS All Cert、ビール検定1冠

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら