メインコンテンツまでスキップ

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責任者、承認者、評価者、リスク受容者を管理する。
マスタsystemsSystem ID、分類、Owner ID、状態を管理する。
マスタassetsAsset ID、System ID、資産種別、環境、所有者を管理する。
マスタsuppliersSaaS、委託先、再委託先、外部API提供者を管理する。
マスタcontrol_objectives02のControl IDを管理する。
適用system_control_applicabilityどのシステムにどの統制目的を適用するかを管理する。
契約evidence_sources証跡の取得元を管理する。
契約evidence_contracts証跡契約を管理する。
証跡evidence_records取得した証跡メタデータを管理する。
証跡evidence_artifacts証跡原本または成果物への参照を管理する。
評価evidence_evaluations証跡に基づく統制評価結果を管理する。
例外exceptions未達、期限、代替統制、残余リスク、承認を管理する。
リスクrisk_register_entries経営報告・投資判断へ接続するリスクを管理する。
監査audit_eventsDB上の作成、更新、承認、削除操作を管理する。

テーブル設計

owners

責任者、承認者、評価者、リスク受容者を管理する。

カラム制約説明
owner_idstringPKOwner ID。
owner_typestringnot nullperson、team、department、supplier_contact。
display_namestringnot null表示名。
departmentstring所属部門。
emailstring連絡先。
statusstringnot nullactive、inactive。
created_atdatetimenot null作成時刻。
updated_atdatetimenot null更新時刻。

更新責任者は、人事・組織マスタ連携担当またはシステムオーナー管理担当とする。

systems

System ID、分類、所有者、状態を管理する。

カラム制約説明
system_idstringPKSystem ID。
system_namestringnot nullシステム名。
owner_idstringFK owners.owner_idシステムオーナー。
tierstringnot nulltier0、tier1、tier2、tier3。
external_flagbooleannot nullExternal属性の有無。
ai_data_flagbooleannot nullAI/Data属性の有無。
business_criticalitystringnot nullcritical、high、medium、low。
data_classificationstringnot nullrestricted、confidential、internal、public等。
statusstringnot nullplanned、active、retiring、retired。
created_atdatetimenot null作成時刻。
updated_atdatetimenot null更新時刻。

更新責任者は、システムオーナーとする。Tier、External、AI/Data、データ分類は承認履歴を残す。

assets

System ID配下の資産を管理する。

カラム制約説明
asset_idstringPKAsset ID。
system_idstringFK systems.system_id所属システム。
owner_idstringFK owners.owner_id資産責任者。
asset_typestringnot nullserver、database、container、endpoint、saas_tenant、api、account等。
environmentstringnot nullprod、staging、dev、test、shared。
asset_namestringnot null資産名。
external_exposurestringinternet、private、partner、none。
criticalitystringnot nullcritical、high、medium、low。
statusstringnot nullactive、inactive、retired。
created_atdatetimenot null作成時刻。
updated_atdatetimenot null更新時刻。

更新責任者は、インフラ・基盤担当、SaaS管理担当、または該当する資産管理システムの連携処理とする。

suppliers

外部サービス、委託先、再委託先、外部API提供者を管理する。

カラム制約説明
supplier_idstringPKSupplier ID。
supplier_namestringnot null提供者名。
supplier_typestringnot nullsaas、cloud、outsourcer、subcontractor、api_provider。
risk_ratingstringcritical、high、medium、low。
contract_owner_idstringFK owners.owner_id契約責任者。
statusstringnot nullactive、inactive、terminated。
created_atdatetimenot null作成時刻。
updated_atdatetimenot null更新時刻。

更新責任者は、外部サービス・委託先管理担当または調達・法務担当とする。

system_suppliers

systemsとsuppliersの多対多関係を管理する。

