NIS2 Self-Assessment Checklist

December 27, 2025 · View on GitHub

Compliance verification for NIS2 Directive Article 21 requirements.

Use this checklist for internal audits and procurement documentation.


Instructions

For each requirement:

  1. Review the Implementation column
  2. Check the Evidence location
  3. Mark status: ✅ Compliant | ⚠️ Partial | ❌ Gap
  4. Document any remediation needed

Article 21(a) - Risk Analysis and Information System Security

"Policies on risk analysis and information system security"

#RequirementImplementationEvidenceStatus
21a.1Risk analysis performedThreat model documentedSECURITY.md
21a.2Security policies definedHardening standardsCIS_COMPLIANCE.md
21a.3Attack surface minimizedRead-only containers, dropped capsdocker-compose.yml
21a.4Configuration hardeningNon-root, no-new-privilegesdocker-compose.yml
21a.5Vulnerability managementCI pipeline with linting.github/workflows/

Article 21(b) - Incident Handling

"Incident handling"

#RequirementImplementationEvidenceStatus
21b.1Incident detectionSIEM-ready logging (Fluent Bit)monitoring/fluent-bit.conf
21b.2Structured audit logsJSON/CEF format with HMACdjango-nis2-shield
21b.3Log integrityHMAC signing of log entriesCRYPTOGRAPHY.md
21b.4Incident response planVulnerability disclosure processSECURITY.md
21b.524h notification capabilitySIEM integration, webhooksdjango-nis2-shield config

Article 21(c) - Business Continuity and Crisis Management

"Business continuity, such as backup management and disaster recovery"

#RequirementImplementationEvidenceStatus
21c.1Automated backupsEvery 6 hours, 7-day retentiondocker-compose.yml (db-backup)
21c.2Backup encryption✅ PASSBackup Workflow verified (log_analyzer) (Last Check: 2025-12-27)
21c.3Offsite backupCrypto-Replicator to cloudcrypto-replicator/
21c.4Zero-trust cloudAES-256-GCM + RSA-OAEPCRYPTOGRAPHY.md
21c.5DR testingAutomated restore test scriptscripts/restore-test.sh
21c.6DR documentationRecovery procedures documentedCRYPTOGRAPHY.md
21c.7Key rotationKeyRotationManagercrypto-replicator/key_manager.py

Article 21(d) - Supply Chain Security

"Supply chain security, including security-related aspects concerning relationships between each entity and its direct suppliers or service providers"

#RequirementImplementationEvidenceStatus
21d.1Verified base imagesOfficial images (python, postgres)Dockerfiles
21d.2Dependency pinningrequirements.txt with versionscrypto-replicator/requirements.txt
21d.3Open source transparencyMIT license, public repositoryGitHub
21d.4SBOM generationRecommended in CIAdd Syft to CI⚠️
21d.5Vulnerability scanningHadolint in CI.github/workflows/

Article 21(e) - Security in Network and Systems Acquisition

"Security in network and information systems acquisition, development and maintenance, including vulnerability handling and disclosure"

#RequirementImplementationEvidenceStatus
21e.1Secure developmentCode review, CI/CDGitHub PRs, Actions
21e.2Vulnerability disclosuresecurity@nis2shield.comSECURITY.md
21e.3Response timelinesDefined SLAs by severitySECURITY.md
21e.4Patch managementRegular image updatesMonthly schedule recommended⚠️

Article 21(f) - Policies on Cryptography

"Policies and procedures regarding the use of cryptography and, where appropriate, encryption"

#RequirementImplementationEvidenceStatus
21f.1Encryption at rest❌ FAILFound 1 unencrypted resources (Last Check: 2025-12-27)
21f.2Encryption in transitTLS 1.2+ requiredSECURITY.md
21f.3Key managementRotation, separation, offline storageCRYPTOGRAPHY.md
21f.4Algorithm selectionNIST-approved (AES, RSA, SHA-256)CRYPTOGRAPHY.md
21f.5PII protectionFernet encryption in logsdjango-nis2-shield

Article 21(g) - Human Resources Security

"Human resources security, access control policies and asset management"

#RequirementImplementationEvidenceStatus
21g.1Access controlRBAC (Kubernetes), DB user separationHelm chart, compose
21g.2Principle of least privilegeMinimal container capabilitiesdocker-compose.yml
21g.3Secrets managementExternal secrets, Vault readyValues.yaml annotations
21g.4Audit loggingAll access loggeddjango-nis2-shield

Article 21(h) - Multi-Factor Authentication

"The use of multi-factor authentication or continuous authentication solutions"

#RequirementImplementationEvidenceStatus
21h.1MFA supportMFAEnforcer middlewaredjango-nis2-shield
21h.2Session securitySessionGuard, fingerprintingreact-guard
21h.3Device validationDevice fingerprint in telemetryreact-guard

Article 23 - Reporting Obligations

"Reporting obligations"

#RequirementImplementationEvidenceStatus
23.1Early warning (24h)Incident logging with timestampAudit logs
23.2Structured reportsJSON/CEF formatdjango-nis2-shield
23.3CSIRT integrationSIEM forwardingmonitoring/fluent-bit.conf
23.4Evidence preservationImmutable logs, HMAC signedCRYPTOGRAPHY.md

Summary

ArticleRequirementsCompliantPartialGaps
21(a) Risk Analysis5500
21(b) Incident Handling5500
21(c) Business Continuity7700
21(d) Supply Chain5410
21(e) Vulnerability Handling4310
21(f) Cryptography5500
21(g) Access Control4400
21(h) MFA3300
23 Reporting4400
TOTAL424020

Compliance Score: 95%


Remediation Plan

21d.4 - SBOM Generation

Gap: Software Bill of Materials not automatically generated.

Remediation:

# Add to CI workflow
- name: Generate SBOM
  uses: anchore/sbom-action@v0
  with:
    image: ${{ env.IMAGE }}
    artifact-name: sbom.spdx.json

21e.4 - Patch Management

Gap: No automated monthly update schedule.

Remediation: Document and implement monthly base image update procedure.


Certification Statement

This self-assessment was conducted by:

  • Organization: _______________________
  • Assessor: _______________________
  • Date: _______________________
  • Next Review: _______________________

Signature: _______________________


Template version: 1.0 Last updated: 2025-12-27