2026-04-21·15 min read·

NIS2 Art.29–32: Information Sharing, Supervisory Framework, Essential Entity Audit Powers, and the CEO Ban — Developer Guide (2026)

Articles 25–28 established sector-specific technical requirements for horizontal infrastructure providers. Articles 29–32 introduce two distinct regulatory mechanisms that operate at a systemic level: voluntary cybersecurity information sharing (Art.29–30) and the supervisory and enforcement framework for essential entities (Art.31–32).

These articles matter differently to different roles. For security teams: Art.29 creates a legal safe harbour for sharing threat intelligence with industry peers — something that was legally ambiguous under national law in many Member States. For executives: Art.32(6) introduces personal liability for C-suite officers who negligently allow security failures, up to and including a temporary ban from managerial functions. For compliance engineers: Art.31–32 define exactly what an NCA can do to your organisation and when.

Art.29: Cybersecurity Information Sharing Arrangements

What Art.29 Creates

Art.29 establishes the legal basis for voluntary cybersecurity information sharing arrangements between entities. Before NIS2, sharing threat intelligence with competitors or industry peers was legally murky — companies worried about antitrust exposure, data protection violations, and contractual liability if shared data was misused.

Art.29 resolves this by creating a specific legal framework:

  1. Participating entities may exchange cybersecurity-relevant information — threat indicators, attack techniques, TTPs, vulnerability disclosures, configuration indicators of compromise
  2. Such sharing is explicitly lawful under NIS2 when conducted within an Art.29 arrangement
  3. ISACs (Information Sharing and Analysis Centres) and CSIRTs can facilitate these arrangements
  4. Member States must actively promote participation in information sharing arrangements

The scope covers entities from both the covered (essential/important) and non-covered sectors. An Art.29 arrangement can include entities not otherwise subject to NIS2 obligations.

Art.29(2) provides the core safe harbour: sharing information within a NIS2 arrangement does not trigger liability under:

This is a genuine legal innovation. ENISA's ISAC guidance pre-NIS2 recommended sharing but couldn't provide the legal certainty that Art.29 now codifies.

Arrangement Structure Requirements

An Art.29 arrangement should define:

from dataclasses import dataclass, field
from typing import Optional
from datetime import datetime
from enum import Enum

class SharingTLP(Enum):
    WHITE = "TLP:WHITE"    # unrestricted
    GREEN = "TLP:GREEN"    # community only
    AMBER = "TLP:AMBER"    # limited distribution
    RED = "TLP:RED"        # named recipients only

class InformationType(Enum):
    THREAT_INDICATOR = "threat_indicator"       # IP, domain, hash, URL
    TTP = "ttp"                                  # MITRE ATT&CK technique
    VULNERABILITY = "vulnerability"              # CVE, CVSS, patch status
    INCIDENT_SUMMARY = "incident_summary"        # anonymised incident report
    REMEDIATION_GUIDANCE = "remediation"         # patch instructions, mitigations
    CONFIGURATION_IOC = "configuration_ioc"      # misconfiguration indicators

@dataclass
class Art29SharingArrangement:
    arrangement_id: str
    participating_entities: list[str]
    coordinator: str                              # ISAC, CSIRT, or lead entity
    applicable_sectors: list[str]
    information_types_allowed: list[InformationType]
    default_tlp_level: SharingTLP
    established_date: datetime
    governing_law_member_state: str
    review_period_months: int = 12
    
    def is_lawful_share(
        self,
        sender: str,
        recipient: str,
        info_type: InformationType,
        tlp: SharingTLP
    ) -> tuple[bool, str]:
        if sender not in self.participating_entities:
            return False, f"{sender} not a party to arrangement"
        if recipient not in self.participating_entities:
            return False, f"{recipient} not a party to arrangement"
        if info_type not in self.information_types_allowed:
            return False, f"{info_type.value} not permitted under arrangement"
        if tlp == SharingTLP.RED:
            return False, "TLP:RED requires bilateral agreement, not arrangement"
        return True, "Sharing lawful under NIS2 Art.29 safe harbour"

