セキュリティレビューを自動化する¶
RISKENではソースコードレビューの自動化のためのツール RISKEN Security Review
を提供しています。
GitHubのプルリクエストをトリガーにして実行され、シークレットのコミットや、インジェクションなどのサイバー攻撃になりうる危険なコードを検知し、プルリクエストのコメントでレビュー指摘をするツールになります。
仕組み
RISKEN Security ReviewはGitHub Actions(カスタムアクション)として実行されます。 以下のMarketPlaceにも公開しています。
特徴¶
RISKEN Security Reviewの主な特徴は以下になります。
- PRコメントで指摘する
- シークレットのコミット
- セキュリティ上問題のあるコード
- 高速に動作する
- 類似のコードレビュー関連のツールと比べて高速に動作
- ビルド済みの軽量なコンテナを実行
- コード全体ではなく変更箇所のみスキャン
- HEADのみをチェックアウトするので大きなリポジトリでも動作可能
- 小さな変更であれば10秒〜60秒程度で完了
個別のリポジトリに設定する¶
GitHub Actionsのワークフローファイルを作成することで動作します。
- 対象リポジトリにて
.github/workflows/security-review.yaml
ファイルを作成します - 作成したファイルに以下のコードをコピー&ペーストします
name: Security Code Review on PR
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: ca-risken/security-review@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
RISKEN環境へ統合¶
上記まででも動作しますが、オプションとして既存のRISKEN環境へ統合することができます
- RISKENへ統合することで以下のメリットがあります
- 生成AIの解説や推奨コメントが確認できる
- 重大度やスコア、関連リンクなど、スキャン結果の詳細が確認できる
- セキュリティチームへ共有し専門家のアドバイスを受けられる
- RISKENへの統合を有効化するには以下のオプションを追記してください
risken_console_url
risken_api_endpoint
risken_api_token
- 最終的なワークフローファイルは以下(サンプル)のようになります
このJOBを実行するにはGitHub Actionsが参照できるsecrets
を事前に登録する必要があります。
Pameter | Key | Description | Required | Default | Examples |
---|---|---|---|---|---|
risken_console_url |
RISKEN_CONSOLE_URL |
RISKEN Console URL | no |
https://console.your-env.com | |
risken_api_endpoint |
RISKEN_API_ENDPOINT |
RISKEN API Endpoint | no |
https://api.your-env.com | |
risken_api_token |
RISKEN_API_TOKEN |
RISKEN API Token | no |
xxxxx |
事前にアクセストークンの発行が必要になります
RISKENの対象プロジェクトでアクセストークンを発行する必要があります。
Organization全体に適用する¶
Organization管理者の場合は個別のリポジトリに設定する以外に、Organization全体でコードレビューを有効化することが可能です。
- Organization内に
.github
リポジトリを作成します(作成済みの場合はそのまま利用します).github
リポジトリとは、共通のテンプレートやワークフローを保存するための特別なリポジトリです- ただし、他のリポジトリでも問題ありません
- Organizationの設定でRISKEN情報を登録する(
optional
)- Organization secretsに
RISKEN_CONSOLE_URL
を保存します(VisibilityはAll repositories) - Organization secretsに
RISKEN_API_ENDPOINT
を保存します(VisibilityはAll repositories) - Organization secretsに
RISKEN_API_TOKEN
を保存します(VisibilityはAll repositories)- 事前にRISKEN環境でアクセストークン を発行する必要があります
- Organization secretsに
.github
リポジトリに以下のワークフローファイルを作成します- Organization設定で
rulesets
を作成します- rulesetsとは?
- rulesetsで
New branch ruleset
を新規作成します - 対象のリポジトリとブランチを指定します(以下は全てのリポジトリのデフォルトブランチをターゲットに設定します)
All Repositories
を指定します- ブランチは
Include default branches
を指定します
Require workflows to pass before merging
にチェックを入れ、上記で作成したワークフローファイルを指定します- リポジトリは
.github
を指定します - バージョンはマスターブランチ(
master
やmain
など)指定してください- 特定のバージョンの指定(ブランチ、タグ、コミットSHA)も可能です
- ワークフローファイルは
.github/workflows/security-review.yaml
を指定します
- リポジトリは
リポジトリの可視性について
- 今回の手順では
.github
リポジトリを利用しましたが、Organization内にPublicなリポジトリがある場合には、ワークフローファイルが参照できない可能性があります- 原因はパブリックリポジトリはパブリックなワークフローファイルしか参照できないためです
.github
リポジトリをpublicにすることでこの問題は解決しますが、公開できないテンプレートやワークフロー、プロファイルデータがある場合には、別のリポジトリを用意してください
- 詳細は workflow設定 を参照してください
ワークフローファイル(サンプル)¶
以下を .github/workflows/security-review.yaml
というファイル名で保存してください(yamlファイル名は任意です)
name: Security Code Review on PR
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: ca-risken/security-review@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
risken_console_url: ${{ secrets.RISKEN_CONSOLE_URL }}
risken_api_endpoint: ${{ secrets.RISKEN_API_ENDPOINT }}
risken_api_token: ${{ secrets.RISKEN_API_TOKEN }}