SPECIALIST

多様な専門性を持つNRIデジタル社員のコラム、インタビューやインサイトをご紹介します。

BACK

Amazon CodeGuru Reviewer のユースケースを考察

宇都宮 海斗

初めまして、NRIデジタルの宇都宮海斗です。

re:invent2020は皆さん楽しまれたでしょうか?今年も様々なサービスが発表されましたね。

そんな中、開発者向けのサービスであるAmazon CodeGuruに、新たな機能が追加されました。
今回はそんな新機能のうちの1つで、セキュリティ分析を行う「CodeGuru Reviewer Security Detector」に焦点を当て、Reviewer機能紹介からユースケースを考察していきたいと思います。

Amazon CodeGuruとは

まずは、Amazon Web Services ブログ1)Amazon Web Services ブログやAWS公式ドキュメント2)AWS公式ドキュメントを参考にサービスの説明に移ります。

Amazon CodeGuru はre:invent2019で発表され、2020/6/29にGA(generally available)となったAWS AIサービスに位置づけられるもので、機械学習のモデルによるコードレビューを自動的に行い、問題があると思われる部分や性能低下につながっている部分などを指摘してくれます。
またCodeGuruは下記2つの主要なコンポーネントから成り立っており、単体での使用が可能です。

  • 【CodeGuru Reviewer】
    プログラム分析と機械学習を使用して、コード内で見つけにくい潜在的な欠陥を検出し、改善のための提案を提供。
  • 【CodeGuru Profiler】
    ライブアプリケーションからランタイムパフォーマンスデータを収集し、アプリケーションのパフォーマンスを微調整するのに役立つ視覚化と推奨事項を提供。
引用:AWS DevOps Blog3)AWS DevOps Blog – Automating code reviews and application profiling with Amazon CodeGuru

Update ※re:invent2020にて発表された新機能

  • CodeGuru 【Python】のサポート
    CodeGuru を使用して Python で記述されたアプリケーションを改善できるようになりました。
    ※本リリース以前は、CodeGuru Reviewer は Java コードを分析でき、CodeGuru Profiler は Java 仮想マシン (JVM) で実行されるアプリケーションをサポートしていました。
  • CodeGuru Reviewer 用の【Security Detector】
    CodeGuru Reviewer 用の新しい検出機能セットで、セキュリティの脆弱性を特定し、コード内のセキュリティのベストプラクティスをチェックします。
  • CodeGuru Profiler 用の【Memory Profiling】

    時間の経過に伴うオブジェクトタイプごとのメモリ保持の新しいビジュアライゼーションです。
    これにより、メモリリークを検出し、アプリケーションによるメモリの使用を最適化することが容易になります。

Security Detectorとは

今回考察するSecurity Detectorを更に詳しくみていきましょう。
CodeGuru Reviewer Security Detector は、自動化された推論を使用して、すべてのコードパスを分析し、Java コードの奥深くにある潜在的なセキュリティ問題を検出します。これは、複数のメソッドやファイルにまたがっていたり、複数の操作のシーケンスが伴っていたりする場合でも有効です。
更に、Security Detector単体で作成できる為、部分的に導入することも容易です。
また、以下4つの機能からセキュリティ分析を行います。

  • 【AWS API security best practices】

    AWS API のセキュリティのベストプラクティスを確認。
  • 【Java crypto library best practices】

    Java暗号化ライブラリのベストプラクティスを確認。
  • 【Secure web applications】

    脆弱なハッシュ暗号化など、上位 10 個の Open Web Application Security Project (OWASP) カテゴリにおけるセキュリティの脆弱性を特定。
  • 【AWS best practices】

    KMS情報が外部公開されるような複合化のタイミングを識別できるなど、AWSセキュリティのベストプラクティスに準拠していることを確認。

※Pythonは、2020/12/25時点では未対応となっているので、ご注意ください。
※Reviewerの利用方式にはプルリクエスト(pull request)とリポジトリ分析(repository analysis)の2つがありますが、後者でのレビューを行う必要があります。