@dataclass
class ThreatIntelligenceShare:
    share_id: str
    arrangement_id: str
    sender_entity_id: str
    indicator_type: str           # "ipv4", "domain", "file_hash", "url", "email"
    indicator_value: str
    tlp_level: SharingTLP
    ttp_references: list[str]     # MITRE ATT&CK IDs
    related_cve: Optional[str]
    confidence_score: float       # 0.0–1.0
    valid_until: Optional[datetime]
    sector_relevance: list[str]
    anonymised: bool              # whether entity identity is masked
    
    def is_personal_data(self) -> bool:
        return self.indicator_type in ("ipv4", "email") and not self.anonymised
    
    def gdpr_basis_under_art29(self) -> str:
        if self.is_personal_data():
            return "NIS2 Art.29 specific legal framework — overrides general GDPR basis requirement for cybersecurity sharing"
        return "No personal data involved — GDPR not triggered"

Practical ISAC Participation Checklist

RequirementAction
Formalise participationSign ISAC membership agreement referencing NIS2 Art.29
Document information typesDefine what your organisation will share vs consume
Set TLP policyDefault TLP level per information category
GDPR alignmentUpdate your ROPA: Art.29 sharing = separate processing activity
Incident playbook integrationAdd ISAC notification to your IR runbooks
Antitrust reviewBrief legal — Art.29 covers TTPs and IOCs, not pricing or capacity data

Art.30: Voluntary Notification by Non-Covered Entities

Who Can Use Art.30

Art.30 creates a right — not an obligation — for entities not subject to NIS2 to voluntarily notify their national CSIRT or NCA of:

This is significant for three reasons:

  1. Startups and SMEs below NIS2's Annex I/II thresholds can still contribute to national threat intelligence without fear of regulatory scrutiny
  2. Sector-agnostic entities outside NIS2's scope (e.g., small retailers, non-critical manufacturers) gain a formal channel for reporting
  3. Voluntary reporters benefit from the same NCA confidentiality obligations that apply to mandatory NIS2 reports — your incident won't be disclosed to competitors

Voluntary vs Mandatory Reporting Distinction

from enum import Enum
from dataclasses import dataclass
from datetime import datetime

class ReportingObligation(Enum):
    MANDATORY_ART23 = "mandatory_art23"          # Essential/Important entities
    VOLUNTARY_ART30 = "voluntary_art30"          # Non-covered entities (opt-in)
    SECTOR_SPECIFIC = "sector_specific"          # DORA, CER, etc.

class EntityCoverage(Enum):
    ESSENTIAL = "essential"
    IMPORTANT = "important"
    OUT_OF_SCOPE = "out_of_scope"

@dataclass
class IncidentReportabilityAssessment:
    entity_id: str
    entity_coverage: EntityCoverage
    incident_significant: bool
    incident_date: datetime
    
    def reporting_pathway(self) -> dict:
        if self.entity_coverage in (EntityCoverage.ESSENTIAL, EntityCoverage.IMPORTANT):
            return {
                "obligation": ReportingObligation.MANDATORY_ART23,
                "timeline": "Early warning 24h → Initial 72h → Final 1mo",
                "recipient": "NCA or national CSIRT",
                "consequence_of_omission": "Administrative fine up to EUR 10M or 2% global turnover"
            }
        else:
            return {
                "obligation": ReportingObligation.VOLUNTARY_ART30,
                "timeline": "No mandatory timeline — report when ready",
                "recipient": "National CSIRT (preferred) or NCA",
                "consequence_of_omission": "None — voluntary",
                "benefit": "NCA confidentiality applies; contributes to national threat picture; CSIRT may provide response assistance"
            }

def should_report_voluntarily(
    entity_coverage: EntityCoverage,
    incident_type: str,
    has_threat_intelligence_value: bool
) -> tuple[bool, str]:
    if entity_coverage != EntityCoverage.OUT_OF_SCOPE:
        return False, "Covered entities use mandatory Art.23 reporting, not Art.30"
    if not has_threat_intelligence_value:
        return False, "Low-value incidents unlikely to benefit national threat picture"
    return True, f"Voluntary Art.30 report recommended: {incident_type} — contributes to CSIRT threat intelligence without regulatory exposure"

Art.30 Benefits for Security Teams

Voluntary notification under Art.30 gives non-covered entities access to the CSIRT's incident response assistance capability. CSIRTs can deploy technical assistance to voluntary reporters just as they would to mandatory reporters — meaning a startup that reports a sophisticated ransomware incident under Art.30 may receive active CSIRT support, threat attribution analysis, and remediation guidance that would otherwise require a paid incident response engagement.

Art.31: General Provisions on Supervision and Enforcement

The Proactive/Reactive Divide

Art.31 establishes the foundational distinction that drives the entire NIS2 supervisory regime:

