メインコンテンツまでスキップ

GitHub Actions を用いて自動でスキーマを連携する

info

本チュートリアルで扱う機能は、Web アプリケーション診断機能をご契約いただいた組織でのみご利用いただけます。

本ページでは、GitHub Actions を用いて各スキーマを Shisho Cloud と自動で連携させる方法について説明します。

GitHub Actions から Shisho Cloud にログインできるようにするためのセットアップ

GitHub Actions から Shisho Cloud にログインできるよう、Shisho Cloud 側の設定をしていきます。まず Shisho Cloud のボット作成画面を開き、「ボット」を作成します。ボットとは Shisho Cloud 組織へのアクセス権限を持つ主体であり、GitHub Actions ジョブはボットとして Shisho Cloud にログインすることになります。

ボット作成画面

ボットを作成したら、ボット名をクリックすると信頼条件の設定画面に遷移します。

信頼条件の設定画面

信頼条件とは、GitHub Actions ジョブが当該ボットとして Shisho Cloud にログインするために、ジョブが満たすべき条件です。ワークフローが格納されている GitHub リポジトリの Organization およびリポジトリ名を記入すると、当該リポジトリに属する GitHub Actions ジョブが、先ほど作成したボットとして Shisho Cloud にログインできるようになります。記入が完了したら、「保存」ボタンをクリックしてください。

基本となる GitHub Actions

自動連携用の GitHub Actions は概ね次のような形になります。

name: "Sync the schema with Shisho Cloud"

permissions:
contents: read
id-token: write # Shisho Cloud にログインするために必要な権限

on:
push:
# main ブランチに push された際にトリガーする
branches:
- main
# スキーマファイルの変更のみを検知する
paths:
# FIXME: このワークフローを定義している YAML ファイルのパスに置換してください
- .github/workflows/sync.yaml
# FIXME: 参照するスキーマファイルのパスに置換してください
- docs/openapi.yaml

jobs:
sync:
name: Sync
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Install shishoctl
run: |
SHISHOCTL_URL="https://shisho.dev/releases/shishoctl-0.12.0-x86_64-unknown-linux-gnu"
sudo curl -L $SHISHOCTL_URL -o /usr/local/bin/shishoctl
sudo chmod +x /usr/local/bin/shishoctl

- name: Sign in
uses: flatt-security/shisho-cloud-action@v1
with:
# FIXME: 入力すべき bot-id の値は信頼条件の設定画面に記載されています
bot-id: "BTXXXXXXXXXXXXXXXXXXXXXXXXXX"

# shishoctl を用いて Shisho Cloud にスキーマをアップロードする
- name: Sync with Shisho Cloud
run: |
shishoctl web-application collect-endpoints openapi \
--org $ORG_ID \
--app $APP_ID \
--path $SCHEMA_PATH
env:
ORG_ID: ${{ vars.SHISHO_CLOUD_ORG_ID }}
APP_ID: ${{ vars.SHISHO_CLOUD_APP_ID }}
# FIXME: 参照するスキーマファイルのパスに置換してください
SCHEMA_PATH: docs/openapi.yaml

コード中の FIXME と記載された箇所を適切に書き換えてください。

また次の変数を GitHub リポジトリに登録してください。詳しい設定の方法は GitHub 公式のドキュメント を参照してください。

  • SHISHO_CLOUD_ORG_ID 組織ID
    • Shisho Cloud のダッシュボードの URL に含まれています
    • https://cloud.shisho.dev/{{ 組織ID }}/dashboard
  • SHISHO_CLOUD_APP_ID アプリケーションID
    • アプリケーションページのURLに含まれています
    • https://cloud.shisho.dev/{{ 組織ID }}/applications/{{ アプリケーションID }}

OpenAPI Specification との連携

name: "Sync the OpenAPI Specification with Shisho Cloud"

permissions:
contents: read
id-token: write # Shisho Cloud にログインするために必要な権限

on:
push:
branches:
- main
paths:
# Workflow ファイルのパス
- .github/workflows/sync-openapi.yaml
# FIXME: 参照するスキーマファイルのパスに置換してください
- docs/openapi.yaml

jobs:
sync:
name: Sync
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Install shishoctl
run: |
SHISHOCTL_URL="https://shisho.dev/releases/shishoctl-0.12.0-x86_64-unknown-linux-gnu"
sudo curl -L $SHISHOCTL_URL -o /usr/local/bin/shishoctl
sudo chmod +x /usr/local/bin/shishoctl

- name: Sign in
uses: flatt-security/shisho-cloud-action@v1
with:
# FIXME: 入力すべき bot-id の値は信頼条件の設定画面に記載されています
bot-id: "BTXXXXXXXXXXXXXXXXXXXXXXXXXX"

