皆さん、こんにちは!
今回は、AWSから登場したばかりのホットな新サービス「CodeGuru Security」のプレビュー版を触ってみたので、その導入手順と、ちょっと「おや?」と思った点まで、まるっとご紹介しちゃいます!
「コードの脆弱性診断、面倒だな〜」「CI/CDパイプラインにどう組み込めばいいの?」って思っている方は、ぜひ最後まで読んでみてください。
想定読者
- AWS CodePipeline をバリバリ使ってCI/CD環境使っている方
- コード脆弱性診断、できれば自動でサクッとやりたいって方
- 3rdPartyでコード脆弱性診断している方
結論から言うと...めちゃくちゃ便利になりそう!
CodeGuru SecurityをCodePipelineに組み込むとデプロイ時に、コードのセキュリティスキャンを自動でやってくれます。発見された脆弱性は、CodeGuru Securityのコンソール上から確認でき、
これまで、私たちは3rdPartyの診断ツールを利用していて、情報の統合に課題感がありましたが、これが解決していきそうと感じています。
ただし、プレビュー版なので、現時点では「あ、ここ、注意しないとハマるかも!」というポイントもいくつかありました。利用方法、メリットに加えて、その辺りも正直に記載していきます。
CodeGuru Securityって、そもそも何者?
「CodeGuru Security」は、AWSが提供する静的アプリケーションセキュリティテスト(SAST)サービスです。簡単に言うと、コードを実行することなく、そのコードの中に潜んでいるセキュリティ上の脆弱性を見つけ出してくれるAI(機械学習)を活用したツールになります。
開発の早い段階(コードを書いている時やプルリクエストを作成する時など)で脆弱性を検出でき、商用環境へのリリース前に修正できるようになるのが大きなメリットです。イタチごっこで日々更新されていくセキュリティ対応を迅速にプロダクトに反映できるようになります。
実際にCICDパイプラインに組み込んでみた
ステップ1: CodeBuild プロジェクトをサクッと作成しちゃおう!
CodeGuru Securityは、CodeBuild(多分EC2)を使ってセキュリティスキャンを実行してるようです。
公式ホワイトペーパーのセットアップ手順がかなり簡素なので心配になりましたが、本当にその通りにやればできました。
- CodeGuruのサービスページでSecurity→統合のページにアクセスする。
- 統合ページにある「AWS CodePiplelineと統合」をクリック。
- 統合ページにある「CloudFormation でテンプレートを開く」ボタンをクリック
- CloudFormationの「スタックのクイック作成」画面が開くので、「スタック名」には、任意の名前を入力する。例えば
CodeGuruSecurity-Integration
とか。 - パラメーターは特にいじる必要はないので、そのまま進んで保存する。
これで、プルリクエスト作成時にリポジトリを検出し、セキュリティスキャンを実行するための権限がCodeGuru Securityに付与され、コードベースのスキャンができるようになります。
ステップ2: CodePipelineにセキュリティスキャンアクションの追加
次に、いま使っているCodePipelineに、CodeGuru Securityのスキャンアクションを追加します。
- AWS CodePipelineのコンソールへアクセスする
- CodeGuru Securityを組み込みたいパイプラインを選んで、「編集」をクリック。
- ビルドステージの後とか、デプロイの前とか、好きなところに「アクショングループを追加」をクリックして、ステージ名を入力します(例:
CodeGuru Security
) - 追加したステージ内の「アクションの追加」をクリックして、設定する。
- 設定が終わったら「完了」をクリックして、最後にパイプライン全体の「保存」も実行する。
これで、パイプラインが動くたびにCodeGuru Securityが自動でスキャンを実行してくれます!素晴らしい!
スキャン結果を見てみよう!
パイプラインが実行されると、追加したテージでCodeGuru Securityのスキャンが動きます。
スキャン結果はCodeGuru Securityコンソールの「検出結果の概要」ページで確認できます。
試しに、わざと脆弱性のあるコードを仕込んでみたら、ちゃんと「未解決の重要な検出結果」として2件見つけてくれました!すごい!
脆弱性の詳細画面にいくと、どのような脆弱性か、どの部分で検出されたかが確認できます。
今回は、現在のURLをそのまま参照するXSSに関する脆弱性を埋め込みました。
CodeGuru ReviewerとCodeGuru Securityの違い
AWSには、コード分析をしてくれる「CodeGuru」というサービスがありますが、「CodeGuru Reviewer」と「CodeGuru Security」って名前が似ていて、ちょっと混乱しませんか?それぞれの役割を簡単に解説します。
-
AWS CodeGuru Reviewer:
- これは主にコードの品質に着目したサービス。
- 「ベストプラクティスに沿っているか」「パフォーマンス上の問題はないか」「バグにつながるような書き方をしていないか」といった点を自動でレビューして、改善案を提案してくれます。
-
AWS CodeGuru Security:
- コードのセキュリティ脆弱性に特化。
- 「SQLインジェクションの脆弱性がないか」「クロスサイトスクリプティング(XSS)のリスクはないか」「安全でないAPI呼び出しをしていないか」といった、セキュリティ上の問題点を専門的に検出してくれます。
つまり、
- CodeGuru Reviewer は「より良いコード」を書くためのサポート。
- CodeGuru Security は「より安全なコード」を書くためのサポート。
という違いがあります。どちらも静的コード解析ですが、焦点を当てる領域が異なるので、両方を活用することで、高品質なコード維持できるのかなと思います。
ハマったポイント
使ってみて「あれ?」っと思ったポイントがいくつかあったので、共有しておきます。
-
CodeGuru SecurityのCloudFormationスタックは1つしか作れない!?
- これ、結構驚いたんですが、どうやらCodeGuru SecurityのCloudFormationスタックは、同じAWSアカウント内に複数作ろうとすると失敗しちゃうみたいです。
- 最初は「よし、リポジトリごとにスタック作っちゃおう!」と思って進めたら、2つ目以降がロールバックしちゃって、「え、なんで!?」ってなりました。CodeGuruから自動作成するCfnは一意のようなので、命名規則などは注意する必要ありそうです。私は一度削除し直しました;;
- 現状では、1つのアカウントで1つのスタックとして利用するのが良さそうです。今後の正式リリースではこの辺りも改善されることを期待。
-
「buildspec オーバーライドの定義」チェックボックスの罠
-
脆弱性を検知したあとの通知や対処のSNS連携などが未提供
- ここは今後アプデに期待しますが、今だと脆弱性が検知された場合にCodeGuruSecurityのページまでいかないと確認することができないです。
- 今後は脆弱性が検知されたら即時通知を出すや、CICD自体をRollBackするなどのAWSサービス間の連携範囲も拡大していくとより使いやすいサービスになるかなと思います。
最後に
プレビュー版のCodeGuru Securityですが、CI/CDパイプラインにセキュリティスキャンを自動で組み込めるのは、開発チームにとって本当に大きなメリットだと感じました!コードの品質チェックだけでなく、セキュリティの品質も早い段階で自動で確認できるのは、開発プロセス全体の効率と安全性をグッと上げてくれますよね。
現在プレビューなので無料で利用できますが、今後の料金体系も気になるところです。
まだプレビュー版ということもあり、いくつか制約が見られましたが、今後の正式リリースに向けて、さらに使いやすくなることを期待しています!