RegimeApplies ToWhen NCAs Can Act
Proactive (ex-ante)Essential entitiesWithout prior incident — NCAs can inspect, audit, and assess at any time
Reactive (ex-post)Important entitiesOnly following incident, complaint, or evidence of non-compliance

This asymmetry reflects the tiered risk assessment underlying NIS2's entity classification. Essential entities — because their disruption would cause critical societal impact — face ongoing supervisory scrutiny regardless of their compliance history. Important entities are supervised on a complaint-driven or incident-triggered basis.

from enum import Enum
from dataclasses import dataclass
from datetime import datetime
from typing import Optional

class SupervisoryRegime(Enum):
    PROACTIVE_EX_ANTE = "proactive_ex_ante"   # Essential entities
    REACTIVE_EX_POST = "reactive_ex_post"      # Important entities

class SupervisoryTool(Enum):
    ON_SITE_INSPECTION = "on_site_inspection"
    REMOTE_AUDIT = "remote_audit"
    TARGETED_SECURITY_AUDIT = "targeted_security_audit"
    SPOT_CHECK = "spot_check"
    AD_HOC_AUDIT = "ad_hoc_audit"
    REQUEST_FOR_INFORMATION = "request_for_information"
    THREAT_LED_PENTEST = "threat_led_pentest"     # TLPT (Art.32(1)(d))
    EVIDENCE_REQUESTS = "evidence_requests"

@dataclass
class SupervisoryAction:
    action_id: str
    entity_id: str
    entity_classification: str           # "essential" or "important"
    tool: SupervisoryTool
    initiated_by: str                    # "NCA proactive" or "incident_triggered"
    legal_basis: str
    initiated_date: datetime
    scope: list[str]                     # which Art.21 measures are in scope
    advance_notice_days: Optional[int]   # None for unannounced
    
    def is_lawful(self, entity_classification: str) -> tuple[bool, str]:
        regime = (
            SupervisoryRegime.PROACTIVE_EX_ANTE
            if entity_classification == "essential"
            else SupervisoryRegime.REACTIVE_EX_POST
        )
        
        if regime == SupervisoryRegime.REACTIVE_EX_POST:
            if self.initiated_by == "NCA proactive":
                return False, "Important entities: NCA can only supervise reactively (post-incident or post-complaint)"
        
        proactive_tools = {
            SupervisoryTool.ON_SITE_INSPECTION,
            SupervisoryTool.REMOTE_AUDIT,
            SupervisoryTool.TARGETED_SECURITY_AUDIT,
            SupervisoryTool.SPOT_CHECK,
            SupervisoryTool.THREAT_LED_PENTEST,
        }
        
        if regime == SupervisoryRegime.REACTIVE_EX_POST and self.tool in proactive_tools:
            return False, f"{self.tool.value} is a proactive tool — not available for important entity ex-post supervision"
        
        return True, f"Supervisory action lawful under NIS2 Art.31 ({regime.value})"

NCA Supervisory Powers Under Art.31

NCAs are granted the following powers (Art.31(3)):

On-site inspections — physical access to premises, systems, and documentation without prior notice (for essential entities). The NCA can send inspectors to your data centre, examine your ISMS, review access logs, and interview security personnel.

Remote audits — NCAs can conduct security assessments remotely, including network scanning, configuration reviews, and document requests.

Security audit requests — NCAs can require entities to commission an independent security audit by a qualified auditor and submit the results. Critically, the NCA selects the auditor methodology, not the entity being audited.

Evidence requests — NCAs can require submission of documented policies, penetration test reports, incident logs, system inventories, vendor contracts, and any other evidence of compliance.

Compliance orders — NCAs can issue binding instructions requiring specific remediation actions within a specified timeframe.

Art.32: Supervisory and Enforcement Measures for Essential Entities

The Essential Entity Supervisory Toolkit

Art.32 operationalises Art.31's general framework specifically for essential entities, adding tools unavailable against important entities:

@dataclass
class EssentialEntitySupervision:
    """Supervisory tools available exclusively against essential entities (Art.32)."""
    
    entity_id: str
    nca_id: str
    
    def available_tools(self) -> list[dict]:
        return [
            {
                "tool": "On-site inspection (unannounced)",
                "article": "Art.32(1)(a)",
                "advance_notice": False,
                "scope": "Premises, systems, documentation, staff interviews"
            },
            {
                "tool": "Targeted security audit",
                "article": "Art.32(1)(b)",
                "advance_notice": True,
                "scope": "NCA-selected scope within Art.21 risk categories; NCA selects auditor"
            },
            {
                "tool": "Ad hoc audit (post-incident)",
                "article": "Art.32(1)(c)",
                "advance_notice": False,
                "trigger": "Significant incident or evidence of non-compliance",
                "scope": "Incident-scoped; may expand to full ISMS review"
            },
            {
                "tool": "Threat-led penetration testing (TLPT)",
                "article": "Art.32(1)(d)",
                "advance_notice": True,
                "scope": "Red team exercise targeting critical systems; aligned with TIBER-EU methodology",
                "frequency": "At least every 3 years (Commission may specify)"
            },
            {
                "tool": "Security scan requests",
                "article": "Art.32(1)(e)",
                "advance_notice": True,
                "scope": "Request scan of public-facing systems and infrastructure"
            },
            {
                "tool": "Evidence requests",
                "article": "Art.32(1)(f)",
                "advance_notice": True,
                "scope": "Policies, procedures, contracts, audit reports, incident records"
            },
            {
                "tool": "Compliance monitoring agent",
                "article": "Art.32(4)(c)",
                "advance_notice": False,
                "condition": "Following non-compliance finding — NCA may appoint a monitoring agent within the entity",
                "duration": "Time-limited, defined by NCA"
            }
        ]

@dataclass  
class TargetedSecurityAudit:
    """Art.32(1)(b): NCA-directed security audit of essential entity."""
    
    audit_id: str
    entity_id: str
    nca_id: str
    audit_scope: list[str]        # Art.21 measure categories
    auditor_selected_by: str      # "NCA" (mandatory — entity cannot self-select)
    auditor_requirements: list[str]
    audit_methodology: str        # NCA specifies — entity cannot substitute
    findings_shared_with: list[str]  # NCA receives; entity receives copy
    remediation_deadline_days: int
    follow_up_audit_triggered: bool = False
    
    def entity_rights(self) -> list[str]:
        return [
            "Receive copy of full audit findings report",
            "Submit written response to preliminary findings",
            "Request meeting with NCA to discuss findings before final decision",
            "Challenge NCA decision through national judicial review",
            "Contest auditor methodology if demonstrably inappropriate for entity type"
        ]

TLPT (Threat-Led Penetration Testing) Under Art.32(1)(d)

TLPT is the most operationally intensive supervisory tool. Unlike a standard penetration test (scope defined by the entity, report to the entity), TLPT under NIS2:

TLPT preparation requirements for essential entities:

Preparation AreaAction
Scope inventoryMaintain current inventory of critical systems and dependencies
Crown jewels mappingDocument which systems contain critical data or functions
Threat modelMaintain a current threat intelligence profile relevant to your sector
Contact protocolsDesignate TLPT liaison with authority to authorise red team access
Incident response isolationEnsure TLPT activity is distinguishable from real incidents in your SIEM
Contractual coverageVerify third-party contracts allow NCA-directed testing of integrated systems

Art.32(6): Management Accountability and the Temporary Ban

The CEO Ban Mechanism

Art.32(6) is NIS2's most dramatic enforcement provision. When an essential entity persistently fails to comply with NIS2 requirements, NCAs can:

  1. Hold management bodies personally liable for the entity's cybersecurity failures
  2. Issue a public statement identifying the responsible natural person (named individual)
  3. Impose a temporary ban on the responsible person from exercising managerial functions

This applies to board members, CEOs, and any natural persons in management positions who are responsible for the entity's cybersecurity governance under Art.20.

from dataclasses import dataclass
from datetime import datetime, timedelta
from typing import Optional
from enum import Enum

class ManagementBanTrigger(Enum):
    PERSISTENT_NON_COMPLIANCE = "persistent_non_compliance"
    SIGNIFICANT_INCIDENT_NEGLIGENCE = "significant_incident_negligence"
    FAILURE_TO_IMPLEMENT_CORRECTIVE_MEASURES = "failure_to_implement_corrective"
    REPEATED_VIOLATIONS_AFTER_SANCTIONS = "repeated_violations"

class BanScope(Enum):
    ENTITY_SPECIFIC = "entity_specific"    # banned from managing THIS entity
    SECTOR_WIDE = "sector_wide"            # banned from NIS2-covered entity management broadly
    NCA_DISCRETION = "nca_discretion"