カラム制約説明
system_supplier_idstringPK関連ID。
system_idstringFK systems.system_id対象システム。
supplier_idstringFK suppliers.supplier_id対象提供者。
relationship_typestringnot nullhosting、saas、operations、support、api、subcontract。
data_access_levelstringnone、metadata、personal_data、confidential、privileged。
start_datedate開始日。
end_datedate終了日。
statusstringnot nullactive、planned、terminated。

1つのシステムが複数委託先へ依存し、1つの委託先が複数システムを支援するため、多対多として扱う。

control_objectives

02の統制目的カタログを管理する。

カラム制約説明
control_idstringPKControl ID。例: V-01。
control_domainstringnot nullgovernance、asset、iam、logging等。
control_namestringnot null統制目的名。
control_statementstringnot null統制目的文。
primary_rolestringnot null主担当。
statusstringnot nullactive、retired。
versionstringnot null版数。
created_atdatetimenot null作成時刻。
updated_atdatetimenot null更新時刻。

更新責任者は、CISOまたはセキュリティ統括とする。

system_control_applicability

システムごとの統制目的適用を管理する。systemsとcontrol_objectivesの多対多関係である。

カラム制約説明
applicability_idstringPK適用ID。
system_idstringFK systems.system_id対象システム。
control_idstringFK control_objectives.control_id対象統制。
applicability_statusstringnot nullapplicable、not_applicable、inherited、exception_required。
required_evidence_levelintegernot null要求Evidence Level。1から4。
freshness_sla_hoursinteger鮮度SLA。
control_owner_idstringFK owners.owner_id統制責任者。
applicability_reasonstring適用理由または対象外理由。
approved_bystringFK owners.owner_id承認者。
approved_atdatetime承認時刻。

更新責任者は、システムオーナーとセキュリティ部門とする。対象外判定には理由と承認を必須とする。

evidence_sources

証跡取得元を管理する。

カラム制約説明
source_idstringPK証跡ソースID。
source_namestringnot null取得元名。
source_typestringnot nullapi、log、scanner、cicd、ticket、contract、manual_upload。
system_idstringFK systems.system_id nullable特定システムに紐づく場合のSystem ID。
supplier_idstringFK suppliers.supplier_id nullable外部提供者に紐づく場合のSupplier ID。
owner_idstringFK owners.owner_idソース責任者。
collection_methodstringnot nullpull_api、push_event、file_upload、manual_entry。
trust_levelintegernot null標準Evidence Level。
statusstringnot nullactive、inactive。

更新責任者は、証跡ソースを所有する担当者とする。たとえばIdPはID担当、CSPMは基盤担当、チケットは運用担当が管理する。

evidence_contracts

証跡契約を管理する。system_control_applicabilityとevidence_sourcesを接続する。

カラム制約説明
contract_idstringPK証跡契約ID。
applicability_idstringFK system_control_applicability.applicability_id適用ID。
source_idstringFK evidence_sources.source_id証跡ソース。
evidence_namestringnot null証跡名。
required_evidence_levelintegernot null要求Evidence Level。
expected_formatstringnot nulljson、csv、pdf、log、ticket等。
collection_frequencystringnot nullcontinuous、daily、weekly、monthly、quarterly、event。
freshness_sla_hoursintegernot null鮮度SLA。
evaluation_methodstringnot nullautomated、manual_review、sampling、audit_test。
evidence_owner_idstringFK owners.owner_id証跡生成責任者。
evaluation_owner_idstringFK owners.owner_id評価責任者。
retention_daysintegernot null保存期間。
statusstringnot nullactive、paused、retired。

更新責任者は、システムオーナー、証跡生成責任者、セキュリティ部門の合意に基づく。Tier 0/1では承認履歴を必須とする。

evidence_records

取得された証跡メタデータを管理する。

