93 証跡DB設計
目的
本付録は、04「証跡基準」を実装するための証跡DB設計を定義する。証跡DBは、ログやスキャン結果の全原本を格納する巨大保管庫ではない。証跡DBは、統制目的、対象システム、対象資産、証跡契約、証跡メタデータ、評価結果、例外、リスク登録簿を接続する証跡レジストリである。
原本ログ、スキャン詳細、契約PDF、CI/CD成果物、SBOMファイル等は、原本システムまたはオブジェクトストレージに保持してよい。ただし、証跡DBには原本へ到達できる参照、ハッシュ、取得時刻、評価結果、責任者を保持しなければならない。
設計原則
| 原則 | 要求 |
|---|---|
| メタデータ中心 | DBには証跡原本そのものではなく、証跡を説明・評価・追跡するメタデータを保持する。 |
| 共通ID接続 | System ID、Asset ID、Owner ID、Control ID、Evidence ID、Exception IDを主キーまたは外部キーとして接続する。 |
| 時系列管理 | 証跡、評価、例外、リスク判断は時刻を持ち、過去状態を追跡できるようにする。 |
| 多対多を明示 | 1つの証跡が複数資産・複数統制を満たす場合は中間テーブルで表現する。 |
| 原本分離 | 大容量原本は外部ストレージに置き、DBにはURI、ハッシュ、署名、保存ポリシーを保持する。 |
| 責任分離 | マスタ更新、証跡取得、評価、例外承認、監査確認の更新者を分ける。 |
| 監査可能性 | 登録、更新、評価、承認、削除の操作ログを保持する。 |
概念図
この構造では、証跡契約が中心になる。証跡契約は、どのシステムの、どの統制目的について、どの証跡ソースから、どの頻度と品質で証跡を取得し、誰が評価するかを定義する。
ER概念図
主要エンティティ
| 区分 | テーブル | 役割 |
|---|---|---|
| マスタ | owners | 責任者、承認者、評価者、リスク受容者を管理する。 |
| マスタ | systems | System ID、分類、Owner ID、状態を管理する。 |
| マスタ | assets | Asset ID、System ID、資産種別、環境、所有者を管理する。 |
| マスタ | suppliers | SaaS、委託先、再委託先、外部API提供者を管理する。 |
| マスタ | control_objectives | 02のControl IDを管理する。 |
| 適用 | system_control_applicability | どのシステムにどの統制目的を適用するかを管理する。 |
| 契約 | evidence_sources | 証跡の取得元を管理する。 |
| 契約 | evidence_contracts | 証跡契約を管理する。 |
| 証跡 | evidence_records | 取得した証跡メタデータを管理する。 |
| 証跡 | evidence_artifacts | 証跡原本または成果物への参照を管理する。 |
| 評価 | evidence_evaluations | 証跡に基づく統制評価結果を管理する。 |
| 例外 | exceptions | 未達、期限、代替統制、残余リスク、承認を管理する。 |
| リスク | risk_register_entries | 経営報告・投資判断へ接続するリスクを管理する。 |
| 監査 | audit_events | DB上の作成、更新、承認、削除操作を管理する。 |
テーブル設計
owners
責任者、承認者、評価者、リスク受容者を管理する。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| owner_id | string | PK | Owner ID。 |
| owner_type | string | not null | person、team、department、supplier_contact。 |
| display_name | string | not null | 表示名。 |
| department | string | 所属部門。 | |
| string | 連絡先。 | ||
| status | string | not null | active、inactive。 |
| created_at | datetime | not null | 作成時刻。 |
| updated_at | datetime | not null | 更新時刻。 |
更新責任者は、人事・組織マスタ連携担当またはシステムオーナー管理担当とする。
systems
System ID、分類、所有者、状態を管理する。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| system_id | string | PK | System ID。 |
| system_name | string | not null | システム名。 |
| owner_id | string | FK owners.owner_id | システムオーナー。 |
| tier | string | not null | tier0、tier1、tier2、tier3。 |
| external_flag | boolean | not null | External属性の有無。 |
| ai_data_flag | boolean | not null | AI/Data属性の有無。 |
| business_criticality | string | not null | critical、high、medium、low。 |
| data_classification | string | not null | restricted、confidential、internal、public等。 |
| status | string | not null | planned、active、retiring、retired。 |
| created_at | datetime | not null | 作成時刻。 |
| updated_at | datetime | not null | 更新時刻。 |
更新責任者は、システムオーナーとする。Tier、External、AI/Data、データ分類は承認履歴を残す。
assets
System ID配下の資産を管理する。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| asset_id | string | PK | Asset ID。 |
| system_id | string | FK systems.system_id | 所属システム。 |
| owner_id | string | FK owners.owner_id | 資産責任者。 |
| asset_type | string | not null | server、database、container、endpoint、saas_tenant、api、account等。 |
| environment | string | not null | prod、staging、dev、test、shared。 |
| asset_name | string | not null | 資産名。 |
| external_exposure | string | internet、private、partner、none。 | |
| criticality | string | not null | critical、high、medium、low。 |
| status | string | not null | active、inactive、retired。 |
| created_at | datetime | not null | 作成時刻。 |
| updated_at | datetime | not null | 更新時刻。 |
更新責任者は、インフラ・基盤担当、SaaS管理担当、または該当する資産管理システムの連携処理とする。
suppliers
外部サービス、委託先、再委託先、外部API提供者を管理する。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| supplier_id | string | PK | Supplier ID。 |
| supplier_name | string | not null | 提供者名。 |
| supplier_type | string | not null | saas、cloud、outsourcer、subcontractor、api_provider。 |
| risk_rating | string | critical、high、medium、low。 | |
| contract_owner_id | string | FK owners.owner_id | 契約責任者。 |
| status | string | not null | active、inactive、terminated。 |
| created_at | datetime | not null | 作成時刻。 |
| updated_at | datetime | not null | 更新時刻。 |
更新責任者は、外部サービス・委託先管理担当または調達・法務担当とする。
system_suppliers
systemsとsuppliersの多対多関係を管理する。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| system_supplier_id | string | PK | 関連ID。 |
| system_id | string | FK systems.system_id | 対象システム。 |
| supplier_id | string | FK suppliers.supplier_id | 対象提供者。 |
| relationship_type | string | not null | hosting、saas、operations、support、api、subcontract。 |
| data_access_level | string | none、metadata、personal_data、confidential、privileged。 | |
| start_date | date | 開始日。 | |
| end_date | date | 終了日。 | |
| status | string | not null | active、planned、terminated。 |
1つのシステムが複数委託先へ依存し、1つの委託先が複数システムを支援するため、多対多として扱う。
control_objectives
02の統制目的カタログを管理する。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| control_id | string | PK | Control ID。例: V-01。 |
| control_domain | string | not null | governance、asset、iam、logging等。 |
| control_name | string | not null | 統制目的名。 |
| control_statement | string | not null | 統制目的文。 |
| primary_role | string | not null | 主担当。 |
| status | string | not null | active、retired。 |
| version | string | not null | 版数。 |
| created_at | datetime | not null | 作成時刻。 |
| updated_at | datetime | not null | 更新時刻。 |
更新責任者は、CISOまたはセキュリティ統括とする。
system_control_applicability
システムごとの統制目的適用を管理する。systemsとcontrol_objectivesの多対多関係である。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| applicability_id | string | PK | 適用ID。 |
| system_id | string | FK systems.system_id | 対象システム。 |
| control_id | string | FK control_objectives.control_id | 対象統制。 |
| applicability_status | string | not null | applicable、not_applicable、inherited、exception_required。 |
| required_evidence_level | integer | not null | 要求Evidence Level。1から4。 |
| freshness_sla_hours | integer | 鮮度SLA。 | |
| control_owner_id | string | FK owners.owner_id | 統制責任者。 |
| applicability_reason | string | 適用理由または対象外理由。 | |
| approved_by | string | FK owners.owner_id | 承認者。 |
| approved_at | datetime | 承認時刻。 |
更新責任者は、システムオーナーとセキュリティ部門とする。対象外判定には理由と承認を必須とする。
evidence_sources
証跡取得元を管理する。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| source_id | string | PK | 証跡ソースID。 |
| source_name | string | not null | 取得元名。 |
| source_type | string | not null | api、log、scanner、cicd、ticket、contract、manual_upload。 |
| system_id | string | FK systems.system_id nullable | 特定システムに紐づく場合のSystem ID。 |
| supplier_id | string | FK suppliers.supplier_id nullable | 外部提供者に紐づく場合のSupplier ID。 |
| owner_id | string | FK owners.owner_id | ソース責任者。 |
| collection_method | string | not null | pull_api、push_event、file_upload、manual_entry。 |
| trust_level | integer | not null | 標準Evidence Level。 |
| status | string | not null | active、inactive。 |
更新責任者は、証跡ソースを所有する担当者とする。たとえばIdPはID担当、CSPMは基盤担当、チケットは運用担当が管理する。
evidence_contracts
証跡契約を管理する。system_control_applicabilityとevidence_sourcesを接続する。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| contract_id | string | PK | 証跡契約ID。 |
| applicability_id | string | FK system_control_applicability.applicability_id | 適用ID。 |
| source_id | string | FK evidence_sources.source_id | 証跡ソース。 |
| evidence_name | string | not null | 証跡名。 |
| required_evidence_level | integer | not null | 要求Evidence Level。 |
| expected_format | string | not null | json、csv、pdf、log、ticket等。 |
| collection_frequency | string | not null | continuous、daily、weekly、monthly、quarterly、event。 |
| freshness_sla_hours | integer | not null | 鮮度SLA。 |
| evaluation_method | string | not null | automated、manual_review、sampling、audit_test。 |
| evidence_owner_id | string | FK owners.owner_id | 証跡生成責任者。 |
| evaluation_owner_id | string | FK owners.owner_id | 評価責任者。 |
| retention_days | integer | not null | 保存期間。 |
| status | string | not null | active、paused、retired。 |
更新責任者は、システムオーナー、証跡生成責任者、セキュリティ部門の合意に基づく。Tier 0/1では承認履歴を必須とする。
evidence_records
取得された証跡メタデータを管理する。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| evidence_id | string | PK | Evidence ID。 |
| contract_id | string | FK evidence_contracts.contract_id | 証跡契約ID。 |
| source_id | string | FK evidence_sources.source_id | 証跡ソース。 |
| system_id | string | FK systems.system_id | 対象システム。 |
| generated_at | datetime | not null | 証跡生成時刻。 |
| collected_at | datetime | not null | 証跡取得時刻。 |
| evidence_level | integer | not null | 実際のEvidence Level。 |
| evidence_format | string | not null | 形式。 |
| completeness_status | string | not null | complete、partial、missing_scope、unknown。 |
| freshness_status | string | not null | within_sla、stale、unknown。 |
| integrity_status | string | not null | verified、unverified、failed。 |
| overall_status | string | not null | received、accepted、rejected、requires_review。 |
| created_by | string | FK owners.owner_id nullable | 手動登録者。自動取得ではnull可。 |
更新責任者は、自動収集ジョブまたは証跡生成責任者とする。評価者が直接改変してはならない。
evidence_record_assets
evidence_recordsとassetsの多対多関係を管理する。1つのCSPMレポートや脆弱性スキャン結果が複数資産を対象にするため必要である。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| evidence_record_asset_id | string | PK | 関連ID。 |
| evidence_id | string | FK evidence_records.evidence_id | 証跡ID。 |
| asset_id | string | FK assets.asset_id | 資産ID。 |
| coverage_status | string | not null | covered、excluded、failed、unknown。 |
| coverage_note | string | 除外理由、欠損理由。 |
evidence_record_controls
evidence_recordsとcontrol_objectivesの多対多関係を管理する。1つの証跡が複数統制を支える場合に使用する。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| evidence_record_control_id | string | PK | 関連ID。 |
| evidence_id | string | FK evidence_records.evidence_id | 証跡ID。 |
| control_id | string | FK control_objectives.control_id | 統制目的ID。 |
| support_type | string | not null | primary、supporting、compensating。 |
たとえばIdPのMFA設定エクスポートは、I-03の主証跡であり、I-06やL-02の補助証跡になり得る。
evidence_artifacts
証跡原本または成果物への参照を管理する。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| artifact_id | string | PK | 成果物ID。 |
| evidence_id | string | FK evidence_records.evidence_id | 証跡ID。 |
| artifact_type | string | not null | raw_log、report、export、screenshot、contract_pdf、sbom、ticket_export。 |
| storage_uri | string | not null | 原本または成果物のURI。 |
| content_hash | string | ハッシュ値。 | |
| signature_uri | string | 署名またはタイムスタンプのURI。 | |
| retention_until | date | 保存期限。 | |
| access_class | string | not null | restricted、confidential、internal。 |
| created_at | datetime | not null | 登録時刻。 |
更新責任者は、証跡収集ジョブまたは証跡生成責任者とする。保存先の削除は保存期間と削除承認に従う。
evidence_evaluations
証跡に基づく統制評価結果を管理する。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| evaluation_id | string | PK | 評価ID。 |
| evidence_id | string | FK evidence_records.evidence_id | 証跡ID。 |
| system_id | string | FK systems.system_id | 対象システム。 |
| control_id | string | FK control_objectives.control_id | 対象統制。 |
| evaluated_at | datetime | not null | 評価時刻。 |
| evaluator_id | string | FK owners.owner_id nullable | 評価者。自動評価ではnull可。 |
| evaluator_type | string | not null | automated、control_owner、security_review、internal_audit。 |
| result | string | not null | effective、needs_improvement、exception、deficient、not_evaluated、not_applicable。 |
| severity | string | critical、high、medium、low。 | |
| finding_summary | string | 評価結果の要約。 | |
| exception_id | string | FK exceptions.exception_id nullable | 例外ID。 |
| next_evaluation_due | datetime | 次回評価期限。 |
更新責任者は、評価責任者または自動評価ロジックとする。内部監査による評価は、評価者種別をinternal_auditとして記録する。
exceptions
例外とリスク受容を管理する。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| exception_id | string | PK | Exception ID。 |
| system_id | string | FK systems.system_id | 対象システム。 |
| asset_id | string | FK assets.asset_id nullable | 対象資産。 |
| control_id | string | FK control_objectives.control_id | 対象統制。 |
| reason_category | string | not null | technical、business、contract、cost、migration、vendor。 |
| reason_detail | string | not null | 例外理由。 |
| compensating_control | string | 代替統制。 | |
| residual_risk | string | not null | 残余リスク。 |
| severity | string | not null | critical、high、medium、low。 |
| due_date | date | not null | 期限。 |
| reassessment_date | date | not null | 再評価日。 |
| approver_id | string | FK owners.owner_id | 承認者。 |
| risk_acceptor_id | string | FK owners.owner_id | リスク受容者。 |
| status | string | not null | requested、approved、rejected、expired、closed。 |
| created_at | datetime | not null | 作成時刻。 |
| updated_at | datetime | not null | 更新時刻。 |
更新責任者は、申請者、承認者、リスク受容者を分離する。期限切れは自動的にexpiredへ遷移させる。
risk_register_entries
リスク登録簿への接続を管理する。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| risk_id | string | PK | リスクID。 |
| exception_id | string | FK exceptions.exception_id nullable | 関連例外。 |
| system_id | string | FK systems.system_id | 対象システム。 |
| risk_title | string | not null | リスク名。 |
| risk_statement | string | not null | リスク記述。 |
| impact | string | not null | 影響。 |
| likelihood | string | not null | 発生可能性。 |
| risk_owner_id | string | FK owners.owner_id | リスクオーナー。 |
| treatment_plan | string | 対応方針。 | |
| target_date | date | 対応期限。 | |
| status | string | not null | open、monitoring、accepted、mitigated、closed。 |
更新責任者は、リスク管理担当またはCISO組織とする。
audit_events
証跡DB上の操作ログを管理する。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
| audit_event_id | string | PK | 監査イベントID。 |
| actor_id | string | FK owners.owner_id nullable | 操作主体。システム連携ではnull可。 |
| actor_type | string | not null | user、service_account、system_job。 |
| action | string | not null | create、update、approve、reject、delete、evaluate、collect。 |
| target_table | string | not null | 対象テーブル。 |
| target_id | string | not null | 対象レコードID。 |
| occurred_at | datetime | not null | 発生時刻。 |
| source_ip | string | 操作元。 | |
| change_summary | string | 変更概要。 |
audit_eventsは、通常利用者が更新してはならない。DB、アプリケーション、連携基盤により自動記録する。
関係性
1対多
| 親 | 子 | 関係 |
|---|---|---|
| owners | systems | 1人または1組織のOwnerが複数システムを所有できる。 |
| systems | assets | 1システムは複数資産を持つ。 |
| control_objectives | system_control_applicability | 1つの統制目的は複数システムへ適用される。 |
| system_control_applicability | evidence_contracts | 1つの適用判定に対して複数の証跡契約を持てる。 |
| evidence_contracts | evidence_records | 1つの証跡契約から複数時点の証跡レコードが生成される。 |
| evidence_records | evidence_artifacts | 1つの証跡レコードに複数の原本ファイル、レポート、添付を持てる。 |
| evidence_records | evidence_evaluations | 1つの証跡に対して自動評価、統制オーナー評価、監査評価を複数持てる。 |
| exceptions | risk_register_entries | 1つの例外が複数のリスク登録簿項目へ展開される場合がある。 |
多対多
| 関係 | 中間テーブル | 理由 |
|---|---|---|
| systemsとsuppliers | system_suppliers | 1システムは複数委託先へ依存し、1委託先は複数システムを支援する。 |
| systemsとcontrol_objectives | system_control_applicability | 1システムに複数統制が適用され、1統制は複数システムへ適用される。 |
| evidence_recordsとassets | evidence_record_assets | 1つの証跡が複数資産を対象にし、1資産に複数証跡が存在する。 |
| evidence_recordsとcontrol_objectives | evidence_record_controls | 1つの証跡が複数統制を支え、1統制には複数証跡が必要になる。 |
| evidence_sourcesとcontrol_objectives | evidence_contracts経由 | 1つの証跡ソースが複数統制を支え、1統制が複数ソースを要求する。 |
更新責任
| 対象 | 主更新者 | 承認者 | 更新タイミング |
|---|---|---|---|
| owners | 人事・組織マスタ担当 | システムオーナー管理担当 | 人事異動、組織変更、委託先変更時。 |
| systems | システムオーナー | CISOまたは基準管理者 | 新規登録、分類変更、移管、廃止時。 |
| assets | インフラ・基盤担当、SaaS管理担当 | システムオーナー | 資産作成、変更、削除、棚卸し時。 |
| suppliers | 委託先管理担当、調達、法務 | システムオーナーまたは契約責任者 | 契約、更新、再委託、解約時。 |
| control_objectives | CISOまたはセキュリティ統括 | リスク委員会または基準承認者 | 基準改定時。 |
| system_control_applicability | システムオーナー、セキュリティ部門 | CISOまたは委任者 | 分類判定、基準改定、重大変更時。 |
| evidence_sources | 各ソースオーナー | 証跡基盤管理者 | 連携追加、取得方法変更、廃止時。 |
| evidence_contracts | システムオーナー、証跡生成責任者、セキュリティ部門 | CISOまたは委任者 | 証跡契約作成、鮮度SLA変更時。 |
| evidence_records | 自動収集ジョブ、証跡生成責任者 | 証跡基盤管理者 | 証跡取得時。 |
| evidence_evaluations | 自動評価、統制オーナー、内部監査 | 評価責任者 | 証跡取得後、定期評価、監査時。 |
| exceptions | 申請者、システムオーナー | 承認者、リスク受容者 | 基準未達、SLA超過、証跡不備発生時。 |
| risk_register_entries | リスク管理担当、CISO組織 | 経営またはリスク委員会 | 重大例外、期限切れ、投資判断時。 |
| audit_events | システム自動記録 | 変更不可 | 全操作時。 |
更新フロー
実装上の注意
証跡DBは、RDBを基本に設計してよい。ただし、ログ原本、スキャン詳細、SBOM、契約PDFなどの大容量データは、オブジェクトストレージまたは原本システムへ保持し、DBは参照情報を保持する。
評価やレポートの高速化のため、system_id、control_id、asset_id、contract_id、generated_at、collected_at、result、status、due_dateには索引を設定する。
証跡の削除は物理削除を原則禁止し、保存期限到来後に削除ワークフローを経る。監査上必要な場合は、削除記録をaudit_eventsへ保持する。