Amazon Web Services ブログ

Amazon CodeGuru Reviewer アップデート : 新しい Java ディテクタと GitHub アクションと CI/CD の統合

Amazon CodeGuru では、コードレビューを自動化し、コード品質を向上させることができます。また、 4月に発表された新しい価格モデルにより、リポジトリのサイズ応じた、より低価格な月額固定料金で始めることができます。(最大で 90 % の低価格化)。CodeGuru Reviewer は、 AWS マネジメントコンソールや、AWS SDK、および AWSを使用して、Java および Python アプリケーションで見つけにくい潜在的な欠陥やバグを検出するのに役立ちます。

今回、 CodeGuru Reviewer がコードをパッケージ化してデプロイするために毎日使用するツールとネイティブに統合されていることをお知らせできることをうれしく思います。この新しいCI/CD エクスペリエンスにより、GitHub Actions を使用した構築プロセスのステップとしてコードの品質とセキュリティ分析をトリガーすることができます。

CodeGuru Reviewer のコンソールは、オンボーディングされたすべてのリポジトリの分析ハブとして機能しますが、新しい CI/CD エクスペリエンスは、 CodeGuru Reviewer をお気に入りのソースコード管理ツールや CI/CD ツールと深く統合させることができます。

それだけではありません。 本日は、Java 向けの 20 の新しいセキュリティディテクタもリリースし、セキュリティと AWS のベストプラクティスに関連するさらに多くの問題を特定できるようにしました。

CodeGuru Reviewer の新しい CI/CD エクスペリエンス
デベロッパーや開発チームは、毎日新しいコードをプッシュし、開発サイクルの早い段階で、理想的にはプッシュをするたびにセキュリティの脆弱性を発見したいと考えています。プルリクエスト ( PR ) のレビュー中、CodeGuru のレコメンデーションはすべてコメントとして表示され、あたかも PR に別の目があるかのように表示されます。これらのコメントには、問題の解決に役立つ便利なリンクが含まれています。

新しいコードをプッシュしたり、コードレビューをスケジュールすると、GitHub の [セキュリティ] > [コードスキャンアラート] タブにレコメンデーションが表示されます。

CodeGuru Reviewer を GitHub Actions と統合する方法を見ていきましょう。

まず、.github/workflows/ の下のリポジトリに.yml ファイルを作成します(または既存のアクションを更新します)。このファイルには、すべてのアクションのステップが含まれます。では、ステップをひとつずつ見ていきましょう。

最初のステップでは、AWS 認証情報を設定します。リポジトリのコードに認証情報を保存せず安全に実行するには、Configure AWS Credentials アクションを使用します。このアクションで、GitHub が AWS のサービスとやり取りするために使用する IAM ロールを設定します。このロールには、 CodeGuru Reviewer と Amazon S3 に関連するいくつかの許可が必要になります。s3: GetObjects3: PutObjects3: ListBucket に加えて、アクションロールに AmazonCodeGuruReviewerFullAccess マネージドポリシーを添付することができます。

この最初のステップは、次のようになります。

- name: Configure AWS Credentials
  uses: aws-actions/configure-aws-credentials@v1
  with:
    aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
    aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    aws-region: eu-west-1

これらのアクセスキーとシークレットキーは IAM ロールに対応しており、 CodeGuru Reviewer と Amazon S3 とのやり取りに使用されます。

次に、 CodeGuru Reviewer アクションを追加して、結果をアップロードする最終ステップを行います。

- name: Amazon CodeGuru Reviewer Scanner
  uses: aws-actions/codeguru-reviewer
  if: ${{ always() }} 
  with:
    build_path: target # build artifact(s) directory
    s3_bucket: 'codeguru-reviewer-myactions-bucket'  # S3 Bucket starting with "codeguru-reviewer-*"
- name: Upload review result
  if: ${{ always() }}
  uses: github/codeql-action/upload-sarif@v1
  with:
    sarif_file: codeguru-results.sarif.json

CodeGuru Reviewer アクションには、次の 2 つの入力パラメータが必要です。

  • build_path: 構築アーティファクトがリポジトリ内にある場所。
  • s3_bucket: 以前に作成した S3 バケットの名前で、構築アーティファクトと分析結果のアップロードに使用します。これはお客様自身が所有するバケットであるため、コンテンツを他のシステムと共有する必要がある場合でも、アクセスと許可を完全にコントロールできます。

