Amazon CodeGuru Securityを用いて、TerraformのDevSecOpsを実現する
はじめに
こんにちは、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プラットフォームに容易に統合可能で、リアルタイムでの脆弱性検出と自動修正が可能です。
過去の記事でCodeGuru Reviewerをご紹介しておりますが、CodeGuru Securityとは異なるサービスです。
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日現在)
構成図
構成は以下の通りです。
今回実装する構成の基本的な考え方については、過去の記事で紹介しています。
前提
- TerraformのCI/CDがCodePipelineで組まれていること
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に関するお役立ち情報を配信中!
Follow @twitterGoogle Cloud11冠、2024 AWS All Cert、ビール検定1冠
Recommends
こちらもおすすめ
-
Terraform で Amazon EC2 を複数台作成する
2022.4.7
-
AWSサービスをTerraformでコード化する:AWS Chatbot編
2024.3.11
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16