メインコンテンツへスキップ

Documentation Index

Fetch the complete documentation index at: https://docs.jitera.ai/llms.txt

Use this file to discover all available pages before exploring further.

Jitera Self-Hostedは、セキュリティ関連のユーザーおよびシステム操作の監査ログを記録します。ログはSidekiqポッド内のファイルにJSON形式で書き込まれ、FluentBitを介して外部ストレージに転送できます。

監査ログの有効化

監査ログはデフォルトで無効です。Helm値で有効にします:
auditLogs:
  enabled: true
有効にすると、FluentBitサイドカーがSidekiqコンテナと一緒にデプロイされます。サイドカーは監査ログファイルを監視し、設定された出力先にエントリを転送します。

ログ構造

各監査ログエントリは、Sidekiqポッド内の/var/log/audit.logに書き込まれるJSONオブジェクトです:
{
  "severity": "AUDIT_ENTERPRISE",
  "timestamp": "2024-10-20T12:00:00.000Z",
  "ip": "192.168.1.100",
  "browser": "Chrome",
  "browser_version": "118.0.5993.88",
  "os": "Mac OS X",
  "event": "signup",
  "user_id": "12345",
  "host": "app.example.com",
  "project_id": "67890",
  "resources": "{\"block_id\":\"123\",\"api_id\":\"456\"}"
}

必須フィールド

すべてのログエントリに含まれるフィールド:
フィールド説明
eventString事前定義されたリストからのイベントタイプ
user_idStringイベントをトリガーしたユーザーID
timestampDateTimeISO 8601タイムスタンプ

オプションフィールド

