👾

GitHub Actions と Amazon CodeGuru を連携させてみる

2024/02/02に公開

はじめに

この前の記事で CodeGuru のワークショップをやってみたので実際のプロジェクトに導入するべく GitHub Actions との連携を試してみたいと思います。Java コードのレビューを行ってもらいたいだけなので CodeGuru Reviewer との連携を目指してみます。

実験用のリポジトリを用意する

AWS がサンプルで用意しているデモコードをお借りして試してみたいと思います。
https://github.com/aws-samples/amazon-codeguru-reviewer-sample-app/tree/master/src/main/java/com/shipmentEvents/handlers
適当にファイルを取得して自分のリポジトリに加えます。
以下のような構成です。あとでymlの中身を書きます。

.
├── .github
│   └── workflows
│       └── codeguru-reviewer.yml
└── target
    └── EventHandler.java

分析用に S3 バケットを作成する

ソースコードをアップして分析するようにバケットを作ります。

こんな感じで作ります。
バケット名の最初は codeguru-reviewer- で始まる必要があるので注意!

IAM のクレデンシャルを用意する

今回は OIDC で認証します。
ちょっと権限の振り方が大雑把ですが、検証なのでこんな感じのロールを用意します。

信頼ポリシーはこんな感じです。

ワークフローを作成する

次のページなどを参考にしながら作成しました。
https://github.com/marketplace/actions/codeguru-reviewer

codeguru-reviewer.yml
name: codeguru review test

on:
  workflow_dispatch:

jobs:
  review:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
      security-events: write

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2
      with:
        fetch-depth: 0

    - name: Configure AWS Credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-region: 'ap-northeast-1'
        role-to-assume: '作成したロールの arn を指定する'

    - name: AWS CodeGuru Reviewer Scanner
      uses: aws-actions/codeguru-reviewer@v1.1
      if: ${{ always() }} 
      with:
        build_path: target
        s3_bucket: 作成したバケット名を指定する

    - name: Upload review result
      if: ${{ github.event_name != 'push' }}
      uses: github/codeql-action/upload-sarif@v2
      with:
        sarif_file: codeguru-results.sarif.json

はまったところ

codeql-action のバージョンが deprecated になってた

v2を指定しました。

ワークフローの permissions

ワークフローの permissionssecurity-events: write が必要でした。
permissions の理解がイマイチだったので次のページを確認しました。

security-events: write はアクションによるコード スキャン アラートの状態の更新を許可します。

https://docs.github.com/ja/actions/using-jobs/assigning-permissions-to-jobs

リポジトリの公開設定

リポジトリを private にして試していたところ、 GitHub の CodeScanning 機能は プライベートリポジトリの場合、GitHub の Enterprise の契約が必要らしいです・・・。

https://github.blog/jp/2020-10-06-code-scanning-is-now-available/

個人のリポジトリで試していたのでしょうがなくパブリックに変更しました。

実行

手動で実行します。

結構時間がかかります。

CI ワークフローとの連携

実行が成功するとコンソールで連携が確認できました。

Security のタブで結果を確認

結果を確認できます!

なかみはこんな感じ。

まとめ

少し手間取りましたが、GitHub Actions と CodeGuru Reviewer の連携ができました!
分析に時間がかかるので常にパイプラインに組み込むのはどうかな〜というかんじです。
それでもレビューでの指摘は嬉しいのでどうにか活用方法を考えていきたいです。

参考

https://zenn.dev/kou_pg_0131/articles/gh-actions-oidc-aws

https://docs.github.com/ja/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services#adding-the-identity-provider-to-aws

https://docs.aws.amazon.com/ja_jp/codeguru/latest/reviewer-ug/working-with-cicd.html

https://dev.classmethod.jp/articles/codeguru-reviewer-github-actions/

https://github.com/marketplace/actions/codeguru-reviewer

レスキューナウテックブログ

Discussion