GitHub Actions を用いて自動でスキーマを連携する
本チュートリアルで扱う機能は、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