はじめに
ここでは、Amazon Inspector に新しく追加された Amazon Inspector Code security と Amazon CodeGuru Security, Amazon Q Developer について比較していきたいと思います。
それぞれの特徴を簡単に
先にそれぞれの特徴を自分なりに簡単に纏めてみます。
ポイントはどのタイミングで実行したいのかと、どの程度の内容を検出し、簡単に対処できるかが選定のポイントかと思います。
Amazon Inspector Code security | Amazon CodeGuru Security | Amazon Q Developer | |
---|---|---|---|
タイミング | プッシュ、プルリクエスト、マージリクエスト時 オンデマンド スケジュール |
パイプライン統合 IDE とノートブックの統合 |
ローカル開発時 |
特徴 | Amazon Inspector Code security の脆弱性データベースについての記載は見つからなかったが、従来の Amazon Inspector と同じなら Amazon Inspector 脆弱性データベースの検索。 検出結果の画面は従来の Amazon Inspector と同等。 検出される項目が多いと、対応が大変。 |
機械学習(ML)と自動推論を組み合わせた SAST ツール。 検出される項目は多くなく限定的。 |
検出だけでなく AI の提案により修正まで可能。 最新の脅威情報を取得できていない。 コード品質などに関連した指摘は 6 〜 8 割程度。 |
料金 | 東京における APN1-Code-Repository-Scan-SCA のリソース評価 1 件あたり 0.18 USD | パブリックプレビューで無料 | Amazon Q Developer 無料利用枠 Amazon Q Developer Pro 19 USD/月(1 ユーザーあたり) |
Amazon Inspector Code security とは
- Amazon Inspector に 3 つのCode security 機能が追加
- ソースコードの静的スキャン (SAST)
- 依存関係・OSS 脆弱性スキャン (SCA)
- **Infrastructure as Code スキャン (IaC) **
何が検出できるようになったかは文字通りですので、細かいことは記載しません。下記の AWS Blog を一読することをお勧めします。
サポートされている言語
サポートされている言語は更新などもあると思いますので、随時 AWS ドキュメントを確認すると良いと思います。
スキャンのタイミング
- 変更ベース (プッシュ、プルリクエスト、マージリクエスト時)
- オンデマンド
- スケジュール
スキャン結果
設定は今回、
- SAST,SCA,IaC 全てのスキャンを対象
- プルリクエスト,マージリクエスト時にスキャン
とするようにしています。
全体のスキャン結果は以下の通りです。
個別のスキャン結果は以下の通りです。
SAST,SCA,IaC が対象になり、Amazon Inspector のコンソール上で運用担当者全員が確認可能な点は良さそうです。
ただし、ぱっと見既存の Amazon Inspector と表示のされ方は変わらない印象です。
そのため、検出される項目が多く対応に苦慮される場合は「抑制ルールを作成」したりするなど工夫する必要がある点は既存の Amazon Inspector と変わらないようです。
Amazon CodeGuru Security によるスキャン
Amazon CodeGuru Security は機械学習(ML)と自動推論を組み合わせた SAST ツールです。
統合サービス
Amazon CodeGuru Security を次のサービスと統合して、コードの脆弱性スキャンを開始できます。
-
パイプライン統合
- GitHub or GitHub Enterprise
- Bitbucket パイプライン
- GitLab
- AWS CodePipeline
- AWS CLI
-
IDE とノートブックの統合
- IDE プラグイン
- ノートブック
-
コンテナと Lambda ベースの統合
- Amazon Inspector
設定方法
今回は AWS CodePipeline と統合しました。設定方法は Amazon CodeGuru Security の画面から以下の通り確認できますので、詳細は割愛しますが、いくつか補足します。
上記の画像、ステップ 1 の CloudFormation で作成されるCodeGuruSecurityCodebuildAccessRole
に CodeBuild が Artifact へアクセスするための s3:GetObject
権限が必要です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::<S3バケット名>",
"arn:aws:s3:::<S3バケット名>/*"
]
}
]
}
CodePipeline が上記画像、ステップ 1 の CloudFormation で作成された CodeBuild プロジェクトへ アクセスするために"codebuild:StartBuild","codebuild:BatchGetBuilds"
権限を CodePipeline の IAM ロールに追加する必要があります。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"codebuild:StartBuild",
"codebuild:BatchGetBuilds"
],
"Resource": [
"arn:aws:codebuild:ap-northeast-1:1234567890:project/CodeGuruSecurity",
"arn:aws:codebuild:ap-northeast-1:1234567890:project/CodeGuruSecurity/*"
],
"Effect": "Allow"
}
]
}
最終的に作成した Pipeline は以下の通りです。Source と Build の間に、Security というステージで作成しました。
スキャン結果
上記の通り検出されたのは 1 件でした。
では、どのようなものが検出されるのかなど Amazon CodeGuru Security について次の項目以降で少しだけ整理しておきたいと思います。
サポートされている言語
サポートされているプログラミング言語は何ですか?
CodeGuru Security は現在、Java、Python、JavaScript、TypeScript、C#、CloudFormation、Terraform、Go、Ruby のスキャンをサポートしています。
検出される種類
CodeGuru セキュリティはどのような種類の問題を検出しますか?
CodeGuru セキュリティは、オープンワールドワイドアプリケーションセキュリティプロジ ェクト (OWASP) の上位 10 件の問題、共通弱点列挙 (CWE) の上位 25 件の問題、ログインジェクション、シークレット、AWS API と SDK の安全な使用を検出します。
Amazon Q Developer による /review
Amazon Q Developer の chat の画面で /review
と打つと結果が返されます。
画面左下では重要度毎の集計結果が表示されています。
画面左上では検出結果のサマリーが表示されます。
画面左上で検出された適当な Issue をクリックすると画面右上に各検出結果の詳細が表示されます。ここでは、View Details | Explain | Ignore | Ignore All
(詳細を表示 | 説明 | 無視 | すべて無視) を選択でき、単に検出だけでなくどこをどう修正したらいいかまでを AI が提案してくれる点がポイントかと思います。
ただし、検出結果は Amazon Inspector Code security と異なりました。これは想定通りです。おそらく、Amazon Q Developer は最新の脅威情報を取得できないことと、他の方の記事にもよるとコード品質などに関連した指摘は 6 〜 8 割程度ということでした。