892 lines
22 KiB
JSON
892 lines
22 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "urn:awoooi:iwooos-posture-projection-v1",
|
|
"title": "IwoooS 前端資安態勢投影契約 v1",
|
|
"description": "定義 IwoooS 如何以 read-only / mirror-only 方式呈現資安網態勢、進度、證據與禁止動作。此契約不授權 scan、execute、repo、refs、workflow、secret、runner、deploy 或 primary switch。",
|
|
"type": "object",
|
|
"required": [
|
|
"schema_version",
|
|
"status",
|
|
"date",
|
|
"product_id",
|
|
"display_name",
|
|
"mode",
|
|
"source_paths",
|
|
"summary",
|
|
"progress",
|
|
"posture_pillars",
|
|
"non_blocking_lane_ids",
|
|
"existing_frontend_surfaces",
|
|
"frontend_surface_conflict_controls",
|
|
"operator_journey_steps",
|
|
"owner_evidence_readiness_items",
|
|
"host_coverage_items",
|
|
"host_action_gate_items",
|
|
"host_evidence_readiness_items",
|
|
"host_evidence_collection_order",
|
|
"frontend_surface_coverage_groups",
|
|
"evidence_refs",
|
|
"allowed_frontend_outputs",
|
|
"forbidden_frontend_outputs",
|
|
"runtime_execution_authorized",
|
|
"action_buttons_allowed",
|
|
"not_authorization"
|
|
],
|
|
"properties": {
|
|
"schema_version": {
|
|
"const": "iwooos_posture_projection_v1"
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"draft"
|
|
]
|
|
},
|
|
"date": {
|
|
"type": "string"
|
|
},
|
|
"product_id": {
|
|
"const": "iwooos"
|
|
},
|
|
"display_name": {
|
|
"const": "IwoooS"
|
|
},
|
|
"mode": {
|
|
"type": "string",
|
|
"enum": [
|
|
"mirror_only"
|
|
]
|
|
},
|
|
"source_paths": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"summary": {
|
|
"type": "object",
|
|
"required": [
|
|
"route_path",
|
|
"nav_entry_added",
|
|
"command_palette_entry_added",
|
|
"contract_count",
|
|
"active_runtime_gate_count",
|
|
"approval_queue_total",
|
|
"pending_approval_count",
|
|
"block_candidate_count",
|
|
"owner_response_validation_received_count",
|
|
"owner_response_validation_accepted_count",
|
|
"github_primary_ready_count",
|
|
"existing_frontend_surface_count",
|
|
"frontend_surface_coverage_group_count",
|
|
"frontend_surface_conflict_control_count",
|
|
"operator_journey_step_count",
|
|
"owner_evidence_readiness_item_count",
|
|
"host_coverage_item_count",
|
|
"host_action_gate_item_count",
|
|
"host_evidence_readiness_item_count",
|
|
"host_evidence_collection_step_count",
|
|
"action_buttons_allowed"
|
|
],
|
|
"properties": {
|
|
"route_path": {
|
|
"const": "/iwooos"
|
|
},
|
|
"nav_entry_added": {
|
|
"type": "boolean",
|
|
"const": true
|
|
},
|
|
"command_palette_entry_added": {
|
|
"type": "boolean",
|
|
"const": true
|
|
},
|
|
"contract_count": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"active_runtime_gate_count": {
|
|
"type": "integer",
|
|
"const": 0
|
|
},
|
|
"approval_queue_total": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"pending_approval_count": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"block_candidate_count": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"owner_response_validation_received_count": {
|
|
"type": "integer",
|
|
"const": 0
|
|
},
|
|
"owner_response_validation_accepted_count": {
|
|
"type": "integer",
|
|
"const": 0
|
|
},
|
|
"github_primary_ready_count": {
|
|
"type": "integer",
|
|
"const": 0
|
|
},
|
|
"action_buttons_allowed": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"existing_frontend_surface_count": {
|
|
"type": "integer",
|
|
"const": 10
|
|
},
|
|
"frontend_surface_coverage_group_count": {
|
|
"type": "integer",
|
|
"const": 4
|
|
},
|
|
"frontend_surface_conflict_control_count": {
|
|
"type": "integer",
|
|
"const": 5
|
|
},
|
|
"operator_journey_step_count": {
|
|
"type": "integer",
|
|
"const": 6
|
|
},
|
|
"owner_evidence_readiness_item_count": {
|
|
"type": "integer",
|
|
"const": 7
|
|
},
|
|
"host_coverage_item_count": {
|
|
"type": "integer",
|
|
"const": 3
|
|
},
|
|
"host_action_gate_item_count": {
|
|
"type": "integer",
|
|
"const": 6
|
|
},
|
|
"host_evidence_readiness_item_count": {
|
|
"type": "integer",
|
|
"const": 7
|
|
},
|
|
"host_evidence_collection_step_count": {
|
|
"type": "integer",
|
|
"const": 7
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"progress": {
|
|
"type": "object",
|
|
"required": [
|
|
"overall_percent",
|
|
"framework_percent_min",
|
|
"framework_percent_max",
|
|
"runtime_landing_percent_min",
|
|
"runtime_landing_percent_max",
|
|
"headline_status",
|
|
"not_authorization"
|
|
],
|
|
"properties": {
|
|
"overall_percent": {
|
|
"type": "integer",
|
|
"const": 58
|
|
},
|
|
"framework_percent_min": {
|
|
"type": "integer",
|
|
"const": 80
|
|
},
|
|
"framework_percent_max": {
|
|
"type": "integer",
|
|
"const": 85
|
|
},
|
|
"runtime_landing_percent_min": {
|
|
"type": "integer",
|
|
"const": 35
|
|
},
|
|
"runtime_landing_percent_max": {
|
|
"type": "integer",
|
|
"const": 40
|
|
},
|
|
"headline_status": {
|
|
"const": "holding_until_owner_response_or_runtime_gate"
|
|
},
|
|
"not_authorization": {
|
|
"type": "boolean",
|
|
"const": true
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"posture_pillars": {
|
|
"type": "array",
|
|
"minItems": 4,
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"pillar_id",
|
|
"display_order",
|
|
"display_state",
|
|
"source_contract",
|
|
"display_mode",
|
|
"runtime_execution_authorized",
|
|
"not_authorization"
|
|
],
|
|
"properties": {
|
|
"pillar_id": {
|
|
"type": "string"
|
|
},
|
|
"display_order": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"display_state": {
|
|
"type": "string"
|
|
},
|
|
"source_contract": {
|
|
"type": "string"
|
|
},
|
|
"display_mode": {
|
|
"const": "posture_only"
|
|
},
|
|
"runtime_execution_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"not_authorization": {
|
|
"type": "boolean",
|
|
"const": true
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"non_blocking_lane_ids": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"evidence_refs": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"allowed_frontend_outputs": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"forbidden_frontend_outputs": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"runtime_execution_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"action_buttons_allowed": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"not_authorization": {
|
|
"type": "boolean",
|
|
"const": true
|
|
},
|
|
"existing_frontend_surfaces": {
|
|
"type": "array",
|
|
"minItems": 10,
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"surface_id",
|
|
"route_path",
|
|
"display_order",
|
|
"source_page",
|
|
"source_components",
|
|
"source_api_routes",
|
|
"display_mode",
|
|
"runtime_execution_authorized",
|
|
"action_buttons_allowed",
|
|
"not_authorization"
|
|
],
|
|
"properties": {
|
|
"surface_id": {
|
|
"type": "string"
|
|
},
|
|
"route_path": {
|
|
"type": "string"
|
|
},
|
|
"display_order": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"source_page": {
|
|
"type": "string"
|
|
},
|
|
"source_components": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"source_api_routes": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"display_mode": {
|
|
"const": "link_only"
|
|
},
|
|
"runtime_execution_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"action_buttons_allowed": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"not_authorization": {
|
|
"type": "boolean",
|
|
"const": true
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"frontend_surface_coverage_groups": {
|
|
"type": "array",
|
|
"minItems": 4,
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"group_id",
|
|
"display_order",
|
|
"responsibility_plane",
|
|
"surface_ids",
|
|
"display_mode",
|
|
"overlap_control",
|
|
"runtime_execution_authorized",
|
|
"action_buttons_allowed",
|
|
"not_authorization"
|
|
],
|
|
"properties": {
|
|
"group_id": {
|
|
"type": "string"
|
|
},
|
|
"display_order": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"responsibility_plane": {
|
|
"type": "string"
|
|
},
|
|
"surface_ids": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"display_mode": {
|
|
"const": "coverage_only"
|
|
},
|
|
"overlap_control": {
|
|
"type": "string"
|
|
},
|
|
"runtime_execution_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"action_buttons_allowed": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"not_authorization": {
|
|
"type": "boolean",
|
|
"const": true
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"frontend_surface_conflict_controls": {
|
|
"type": "array",
|
|
"minItems": 5,
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"control_id",
|
|
"display_order",
|
|
"control_scope",
|
|
"blocked_misread",
|
|
"display_mode",
|
|
"runtime_execution_authorized",
|
|
"action_buttons_allowed",
|
|
"not_authorization"
|
|
],
|
|
"properties": {
|
|
"control_id": {
|
|
"type": "string"
|
|
},
|
|
"display_order": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"control_scope": {
|
|
"type": "string"
|
|
},
|
|
"blocked_misread": {
|
|
"type": "string"
|
|
},
|
|
"display_mode": {
|
|
"const": "conflict_control_only"
|
|
},
|
|
"runtime_execution_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"action_buttons_allowed": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"not_authorization": {
|
|
"type": "boolean",
|
|
"const": true
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"operator_journey_steps": {
|
|
"type": "array",
|
|
"minItems": 6,
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"step_id",
|
|
"display_order",
|
|
"responsibility_plane",
|
|
"source_refs",
|
|
"display_mode",
|
|
"allowed_outcome",
|
|
"runtime_execution_authorized",
|
|
"action_buttons_allowed",
|
|
"not_authorization"
|
|
],
|
|
"properties": {
|
|
"step_id": {
|
|
"type": "string"
|
|
},
|
|
"display_order": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"responsibility_plane": {
|
|
"type": "string"
|
|
},
|
|
"source_refs": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"display_mode": {
|
|
"const": "journey_only"
|
|
},
|
|
"allowed_outcome": {
|
|
"type": "string"
|
|
},
|
|
"runtime_execution_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"action_buttons_allowed": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"not_authorization": {
|
|
"type": "boolean",
|
|
"const": true
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"owner_evidence_readiness_items": {
|
|
"type": "array",
|
|
"minItems": 7,
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"item_id",
|
|
"display_order",
|
|
"stage_id",
|
|
"source_contract",
|
|
"readiness_state",
|
|
"received_count",
|
|
"accepted_count",
|
|
"display_mode",
|
|
"unlock_condition",
|
|
"runtime_execution_authorized",
|
|
"action_buttons_allowed",
|
|
"not_authorization"
|
|
],
|
|
"properties": {
|
|
"item_id": {
|
|
"type": "string"
|
|
},
|
|
"display_order": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"stage_id": {
|
|
"type": "string"
|
|
},
|
|
"source_contract": {
|
|
"type": "string"
|
|
},
|
|
"readiness_state": {
|
|
"type": "string"
|
|
},
|
|
"received_count": {
|
|
"type": "integer",
|
|
"const": 0
|
|
},
|
|
"accepted_count": {
|
|
"type": "integer",
|
|
"const": 0
|
|
},
|
|
"display_mode": {
|
|
"const": "readiness_only"
|
|
},
|
|
"unlock_condition": {
|
|
"type": "string"
|
|
},
|
|
"runtime_execution_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"action_buttons_allowed": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"not_authorization": {
|
|
"type": "boolean",
|
|
"const": true
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"host_coverage_items": {
|
|
"type": "array",
|
|
"minItems": 3,
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"host_id",
|
|
"display_order",
|
|
"address",
|
|
"role",
|
|
"source_contract",
|
|
"coverage_state",
|
|
"scan_scope_state",
|
|
"display_mode",
|
|
"active_scan_authorized",
|
|
"ssh_change_authorized",
|
|
"runtime_execution_authorized",
|
|
"action_buttons_allowed",
|
|
"not_authorization"
|
|
],
|
|
"properties": {
|
|
"host_id": {
|
|
"type": "string"
|
|
},
|
|
"display_order": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"role": {
|
|
"type": "string"
|
|
},
|
|
"source_contract": {
|
|
"type": "string"
|
|
},
|
|
"coverage_state": {
|
|
"type": "string"
|
|
},
|
|
"scan_scope_state": {
|
|
"type": "string"
|
|
},
|
|
"display_mode": {
|
|
"const": "coverage_only"
|
|
},
|
|
"active_scan_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"ssh_change_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"runtime_execution_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"action_buttons_allowed": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"not_authorization": {
|
|
"type": "boolean",
|
|
"const": true
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"host_action_gate_items": {
|
|
"type": "array",
|
|
"minItems": 6,
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"action_id",
|
|
"display_order",
|
|
"related_hosts",
|
|
"required_gate",
|
|
"gate_state",
|
|
"display_mode",
|
|
"active_scan_authorized",
|
|
"credentialed_scan_authorized",
|
|
"ssh_change_authorized",
|
|
"host_update_authorized",
|
|
"runtime_execution_authorized",
|
|
"action_buttons_allowed",
|
|
"not_authorization"
|
|
],
|
|
"properties": {
|
|
"action_id": {
|
|
"type": "string"
|
|
},
|
|
"display_order": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"related_hosts": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required_gate": {
|
|
"type": "string"
|
|
},
|
|
"gate_state": {
|
|
"type": "string"
|
|
},
|
|
"display_mode": {
|
|
"const": "gate_only"
|
|
},
|
|
"active_scan_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"credentialed_scan_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"ssh_change_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"host_update_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"runtime_execution_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"action_buttons_allowed": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"not_authorization": {
|
|
"type": "boolean",
|
|
"const": true
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"host_evidence_readiness_items": {
|
|
"type": "array",
|
|
"minItems": 7,
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"item_id",
|
|
"display_order",
|
|
"related_hosts",
|
|
"required_gate",
|
|
"evidence_state",
|
|
"received_count",
|
|
"accepted_count",
|
|
"display_mode",
|
|
"active_scan_authorized",
|
|
"credentialed_scan_authorized",
|
|
"ssh_change_authorized",
|
|
"host_update_authorized",
|
|
"runtime_execution_authorized",
|
|
"action_buttons_allowed",
|
|
"not_authorization"
|
|
],
|
|
"properties": {
|
|
"item_id": {
|
|
"type": "string"
|
|
},
|
|
"display_order": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"related_hosts": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required_gate": {
|
|
"type": "string"
|
|
},
|
|
"evidence_state": {
|
|
"type": "string"
|
|
},
|
|
"received_count": {
|
|
"type": "integer",
|
|
"const": 0
|
|
},
|
|
"accepted_count": {
|
|
"type": "integer",
|
|
"const": 0
|
|
},
|
|
"display_mode": {
|
|
"const": "evidence_readiness_only"
|
|
},
|
|
"active_scan_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"credentialed_scan_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"ssh_change_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"host_update_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"runtime_execution_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"action_buttons_allowed": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"not_authorization": {
|
|
"type": "boolean",
|
|
"const": true
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"host_evidence_collection_order": {
|
|
"type": "array",
|
|
"minItems": 7,
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"step_id",
|
|
"display_order",
|
|
"source_item_id",
|
|
"depends_on_step_ids",
|
|
"collection_state",
|
|
"display_mode",
|
|
"received_count",
|
|
"accepted_count",
|
|
"runtime_execution_authorized",
|
|
"action_buttons_allowed",
|
|
"not_authorization"
|
|
],
|
|
"properties": {
|
|
"step_id": {
|
|
"type": "string"
|
|
},
|
|
"display_order": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"source_item_id": {
|
|
"type": "string"
|
|
},
|
|
"depends_on_step_ids": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"collection_state": {
|
|
"type": "string"
|
|
},
|
|
"display_mode": {
|
|
"const": "collection_order_only"
|
|
},
|
|
"received_count": {
|
|
"type": "integer",
|
|
"const": 0
|
|
},
|
|
"accepted_count": {
|
|
"type": "integer",
|
|
"const": 0
|
|
},
|
|
"runtime_execution_authorized": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"action_buttons_allowed": {
|
|
"type": "boolean",
|
|
"const": false
|
|
},
|
|
"not_authorization": {
|
|
"type": "boolean",
|
|
"const": true
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|