クイックスタート
このページでは、ホワイトボックス診断を例に、Takumi API の基本的な使い方をセットアップから結果取得まで順を追って説明します。 ファイルのアップロード・ワークフローの実行・結果の取得といった基本的な流れは他のワークフローでも共通ですので、他のワークフローを使いたい場合もぜひ参考にしてください。
全体像
Takumi API を使った診断は、大まかに以下のような通信の流れで進みます。
Webhook を使わず、ステータス確認 API をポーリングして完了を待機することも可能です。ただし GitHub Actions のように実行時間に課金される環境では、ポーリングで完了を待つのではなく、「Takumi のワークフローを呼び出してすぐに終了するプロセス」と「Webhook 通知にトリガーされ、完了したワークフローの結果を処理するプロセス」に分けるアーキテクチャがおすすめです。
セットアップ
アクセストークンを取得する
Takumi API では、ユーザーとして認証することも、ボットというエンティティとして認証することも可能です。CI/CD パイプラインなど、特定のユーザーに紐づかない主体として Takumi API を利用したい場合には、ボットとして認証する方法がおすすめです。一部の OIDC 対応環境では短命の認証情報を利用できるほか、長命の API キーを発行して 利用することもできます。
Takumi API で必要となるアクセストークンは以下のいずれかの方法で取得できます。詳細は shishoctl CLI でアクセスする を参照してください。
- ユーザーとして認証する:
shishoctl auth signinでサインインし、shishoctl auth print-access-tokenでトークンを取得する - ボットとして認証する:
shishoctl auth signin:botでサインインし、shishoctl auth print-access-tokenでトークンを取得する
取得したアクセストークンを、以降の API リクエストのヘッダーに付与します。
Authorization: Bearer {ACCESS_TOKEN}
Webhook を設定する
ワークフロー実行の完了通知を受け取るために Webhook を設定します。具体的な手順は Webhook 通知を参照してください。
ポーリングでワークフローの完了を待機する場合は、このセットアップは不要です。
診断対象のアプリケーションの所有権を証明する(一部ワークフローのみ)
実環境への動的な通信を伴う機能(ブラックボックス診断を含む)は、お客様が所有権を持つ対象にのみ行えます。未証明のアプリケーション URL を診断対象に指定すると、ワークフローの実行が拒否されます。
組織認証または診断対象の所有権証明に記載の方法で、アプリケーションの所有権を証明するセットアップを完了させてください。
なおホワイトボックス診断は実環境への動的な通信を伴わないため、この制約はありません。
ワークフローの入出力を理解する
ワークフローの入出力のスキーマは、ワークフローの種別ごとに異なります。そのスキーマは、OpenAPI ドキュメント に定義されています。
ホワイトボックス診断のワークフロー ID は whitebox-assessment であり、API エンドポイントは /o/{org_id}/workflows/whitebox-assessment/* です。
ワークフロー実行 API /o/{org_id}/workflows/whitebox-assessment/dispatch のリクエストスキーマの一部を以下に抜粋します。このスキーマから、入力について以下のことがわかります。
- 診断対象のコードベースは
/o/{org_id}/input-filesの API を通じて事前にアップロードしておき、そのファイル ID をinput.targets[].file_upload.file_idに指定する。コードベースは ZIP 形式または tar.gz 形式でアップロードできる - 診断レポートの出力言語を
input.languageに指定する
/o/{org_id}/workflows/whitebox-assessment/dispatch:
post:
requestBody:
content:
application/json:
schema:
properties:
input:
properties:
# 診断対象のコードベース
targets:
description: Source code archives to analyze
type: array
items:
properties:
file_upload:
properties:
description: Source code archive uploaded via the input files API
file_id: { type: string }
archive_type:
enum: [zip, tar_gz]
# 診断レポートの出力言語
language:
enum: [english, japanese]
# ... (他のパラメータについては OpenAPI ドキュメントを参照してください)
notification:
description: Optional notification configuration for the workflow run
properties:
# ワークフロー完了の通知先
webhook_endpoint_ids:
type: array
items: { type: string }
次に、ワークフローの実行結果のスキーマを見てみましょう。ワークフローが完了すると /o/{org_id}/workflows/{workflow_id}/describe エンドポイントでその結果を確認できます。ホワイトボックス診断の /o/{org_id}/workflows/whitebox-assessment/describe エンドポイントのレスポンススキーマの一部を以下に抜粋します。
/o/{org_id}/workflows/whitebox-assessment/describe:
post:
responses:
"200":
content:
application/json:
schema:
properties:
status:
description: Current status of the workflow run
enum: [RUNNING, EXITED]
artifacts:
description: Downloadable artifacts produced by the workflow run. Present only when status is EXITED
type: array
items:
properties:
name: { type: string }
output:
description: Output of the workflow run. Present only when status is EXITED
properties:
kind:
description: Whether the workflow run succeeded or was aborted
enum: [SUCCESS, ABORTED]
successOutput:
description: The success output. Present only when kind is SUCCESS
properties:
findings:
description: A JSON file containing the list of vulnerability findings. The schema is available at `/v1/docs/workflow-artifacts/whitebox-assessment/findings.json`
properties:
artifact_name: { type: string }
type: object
report:
description: The assessment report in Markdown format
properties:
artifact_name:
type: string
type: object
type: object
abortedReason:
description: The reason the workflow run was aborted. Present only when kind is ABORTED
properties: # ... (省略)
ここから、ホワイトボックス診断が成功した場合に生成される成果物について以下のことがわかります。
report: 診断レポートの Markdown ファイルfindings: 検出された脆弱性のリストを含む JSON ファイル。JSON Schema がhttps://api.cloud.shisho.dev/v1/docs/workflow-artifacts/whitebox-assessment/findings.jsonに定義されている
では、実際にワークフローを実行してみましょう。