はじめに

API 連携の準備

お客様のシステムから CRISIS API を利用するために必要な準備を、ステップバイステップで案内します。 すべてのセットアップは CRISIS の Web UI で行い、発行したアクセストークンを使って API にリクエストを送信します。

概要

CRISIS API への連携は、次の流れで進めます。

サービスアカウントを作成

Web UI で用途ごとのサービスアカウントを作成

アクセストークンを発行

Bearer トークンを発行し、安全に保管

IAM でアクセス範囲を設定

CRN とパーミッションで最小権限を設定

API にリクエストを送信

Authorization: Bearer {token} ヘッダで認証

ベース URL は https://api.crisis.jp/v1 です。すべてのエンドポイントで Bearer トークンによる認証が必要です。

1. サービスアカウントを作成

CRISIS の Web UI からサービスアカウントを作成します。 サービスアカウントは API 連携専用のアカウントで、人間のユーザーアカウントとは分離されています。

用途ごとに分けて作成することを推奨します。 たとえば「ワークフローパブリッシュ用」「インシデント操作用」「資産管理用」など、役割を明確にすることで、 不要な権限を持たせないセキュリティ設計が実現できます。

サービスアカウントの分離例

  • ワークフローパブリッシュ専用 — organization.workflow_topic:publish のみ
  • インシデント操作専用 — organization.incident:*
  • 資産管理専用 — organization.asset_item:*
  • ユーザー管理専用 — organization.user:*

2. アクセストークンを発行

サービスアカウントのアクセストークンを Web UI から発行します。 トークンは作成時のレスポンスでのみ表示されます。 後から確認することはできないため、必ず安全な場所に保管してください。

⚠ トークンの保管について

  • アクセストークンを環境変数に直接記述しないでください
  • AWS Secrets Manager、Google Secret Manager、HashiCorp Vault などのシークレット管理サービスの利用を推奨します
  • 不要になったトークンは速やかに DELETE …/access_tokens/{id} で削除してください

CI/CD やクラウドサービスからの連携(GitHub Actions・Google Cloud など OIDC 対応環境)では、 Workload Identity Federation を利用すると、静的アクセストークン不要で認証できます。

3. IAM でアクセス範囲を設定

サービスアカウントの IAM にロールをバインドし、操作可能なリソース(CRN)とアクション(パーミッション)を制限します。 IAM の詳細は 認証・IAM・セキュリティガイド を参照してください。

パーミッションは サービス.リソース:アクション 形式で指定します。

// パーミッション形式の例
organization.workflow_topic:publish    // ワークフロートピックへのパブリッシュ
organization.incident:create           // インシデントの作成
organization.incident:get              // インシデントの取得
organization.user:list                 // ユーザー一覧の取得
organization.asset_item:update         // 資産情報の更新

CRN(CrisisResourceName)はリソースを一意に識別する名前です。

// CRN 形式
crn:crisis:{scope}:{organizationId}:{resourceType}/{resourceId}

// 例: 特定インシデントとそのサブリソースすべてに権限を付与
crn:crisis:organizations:org-123:incidents/inc-456<(/.*)?$>

4. organizationId を取得

すべての API パスには organizationId が含まれます。取得方法は 2 通りあります。

方法 A: 固定値として保持(推奨)

CRISIS の Web UI で組織 ID を確認し、環境変数や設定ファイルに固定値として保持します。

方法 B: /me から取得

GET /me を呼び出し、レスポンスの organization_id フィールドから取得します。

// /me から organizationId を取得する例
const me = await fetch('https://api.crisis.jp/v1/me', {
  headers: { Authorization: `Bearer ${accessToken}` },
}).then(r => r.json());

const organizationId = me.organization_id;

5. 最初のリクエスト

トークンと organizationId が揃ったら、API にリクエストを送信できます。 以下は Node.js(AWS Lambda / Cloud Run Functions)からインシデント一覧を取得する例です。

const response = await fetch(
  `https://api.crisis.jp/v1/organizations/${organizationId}/incidents?limit=10`,
  {
    headers: {
      Authorization: `Bearer ${accessToken}`,
    },
  }
);

if (!response.ok) {
  const error = await response.json();
  // error.ErrorCode: "ERR-403"
  // error.TraceID:   "CRS-A1B2-C3D4E5F6"
  throw new Error(`CRISIS API error: ${error.ErrorCode} (${response.status})`);
}

const { data, next_cursor, total } = await response.json();
console.log(`${total} 件中 ${data.length} 件取得しました`);

次のステップ