フィールド説明
severityStringログの重大度(AUDIT_ENTERPRISE
ipStringクライアントIPアドレス、内部呼び出しの場合はInternal Service
browserStringブラウザ名、またはInternal Service
browser_versionStringブラウザバージョン
osStringオペレーティングシステム
hostStringリクエストホスト/ドメイン
project_idStringイベントに関連するプロジェクトID
detailsString追加のイベント詳細
resourcesString (JSON)影響を受けるリソース(シリアライズされたJSON)

イベントタイプ

システムは以下のイベントカテゴリを追跡します。イベントの完全なリストはアプリケーションのソースコードで定義されており、リリースごとに更新される場合があります。

認証とユーザー

イベント説明
signupユーザー登録
loginユーザーログイン
logoutユーザーログアウト
ssoシングルサインオンログイン
sso_signupSSO登録
user_settings_updatedユーザー設定変更
user_password_changedパスワード変更
user_mfa_enabledMFA有効化
user_mfa_disabledMFA無効化
user_mfa_verifiedMFA検証成功
user_mfa_failedMFA検証失敗

インテグレーション

イベント説明
git_connectedGitリポジトリ接続
gitlab_connectedGitLab接続
gitlab_conn_failedGitLab接続失敗

プロジェクト操作

イベント説明
project_createdプロジェクト作成
project_deletedプロジェクト削除
project_member_invitedプロジェクトメンバー招待
project_member_addedプロジェクトメンバー追加
git_project_importedGitからプロジェクトインポート
trigger_project_syncプロジェクト同期トリガー
trigger_project_import_page_exploreプロジェクトインポートページ探索
update_project_import_pageプロジェクトインポートページ更新
configure_project_pluginプロジェクトプラグイン設定

コード生成と同期

イベント説明
code_to_erd_triggerコードからERDへの変換
code_to_natural_language_triggerコードから自然言語への変換
trigger_frontend_code_generateフロントエンドコード生成
trigger_api_syncAPI同期トリガー
trigger_business_logic_syncビジネスロジック同期トリガー

ビジネスロジックとAPI

イベント説明
business_logic_to_apiビジネスロジックをAPIに追加
remove_business_logic_from_apiビジネスロジックをAPIから削除
create_new_api新規API作成

ドキュメント

イベント説明
docs_createdドキュメント作成
docs_updatedドキュメント更新
docs_deletedドキュメント削除
docs_movedドキュメント移動
docs_renamedドキュメント名前変更
docs_folder_deletedドキュメントフォルダ削除
export_documentドキュメントエクスポート
export_folderフォルダエクスポート
import_documentsドキュメントインポート
triggered_translate翻訳トリガー
ui_ux_document_triggerUI/UXドキュメントトリガー
trigger_document_syncドキュメント同期トリガー

チケットとテスト

イベント説明
create_ticketチケット作成
update_ticket_use_casesチケットユースケース更新
trigger_ticket_syncチケット同期トリガー
generate_test_casesテストケース生成
regenerate_test_casesテストケース再生成
generate_project_import_page_test_casesプロジェクトインポートページテストケース生成
delete_testテスト削除

UI/スクリーン

イベント説明
create_screen_previewスクリーンプレビュー作成
create_screenスクリーン作成

データ管理

イベント説明
create_table_definitionテーブル定義作成
bulk_delete_blockブロック一括削除

組織管理

イベント説明
deactive_organization組織無効化
organization_member_invited組織メンバー招待
organization_member_added組織メンバー追加
organization_member_removed組織メンバー削除
organization_owner_changed組織オーナー変更
organization_integration_configured組織インテグレーション設定

チーム管理

イベント説明
team_createdチーム作成
team_updatedチーム更新
team_deletedチーム削除
team_member_invitedチームメンバー招待
team_member_addedチームメンバー追加
team_member_removedチームメンバー削除
add_members_to_teamチームにメンバー追加

LLMとAI

イベント説明
create_llmLLM作成
update_llmLLM更新
delete_llmLLM削除
organization_llm_available_updated組織LLM利用可能状況更新
default_company_model_changedデフォルト企業モデル変更

エージェントとMCP

イベント説明
agent_createdエージェント作成
agent_updatedエージェント更新
agent_deletedエージェント削除
agent_model_changedエージェントモデル変更
agent_context_updatedエージェントコンテキスト更新
thread_createdスレッド作成
thread_message_sentスレッドメッセージ送信
subthread_createdサブスレッド作成
mcp_server_configuredMCPサーバー設定
mcp_tool_registeredMCPツール登録
mcp_tool_unregisteredMCPツール登録解除

アプリ

イベント説明
apps_installedアプリインストール
apps_uninstalledアプリアンインストール
apps_configuredアプリ設定
apps_trigger_registerアプリトリガー登録

APIキーと機能管理

イベント説明
create_api_keyAPIキー作成
revoke_api_keyAPIキー失効
update_feature_toggle機能トグル更新
export_token_usage_csvトークン使用量CSVエクスポート

課金とサブスクリプション

イベント説明
subscription_checkoutサブスクリプションチェックアウト
subscription_upgradedサブスクリプションアップグレード
subscription_canceledサブスクリプションキャンセル
subscription_payment_failedサブスクリプション支払い失敗
seat_quantity_changedシート数変更
billing_portal_accessed請求ポータルアクセス
plan_config_createdプラン設定作成
plan_config_updatedプラン設定更新

管理者操作

イベント説明
admin_organization_activate管理者による組織有効化
admin_organization_deactivate管理者による組織無効化
admin_organization_create管理者による組織作成
admin_user_activate管理者によるユーザー有効化
admin_user_deactivate管理者によるユーザー無効化
admin_user_delete管理者によるユーザー削除

ログ転送

FluentBitはSidekiqポッドから監査ログを収集し、1つ以上の外部宛先に転送します。すべての出力先はデフォルトで無効です。

AWS S3

auditLogs:
  enabled: true
  outputs:
    awsS3:
      enabled: true
      env:
        AWS_REGION: "ap-northeast-1"
        AWS_BUCKET: "your-audit-logs-bucket"
AWS S3出力はstorage.secret.awsで設定されたAWS認証情報と同じものを使用します。ログは/%Y/%m/%d.logのキー形式で保存されます。

Azure Data Explorer

監査ログを Azure Data Explorer (ADX / Kusto) に転送するには、FluentBit サイドカーが起動する前に Azure 側のリソースが揃っている必要があります。Helm の値だけを設定した状態ではデプロイは正常に見え、サイドカーも動作し、取り込みリクエストも成功しますが、以下のすべての前提条件が満たされるまでテーブルに有効な行は記録されません
ADX は有料の Azure サービスであり、アイドル状態でも時間単位で課金されます。有効化する前に Azure Data Explorer の料金ページ で費用を確認してください。

前提条件

この出力を有効化する前に、Azure 側で以下を作成しておく必要があります。下記のコマンドはあくまで例です — 各リソースの正式な手順については、リンク先の Azure ドキュメントを参照してください。
1

Kusto クラスター

Azure Data Explorer クラスターをプロビジョニングします。Azure Data Explorer クラスターの作成 を参照してください。
2

データベース

クラスター内にデータベースを作成します。データベース名は AZURE_DATA_EXPLORER_DB_NAME で使用します。
3

監査ログスキーマのテーブル

データベース内で以下の KQL を実行します。列名と型は完全に一致させる必要があります — 型を誤ると FluentBit は警告なく行をドロップします。
.create-merge table audit_logs (
  severity:        string,
  timestamp:       datetime,
  ip:              string,
  browser:         string,
  browser_version: string,
  os:              string,
  event:           string,
  user_id:         string,
  host:            string,
  project_id:      string,
  details:         string,
  resources:       string
)
4

JSON 取り込みマッピング

FluentBit から到着するペイロードから各列をどう抽出するかを Kusto に伝える取り込みマッピングを作成します。マッピング名は AZURE_INGESTION_MAPPING_REFERENCE で使用します。
.create-or-alter table audit_logs ingestion json mapping 'audit_logs_mapping'
'['
'{"column":"severity",        "Properties":{"Path":"$.log.severity"}},'
'{"column":"timestamp",       "Properties":{"Path":"$.log.timestamp"}},'
'{"column":"ip",              "Properties":{"Path":"$.log.ip"}},'
'{"column":"browser",         "Properties":{"Path":"$.log.browser"}},'
'{"column":"browser_version", "Properties":{"Path":"$.log.browser_version"}},'
'{"column":"os",              "Properties":{"Path":"$.log.os"}},'
'{"column":"event",           "Properties":{"Path":"$.log.event"}},'
'{"column":"user_id",         "Properties":{"Path":"$.log.user_id"}},'
'{"column":"host",            "Properties":{"Path":"$.log.host"}},'
'{"column":"project_id",      "Properties":{"Path":"$.log.project_id"}},'
'{"column":"details",         "Properties":{"Path":"$.log.details"}},'
'{"column":"resources",       "Properties":{"Path":"$.log.resources"}}'
']'
パスは必ず $.log. で始める必要があります($. ではありません)。Jitera チャートの FluentBit 出力ブロックは Log_Key log を設定しており、これによりパースされた各レコードは Kusto に送信される前にトップレベルの log キーでラップされます。$.severity$.ip などを使ったマッピングは行を受け入れますが、timestamp 以外のすべての列は空になります — FluentBit のログにも Kusto にもエラーは出ません。
5

ストリーミング取り込みの有効化(推奨)

ストリーミング取り込みを有効化しないと、行は数分単位でバッチ取り込みされます。監査をほぼリアルタイムで可視化するには、テーブルにポリシーを設定します。
.alter table audit_logs policy streamingingestion enable
ストリーミング取り込みはクラスターレベルでも有効化する必要があります。Streaming ingestion policy を参照してください。
6

Entra ID アプリケーションとデータベースロール

Entra ID のアプリ登録とクライアントシークレットを作成し、そのサービスプリンシパルにデータベースの Ingestor ロールを付与します。Database User では不十分です — Kusto の取り込みパスは Ingestor を要求します。
.add database <db-name> ingestors ('aadapp=<client-id>;<tenant-id>') 'Jitera audit ingestion'
正式な手順は データベースのセキュリティロール管理 を参照してください。
Kusto クラスターでパブリックネットワークアクセスを制限している場合、Jitera を実行している Kubernetes クラスターのエグレス IP(通常は NAT Gateway のパブリック IP)をクラスターの許可元に追加してください。

Helm 値

前提条件が揃ったら、出力を有効化します。
auditLogs:
  enabled: true
  outputs:
    azureDataExplorer:
      enabled: true
      env:
        # Kusto クラスターの Entra ID テナント。
        # 注意: 現行のチャートではキー名が "TANANT" と誤って綴られています。
        # チャートが AZURE_TENANT_ID を受け付けるようになるまでこのままにしてください。
        AZURE_TANANT_ID: "<TENANT_ID>"

        # `ingest-` プレフィックス付きの**取り込み** URI を使用します。
        # Azure ポータルの "URI" に表示されるクエリ URI ではありません。
        AZURE_INGESTION_ENDPOINT: "https://ingest-<cluster>.<region>.kusto.windows.net"

        AZURE_DATA_EXPLORER_DB_NAME:       "<DATABASE_NAME>"
        AZURE_INGESTION_TABLE:             "audit_logs"
        AZURE_INGESTION_MAPPING_REFERENCE: "audit_logs_mapping"

        AZURE_DATA_EXPLORER_CLIENT_ID:     "<ENTRA_APP_CLIENT_ID>"
        AZURE_DATA_EXPLORER_CLIENT_SECRET: "<ENTRA_APP_CLIENT_SECRET>"
AZURE_INGESTION_ENDPOINTingest- プレフィックスを必ず付けてください — https://ingest-<cluster>.<region>.kusto.windows.net。Azure ポータルの “URI” に表示される(ingest- のない)クエリ URI を指定すると、取り込み API は HTTP 404 を返します。
環境変数名 AZURE_TANANT_ID は Helm チャートにおける既知のスペルミスです。チャートが修正されるまで、values ファイルではこの綴りのまま設定してください。AZURE_TENANT_ID を使うと FluentBit 出力が未設定になり、取り込みが警告なしに無効化されます。

取り込みの確認

デプロイ後、行が到着していることを確認します。
audit_logs
| take 10
| project timestamp, event, user_id, ip, host
timestamp だけ値が入って他のすべての列が空の場合、取り込みマッピングが $.log.<field> ではなく $.<field> のパスを使っています — 上記の JSON 取り込みマッピング 手順の修正済みパスでマッピングを作り直してください。 FluentBit 側で診断する場合:
kubectl -n <namespace> logs <sidekiq-pod> -c fluentbit | grep -i kusto
参考: FluentBit Azure Kusto output

Azure Blob Storage

auditLogs:
  enabled: true
  outputs:
    azureBlob:
      enabled: true
      env:
        AZURE_STORAGE_ACCOUNT_NAME: "<STORAGE_ACCOUNT_NAME>"
        AZURE_BLOB_KEY: "<STORAGE_KEY>"
        AZURE_BLOB_CONTAINER: "<CONTAINER_NAME>"
複数の出力先を同時に有効にできます。例えば、監査ログをAWS S3とAzure Data Explorerの両方に同時に転送できます。

仕組み

  1. イベントトリガー - GraphQLミューテーションまたはコントローラーが監査ログヘルパーを呼び出す
  2. ジョブキューイング - イベントがSidekiqバックグラウンドジョブにキューイングされる
  3. 処理 - ジョブがリクエストコンテキストからユーザーエージェントとIP情報を抽出する
  4. バリデーション - 必須フィールド(eventuser_idtimestamp)が検証される
  5. ログ記録 - Sidekiqポッドの/var/log/audit.logにJSONエントリが追加される
  6. 収集 - FluentBitサイドカーがログファイルを監視する
  7. フィルタリング - FluentBitが動的タグ付けのためにeventフィールドを抽出する
  8. 転送 - 設定された出力先にログが転送される

ログエントリの例

{
  "severity": "AUDIT_ENTERPRISE",
  "timestamp": "2024-10-20T10:30:00.000Z",
  "ip": "203.0.113.45",
  "browser": "Chrome",
  "browser_version": "120.0.0.0",
  "os": "Windows",
  "event": "signup",
  "user_id": "usr_abc123",
  "host": "app.example.com"
}
{
  "severity": "AUDIT_ENTERPRISE",
  "timestamp": "2024-10-20T11:45:00.000Z",
  "ip": "198.51.100.200",
  "browser": "Firefox",
  "browser_version": "119.0",
  "os": "Mac OS X",
  "event": "trigger_frontend_code_generate",
  "user_id": "usr_xyz789",
  "host": "app.example.com",
  "project_id": "proj_123456",
  "resources": "{\"block_id\":\"blk_789\",\"component_type\":\"button\"}"
}
{
  "severity": "AUDIT_ENTERPRISE",
  "timestamp": "2024-10-20T12:00:00.000Z",
  "ip": "Internal Service",
  "browser": "Internal Service",
  "browser_version": "Internal Service",
  "os": "Internal Service",
  "event": "trigger_business_logic_sync",
  "user_id": "usr_def456",
  "project_id": "proj_789012"
}