create-filegrc 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +18 -0
- package/bin/create-filegrc.js +8 -0
- package/package.json +26 -0
- package/src/cli.js +64 -0
- package/src/defaults.js +1063 -0
- package/src/index.js +252 -0
- package/template/AGENTS.md +227 -0
- package/template/README.md +102 -0
- package/template/data/AGENTS.md +185 -0
- package/template/data/action-items/AGENTS.md +11 -0
- package/template/data/audit-populations/AGENTS.md +13 -0
- package/template/data/audits/AGENTS.md +21 -0
- package/template/data/documents/document-business-continuity-disaster-recovery.json +29 -0
- package/template/data/documents/document-business-continuity-disaster-recovery.md +190 -0
- package/template/data/documents/document-contractor-policy-acknowledgement.json +21 -0
- package/template/data/documents/document-contractor-policy-acknowledgement.md +24 -0
- package/template/data/documents/document-contractor-training-acknowledgement.json +22 -0
- package/template/data/documents/document-contractor-training-acknowledgement.md +20 -0
- package/template/data/documents/document-data-retention-schedule.json +25 -0
- package/template/data/documents/document-data-retention-schedule.md +33 -0
- package/template/data/documents/document-employee-handbook-acknowledgement.json +21 -0
- package/template/data/documents/document-employee-handbook-acknowledgement.md +19 -0
- package/template/data/documents/document-employee-policy-acknowledgement.json +21 -0
- package/template/data/documents/document-employee-policy-acknowledgement.md +24 -0
- package/template/data/documents/document-employee-training-acknowledgement.json +22 -0
- package/template/data/documents/document-employee-training-acknowledgement.md +20 -0
- package/template/data/documents/document-incident-response-plan.json +29 -0
- package/template/data/documents/document-incident-response-plan.md +136 -0
- package/template/data/documents/document-soc2-management-assertion.json +17 -0
- package/template/data/documents/document-soc2-management-assertion.md +24 -0
- package/template/data/documents/document-soc2-management-representation.json +17 -0
- package/template/data/documents/document-soc2-management-representation.md +20 -0
- package/template/data/documents/document-soc2-period-completeness.json +17 -0
- package/template/data/documents/document-soc2-period-completeness.md +32 -0
- package/template/data/documents/document-soc2-system-description.json +17 -0
- package/template/data/documents/document-soc2-system-description.md +65 -0
- package/template/data/evidence/AGENTS.md +30 -0
- package/template/data/obligation-events/AGENTS.md +18 -0
- package/template/data/obligations/AGENTS.md +11 -0
- package/template/data/people/person-independent-approver.json +10 -0
- package/template/data/people/person-policy-owner.json +10 -0
- package/template/data/policies/AGENTS.md +15 -0
- package/template/data/policies/policy-anti-bribery-corruption.json +25 -0
- package/template/data/policies/policy-anti-bribery-corruption.md +87 -0
- package/template/data/policies/policy-clear-desk-screen.json +24 -0
- package/template/data/policies/policy-clear-desk-screen.md +49 -0
- package/template/data/policies/policy-data-protection-handling.json +34 -0
- package/template/data/policies/policy-data-protection-handling.md +130 -0
- package/template/data/policies/policy-employee-handbook.json +31 -0
- package/template/data/policies/policy-employee-handbook.md +161 -0
- package/template/data/policies/policy-information-security.json +61 -0
- package/template/data/policies/policy-information-security.md +233 -0
- package/template/data/policies/policy-mobile-computing-communications.json +28 -0
- package/template/data/policies/policy-mobile-computing-communications.md +74 -0
- package/template/data/renderer.json +7 -0
- package/template/data/risk-assessments/AGENTS.md +16 -0
- package/template/data/systems/system-filegrc-program-repository.md +9 -0
- package/template/data/training/training-anti-bribery-high-risk-roles.json +17 -0
- package/template/data/training/training-anti-bribery-high-risk-roles.md +19 -0
- package/template/data/training/training-privileged-sensitive-roles.json +21 -0
- package/template/data/training/training-privileged-sensitive-roles.md +20 -0
- package/template/data/training/training-secure-development.json +20 -0
- package/template/data/training/training-secure-development.md +22 -0
- package/template/data/training/training-security-awareness.json +28 -0
- package/template/data/training/training-security-awareness.md +192 -0
- package/template/data/workspace.json +27 -0
- package/template/docs/filegrc-audit.png +0 -0
- package/template/docs/filegrc-home.png +0 -0
- package/template/gitignore +4 -0
- package/template/package.json +15 -0
- package/template-parameters.json +34 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# FileGRC Data Instructions
|
|
2
|
+
|
|
3
|
+
These instructions apply to every file under `data/`. The root `AGENTS.md` explains the program and Git workflow. A collection-level `AGENTS.md`, when present, adds rules for that resource.
|
|
4
|
+
|
|
5
|
+
## Start with discovery
|
|
6
|
+
|
|
7
|
+
Treat the installed model as the authority. Do not infer a schema from a nearby JSON file because that file may use only part of the model.
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
npx filegrc guide --json
|
|
11
|
+
npx filegrc types --json
|
|
12
|
+
npx filegrc guide RESOURCE_TYPE --json
|
|
13
|
+
npx filegrc list RESOURCE_TYPE --json
|
|
14
|
+
npx filegrc search "TERM" --json
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Use `guide` before any unfamiliar create or status transition. It reports required fields, fields required by a status, enum values, relationship types and candidates, Markdown slots, policy context, timing, and exact paths. Use `describe` only when you need the raw model definition.
|
|
18
|
+
|
|
19
|
+
## Choose the right record
|
|
20
|
+
|
|
21
|
+
- A reusable rule belongs in `policy`.
|
|
22
|
+
- A testable activity that implements a rule belongs in `control`.
|
|
23
|
+
- Work required on a schedule or event belongs in `obligation`.
|
|
24
|
+
- A dated instance of work belongs in its activity type, such as `meeting`, `risk-assessment`, `access-review`, `vulnerability-scan`, `backup-test`, or `exercise`.
|
|
25
|
+
- A fact that may change over time belongs in an inventory record, such as `person`, `system`, `asset`, `vendor`, or `access-grant`.
|
|
26
|
+
- Proof belongs in `evidence`, not in an unexplained attachment.
|
|
27
|
+
- Follow-up work belongs in `action-item`. A gap belongs in `finding`, a known threat belongs in `risk`, and an approved temporary departure belongs in `exception`.
|
|
28
|
+
- An auditor request belongs in `audit-request`; the engagement itself belongs in `audit`.
|
|
29
|
+
|
|
30
|
+
When more than one type seems plausible, run `guide` for each and choose the one whose purpose matches the requested action. Do not create a new type or field.
|
|
31
|
+
|
|
32
|
+
## Create
|
|
33
|
+
|
|
34
|
+
Create a model-driven draft:
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
npx filegrc scaffold RESOURCE_TYPE --title "Human name" > /tmp/filegrc-mutation.json
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
The scaffold is a mutation envelope:
|
|
41
|
+
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"record": {
|
|
45
|
+
"schemaVersion": 1,
|
|
46
|
+
"id": "resource-type-human-name",
|
|
47
|
+
"type": "resource-type",
|
|
48
|
+
"title": "Human name"
|
|
49
|
+
},
|
|
50
|
+
"content": {
|
|
51
|
+
"record": "# Human name\n"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Replace every `null` and every empty required array. Keep the starting status until the work reaches the next real state. Do not use placeholder text as a compliance fact. Use IDs returned by `list` or the relationship candidates returned by `guide`.
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
npx filegrc create /tmp/filegrc-mutation.json
|
|
60
|
+
npx filegrc validate --json
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Creation is atomic. If JSON, Markdown, relationships, or validation fail, FileGRC rolls back the write. IDs are globally unique and immutable after commit.
|
|
64
|
+
|
|
65
|
+
## Read and update
|
|
66
|
+
|
|
67
|
+
```sh
|
|
68
|
+
npx filegrc get RESOURCE_ID --mutation > /tmp/filegrc-mutation.json
|
|
69
|
+
npx filegrc content RESOURCE_TYPE RESOURCE_ID --json
|
|
70
|
+
npx filegrc references RESOURCE_ID --json
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Edit the exported mutation, then run:
|
|
74
|
+
|
|
75
|
+
```sh
|
|
76
|
+
npx filegrc update RESOURCE_TYPE RESOURCE_ID /tmp/filegrc-mutation.json
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
The mutation includes the complete record, current Markdown, and revision hashes. FileGRC rejects the update if another person or agent changed either source after export. Reload and reapply the intended change instead of overwriting it.
|
|
80
|
+
|
|
81
|
+
To update JSON and Markdown together, pass `{ "record": {...}, "content": {...}, "revision": "...", "contentRevisions": {...} }`. To change one Markdown slot:
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
npx filegrc content RESOURCE_TYPE RESOURCE_ID SLOT --write updated.md
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Never replace a complete record with a partial JSON object. Never change `id` or `type` during an update. Preserve unknown namespaced `extensions`.
|
|
88
|
+
|
|
89
|
+
## Record the substance
|
|
90
|
+
|
|
91
|
+
JSON is for stable metadata used by validation, relationships, filters, schedules, and audit checks. Markdown is for the actual work: inputs, method, observations, results, rationale, decisions, exceptions, and follow-up.
|
|
92
|
+
|
|
93
|
+
If `guide` marks a Markdown slot recommended, fill it before treating the deliverable as complete. Link evidence and resulting risks, findings, exceptions, or action items in JSON. Do not put a report’s entire variable structure into new JSON fields.
|
|
94
|
+
|
|
95
|
+
Use explicit business dates. Git records when a file changed, but it does not replace `occurredOn`, `assessmentDate`, `reviewedOn`, `completedOn`, or similar fields.
|
|
96
|
+
|
|
97
|
+
## Status changes
|
|
98
|
+
|
|
99
|
+
Status is an assertion. Before moving a record to a completed, approved, implemented, reconciled, remediated, passed, verified, or closed state:
|
|
100
|
+
|
|
101
|
+
1. Run `guide RESOURCE_TYPE --json` and satisfy every conditional field.
|
|
102
|
+
2. Write the actual work and conclusion in Markdown when recommended.
|
|
103
|
+
3. Link source systems, evidence, risks, findings, exceptions, and actions that support the result.
|
|
104
|
+
4. Use the real completion or approval date.
|
|
105
|
+
5. Confirm the named people performed and reviewed the work.
|
|
106
|
+
|
|
107
|
+
Do not mark a control implemented because a policy says it should exist. Do not mark evidence verified because it was merely collected. Do not mark a task done without the completion record type requested by its obligation.
|
|
108
|
+
|
|
109
|
+
## Delete and replace
|
|
110
|
+
|
|
111
|
+
Before deletion:
|
|
112
|
+
|
|
113
|
+
```sh
|
|
114
|
+
npx filegrc references RESOURCE_ID --json
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Delete only an uncommitted draft or a mistake:
|
|
118
|
+
|
|
119
|
+
```sh
|
|
120
|
+
npx filegrc delete RESOURCE_TYPE RESOURCE_ID --yes
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
FileGRC rejects deletion that breaks references and removes owned Markdown with the JSON. Retire, close, cancel, supersede, or replace committed records that explain historical operation.
|
|
124
|
+
|
|
125
|
+
## Evidence and attachments
|
|
126
|
+
|
|
127
|
+
Put attachments under the evidence record’s directory and store data-relative paths:
|
|
128
|
+
|
|
129
|
+
```text
|
|
130
|
+
data/evidence/evidence-example/evidence.json
|
|
131
|
+
data/evidence/evidence-example/source-export.csv
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
The JSON uses `filePaths: ["evidence/evidence-example/source-export.csv"]`. Commit the evidence JSON and attachment together. Do not scatter PDFs, screenshots, exports, or signatures elsewhere in `data/`.
|
|
135
|
+
|
|
136
|
+
Use the attachment command to copy a fixed file and update `filePaths` in one validated action:
|
|
137
|
+
|
|
138
|
+
```sh
|
|
139
|
+
npx filegrc attach EVIDENCE_ID /path/to/source-export.csv
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
It refuses symlinks, hidden destination names, and existing destination files.
|
|
143
|
+
|
|
144
|
+
Remove a local attachment explicitly before deleting its evidence record:
|
|
145
|
+
|
|
146
|
+
```sh
|
|
147
|
+
npx filegrc detach EVIDENCE_ID source-export.csv --yes
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
FileGRC will not delete an evidence record that still has local attachments.
|
|
151
|
+
|
|
152
|
+
Never invent evidence, dates, approvals, results, people, or source-system details. If a required fact is unavailable, leave the record in a non-final state and report the missing input.
|
|
153
|
+
|
|
154
|
+
## Scheduled and event work
|
|
155
|
+
|
|
156
|
+
```sh
|
|
157
|
+
npx filegrc obligations --json
|
|
158
|
+
npx filegrc complete OBLIGATION_ID completion-mutation.json
|
|
159
|
+
npx filegrc trigger EVENT_TYPE --occurred-on YYYY-MM-DD --subject RESOURCE_ID --json
|
|
160
|
+
npx filegrc complete-action ACTION_ITEM_ID completion-mutation.json --completed-on YYYY-MM-DD
|
|
161
|
+
npx filegrc complete-event OBLIGATION_EVENT_ID --completed-on YYYY-MM-DD
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
`complete` and `complete-action` validate the expected completion type and link the new record atomically. `complete-event` refuses to close the workflow until every action has its requested proof. For hour-based deadlines use `--occurred-at` with an RFC 3339 timestamp and timezone.
|
|
165
|
+
|
|
166
|
+
## Audit work
|
|
167
|
+
|
|
168
|
+
```sh
|
|
169
|
+
npx filegrc prepare-audit AUDIT_ID
|
|
170
|
+
npx filegrc audit-readiness AUDIT_ID --json
|
|
171
|
+
npx filegrc evidence-packet --audit AUDIT_ID --preview --json
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Fix readiness errors in source records. Do not edit packet output under `.filegrc/`. A delivery-ready FileGRC packet means the management checks passed; the engagement team still judges evidence and performs the examination.
|
|
175
|
+
|
|
176
|
+
## Finish every change
|
|
177
|
+
|
|
178
|
+
```sh
|
|
179
|
+
npx filegrc validate --json
|
|
180
|
+
git diff --check
|
|
181
|
+
git status --short
|
|
182
|
+
git diff
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Review every changed JSON, Markdown, and attachment. Confirm the diff contains no secrets, temporary files, source exports with prohibited data, or derived `.filegrc/` output. Make one focused commit whose message says why the compliance record changed.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Action Item Instructions
|
|
2
|
+
|
|
3
|
+
An action item must point to the record that created the work. Keep the assignee, due date or policy window, blockers, completion records, and evidence explicit.
|
|
4
|
+
|
|
5
|
+
For an event-generated action, do not weaken or extend its policy deadline by hand. Create the requested completion resource and close the action atomically:
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npx filegrc complete-action ACTION_ITEM_ID completion-mutation.json --completed-on YYYY-MM-DD
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
FileGRC rejects the wrong completion type. Mark ordinary action items `done` only after the work occurred and the completion record or evidence is linked. Use `blocked` while a named dependency prevents work, and link that dependency with `blockingResourceIds`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Audit Population Instructions
|
|
2
|
+
|
|
3
|
+
Use one `audit-population` for one complete Type 2 population produced by one authoritative system and query. Split populations when different systems or queries generate the items.
|
|
4
|
+
|
|
5
|
+
Reconcile after the period closes:
|
|
6
|
+
|
|
7
|
+
1. Confirm the exact audit period and related controls.
|
|
8
|
+
2. Select the cataloged source system whose `evidenceSourceKinds` covers the population.
|
|
9
|
+
3. Export the complete population with fixed parameters and timezone.
|
|
10
|
+
4. Create verified `population-export` evidence with the same source system, period, query, generation time, count, completeness check, and accuracy check.
|
|
11
|
+
5. Link the export with `sourceEvidenceId`, name the reconciler, record the date and conclusion, and write the method and exceptions in Record Markdown.
|
|
12
|
+
|
|
13
|
+
A zero count still needs its query, fixed export, and reconciliation. A population linked to an in-scope control cannot be marked not applicable.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Audit Instructions
|
|
2
|
+
|
|
3
|
+
Create one `audit` record for one engagement. Define the audit kind, framework, exact Type 1 date or Type 2 period, scope, owners, auditor, and report status from facts supplied by management or the engagement team.
|
|
4
|
+
|
|
5
|
+
After the audit record has its dates:
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npx filegrc prepare-audit AUDIT_ID
|
|
9
|
+
npx filegrc audit-readiness AUDIT_ID --json
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Preparation creates engagement-specific management documents and, for Type 2, population records. It does not approve documents, implement controls, reconcile populations, or create evidence.
|
|
13
|
+
|
|
14
|
+
Run readiness repeatedly and fix source records. Preview the packet before writing it:
|
|
15
|
+
|
|
16
|
+
```sh
|
|
17
|
+
npx filegrc evidence-packet --audit AUDIT_ID --preview --json
|
|
18
|
+
npx filegrc evidence-packet --audit AUDIT_ID
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Do not state that an auditor accepted evidence, selected a sample, cleared an exception, or issued a report unless that fact came from the engagement team. FileGRC tracks management preparation; the CPA firm owns examination judgments and the report.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "document-business-continuity-disaster-recovery",
|
|
4
|
+
"type": "document",
|
|
5
|
+
"title": "Business Continuity and Disaster Recovery Plan",
|
|
6
|
+
"status": "draft",
|
|
7
|
+
"documentKind": "plan",
|
|
8
|
+
"ownerIds": ["person-policy-owner"],
|
|
9
|
+
"approverIds": ["person-independent-approver"],
|
|
10
|
+
"version": "1.0",
|
|
11
|
+
"effectiveOn": "{{effective_date}}",
|
|
12
|
+
"reviewCadence": {
|
|
13
|
+
"mode": "calendar",
|
|
14
|
+
"unit": "year",
|
|
15
|
+
"interval": 1,
|
|
16
|
+
"anchorDate": "{{effective_date}}"
|
|
17
|
+
},
|
|
18
|
+
"classification": "internal",
|
|
19
|
+
"audience": ["employees", "contractors"],
|
|
20
|
+
"acknowledgementRequired": true,
|
|
21
|
+
"controlIds": [
|
|
22
|
+
"control-policy-management",
|
|
23
|
+
"control-incident-exercise",
|
|
24
|
+
"control-backup-restoration",
|
|
25
|
+
"control-continuity-exercise"
|
|
26
|
+
],
|
|
27
|
+
"relatedDocumentIds": ["document-incident-response-plan"],
|
|
28
|
+
"evidenceIds": []
|
|
29
|
+
}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# Business Continuity and Disaster Recovery Plan
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
This plan describes how {{company_name}} will respond to a disruption, continue its most important work, recover systems and data, and return to normal operations.
|
|
6
|
+
|
|
7
|
+
## Scope
|
|
8
|
+
|
|
9
|
+
This plan applies to the people, systems, facilities, vendors, and business processes needed to deliver {{company_name}} products and services. It covers events that materially affect availability, including:
|
|
10
|
+
|
|
11
|
+
- Cloud or hosting failures
|
|
12
|
+
- Software defects and failed deployments
|
|
13
|
+
- Cybersecurity incidents
|
|
14
|
+
- Loss of data or access to data
|
|
15
|
+
- Utility, network, or workplace outages
|
|
16
|
+
- Unavailability of a key vendor or workforce member
|
|
17
|
+
- Natural disasters and other regional events
|
|
18
|
+
|
|
19
|
+
Security incidents follow the incident response requirements in the Information Security Policy. A single event may activate both processes.
|
|
20
|
+
|
|
21
|
+
## Objectives
|
|
22
|
+
|
|
23
|
+
During a disruption, {{company_name}} will:
|
|
24
|
+
|
|
25
|
+
1. Protect people.
|
|
26
|
+
2. Limit harm to customers, systems, and data.
|
|
27
|
+
3. Maintain or restore critical work within approved recovery targets.
|
|
28
|
+
4. Communicate accurate information to affected parties.
|
|
29
|
+
5. Preserve evidence needed for investigation and review.
|
|
30
|
+
6. Record lessons and assign follow-up work.
|
|
31
|
+
|
|
32
|
+
## Roles
|
|
33
|
+
|
|
34
|
+
### Policy owner
|
|
35
|
+
|
|
36
|
+
{{policy_owner_name}} owns this plan and keeps it current. The policy owner may delegate response duties but remains accountable for the plan.
|
|
37
|
+
|
|
38
|
+
### Security and risk oversight
|
|
39
|
+
|
|
40
|
+
The security and risk oversight group reviews the plan, material disruptions, annual exercise results, and unresolved continuity risks. Its review is recorded in formal meeting minutes.
|
|
41
|
+
|
|
42
|
+
### Incident lead
|
|
43
|
+
|
|
44
|
+
The incident lead coordinates the response, assigns work, maintains the incident record, approves status changes, and decides when normal operations have resumed. The policy owner acts as incident lead until another qualified person is assigned.
|
|
45
|
+
|
|
46
|
+
### Executive sponsor
|
|
47
|
+
|
|
48
|
+
The executive sponsor makes business-priority decisions that exceed the incident lead's authority and approves material external communications.
|
|
49
|
+
|
|
50
|
+
### Technical recovery lead
|
|
51
|
+
|
|
52
|
+
The technical recovery lead coordinates system restoration, data recovery, technical validation, and vendor escalation.
|
|
53
|
+
|
|
54
|
+
### System and process owners
|
|
55
|
+
|
|
56
|
+
Owners assess impact, recover their systems or processes, validate restored service, and keep recovery instructions current.
|
|
57
|
+
|
|
58
|
+
### Continuity team
|
|
59
|
+
|
|
60
|
+
The continuity team carries out assigned business, technical, customer, vendor, and communications tasks. Membership may change with the event.
|
|
61
|
+
|
|
62
|
+
### Workforce members
|
|
63
|
+
|
|
64
|
+
Employees and contractors must report suspected disruptions promptly, follow response instructions, and avoid uncoordinated changes that could make recovery harder.
|
|
65
|
+
|
|
66
|
+
## Activation
|
|
67
|
+
|
|
68
|
+
Anyone may report a disruption to {{security_contact_email}}. The policy owner or incident lead activates this plan when normal operating procedures cannot restore an important service within its expected time or when coordinated business action is needed.
|
|
69
|
+
|
|
70
|
+
The incident lead records:
|
|
71
|
+
|
|
72
|
+
- What happened and when it was detected
|
|
73
|
+
- Affected services, data, customers, locations, and vendors
|
|
74
|
+
- Current business and security impact
|
|
75
|
+
- Response owner and participants
|
|
76
|
+
- Decisions, actions, communications, and timestamps
|
|
77
|
+
- Recovery status and remaining risks
|
|
78
|
+
|
|
79
|
+
## Recovery priorities and objectives
|
|
80
|
+
|
|
81
|
+
System and process owners define recovery objectives from business impact rather than assigning a universal target to a severity label. Each important system or process records:
|
|
82
|
+
|
|
83
|
+
- Its business priority and maximum tolerable downtime
|
|
84
|
+
- Its recovery time objective
|
|
85
|
+
- Its recovery point objective
|
|
86
|
+
- The people, systems, vendors, facilities, and data it depends on
|
|
87
|
+
- Minimum staffing, access, and communications needed for recovery
|
|
88
|
+
- Available manual workarounds or alternate services
|
|
89
|
+
- The owner responsible for validating recovery
|
|
90
|
+
|
|
91
|
+
The incident lead normally restores Critical work before High, Medium, and Low work. The incident lead may change that order to protect people, contain security harm, preserve data integrity, meet a legal or contractual deadline, or unblock another recovery.
|
|
92
|
+
|
|
93
|
+
The approved objective recorded for each affected system or process is the recovery target. If no approved objective exists, the incident lead sets and records an interim target based on business impact and dependencies. The owner must formalize the missing objective as follow-up work.
|
|
94
|
+
|
|
95
|
+
Recovery timing starts when the disruption began when that time is known. If it is not known, the incident record uses the earliest confirmed time and states that limitation.
|
|
96
|
+
|
|
97
|
+
## Response and recovery
|
|
98
|
+
|
|
99
|
+
The incident lead coordinates these steps in the order appropriate to the event:
|
|
100
|
+
|
|
101
|
+
1. Confirm the event and protect people.
|
|
102
|
+
2. Identify affected systems, data, processes, and dependencies.
|
|
103
|
+
3. Contain the cause and prevent additional harm.
|
|
104
|
+
4. Activate manual procedures, alternate services, or remote work when available.
|
|
105
|
+
5. Recover systems and data in priority order.
|
|
106
|
+
6. Validate security, integrity, and expected operation before resuming normal use.
|
|
107
|
+
7. Communicate status to affected parties.
|
|
108
|
+
8. Monitor the recovered service for recurrence.
|
|
109
|
+
9. Close the event after owners accept the restored state and remaining risk.
|
|
110
|
+
|
|
111
|
+
Responders must record material decisions and actions as they occur. Emergency changes must be reviewed through the normal change process after service is stable.
|
|
112
|
+
|
|
113
|
+
## Communication
|
|
114
|
+
|
|
115
|
+
The incident lead chooses the audience, channel, and frequency based on impact.
|
|
116
|
+
|
|
117
|
+
Internal updates should state what is known, what remains uncertain, who is responsible, and when the next update is expected. Only authorized people may communicate externally on behalf of {{company_name}}.
|
|
118
|
+
|
|
119
|
+
When customers are affected, the incident lead identifies the applicable contractual commitments, legal duties, and approved communications plan, then records the audience, owner, and deadline for the initial update. When no fixed deadline applies, {{company_name}} communicates promptly after confirming enough facts to provide an accurate and useful update.
|
|
120
|
+
|
|
121
|
+
Customer, regulator, insurer, or law-enforcement notifications must be reviewed by the people responsible for legal, contractual, privacy, and communications obligations. Notifications must meet applicable deadlines and avoid unsupported claims.
|
|
122
|
+
|
|
123
|
+
Employees receive the disruption status, work instructions, available recovery estimate, and next expected update through one or more approved channels. The continuity team keeps an alternate contact method for use when ordinary company communications are unavailable.
|
|
124
|
+
|
|
125
|
+
Owners of affected vendor relationships contact the vendor through the fastest available approved channel, coordinate restoration steps, and record material commitments and updates.
|
|
126
|
+
|
|
127
|
+
## Data backup and restoration
|
|
128
|
+
|
|
129
|
+
Owners of systems that store important data must:
|
|
130
|
+
|
|
131
|
+
- Define backup scope and frequency that meet the system recovery point objective.
|
|
132
|
+
- Protect backups from unauthorized access and changes.
|
|
133
|
+
- Keep recovery access separate from ordinary user access where practical.
|
|
134
|
+
- Monitor backup jobs and address failures.
|
|
135
|
+
- Test restoration at least annually.
|
|
136
|
+
- Record the test date, scope, result, evidence, and follow-up work.
|
|
137
|
+
|
|
138
|
+
A successful backup job is not proof of recoverability. Restore tests must confirm that data can be retrieved and used.
|
|
139
|
+
|
|
140
|
+
During recovery, people take priority over data or equipment. When it is safe to proceed, authorized responders assess the integrity and usability of available electronic and paper records. They may restore approved backups, use intact replicas, rebuild from reviewed configuration or source, use an approved alternate service, or recover other safeguarded copies. The restored environment must receive the same backup and security protections required for normal operation.
|
|
141
|
+
|
|
142
|
+
## Specific disruption procedures
|
|
143
|
+
|
|
144
|
+
### Hosted service or vendor outage
|
|
145
|
+
|
|
146
|
+
The owner confirms vendor status, opens a support case when appropriate, assesses alternate service options, and tracks contractual notification and recovery commitments.
|
|
147
|
+
|
|
148
|
+
### Failed deployment or software defect
|
|
149
|
+
|
|
150
|
+
The owner stops further deployment, rolls back or applies an approved corrective change, validates data integrity, and monitors the restored version.
|
|
151
|
+
|
|
152
|
+
### Loss of workplace access
|
|
153
|
+
|
|
154
|
+
Workers use approved remote-work procedures or an approved alternate location. The incident lead confirms access to required systems, contact methods, and records.
|
|
155
|
+
|
|
156
|
+
### Loss of a key workforce member
|
|
157
|
+
|
|
158
|
+
The responsible manager reassigns urgent duties, obtains access through approved recovery procedures, and records any missing documentation or concentration risk as follow-up work.
|
|
159
|
+
|
|
160
|
+
### Cybersecurity event
|
|
161
|
+
|
|
162
|
+
Responders protect evidence and coordinate containment with recovery. Systems must not return to service until the incident lead and system owner accept the security risk.
|
|
163
|
+
|
|
164
|
+
## Plan access
|
|
165
|
+
|
|
166
|
+
The current plan is stored in this repository. The policy owner must ensure that people who may lead recovery can access an approved copy when the primary systems or identity provider are unavailable. Emergency contacts and access instructions must be stored in an approved protected location and must not be committed to this repository if they contain secrets.
|
|
167
|
+
|
|
168
|
+
The policy owner reviews the emergency contact list at least annually and after a material personnel or vendor change.
|
|
169
|
+
|
|
170
|
+
Employees receive this plan after approval and after a material update. Suppliers, customers, and other parties receive the parts needed to coordinate recovery when appropriate.
|
|
171
|
+
|
|
172
|
+
## Exercises and maintenance
|
|
173
|
+
|
|
174
|
+
{{company_name}} tests this plan at least annually and after a material change when the existing test no longer represents the environment. An exercise may be a tabletop scenario, technical recovery test, communication test, or combined exercise.
|
|
175
|
+
|
|
176
|
+
Each exercise records:
|
|
177
|
+
|
|
178
|
+
- Scenario and scope
|
|
179
|
+
- Participants and roles
|
|
180
|
+
- Systems and processes tested
|
|
181
|
+
- Recovery objectives evaluated
|
|
182
|
+
- Expected and actual results
|
|
183
|
+
- Evidence
|
|
184
|
+
- Findings, owners, and due dates
|
|
185
|
+
|
|
186
|
+
The security and risk oversight group reviews the annual exercise and records its conclusions in meeting minutes.
|
|
187
|
+
|
|
188
|
+
After this plan is activated for a real disruption, the incident lead completes a root-cause and lessons review within one week. The review identifies follow-up work, owners, and due dates.
|
|
189
|
+
|
|
190
|
+
The policy owner reviews this plan at least annually and after a major disruption. Git history records approvals and changes.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "document-contractor-policy-acknowledgement",
|
|
4
|
+
"type": "document",
|
|
5
|
+
"title": "Contractor Policy Acknowledgement",
|
|
6
|
+
"status": "draft",
|
|
7
|
+
"documentKind": "attestation-template",
|
|
8
|
+
"ownerIds": ["person-policy-owner"],
|
|
9
|
+
"approverIds": ["person-independent-approver"],
|
|
10
|
+
"version": "1.0",
|
|
11
|
+
"effectiveOn": "{{effective_date}}",
|
|
12
|
+
"reviewCadence": {
|
|
13
|
+
"mode": "calendar",
|
|
14
|
+
"unit": "year",
|
|
15
|
+
"interval": 1,
|
|
16
|
+
"anchorDate": "{{effective_date}}"
|
|
17
|
+
},
|
|
18
|
+
"classification": "internal",
|
|
19
|
+
"audience": ["contractors"],
|
|
20
|
+
"controlIds": ["control-workforce-expectations"]
|
|
21
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Contractor Policy Acknowledgement
|
|
2
|
+
|
|
3
|
+
I acknowledge that I received access to the following {{company_name}} documents:
|
|
4
|
+
|
|
5
|
+
- Anti-Bribery and Corruption Policy
|
|
6
|
+
- Business Continuity and Disaster Recovery Plan
|
|
7
|
+
- Clear Desk and Clear Screen Policy
|
|
8
|
+
- Data Protection and Handling Policy
|
|
9
|
+
- Information Security Policy
|
|
10
|
+
- Mobile Computing and Communications Policy
|
|
11
|
+
|
|
12
|
+
I understand that I am responsible for following these documents while performing services for {{company_name}}, protecting information made available to me, and reporting suspected violations.
|
|
13
|
+
|
|
14
|
+
I understand that the documents may be updated. When {{company_name}} requires a new acknowledgement, I will review the identified revisions before signing. The Git commit below identifies the exact revisions covered by this acknowledgement.
|
|
15
|
+
|
|
16
|
+
This acknowledgement supplements and does not replace the applicable services, confidentiality, or data-protection agreement.
|
|
17
|
+
|
|
18
|
+
Content Git commit: ___________________________________
|
|
19
|
+
|
|
20
|
+
Contractor name: ____________________________________
|
|
21
|
+
|
|
22
|
+
Signature: __________________________________________
|
|
23
|
+
|
|
24
|
+
Date: ______________________________________________
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "document-contractor-training-acknowledgement",
|
|
4
|
+
"type": "document",
|
|
5
|
+
"title": "Contractor Training Acknowledgement",
|
|
6
|
+
"status": "draft",
|
|
7
|
+
"documentKind": "attestation-template",
|
|
8
|
+
"ownerIds": ["person-policy-owner"],
|
|
9
|
+
"approverIds": ["person-independent-approver"],
|
|
10
|
+
"version": "1.0",
|
|
11
|
+
"effectiveOn": "{{effective_date}}",
|
|
12
|
+
"reviewCadence": {
|
|
13
|
+
"mode": "calendar",
|
|
14
|
+
"unit": "year",
|
|
15
|
+
"interval": 1,
|
|
16
|
+
"anchorDate": "{{effective_date}}"
|
|
17
|
+
},
|
|
18
|
+
"classification": "internal",
|
|
19
|
+
"audience": ["contractors"],
|
|
20
|
+
"controlIds": ["control-security-training"],
|
|
21
|
+
"relatedResourceIds": ["training-security-awareness"]
|
|
22
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Contractor Training Acknowledgement
|
|
2
|
+
|
|
3
|
+
I acknowledge that I completed the following {{company_name}} training:
|
|
4
|
+
|
|
5
|
+
- Security Awareness and Incident Response Training
|
|
6
|
+
- Other assigned training: ______________________________
|
|
7
|
+
|
|
8
|
+
I understand the security responsibilities and reporting process described in the training. I had an opportunity to ask questions, and I will follow the policies and procedures that apply to the services I perform.
|
|
9
|
+
|
|
10
|
+
I understand that training and policies may be updated. When {{company_name}} assigns revised or additional training, I will review the identified material and complete the required acknowledgement. The Git commit below identifies the exact training revision covered by this acknowledgement.
|
|
11
|
+
|
|
12
|
+
This acknowledgement supplements and does not replace the applicable services, confidentiality, data-protection, or other written agreement.
|
|
13
|
+
|
|
14
|
+
Training Git commit: __________________________________
|
|
15
|
+
|
|
16
|
+
Contractor name: ____________________________________
|
|
17
|
+
|
|
18
|
+
Signature: __________________________________________
|
|
19
|
+
|
|
20
|
+
Date: ______________________________________________
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "document-data-retention-schedule",
|
|
4
|
+
"type": "document",
|
|
5
|
+
"title": "Data Retention Schedule",
|
|
6
|
+
"status": "draft",
|
|
7
|
+
"documentKind": "schedule",
|
|
8
|
+
"ownerIds": ["person-policy-owner"],
|
|
9
|
+
"approverIds": ["person-independent-approver"],
|
|
10
|
+
"version": "1.0",
|
|
11
|
+
"effectiveOn": "{{effective_date}}",
|
|
12
|
+
"reviewCadence": {
|
|
13
|
+
"mode": "calendar",
|
|
14
|
+
"unit": "year",
|
|
15
|
+
"interval": 1,
|
|
16
|
+
"anchorDate": "{{effective_date}}"
|
|
17
|
+
},
|
|
18
|
+
"classification": "internal",
|
|
19
|
+
"audience": ["data-owners", "system-owners"],
|
|
20
|
+
"acknowledgementRequired": false,
|
|
21
|
+
"controlIds": [
|
|
22
|
+
"control-data-classification-inventory",
|
|
23
|
+
"control-data-retention-disposal"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Data Retention Schedule
|
|
2
|
+
|
|
3
|
+
## Use
|
|
4
|
+
|
|
5
|
+
This schedule records how long {{company_name}} keeps important record classes and what happens when each period ends. The policy owner and data owners must complete the organization-specific rows before approval.
|
|
6
|
+
|
|
7
|
+
Retention periods may come from law, contract, tax, audit, security, or a documented business need. Use the longest applicable period, but do not keep data indefinitely without a reason.
|
|
8
|
+
|
|
9
|
+
## Schedule
|
|
10
|
+
|
|
11
|
+
| Record class | System or location | Owner | Trigger | Retention | End-of-period action | Authority or reason |
|
|
12
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
13
|
+
| Security logs for important systems | Complete before approval | Complete before approval | Log event | At least 12 months | Delete through the approved system lifecycle | Information Security Policy |
|
|
14
|
+
| Important production backups | Complete before approval | Complete before approval | Backup creation | At least 30 days | Expire through the protected backup cycle | Information Security Policy |
|
|
15
|
+
| SOC 2 policies, control records, and audit evidence | Git repository and approved evidence locations | Policy owner | End of the relevant audit period | Complete before approval based on audit, contract, and legal needs | Archive or securely delete | Audit and business requirements |
|
|
16
|
+
| Customer and service records | Complete before approval | Complete before approval | Complete before approval | Complete before approval | Delete or anonymize | Contract, law, and business need |
|
|
17
|
+
| Workforce and contractor records | Approved people or payroll system | Complete before approval | End of employment or services | Complete before approval | Securely delete | Employment, tax, and legal requirements |
|
|
18
|
+
| Vendor and contract records | Complete before approval | Complete before approval | End of relationship or contract | Complete before approval | Securely delete | Contract, audit, and legal requirements |
|
|
19
|
+
| Incident and investigation records | Approved incident and evidence systems | Incident owner | Incident closure | Complete before approval | Archive or securely delete | Legal, insurance, contract, and security needs |
|
|
20
|
+
|
|
21
|
+
Add rows for each important data class in the system and vendor inventories. A row is incomplete until it names the source system, owner, trigger, period, disposal action, and authority.
|
|
22
|
+
|
|
23
|
+
## Holds and exceptions
|
|
24
|
+
|
|
25
|
+
An approved legal hold, investigation, or preservation duty suspends normal deletion for the affected records. Record the authority, scope, owner, start date, and release decision outside this public template.
|
|
26
|
+
|
|
27
|
+
Any retention exception needs a reason, owner, approval, compensating safeguards, and expiration or next review date.
|
|
28
|
+
|
|
29
|
+
## Review and disposal evidence
|
|
30
|
+
|
|
31
|
+
Review this schedule at least annually and within 30 days after a material change to systems, data use, vendors, contracts, or applicable duties. The approver must be separate from the owner.
|
|
32
|
+
|
|
33
|
+
For material disposal work, retain a record of the record class, source, date range, method, completion date, responsible person, exceptions, and verification.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "document-employee-handbook-acknowledgement",
|
|
4
|
+
"type": "document",
|
|
5
|
+
"title": "Employee Handbook Acknowledgement",
|
|
6
|
+
"status": "draft",
|
|
7
|
+
"documentKind": "attestation-template",
|
|
8
|
+
"ownerIds": ["person-policy-owner"],
|
|
9
|
+
"approverIds": ["person-independent-approver"],
|
|
10
|
+
"version": "1.0",
|
|
11
|
+
"effectiveOn": "{{effective_date}}",
|
|
12
|
+
"reviewCadence": {
|
|
13
|
+
"mode": "calendar",
|
|
14
|
+
"unit": "year",
|
|
15
|
+
"interval": 1,
|
|
16
|
+
"anchorDate": "{{effective_date}}"
|
|
17
|
+
},
|
|
18
|
+
"classification": "internal",
|
|
19
|
+
"audience": ["employees"],
|
|
20
|
+
"controlIds": ["control-workforce-expectations"]
|
|
21
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Employee Handbook Acknowledgement
|
|
2
|
+
|
|
3
|
+
I acknowledge that I received access to the current {{company_name}} Employee Handbook.
|
|
4
|
+
|
|
5
|
+
I understand that I am responsible for reading the handbook, asking questions when a requirement is unclear, and following the requirements that apply to my work.
|
|
6
|
+
|
|
7
|
+
I understand the reporting routes and the prohibition on retaliation for a good-faith report, accommodation request, safety concern, pay concern, or participation in a review.
|
|
8
|
+
|
|
9
|
+
I understand that the handbook is not an employment contract. Local law, written employment terms, benefit plans, and approved regional supplements control when they differ from the handbook.
|
|
10
|
+
|
|
11
|
+
I understand that the handbook may be updated. When {{company_name}} requires a new acknowledgement, I will review the identified revision before signing. The Git commit below identifies the exact handbook revision covered by this acknowledgement.
|
|
12
|
+
|
|
13
|
+
Handbook Git commit: __________________________________
|
|
14
|
+
|
|
15
|
+
Employee name: ______________________________________
|
|
16
|
+
|
|
17
|
+
Signature: __________________________________________
|
|
18
|
+
|
|
19
|
+
Date: ______________________________________________
|