archsight 0.3.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +1 -1
- data/README.md +6 -1
- data/docs/icons.md +29 -2
- data/docs/index.md.erb +22 -4
- data/docs/modeling.md +268 -6
- data/docs/pages.md +12 -3
- data/docs/search.md +9 -2
- data/docs/togaf.md +8 -1
- data/lib/archsight/annotations/asset_annotations.rb +34 -0
- data/lib/archsight/annotations/relation_resolver.rb +15 -6
- data/lib/archsight/annotations/risk_annotations.rb +21 -0
- data/lib/archsight/cli.rb +6 -0
- data/lib/archsight/database.rb +57 -3
- data/lib/archsight/diagram.rb +7 -0
- data/lib/archsight/documentation.rb +10 -6
- data/lib/archsight/editor.rb +2 -2
- data/lib/archsight/helpers/requirements_blocks.rb +1 -1
- data/lib/archsight/helpers/resource_resolver.rb +1 -1
- data/lib/archsight/helpers/wiki_links.rb +11 -0
- data/lib/archsight/linter.rb +110 -0
- data/lib/archsight/mcp/analyze_resource_tool.rb +2 -2
- data/lib/archsight/mcp/resource_doc_tool.rb +2 -2
- data/lib/archsight/query/ast.rb +2 -1
- data/lib/archsight/query/evaluator.rb +2 -2
- data/lib/archsight/references.rb +129 -0
- data/lib/archsight/requirements.rb +4 -4
- data/lib/archsight/resources/application_component.rb +11 -1
- data/lib/archsight/resources/application_event.rb +79 -0
- data/lib/archsight/resources/application_interface.rb +1 -1
- data/lib/archsight/resources/application_service.rb +10 -5
- data/lib/archsight/resources/base.rb +40 -5
- data/lib/archsight/resources/business_actor.rb +9 -1
- data/lib/archsight/resources/business_control.rb +88 -0
- data/lib/archsight/resources/business_event.rb +79 -0
- data/lib/archsight/resources/business_process.rb +11 -3
- data/lib/archsight/resources/business_product.rb +2 -2
- data/lib/archsight/resources/business_role.rb +69 -0
- data/lib/archsight/resources/compliance_evidence.rb +44 -3
- data/lib/archsight/resources/data_object.rb +7 -2
- data/lib/archsight/resources/implementation_deliverable.rb +62 -0
- data/lib/archsight/resources/implementation_event.rb +52 -0
- data/lib/archsight/resources/implementation_gap.rb +49 -0
- data/lib/archsight/resources/implementation_plateau.rb +61 -0
- data/lib/archsight/resources/implementation_work_package.rb +83 -0
- data/lib/archsight/resources/motivation_assessment.rb +121 -0
- data/lib/archsight/resources/{business_constraint.rb → motivation_constraint.rb} +11 -5
- data/lib/archsight/resources/motivation_driver.rb +50 -0
- data/lib/archsight/resources/motivation_goal.rb +14 -2
- data/lib/archsight/resources/motivation_principle.rb +75 -0
- data/lib/archsight/resources/{business_requirement.rb → motivation_requirement.rb} +27 -7
- data/lib/archsight/resources/motivation_stakeholder.rb +9 -2
- data/lib/archsight/resources/page.rb +5 -0
- data/lib/archsight/resources/strategy_capability.rb +2 -2
- data/lib/archsight/resources/technology_event.rb +80 -0
- data/lib/archsight/resources/technology_node.rb +8 -2
- data/lib/archsight/resources/technology_service.rb +3 -3
- data/lib/archsight/resources/technology_system_software.rb +3 -3
- data/lib/archsight/resources.rb +34 -3
- data/lib/archsight/template.rb +2 -2
- data/lib/archsight/version.rb +1 -1
- data/lib/archsight/web/api/docs.rb +1 -1
- data/lib/archsight/web/api/json_helpers.rb +14 -10
- data/lib/archsight/web/api/openapi/spec.yaml +2 -2
- data/lib/archsight/web/api/page_helpers.rb +8 -7
- data/lib/archsight/web/api/routes.rb +1 -1
- data/lib/archsight/web/application.rb +6 -1
- data/lib/archsight/web/public/vue/{ApiDocsPage-D-cPRZCT.js → ApiDocsPage-BgqnQgwa.js} +1 -1
- data/lib/archsight/web/public/vue/{DocPage-DK6vNDbF.js → DocPage-CNO71nBH.js} +1 -1
- data/lib/archsight/web/public/vue/{EditorPage-BoJpQaVw.js → EditorPage-DR0FCNTz.js} +1 -1
- data/lib/archsight/web/public/vue/{ErrorPage-PGyjdtEf.js → ErrorPage-BfYArv6s.js} +1 -1
- data/lib/archsight/web/public/vue/{GraphView-BLiKR4zP.js → GraphView-BVTW30Ak.js} +1 -1
- data/lib/archsight/web/public/vue/HomePage-Wk9P4Pma.js +2 -0
- data/lib/archsight/web/public/vue/InstanceRouter-BV8ycydz.js +1 -0
- data/lib/archsight/web/public/vue/{InstanceRouter-60Tt3ZNM.css → InstanceRouter-jeavM6PW.css} +1 -1
- data/lib/archsight/web/public/vue/KindList-C8yMsN5J.js +1 -0
- data/lib/archsight/web/public/vue/{PageView-9MgHtrgl.js → PageView-BaN6TyJB.js} +1 -1
- data/lib/archsight/web/public/vue/{QueryError-D1FL1xgA.js → QueryError-D790wH-a.js} +1 -1
- data/lib/archsight/web/public/vue/ResourceList-D-66nas2.js +2 -0
- data/lib/archsight/web/public/vue/{SearchResults-DiW5XVYW.css → SearchResults-BewvsfOc.css} +1 -1
- data/lib/archsight/web/public/vue/SearchResults-CHyqIerQ.js +1 -0
- data/lib/archsight/web/public/vue/{WikiPage-CeCQBTDS.js → WikiPage-D2svpk6B.js} +3 -3
- data/lib/archsight/web/public/vue/WikiPage-DoFJ0dbW.css +1 -0
- data/lib/archsight/web/public/vue/{index-D7m61Ahx.js → index-BXXkUK1V.js} +2 -2
- data/lib/archsight/web/public/vue/index-Cov1SnzY.css +1 -0
- data/lib/archsight/web/public/vue/{useGraphviz-DweKV7Kg.js → useGraphviz-DlSnFeCL.js} +12 -0
- data/lib/archsight/web/public/vue.html +2 -2
- metadata +38 -22
- data/lib/archsight/web/public/vue/HomePage-C0lR8i2C.js +0 -2
- data/lib/archsight/web/public/vue/InstanceRouter-D3W2jJHV.js +0 -1
- data/lib/archsight/web/public/vue/KindList-BlsaRBNO.js +0 -1
- data/lib/archsight/web/public/vue/ResourceList-vkgFyeOY.js +0 -2
- data/lib/archsight/web/public/vue/SearchResults-Cl3O_OEr.js +0 -1
- data/lib/archsight/web/public/vue/WikiPage-C-8SG67a.css +0 -1
- data/lib/archsight/web/public/vue/index-Dbx3MXWG.css +0 -1
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# ImplementationDeliverable represents a precisely defined result of a work package
|
|
4
|
+
class Archsight::Resources::ImplementationDeliverable < Archsight::Resources::Base
|
|
5
|
+
include_annotations :git, :architecture, :risk
|
|
6
|
+
|
|
7
|
+
description <<~MD
|
|
8
|
+
Represents a precisely defined result of a work package.
|
|
9
|
+
|
|
10
|
+
## ArchiMate Definition
|
|
11
|
+
|
|
12
|
+
**Layer:** Implementation & Migration
|
|
13
|
+
**Aspect:** Passive Structure
|
|
14
|
+
|
|
15
|
+
A deliverable is a tangible or intangible result that a work package produces: a document, a system, a changed
|
|
16
|
+
process. It realizes requirements, goals and plateaus.
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
Use ImplementationDeliverable to represent:
|
|
21
|
+
|
|
22
|
+
- Documents and reports produced by a project or an audit
|
|
23
|
+
- Systems and process changes that go live
|
|
24
|
+
- The artefact that becomes compliance evidence once it exists
|
|
25
|
+
|
|
26
|
+
## How it connects
|
|
27
|
+
|
|
28
|
+
- A `ImplementationWorkPackage` `realizes` it
|
|
29
|
+
- It is `ownedBy` an actor and `realizes` plateaus, requirements, goals, outcomes and `ComplianceEvidence`
|
|
30
|
+
|
|
31
|
+
## Security and risk modelling
|
|
32
|
+
|
|
33
|
+
A deliverable of type `evidence` that `realizes` a `ComplianceEvidence` ties the plan (work package) to the proof
|
|
34
|
+
(evidence) of a control measure.
|
|
35
|
+
MD
|
|
36
|
+
|
|
37
|
+
icon "package"
|
|
38
|
+
layer "implementation"
|
|
39
|
+
|
|
40
|
+
annotation "deliverable/type",
|
|
41
|
+
description: "What kind of result this is (specialization of the deliverable)",
|
|
42
|
+
enum: %w[document system process-change report evidence],
|
|
43
|
+
filter: :word,
|
|
44
|
+
summary: true
|
|
45
|
+
annotation "deliverable/status",
|
|
46
|
+
description: "Where the result is",
|
|
47
|
+
enum: %w[planned in-progress delivered accepted],
|
|
48
|
+
filter: :word,
|
|
49
|
+
summary: true
|
|
50
|
+
annotation "deliverable/due",
|
|
51
|
+
description: "When the result is due (ISO 8601 date or time)",
|
|
52
|
+
title: "Due",
|
|
53
|
+
validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
|
|
54
|
+
|
|
55
|
+
relation :ownedBy, :businessActors, :BusinessActor
|
|
56
|
+
relation :ownedBy, :businessRoles, :BusinessRole
|
|
57
|
+
relation :realizes, :implementationPlateaus, :ImplementationPlateau
|
|
58
|
+
relation :realizes, :motivationRequirements, :MotivationRequirement
|
|
59
|
+
relation :realizes, :goals, :MotivationGoal
|
|
60
|
+
relation :realizes, :outcomes, :MotivationOutcome
|
|
61
|
+
relation :realizes, :complianceEvidences, :ComplianceEvidence
|
|
62
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# ImplementationEvent represents a state change related to implementation or migration
|
|
4
|
+
class Archsight::Resources::ImplementationEvent < Archsight::Resources::Base
|
|
5
|
+
include_annotations :git, :architecture, :risk
|
|
6
|
+
|
|
7
|
+
description <<~MD
|
|
8
|
+
Represents a state change related to implementation or migration.
|
|
9
|
+
|
|
10
|
+
## ArchiMate Definition
|
|
11
|
+
|
|
12
|
+
**Layer:** Implementation & Migration
|
|
13
|
+
**Aspect:** Behavior
|
|
14
|
+
|
|
15
|
+
An implementation event is something that happens during implementation or migration and may trigger work: a
|
|
16
|
+
milestone reached, a go-live, a decommissioning, a review date or a deadline.
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
Use ImplementationEvent to represent:
|
|
21
|
+
|
|
22
|
+
- Milestones and go-lives of a roadmap
|
|
23
|
+
- Deadlines (certification audit, end of a transition period)
|
|
24
|
+
- Reviews and decommissioning dates
|
|
25
|
+
|
|
26
|
+
## How it connects
|
|
27
|
+
|
|
28
|
+
- `ownedBy` an actor
|
|
29
|
+
- `triggers` work packages and plateaus
|
|
30
|
+
|
|
31
|
+
Events of the running architecture (threat and loss events, incidents) are `BusinessEvent`, `ApplicationEvent`
|
|
32
|
+
and `TechnologyEvent`.
|
|
33
|
+
MD
|
|
34
|
+
|
|
35
|
+
icon "calendar-check"
|
|
36
|
+
layer "implementation"
|
|
37
|
+
|
|
38
|
+
annotation "event/type",
|
|
39
|
+
description: "What kind of event this is (specialization of the implementation event)",
|
|
40
|
+
enum: %w[milestone go-live decommission review deadline],
|
|
41
|
+
filter: :word,
|
|
42
|
+
summary: true
|
|
43
|
+
annotation "event/occurred",
|
|
44
|
+
description: "When the event happens or happened (ISO 8601 date or time)",
|
|
45
|
+
title: "Occurred",
|
|
46
|
+
validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
|
|
47
|
+
|
|
48
|
+
relation :ownedBy, :businessActors, :BusinessActor
|
|
49
|
+
relation :ownedBy, :businessRoles, :BusinessRole
|
|
50
|
+
relation :triggers, :implementationWorkPackages, :ImplementationWorkPackage
|
|
51
|
+
relation :triggers, :implementationPlateaus, :ImplementationPlateau
|
|
52
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# ImplementationGap represents the difference between two plateaus
|
|
4
|
+
class Archsight::Resources::ImplementationGap < Archsight::Resources::Base
|
|
5
|
+
include_annotations :git, :architecture, :risk
|
|
6
|
+
|
|
7
|
+
description <<~MD
|
|
8
|
+
Represents a statement of difference between two plateaus.
|
|
9
|
+
|
|
10
|
+
## ArchiMate Definition
|
|
11
|
+
|
|
12
|
+
**Layer:** Implementation & Migration
|
|
13
|
+
**Aspect:** Passive Structure
|
|
14
|
+
|
|
15
|
+
A gap is what is missing between a baseline and a target plateau: elements to add, change or remove. It is
|
|
16
|
+
the starting point of gap analysis in the TOGAF ADM.
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
Use ImplementationGap to represent:
|
|
21
|
+
|
|
22
|
+
- The difference between today's and the target architecture
|
|
23
|
+
- Requirements of a standard that are not met yet (compliance gap)
|
|
24
|
+
- The part of a plateau transition that a work package still has to deliver
|
|
25
|
+
|
|
26
|
+
## How it connects
|
|
27
|
+
|
|
28
|
+
- A gap `compares` the plateaus it lies between (baseline and target)
|
|
29
|
+
- It is `closedBy` the work packages and deliverables that remove it
|
|
30
|
+
MD
|
|
31
|
+
|
|
32
|
+
icon "git-compare"
|
|
33
|
+
layer "implementation"
|
|
34
|
+
|
|
35
|
+
annotation "gap/status",
|
|
36
|
+
description: "Whether the gap is being closed",
|
|
37
|
+
enum: %w[open closing closed],
|
|
38
|
+
filter: :word,
|
|
39
|
+
summary: true
|
|
40
|
+
annotation "gap/impact",
|
|
41
|
+
description: "How much the gap matters",
|
|
42
|
+
enum: %w[low medium high critical],
|
|
43
|
+
filter: :word,
|
|
44
|
+
summary: true
|
|
45
|
+
|
|
46
|
+
relation :compares, :implementationPlateaus, :ImplementationPlateau
|
|
47
|
+
relation :closedBy, :implementationWorkPackages, :ImplementationWorkPackage
|
|
48
|
+
relation :closedBy, :implementationDeliverables, :ImplementationDeliverable
|
|
49
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# ImplementationPlateau represents a relatively stable state of the architecture
|
|
4
|
+
class Archsight::Resources::ImplementationPlateau < Archsight::Resources::Base
|
|
5
|
+
include_annotations :git, :architecture, :risk
|
|
6
|
+
|
|
7
|
+
description <<~MD
|
|
8
|
+
Represents a relatively stable state of the architecture that exists during a limited period of time.
|
|
9
|
+
|
|
10
|
+
## ArchiMate Definition
|
|
11
|
+
|
|
12
|
+
**Layer:** Implementation & Migration
|
|
13
|
+
**Aspect:** Composite
|
|
14
|
+
|
|
15
|
+
A plateau is a coherent set of architecture elements as they exist (or will exist) in one period. Plateaus
|
|
16
|
+
are the points of a migration path: baseline, transition states, target.
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
Use ImplementationPlateau to represent:
|
|
21
|
+
|
|
22
|
+
- The baseline (today's architecture) and the target architecture
|
|
23
|
+
- Transition architectures of a roadmap
|
|
24
|
+
- The state of the ISMS scope at a certification date
|
|
25
|
+
|
|
26
|
+
## How it connects
|
|
27
|
+
|
|
28
|
+
- A plateau `contains` the components, services, nodes, processes and requirements that belong to it
|
|
29
|
+
- It `triggers` the next plateau (migration path)
|
|
30
|
+
- A `ImplementationDeliverable` `realizes` it; a `ImplementationGap` `compares` two plateaus
|
|
31
|
+
MD
|
|
32
|
+
|
|
33
|
+
icon "packages"
|
|
34
|
+
layer "implementation"
|
|
35
|
+
|
|
36
|
+
annotation "plateau/type",
|
|
37
|
+
description: "Position on the migration path",
|
|
38
|
+
enum: %w[baseline transition target],
|
|
39
|
+
filter: :word,
|
|
40
|
+
summary: true
|
|
41
|
+
annotation "plateau/status",
|
|
42
|
+
description: "Where the plateau is",
|
|
43
|
+
enum: %w[planned current past],
|
|
44
|
+
filter: :word,
|
|
45
|
+
summary: true
|
|
46
|
+
annotation "plateau/from",
|
|
47
|
+
description: "When the plateau starts (ISO 8601 date or time)",
|
|
48
|
+
title: "From",
|
|
49
|
+
validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
|
|
50
|
+
annotation "plateau/until",
|
|
51
|
+
description: "When the plateau ends (ISO 8601 date or time)",
|
|
52
|
+
title: "Until",
|
|
53
|
+
validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
|
|
54
|
+
|
|
55
|
+
relation :contains, :applicationComponents, :ApplicationComponent
|
|
56
|
+
relation :contains, :applicationServices, :ApplicationService
|
|
57
|
+
relation :contains, :technologyNodes, :TechnologyNode
|
|
58
|
+
relation :contains, :businessProcesses, :BusinessProcess
|
|
59
|
+
relation :contains, :motivationRequirements, :MotivationRequirement
|
|
60
|
+
relation :triggers, :implementationPlateaus, :ImplementationPlateau
|
|
61
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# ImplementationWorkPackage represents a series of actions that achieves a result within a time frame
|
|
4
|
+
class Archsight::Resources::ImplementationWorkPackage < Archsight::Resources::Base
|
|
5
|
+
include_annotations :git, :architecture, :risk
|
|
6
|
+
|
|
7
|
+
description <<~MD
|
|
8
|
+
Represents a series of actions identified and designed to achieve specific results within specified time and resource constraints.
|
|
9
|
+
|
|
10
|
+
## ArchiMate Definition
|
|
11
|
+
|
|
12
|
+
**Layer:** Implementation & Migration
|
|
13
|
+
**Aspect:** Behavior
|
|
14
|
+
|
|
15
|
+
A work package is a piece of work with a defined start and end that produces deliverables. It is how the
|
|
16
|
+
architecture changes: projects, measures, remediation of findings, roadmap items.
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
Use ImplementationWorkPackage to represent:
|
|
21
|
+
|
|
22
|
+
- Projects and roadmap items that move the architecture from one plateau to the next
|
|
23
|
+
- Measures and realisation plans of an ISMS (due date, status, owner)
|
|
24
|
+
- Remediation of a risk, vulnerability or audit finding (the `MotivationAssessment` is `mitigatedBy` the work package)
|
|
25
|
+
- Audit programmes and recurring reviews
|
|
26
|
+
|
|
27
|
+
## How it connects
|
|
28
|
+
|
|
29
|
+
- `ownedBy` the accountable actor or role, `performedBy` the actors or roles that carry it out
|
|
30
|
+
- `realizes` deliverables (its results), requirements and goals
|
|
31
|
+
- `affects` the assets it changes; the assessments (risks, findings) it treats are `mitigatedBy` it (written on the assessment)
|
|
32
|
+
- `triggers` the work packages that follow it; an `ImplementationEvent` can trigger it
|
|
33
|
+
- A `ImplementationGap` is `closedBy` it
|
|
34
|
+
|
|
35
|
+
## Security and risk modelling
|
|
36
|
+
|
|
37
|
+
Set `workpackage/type` `remediation` and list the work package under `mitigatedBy` of the risk or finding to see what is open; filter
|
|
38
|
+
by `workpackage/status`, `workpackage/due` and `risk/domain` for the plan of one domain.
|
|
39
|
+
MD
|
|
40
|
+
|
|
41
|
+
icon "hammer"
|
|
42
|
+
layer "implementation"
|
|
43
|
+
|
|
44
|
+
annotation "workpackage/type",
|
|
45
|
+
description: "What kind of work this is (specialization of the work package)",
|
|
46
|
+
enum: %w[project measure remediation audit-programme change],
|
|
47
|
+
filter: :word,
|
|
48
|
+
summary: true
|
|
49
|
+
annotation "workpackage/status",
|
|
50
|
+
description: "Where the work is",
|
|
51
|
+
enum: %w[planned in-progress done cancelled],
|
|
52
|
+
filter: :word,
|
|
53
|
+
summary: true
|
|
54
|
+
annotation "workpackage/priority",
|
|
55
|
+
description: "How urgent the work is",
|
|
56
|
+
enum: %w[low medium high critical],
|
|
57
|
+
filter: :word
|
|
58
|
+
annotation "workpackage/start",
|
|
59
|
+
description: "When the work starts (ISO 8601 date or time)",
|
|
60
|
+
title: "Start",
|
|
61
|
+
validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
|
|
62
|
+
annotation "workpackage/due",
|
|
63
|
+
description: "When the work is due (ISO 8601 date or time)",
|
|
64
|
+
title: "Due",
|
|
65
|
+
validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
|
|
66
|
+
annotation "workpackage/completed",
|
|
67
|
+
description: "When the work was completed (ISO 8601 date or time)",
|
|
68
|
+
title: "Completed",
|
|
69
|
+
validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
|
|
70
|
+
|
|
71
|
+
relation :ownedBy, :businessActors, :BusinessActor
|
|
72
|
+
relation :performedBy, :businessActors, :BusinessActor
|
|
73
|
+
relation :ownedBy, :businessRoles, :BusinessRole
|
|
74
|
+
relation :performedBy, :businessRoles, :BusinessRole
|
|
75
|
+
relation :realizes, :implementationDeliverables, :ImplementationDeliverable
|
|
76
|
+
relation :realizes, :motivationRequirements, :MotivationRequirement
|
|
77
|
+
relation :realizes, :goals, :MotivationGoal
|
|
78
|
+
relation :affects, :businessProcesses, :BusinessProcess
|
|
79
|
+
relation :affects, :applicationComponents, :ApplicationComponent
|
|
80
|
+
relation :affects, :applicationServices, :ApplicationService
|
|
81
|
+
relation :affects, :technologyNodes, :TechnologyNode
|
|
82
|
+
relation :triggers, :implementationWorkPackages, :ImplementationWorkPackage
|
|
83
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# MotivationAssessment represents the outcome of an analysis: a risk, a vulnerability, a finding
|
|
4
|
+
class Archsight::Resources::MotivationAssessment < Archsight::Resources::Base
|
|
5
|
+
include_annotations :git, :architecture, :risk
|
|
6
|
+
|
|
7
|
+
description <<~MD
|
|
8
|
+
Represents the outcome of an analysis of some aspect of the architecture with respect to a driver: a risk, a
|
|
9
|
+
vulnerability, an audit finding, a supplier or protection-need assessment.
|
|
10
|
+
|
|
11
|
+
## ArchiMate Definition
|
|
12
|
+
|
|
13
|
+
**Layer:** Motivation
|
|
14
|
+
**Aspect:** Behavior
|
|
15
|
+
|
|
16
|
+
An assessment is the outcome of an analysis of the state of affairs of the enterprise with respect to some
|
|
17
|
+
driver. In the risk and security overlay of the Open Group paper (*Modeling Enterprise Risk Management and
|
|
18
|
+
Security with the ArchiMate Language*) a **risk** is a quantification of a threat and a **vulnerability** is
|
|
19
|
+
the result of analysing weaknesses of architecture elements; both are assessments with a type. Set
|
|
20
|
+
`assessment/type` to say which.
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
Use MotivationAssessment to represent:
|
|
25
|
+
|
|
26
|
+
- Risks (`risk`) with an initial and a residual profile and a treatment decision
|
|
27
|
+
- Vulnerabilities (`vulnerability`), also the results of a scan or penetration test
|
|
28
|
+
- Audit and review findings (`finding`)
|
|
29
|
+
- Supplier assessments (`supplier`) and protection-need analyses (`protection-need`)
|
|
30
|
+
|
|
31
|
+
## Risk profile
|
|
32
|
+
|
|
33
|
+
Initial risk is the risk before mitigation, residual risk the one after. Describe both with likelihood and
|
|
34
|
+
impact (`risk/initial-*`, `risk/residual-*`) and record the decision in `risk/treatment` (avoid, transfer,
|
|
35
|
+
mitigate, accept).
|
|
36
|
+
|
|
37
|
+
## How it connects
|
|
38
|
+
|
|
39
|
+
- A `MotivationDriver` (the threat) `influences` the risk
|
|
40
|
+
- The assessment `assesses` the assets it is about (applications, nodes, processes, data, suppliers)
|
|
41
|
+
- A vulnerability `influences` the loss events it makes possible; a risk `influences` other risks
|
|
42
|
+
- It is `mitigatedBy` a `MotivationGoal` (control objective), a `MotivationRequirement` (control measure), a
|
|
43
|
+
`BusinessControl` or an `ImplementationWorkPackage` (remediation); read top-down: risk, objective, measure,
|
|
44
|
+
control
|
|
45
|
+
- It is `ownedBy` the accountable actor or role
|
|
46
|
+
MD
|
|
47
|
+
|
|
48
|
+
icon "stats-up-square"
|
|
49
|
+
layer "motivation"
|
|
50
|
+
|
|
51
|
+
likelihood = %w[very-low low medium high very-high]
|
|
52
|
+
|
|
53
|
+
annotation "assessment/id",
|
|
54
|
+
description: "Identifier of the assessment in its register (risk id, CVE, finding number)",
|
|
55
|
+
title: "Assessment ID"
|
|
56
|
+
|
|
57
|
+
annotation "assessment/type",
|
|
58
|
+
description: "What kind of assessment this is (specialization of the assessment)",
|
|
59
|
+
enum: %w[risk vulnerability finding supplier protection-need],
|
|
60
|
+
filter: :word,
|
|
61
|
+
summary: true
|
|
62
|
+
|
|
63
|
+
annotation "assessment/status",
|
|
64
|
+
description: "Where the assessment is in its life cycle",
|
|
65
|
+
enum: %w[open treating accepted closed],
|
|
66
|
+
filter: :word,
|
|
67
|
+
summary: true
|
|
68
|
+
|
|
69
|
+
annotation "assessment/severity",
|
|
70
|
+
description: "Severity of a vulnerability or finding",
|
|
71
|
+
enum: %w[info low medium high critical],
|
|
72
|
+
filter: :word
|
|
73
|
+
|
|
74
|
+
annotation "assessment/assessed",
|
|
75
|
+
description: "When the assessment was made (ISO 8601 date or time)",
|
|
76
|
+
title: "Assessed",
|
|
77
|
+
validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
|
|
78
|
+
|
|
79
|
+
annotation "risk/initial-likelihood",
|
|
80
|
+
description: "Likelihood of the loss before mitigation",
|
|
81
|
+
enum: likelihood,
|
|
82
|
+
filter: :word
|
|
83
|
+
|
|
84
|
+
annotation "risk/initial-impact",
|
|
85
|
+
description: "Impact of the loss before mitigation",
|
|
86
|
+
enum: likelihood,
|
|
87
|
+
filter: :word
|
|
88
|
+
|
|
89
|
+
annotation "risk/residual-likelihood",
|
|
90
|
+
description: "Likelihood of the loss after mitigation",
|
|
91
|
+
enum: likelihood,
|
|
92
|
+
filter: :word
|
|
93
|
+
|
|
94
|
+
annotation "risk/residual-impact",
|
|
95
|
+
description: "Impact of the loss after mitigation",
|
|
96
|
+
enum: likelihood,
|
|
97
|
+
filter: :word
|
|
98
|
+
|
|
99
|
+
annotation "risk/treatment",
|
|
100
|
+
description: "How the risk is treated",
|
|
101
|
+
enum: %w[avoid transfer mitigate accept],
|
|
102
|
+
filter: :word,
|
|
103
|
+
summary: true
|
|
104
|
+
|
|
105
|
+
relation :ownedBy, :businessActors, :BusinessActor
|
|
106
|
+
relation :ownedBy, :businessRoles, :BusinessRole
|
|
107
|
+
relation :assesses, :businessProcesses, :BusinessProcess
|
|
108
|
+
relation :assesses, :businessActors, :BusinessActor
|
|
109
|
+
relation :assesses, :applicationComponents, :ApplicationComponent
|
|
110
|
+
relation :assesses, :applicationServices, :ApplicationService
|
|
111
|
+
relation :assesses, :technologyNodes, :TechnologyNode
|
|
112
|
+
relation :assesses, :dataObjects, :DataObject
|
|
113
|
+
relation :influences, :businessEvents, :BusinessEvent
|
|
114
|
+
relation :influences, :applicationEvents, :ApplicationEvent
|
|
115
|
+
relation :influences, :technologyEvents, :TechnologyEvent
|
|
116
|
+
relation :influences, :motivationAssessments, :MotivationAssessment
|
|
117
|
+
relation :mitigatedBy, :goals, :MotivationGoal
|
|
118
|
+
relation :mitigatedBy, :motivationRequirements, :MotivationRequirement
|
|
119
|
+
relation :mitigatedBy, :businessControls, :BusinessControl
|
|
120
|
+
relation :mitigatedBy, :implementationWorkPackages, :ImplementationWorkPackage
|
|
121
|
+
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
class Archsight::Resources::
|
|
5
|
-
include_annotations :git, :architecture
|
|
3
|
+
# MotivationConstraint represents restrictions or limitations on architecture
|
|
4
|
+
class Archsight::Resources::MotivationConstraint < Archsight::Resources::Base
|
|
5
|
+
include_annotations :git, :architecture, :risk
|
|
6
6
|
|
|
7
7
|
description <<~MD
|
|
8
8
|
Represents a factor that limits the realization of goals or influences architecture decisions.
|
|
@@ -18,15 +18,21 @@ class Archsight::Resources::BusinessConstraint < Archsight::Resources::Base
|
|
|
18
18
|
|
|
19
19
|
## Usage
|
|
20
20
|
|
|
21
|
-
Use
|
|
21
|
+
Use MotivationConstraint to represent:
|
|
22
22
|
|
|
23
23
|
- Regulatory requirements (GDPR, SOX, PCI-DSS)
|
|
24
24
|
- Security policies
|
|
25
25
|
- Organizational standards
|
|
26
26
|
- Technical limitations
|
|
27
27
|
- Budget or resource constraints
|
|
28
|
+
|
|
29
|
+
## Security and risk modelling
|
|
30
|
+
|
|
31
|
+
Use a constraint for rules that only restrict and are not a design statement: regulation, contractual duties,
|
|
32
|
+
operational policy (the overlay paper has no element for operational policy). Policies stated as principles
|
|
33
|
+
belong in `MotivationPrinciple`.
|
|
28
34
|
MD
|
|
29
35
|
|
|
30
36
|
icon "prohibition"
|
|
31
|
-
layer "
|
|
37
|
+
layer "motivation"
|
|
32
38
|
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# MotivationDriver represents an external or internal condition that motivates the enterprise to act
|
|
4
|
+
class Archsight::Resources::MotivationDriver < Archsight::Resources::Base
|
|
5
|
+
include_annotations :git, :architecture, :risk
|
|
6
|
+
|
|
7
|
+
description <<~MD
|
|
8
|
+
Represents an external or internal condition that motivates the enterprise to define its goals and act.
|
|
9
|
+
|
|
10
|
+
## ArchiMate Definition
|
|
11
|
+
|
|
12
|
+
**Layer:** Motivation
|
|
13
|
+
**Aspect:** Active Structure
|
|
14
|
+
|
|
15
|
+
A driver is something that creates, motivates and fuels the change of an organization. In the risk and
|
|
16
|
+
security overlay of the Open Group paper (*Modeling Enterprise Risk Management and Security with the ArchiMate
|
|
17
|
+
Language*) the general notion of a **threat** (a threatening circumstance) is a driver; opportunities,
|
|
18
|
+
regulations and market forces are drivers too. Set `driver/type` to say which.
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
Use MotivationDriver to represent:
|
|
23
|
+
|
|
24
|
+
- Threats ("machines may fail", "attackers target customer data")
|
|
25
|
+
- Opportunities
|
|
26
|
+
- Regulation and legal change
|
|
27
|
+
- Market and customer demand
|
|
28
|
+
|
|
29
|
+
## How it connects
|
|
30
|
+
|
|
31
|
+
- A driver `influences` the assessments (risks) it leads to and other drivers
|
|
32
|
+
- A threat driver `triggers` threat or loss events
|
|
33
|
+
- A `MotivationStakeholder` `hasConcern` for it
|
|
34
|
+
MD
|
|
35
|
+
|
|
36
|
+
icon "fire-flame"
|
|
37
|
+
layer "motivation"
|
|
38
|
+
|
|
39
|
+
annotation "driver/type",
|
|
40
|
+
description: "What kind of driver this is (specialization of the driver)",
|
|
41
|
+
enum: %w[threat opportunity regulation market internal],
|
|
42
|
+
filter: :word,
|
|
43
|
+
summary: true
|
|
44
|
+
|
|
45
|
+
relation :influences, :motivationAssessments, :MotivationAssessment
|
|
46
|
+
relation :influences, :motivationDrivers, :MotivationDriver
|
|
47
|
+
relation :triggers, :businessEvents, :BusinessEvent
|
|
48
|
+
relation :triggers, :applicationEvents, :ApplicationEvent
|
|
49
|
+
relation :triggers, :technologyEvents, :TechnologyEvent
|
|
50
|
+
end
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# MotivationGoal represents a high-level statement of intent, direction, or desired end state
|
|
4
4
|
# for an organization and its stakeholders (ArchiMate Motivation Layer)
|
|
5
5
|
class Archsight::Resources::MotivationGoal < Archsight::Resources::Base
|
|
6
|
-
include_annotations :git, :architecture
|
|
6
|
+
include_annotations :git, :architecture, :risk
|
|
7
7
|
|
|
8
8
|
description <<~MD
|
|
9
9
|
Represents a high-level statement of intent or desired end state for the organization.
|
|
@@ -26,12 +26,24 @@ class Archsight::Resources::MotivationGoal < Archsight::Resources::Base
|
|
|
26
26
|
- Quality goals
|
|
27
27
|
- Compliance objectives
|
|
28
28
|
- Performance targets
|
|
29
|
+
|
|
30
|
+
## Security and risk modelling
|
|
31
|
+
|
|
32
|
+
In the Open Group risk and security overlay a goal with `goal/type` `control-objective` states what a control
|
|
33
|
+
achieves against a risk. The risk (`MotivationAssessment`) is `mitigatedBy` the goal, and the goal `realizes` the
|
|
34
|
+
requirements that are the control measures: risk, then objective, then measure, read top-down.
|
|
29
35
|
MD
|
|
30
36
|
|
|
31
37
|
icon "archery"
|
|
32
38
|
layer "motivation"
|
|
33
39
|
|
|
40
|
+
annotation "goal/type",
|
|
41
|
+
description: "What kind of goal this is (specialization of the goal)",
|
|
42
|
+
enum: %w[business control-objective],
|
|
43
|
+
filter: :word,
|
|
44
|
+
summary: true
|
|
45
|
+
|
|
34
46
|
relation :realizes, :outcomes, :MotivationOutcome
|
|
35
47
|
relation :refinedBy, :goals, :MotivationGoal
|
|
36
|
-
relation :realizes, :
|
|
48
|
+
relation :realizes, :motivationRequirements, :MotivationRequirement
|
|
37
49
|
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# MotivationPrinciple represents a normative property of all systems in a context, such as a policy
|
|
4
|
+
class Archsight::Resources::MotivationPrinciple < Archsight::Resources::Base
|
|
5
|
+
include_annotations :git, :architecture, :risk
|
|
6
|
+
|
|
7
|
+
description <<~MD
|
|
8
|
+
Represents a statement of intent that defines a general property that applies to any system in a context: a
|
|
9
|
+
principle, and at design level a policy.
|
|
10
|
+
|
|
11
|
+
## ArchiMate Definition
|
|
12
|
+
|
|
13
|
+
**Layer:** Motivation
|
|
14
|
+
**Aspect:** Passive Structure
|
|
15
|
+
|
|
16
|
+
A principle is a qualitative statement of intent that should be met by the architecture. In the risk and
|
|
17
|
+
security overlay of the Open Group paper (*Modeling Enterprise Risk Management and Security with the ArchiMate
|
|
18
|
+
Language*) a policy maps to a principle; risk policy and security policy are specializations. Set
|
|
19
|
+
`principle/type` to say which.
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
Use MotivationPrinciple to represent:
|
|
24
|
+
|
|
25
|
+
- Security and risk policies (information security policy, access control policy)
|
|
26
|
+
- Guidelines and procedures that state how a rule is applied
|
|
27
|
+
- Architecture principles
|
|
28
|
+
|
|
29
|
+
Rules that only restrict (regulation, an operational policy that is not a design statement) stay
|
|
30
|
+
`MotivationConstraint`. The text of a policy belongs in a `Page`; link it with `[[Page]]` in the description.
|
|
31
|
+
|
|
32
|
+
## How it connects
|
|
33
|
+
|
|
34
|
+
- A principle is `ownedBy` the actor or role that issued it
|
|
35
|
+
- A `MotivationRequirement` (control measure) `realizes` the principle
|
|
36
|
+
MD
|
|
37
|
+
|
|
38
|
+
icon "book"
|
|
39
|
+
layer "motivation"
|
|
40
|
+
|
|
41
|
+
annotation "principle/type",
|
|
42
|
+
description: "What kind of statement this is (specialization of the principle)",
|
|
43
|
+
enum: %w[principle policy security-policy risk-policy guideline procedure],
|
|
44
|
+
filter: :word,
|
|
45
|
+
summary: true
|
|
46
|
+
|
|
47
|
+
annotation "principle/status",
|
|
48
|
+
description: "Whether the statement is in force",
|
|
49
|
+
enum: %w[draft valid retired],
|
|
50
|
+
filter: :word,
|
|
51
|
+
summary: true
|
|
52
|
+
|
|
53
|
+
annotation "principle/classification",
|
|
54
|
+
description: "Confidentiality classification of the statement",
|
|
55
|
+
enum: %w[public internal confidential strictly-confidential],
|
|
56
|
+
filter: :word
|
|
57
|
+
|
|
58
|
+
annotation "principle/valid-from",
|
|
59
|
+
description: "When the statement comes into force (ISO 8601 date or time)",
|
|
60
|
+
title: "Valid from",
|
|
61
|
+
validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
|
|
62
|
+
|
|
63
|
+
annotation "principle/valid-until",
|
|
64
|
+
description: "When the statement has to be reviewed or ends (ISO 8601 date or time)",
|
|
65
|
+
title: "Valid until",
|
|
66
|
+
validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
|
|
67
|
+
|
|
68
|
+
annotation "principle/framework",
|
|
69
|
+
description: "Standards the statement maps to (comma-separated, e.g. c5-2020, iso27001-2022)",
|
|
70
|
+
title: "Framework mapping",
|
|
71
|
+
filter: :list
|
|
72
|
+
|
|
73
|
+
relation :ownedBy, :businessActors, :BusinessActor
|
|
74
|
+
relation :ownedBy, :businessRoles, :BusinessRole
|
|
75
|
+
end
|