@dataclass
class ManagementAccountabilityAction:
    """Art.32(6) management accountability enforcement action."""
    
    action_id: str
    entity_id: str
    responsible_person_name: str
    responsible_person_role: str          # "CEO", "CISO", "Board Chair", etc.
    nca_id: str
    
    # Trigger facts
    trigger: ManagementBanTrigger
    prior_enforcement_actions: list[str]  # previous fines, compliance orders
    compliance_orders_ignored: list[str]  # specific orders not implemented
    harm_caused: Optional[str]            # disruption, data breach, etc.
    
    # Enforcement
    public_statement_issued: bool
    ban_imposed: bool
    ban_scope: Optional[BanScope]
    ban_duration_days: Optional[int]
    ban_start_date: Optional[datetime]
    
    def ban_end_date(self) -> Optional[datetime]:
        if self.ban_start_date and self.ban_duration_days:
            return self.ban_start_date + timedelta(days=self.ban_duration_days)
        return None
    
    def proportionality_factors(self) -> dict:
        return {
            "prior_compliance_history": "Weight of prior enforcement actions",
            "severity_of_harm": "Actual disruption caused to essential services",
            "response_to_nca_engagement": "Did management engage constructively with NCA?",
            "remediation_efforts": "Were any corrective measures implemented before action?",
            "personal_culpability": "Evidence that person specifically failed Art.20 governance duty"
        }
    
    def appeal_pathway(self) -> list[str]:
        return [
            "Challenge ban through national administrative review within statutory deadline",
            "Apply for interim suspension pending judicial review",
            "Contest personal culpability finding (required for ban: Art.32(6) requires personal responsibility)",
            "Argue disproportionality against NIS2 Art.32(7) proportionality requirement",
            "Challenge prior enforcement action that underpins ban (if that action was unlawful)"
        ]

def assess_ceo_liability_risk(
    entity_classification: str,
    compliance_gaps: list[str],
    prior_nca_actions: int,
    art20_governance_documented: bool
) -> dict:
    if entity_classification != "essential":
        return {
            "art32_6_applicable": False,
            "reason": "Art.32(6) management ban applies only to essential entities"
        }
    
    risk_score = 0
    risk_factors = []
    
    if prior_nca_actions >= 2:
        risk_score += 4
        risk_factors.append(f"HIGH: {prior_nca_actions} prior NCA enforcement actions (persistence threshold)")
    
    critical_gaps = [g for g in compliance_gaps if "incident_response" in g or "access_control" in g]
    if critical_gaps:
        risk_score += 3
        risk_factors.append(f"HIGH: Critical Art.21 gaps: {critical_gaps}")
    
    if not art20_governance_documented:
        risk_score += 2
        risk_factors.append("MEDIUM: Art.20 governance accountability not formally documented")
    
    return {
        "art32_6_applicable": True,
        "risk_score": risk_score,
        "risk_level": "HIGH" if risk_score >= 5 else "MEDIUM" if risk_score >= 3 else "LOW",
        "risk_factors": risk_factors,
        "recommended_actions": [
            "Document Art.20 governance formally — board resolution assigning cybersecurity accountability",
            "Respond constructively and promptly to all NCA compliance orders",
            "Implement corrective measures before NCA follow-up audit",
            "Maintain evidence of management engagement with cybersecurity governance"
        ]
    }

Art.32(6) in Practice: What Triggers a Ban

The ban is not a first-response tool. The typical escalation path:

Discovery of non-compliance
        ↓
NCA: Compliance order (Art.32(4)(a)) — specific measures + deadline
        ↓
Deadline missed or measures inadequate
        ↓
NCA: Fine (Art.35 — up to EUR 10M or 2% global turnover)
        ↓
Fine paid but non-compliance continues (persistence threshold)
        ↓
NCA: Art.32(6) — public identification of responsible manager
        ↓
[Optional continuation of non-compliance]
        ↓
NCA: Temporary management ban

The persistence threshold is the key trigger. NCAs must demonstrate that prior enforcement actions failed to produce compliance before imposing a management ban. A first-time incident resulting in an NCA compliance order will not lead to a ban — the ban is reserved for entities that systematically ignore enforcement.

Art.20 Governance Documentation: Your CEO's Protection

Art.20 requires that management bodies approve and oversee cybersecurity risk management measures. This governance documentation is the primary defence against Art.32(6) personal liability:

@dataclass
class Art20GovernanceDocumentation:
    """Evidence package protecting management against Art.32(6) personal liability."""
    
    entity_id: str
    reporting_period: str
    
    # Board-level evidence
    board_cybersecurity_resolution: str           # Board resolution approving ISMS
    board_resolution_date: datetime
    board_training_records: list[str]             # Art.20(2): management training
    board_training_completion_rate: float         # target: 1.0 (100%)
    
    # Risk management oversight
    cybersecurity_risk_reviews_this_year: int    # target: ≥4 per year
    risk_review_minutes_archived: bool
    significant_risk_escalations: list[str]       # risks escalated to board
    board_response_to_escalations: list[str]      # documented board decisions
    
    # NCA engagement record
    nca_correspondence_archive: list[str]
    compliance_orders_received: list[str]
    compliance_orders_response_date: list[datetime]
    corrective_measures_implemented: list[str]
    
    def personal_liability_shield_score(self) -> tuple[float, list[str]]:
        score = 0.0
        evidence_strengths = []
        
        if self.board_training_completion_rate >= 1.0:
            score += 0.25
            evidence_strengths.append("Board training complete (Art.20(2) satisfied)")
        
        if self.cybersecurity_risk_reviews_this_year >= 4:
            score += 0.25
            evidence_strengths.append("Quarterly risk reviews documented")
        
        if self.board_resolution_date:
            score += 0.25
            evidence_strengths.append("Board approval of ISMS formally documented")
        
        if len(self.corrective_measures_implemented) == len(self.compliance_orders_received):
            score += 0.25
            evidence_strengths.append("All NCA compliance orders implemented")
        
        return score, evidence_strengths

Cross-Article Compliance Architecture: Art.29–32 Integration

                    NIS2 Art.29–32 Overview
                    
┌────────────────────────────────────────────────────────────────┐
│                    Information Sharing Layer                    │
│  Art.29: Voluntary ISACs/arrangements — legal safe harbour     │
│  Art.30: Non-covered entity voluntary notification to CSIRT    │
└────────────────────────────────────────────────────────────────┘
                           │
                    reports flow to
                           │
┌────────────────────────────────────────────────────────────────┐
│                 Supervisory Framework (Art.31)                  │
│  Essential: PROACTIVE (ex-ante) — any time, any tool           │
│  Important: REACTIVE (ex-post) — incident/complaint triggered  │
└────────────────────────────────────────────────────────────────┘
                           │
            essential entity enforcement only
                           │
┌────────────────────────────────────────────────────────────────┐
│            Essential Entity Toolkit (Art.32)                   │
│  Art.32(1)(a): On-site inspection (unannounced)                │
│  Art.32(1)(b): Targeted security audit (NCA-directed)          │
│  Art.32(1)(c): Ad hoc audit (post-incident)                    │
│  Art.32(1)(d): TLPT (threat-led penetration testing)           │
│  Art.32(1)(e): Security scan requests                          │
│  Art.32(4)(c): Compliance monitoring agent appointment         │
└────────────────────────────────────────────────────────────────┘
                           │
              persistent non-compliance
                           │
┌────────────────────────────────────────────────────────────────┐
│           Management Accountability (Art.32(6))                │
│  Step 1: Public identification of responsible manager           │
│  Step 2: Temporary ban from managerial functions               │
│  Basis: Personal liability under Art.20 governance duty        │
│  Defence: Art.20 documentation + constructive NCA engagement   │
└────────────────────────────────────────────────────────────────┘

Compliance Checklist: Art.29–32

Information Sharing (Art.29–30)

Proactive Supervision Readiness (Art.31–32)

TLPT Readiness (Art.32(1)(d))

Management Accountability (Art.32(6))

What Comes Next: Art.33–35

Art.33 establishes the equivalent supervisory and enforcement framework for important entities — the reactive counterpart to Art.32's proactive essential entity regime. Art.34 covers general supervision principles applicable to both tiers. Art.35 defines the administrative fine framework: up to EUR 10,000,000 or 2% of global annual turnover (whichever is higher) for essential entities.

The management ban under Art.32(6) operates alongside — not instead of — the Art.35 fine regime. An organisation can simultaneously face an Art.35 fine (against the legal entity) and an Art.32(6) temporary ban (against the responsible individual). These are independent enforcement tools aimed at different targets.


This guide covers NIS2 Articles 29–32 as published in Directive (EU) 2022/2555. Implementing acts and ENISA technical guidelines remain in development for some provisions; consult ENISA's NIS2 implementation resources for the latest technical specifications.