- name: Sync with Shisho Cloud
run: |
shishoctl web-application collect-endpoints openapi \
--org $ORG_ID \
--app $APP_ID \
--path $SCHEMA_PATH
env:
ORG_ID: ${{ vars.SHISHO_CLOUD_ORG_ID }}
APP_ID: ${{ vars.SHISHO_CLOUD_APP_ID }}
# FIXME: 参照するスキーマファイルのパスに置換してください
SCHEMA_PATH: docs/openapi.yaml

GraphQL Schema との連携

name: "Sync the GraphQL Schema with Shisho Cloud"

permissions:
contents: read
id-token: write # Shisho Cloud にログインするために必要な権限

on:
push:
branches:
- main
paths:
# Workflow ファイルのパス
- .github/workflows/sync-graphql.yaml
# FIXME: 参照するスキーマファイルのパスに置換してください
- docs/schema.graphql

jobs:
sync:
name: Sync
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Install shishoctl
run: |
SHISHOCTL_URL="https://shisho.dev/releases/shishoctl-0.12.0-x86_64-unknown-linux-gnu"
sudo curl -L $SHISHOCTL_URL -o /usr/local/bin/shishoctl
sudo chmod +x /usr/local/bin/shishoctl

- name: Sign in
uses: flatt-security/shisho-cloud-action@v1
with:
# FIXME: 入力すべき bot-id の値は信頼条件の設定画面に記載されています
bot-id: "BTXXXXXXXXXXXXXXXXXXXXXXXXXX"

- name: Sync with Shisho Cloud
run: |
shishoctl web-application collect-endpoints graphql \
--org $ORG_ID \
--app $APP_ID \
--max-depth 5 \
--url $ENDPOINT_URL
--path $SCHEMA_PATH
env:
ORG_ID: ${{ vars.SHISHO_CLOUD_ORG_ID }}
APP_ID: ${{ vars.SHISHO_CLOUD_APP_ID }}
ENDPOINT_URL: ${{ vars.SHISHO_CLOUD_GRAPHQL_ENDPOINT_URL }}
# FIXME: 参照するスキーマファイルのパスに置換してください
SCHEMA_PATH: docs/schema.graphql

基本の設定に加えて次の変数を GitHub に登録する必要があります。

  • SHISHO_CLOUD_GRAPHQL_ENDPOINT_URL スキャンに利用する GraphQL エンドポイント URL

Connect RPC (Protocol Buffers) との連携

name: "Sync the Connect RPC (Protocol Buffers) with Shisho Cloud"

permissions:
contents: read
id-token: write # Shisho Cloud にログインするために必要な権限

on:
push:
branches:
- main
paths:
# Workflow ファイルのパス
- .github/workflows/sync-connectrpc.yaml
# FIXME: 参照するスキーマファイルが格納されているフォルダのパスに置換してください
- docs/proto/**

jobs:
sync:
name: Sync
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Install shishoctl
run: |
SHISHOCTL_URL="https://shisho.dev/releases/shishoctl-0.12.0-x86_64-unknown-linux-gnu"
sudo curl -L $SHISHOCTL_URL -o /usr/local/bin/shishoctl
sudo chmod +x /usr/local/bin/shishoctl

- name: Sign in
uses: flatt-security/shisho-cloud-action@v1
with:
# FIXME: 入力すべき bot-id の値は信頼条件の設定画面に記載されています
bot-id: "BTXXXXXXXXXXXXXXXXXXXXXXXXXX"

- name: Zip the schemas
run: zip -r schema.zip $SCHEMA_DIR
env:
# FIXME: 参照するスキーマファイルが格納されているフォルダのパスに置換してください
SCHEMA_DIR: docs/proto

- name: Sync with Shisho Cloud
run: |
shishoctl web-application collect-endpoints connectrpc \
--org $ORG_ID \
--app $APP_ID \
--url $ENDPOINT_URL
--path schema.zip
env:
ORG_ID: ${{ vars.SHISHO_CLOUD_ORG_ID }}
APP_ID: ${{ vars.SHISHO_CLOUD_APP_ID }}
ENDPOINT_URL: ${{ vars.SHISHO_CLOUD_CONNECTRPC_ENDPOINT_URL }}

Connect RPC との連携では複数のスキーマを zip 圧縮してアップロードします。そのため {{ path_to_schema_dir }} にはそれらのスキーマが格納されているフォルダのパスを指定してください。

また基本の設定に加えて次の変数を GitHub に登録する必要があります。

  • SHISHO_CLOUD_CONNECTRPC_ENDPOINT_URL スキャンに利用する Connect RPC エンドポイント URL