カラム制約説明
evidence_idstringPKEvidence ID。
contract_idstringFK evidence_contracts.contract_id証跡契約ID。
source_idstringFK evidence_sources.source_id証跡ソース。
system_idstringFK systems.system_id対象システム。
generated_atdatetimenot null証跡生成時刻。
collected_atdatetimenot null証跡取得時刻。
evidence_levelintegernot null実際のEvidence Level。
evidence_formatstringnot null形式。
completeness_statusstringnot nullcomplete、partial、missing_scope、unknown。
freshness_statusstringnot nullwithin_sla、stale、unknown。
integrity_statusstringnot nullverified、unverified、failed。
overall_statusstringnot nullreceived、accepted、rejected、requires_review。
created_bystringFK owners.owner_id nullable手動登録者。自動取得ではnull可。

更新責任者は、自動収集ジョブまたは証跡生成責任者とする。評価者が直接改変してはならない。

evidence_record_assets

evidence_recordsとassetsの多対多関係を管理する。1つのCSPMレポートや脆弱性スキャン結果が複数資産を対象にするため必要である。

カラム制約説明
evidence_record_asset_idstringPK関連ID。
evidence_idstringFK evidence_records.evidence_id証跡ID。
asset_idstringFK assets.asset_id資産ID。
coverage_statusstringnot nullcovered、excluded、failed、unknown。
coverage_notestring除外理由、欠損理由。

evidence_record_controls

evidence_recordsとcontrol_objectivesの多対多関係を管理する。1つの証跡が複数統制を支える場合に使用する。

カラム制約説明
evidence_record_control_idstringPK関連ID。
evidence_idstringFK evidence_records.evidence_id証跡ID。
control_idstringFK control_objectives.control_id統制目的ID。
support_typestringnot nullprimary、supporting、compensating。

たとえばIdPのMFA設定エクスポートは、I-03の主証跡であり、I-06やL-02の補助証跡になり得る。

evidence_artifacts

証跡原本または成果物への参照を管理する。

カラム制約説明
artifact_idstringPK成果物ID。
evidence_idstringFK evidence_records.evidence_id証跡ID。
artifact_typestringnot nullraw_log、report、export、screenshot、contract_pdf、sbom、ticket_export。
storage_uristringnot null原本または成果物のURI。
content_hashstringハッシュ値。
signature_uristring署名またはタイムスタンプのURI。
retention_untildate保存期限。
access_classstringnot nullrestricted、confidential、internal。
created_atdatetimenot null登録時刻。

更新責任者は、証跡収集ジョブまたは証跡生成責任者とする。保存先の削除は保存期間と削除承認に従う。

evidence_evaluations

証跡に基づく統制評価結果を管理する。

カラム制約説明
evaluation_idstringPK評価ID。
evidence_idstringFK evidence_records.evidence_id証跡ID。
system_idstringFK systems.system_id対象システム。
control_idstringFK control_objectives.control_id対象統制。
evaluated_atdatetimenot null評価時刻。
evaluator_idstringFK owners.owner_id nullable評価者。自動評価ではnull可。
evaluator_typestringnot nullautomated、control_owner、security_review、internal_audit。
resultstringnot nulleffective、needs_improvement、exception、deficient、not_evaluated、not_applicable。
severitystringcritical、high、medium、low。
finding_summarystring評価結果の要約。
exception_idstringFK exceptions.exception_id nullable例外ID。
next_evaluation_duedatetime次回評価期限。

更新責任者は、評価責任者または自動評価ロジックとする。内部監査による評価は、評価者種別をinternal_auditとして記録する。

exceptions

例外とリスク受容を管理する。

カラム制約説明
exception_idstringPKException ID。
system_idstringFK systems.system_id対象システム。
asset_idstringFK assets.asset_id nullable対象資産。
control_idstringFK control_objectives.control_id対象統制。
reason_categorystringnot nulltechnical、business、contract、cost、migration、vendor。
reason_detailstringnot null例外理由。
compensating_controlstring代替統制。
residual_riskstringnot null残余リスク。
severitystringnot nullcritical、high、medium、low。
due_datedatenot null期限。
reassessment_datedatenot null再評価日。
approver_idstringFK owners.owner_id承認者。
risk_acceptor_idstringFK owners.owner_idリスク受容者。
statusstringnot nullrequested、approved、rejected、expired、closed。
created_atdatetimenot null作成時刻。
updated_atdatetimenot null更新時刻。