それでは、すべてのピースを組み合わせましょう。

.yml ファイルは次のようになります。

name: CodeGuru Reviewer GitHub Actions Integration
on: [pull_request, push, schedule]
ジョブ:
  CodeGuru-Reviewer-Actions:
    runs-on: ubuntu-latest
    ステップ:
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-2
	  - name: Amazon CodeGuru Reviewer Scanner
        uses: aws-actions/codeguru-reviewer
        if: ${{ always() }} 
        with:
          build_path: target # build artifact(s) directory
          s3_bucket: 'codeguru-reviewer-myactions-bucket'  # S3 Bucket starting with "codeguru-reviewer-*"
      - name: Upload review result
        if: ${{ always() }}
        uses: github/codeql-action/upload-sarif@v1
        with:
          sarif_file: codeguru-results.sarif.json

S3 バケット名は codeguru_reviewer- で始まる必要があり、これらのアクションは pull_request push、またはscheduleのいずれかのトリガーで実行するように設定できることを覚えておきましょう。 (ワークフローをトリガーするイベントの一覧は、GitHub Actions のドキュメントをチェックしてください)。また、GitHub ホストランナーとセルフホストランナーの設定方法には、主に認証情報設定ステップで若干の違いがあることを覚えておきましょう。たとえば、EC2 インスタンスのように、既に AWS 認証情報にアクセスできるセルフホストランナーで GitHub Actions を実行する場合、このアクションに認証情報を提供する必要はありません (セルフホストランナーに関する詳細なドキュメントをチェックしてください)。

これで、変更をプッシュしたり、PR を開くと CodeGuru Reviewer がコードの変更についていくつかのレコメンデーションをコメントしてくれます。

また、毎日または毎週のリポジトリスキャンをスケジュールして、[セキュリティ] > [コードスキャンアラート] タブでレコメンデーションをチェックすることもできます。

Java 向けの新しい セキュリティディテクタ
昨年12月に、Javaアプリケーションの潜在的なセキュリティ問題を発見し修正できるように、 CodeGuru Reviewer 用の Java セキュリティディテクタ を立ち上げました。これらのディテクタは、機械学習と自動推論技術を使用して構築されており、100,000 以上の Amazon およびオープンソースのコードリポジトリでトレーニングされ、AWS アプリケーションセキュリティ ( AppSec ) チームの数十年にわたる専門知識に基づいています。

たとえば、これらのディテクタの中には、過度に冗長なログの記録や例外処理、メモリ内のプレーンテキストへのパスワードの保存による機密情報や認証情報の漏洩の可能性を調べるものがあります。セキュリティディテクタは、コマンドインジェクション、脆弱な暗号、脆弱なハッシュ、LDAPインジェクション、パストラバーサル、セキュア Cookie フラグ、SQL インジェクション、XPATH インジェクション、XSS(クロスサイトスクリプティング)など、いくつかのウェブアプリケーションの脆弱性を特定するのに役立ちます。

Java 向けの新しいセキュリティディテクタは、Java Servlet API や Spring などのウェブフレームワークに関するセキュリティの問題を特定することができます。新しいディテクタの中には、Amazon S3 や、 IAM、AWS Lambda などのサービス、Apache ActiveMQ、LDAP サーバー、SAML パーサー、パスワードエンコーダーなどのライブラリとユーティリティを使用する場合の AWS API のセキュリティのベストプラクティスにも役立つものもあります。

本日、追加コストなしで利用可能
Java 向けの新しい CI/CD 統合およびセキュリティディテクタは、構築アーティファクトのサイズとコードレビューの頻度に基づいて見積もられる S3 上のストレージを除き、本日、追加コストなしで利用できます。GitHub Marketplace の CodeGuru Reviewer アクションAmazon CodeGuru料金ページをチェックして、先月発売した新しい価格モデルに基づく料金例をご覧ください。

私たちはみなさまのフィードバックに耳を傾け、潜在的な問題を特定するためのディテクタを増やし、今後はさらに多くの CI/CD ツールと統合を勧めていきたいと考えています。

CI/CD のエクスペリエンスと構成の詳細については、テクニカルドキュメントをご覧ください。

アレックス