SetUp

  1. 開発しているソースを圧縮したzipファイルを作成。(ソースのビルドアーティファクト(jar,classファイル)を含む)
  2. AWSコンソールにて「リポジトリの分析 を作成(Code and security recommendations)」を選択。
  3. 上記2にて作成したS3に上記1で作成したzipファイルを格納し、「リポジトリの分析 を作成」を完了。
  4. AWSコンソール「コードレビュー」(リポジトリの分析)ページにて該当作成物を選択し、結果を表示。

Check

AWS DevOps Blog4)AWS DevOps Blog – Tightening application security with Amazon CodeGuruを参考に、動作を確認してみます。

まずは、前述した4つの観点のうち【AWS API security best practices】からです。

AWSのIDとKeyを直書きして情報保持させてみます。すると環境変数で持つよう忠告されます。
※セキュリティ項目でのレビューは右上に青いアイコンが付きます。

次は【Secure web applications】での動作を確認してみましょう。
Cookie情報をセキュアではない形で保持します。すると、セキュアな形で保持するよう忠告されます。
※cookie.setSecure(true)のような形で持つ必要があります。

CodeGuru Reviewerユースケース

ウォーターフロー一辺倒な開発からアジャイルを織り交ぜた開発に多くの企業が変わりつつあります。
その中で、コーディングやレビューを行うフレーズにおいて、大量のソースコードに対し、ビジネスロジックの検証や複数領域における専門知識を必要とする為、十分なコードレビュー人材の確保は多くの企業にとって課題となっているでしょう。

この課題に対し、Amazon CodeGuru Reviewer を活用することでコードレビューの負担を軽減し、無駄な時間を軽減できます。また、具体的にはプルリクエスト(pull request)方式とリポジトリ分析(repository analysis)方式の2つのレビュー方式をうまく使いこなすことが重要です。

プルリクエスト(pull request)では、開発のコードレビューをオンタイムで実施していく際に有効となる為、大量のソースに対し、第1レビューとしてReviewer を活用し、後続の第2レビューは人が懸念点のみに焦点を当てレビューするなど、最低限の品質向上を図る目的で使用するのが良いと思われます。

※プルリクエスト方式を使用する際に、プルリクエストのレビューをこのサービスのみに任せることは性能的に現状は避けた方が無難です。

一方で、リポジトリ分析(repository analysis)では、既存のリポジトリ(Codecommit,Bitbucket,Github…)の指定ブランチに対してレビューをかけることができる為、プルリクエスト(pull request)方式でのCodeGuru Reviewerを使う前にソースの潜在的な欠陥を解決する目的で使用したり、定期的なソース品質検査の目的で使用するなどが適していると思われます。

このように、適したタイミングでCodeGuruを使用することで公開前にコードの問題を発見し、作業時間の効率化を図ることが期待できるでしょう。

Security Detectorユースケース

同時実行性が高く、リソースリークや基本的文法など、様々なタイプの修正を実行できたAmazon CodeGuru Reviewerですが、Security Detectorが機能追加され、静的コード分析とMLを使用し、指定リポジトリに対してセキュリティ面に集中した専門性/信頼性の高い分析が可能となりました。

特に、セキュリティ診断を公開前に行う企業も多いかと思いますが、その診断で問題が発生した際には緊急性/重要性の高い修正や追加コストの発生、公開スケジュール調整などといった状況に陥ります。このようなケースにおいて、Security Detector機能を活用することで、セキュリティ問題の早期診断と幅広い項目でのソースレビューを行い、セキュリティを担保しつつ開発を進めることが期待できます。更には、公開前のセキュリティ診断を安全である最終確認の場として使用するというサイクルを生むことができるでしょう。

最後に

今回は、Amazon CodeGuru Reviewerや新機能Security Detectorに焦点を当て、そのユースケースを考察しました。DevSecOpsが重要されていく中で、セキュリティを早期段階から手軽に行えるSecurity Detectorはさらに注目度が上がると想定されます。現状では対応する言語の少なさや、Security Detectorではzipファイルを事前に作成する必要がある点など、利用面での課題が感じ取れる為、今後もサービスアップデートを期待し、動向を追っていきたいと思います。

References   [ + ]