更新責任者は、申請者、承認者、リスク受容者を分離する。期限切れは自動的にexpiredへ遷移させる。

risk_register_entries

リスク登録簿への接続を管理する。

カラム制約説明
risk_idstringPKリスクID。
exception_idstringFK exceptions.exception_id nullable関連例外。
system_idstringFK systems.system_id対象システム。
risk_titlestringnot nullリスク名。
risk_statementstringnot nullリスク記述。
impactstringnot null影響。
likelihoodstringnot null発生可能性。
risk_owner_idstringFK owners.owner_idリスクオーナー。
treatment_planstring対応方針。
target_datedate対応期限。
statusstringnot nullopen、monitoring、accepted、mitigated、closed。

更新責任者は、リスク管理担当またはCISO組織とする。

audit_events

証跡DB上の操作ログを管理する。

カラム制約説明
audit_event_idstringPK監査イベントID。
actor_idstringFK owners.owner_id nullable操作主体。システム連携ではnull可。
actor_typestringnot nulluser、service_account、system_job。
actionstringnot nullcreate、update、approve、reject、delete、evaluate、collect。
target_tablestringnot null対象テーブル。
target_idstringnot null対象レコードID。
occurred_atdatetimenot null発生時刻。
source_ipstring操作元。
change_summarystring変更概要。

audit_eventsは、通常利用者が更新してはならない。DB、アプリケーション、連携基盤により自動記録する。

関係性

1対多

関係
ownerssystems1人または1組織のOwnerが複数システムを所有できる。
systemsassets1システムは複数資産を持つ。
control_objectivessystem_control_applicability1つの統制目的は複数システムへ適用される。
system_control_applicabilityevidence_contracts1つの適用判定に対して複数の証跡契約を持てる。
evidence_contractsevidence_records1つの証跡契約から複数時点の証跡レコードが生成される。
evidence_recordsevidence_artifacts1つの証跡レコードに複数の原本ファイル、レポート、添付を持てる。
evidence_recordsevidence_evaluations1つの証跡に対して自動評価、統制オーナー評価、監査評価を複数持てる。
exceptionsrisk_register_entries1つの例外が複数のリスク登録簿項目へ展開される場合がある。

多対多

関係中間テーブル理由
systemsとsupplierssystem_suppliers1システムは複数委託先へ依存し、1委託先は複数システムを支援する。
systemsとcontrol_objectivessystem_control_applicability1システムに複数統制が適用され、1統制は複数システムへ適用される。
evidence_recordsとassetsevidence_record_assets1つの証跡が複数資産を対象にし、1資産に複数証跡が存在する。
evidence_recordsとcontrol_objectivesevidence_record_controls1つの証跡が複数統制を支え、1統制には複数証跡が必要になる。
evidence_sourcesとcontrol_objectivesevidence_contracts経由1つの証跡ソースが複数統制を支え、1統制が複数ソースを要求する。

更新責任

対象主更新者承認者更新タイミング
owners人事・組織マスタ担当システムオーナー管理担当人事異動、組織変更、委託先変更時。
systemsシステムオーナーCISOまたは基準管理者新規登録、分類変更、移管、廃止時。
assetsインフラ・基盤担当、SaaS管理担当システムオーナー資産作成、変更、削除、棚卸し時。
suppliers委託先管理担当、調達、法務システムオーナーまたは契約責任者契約、更新、再委託、解約時。
control_objectivesCISOまたはセキュリティ統括リスク委員会または基準承認者基準改定時。
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へ保持する。

参考資料(出典)