{"id":79548,"date":"2026-10-28T06:32:50","date_gmt":"2026-10-28T06:32:50","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=79548"},"modified":"2026-10-28T06:32:51","modified_gmt":"2026-10-28T06:32:51","slug":"iso-iec-27001-explained-build-operate-and-audit-an-information-security-management-system","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/iso-iec-27001-explained-build-operate-and-audit-an-information-security-management-system\/","title":{"rendered":"ISO\/IEC 27001 Explained: Build, Operate, and Audit an Information Security Management System"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A security program fails when it depends on individual heroes. A developer enables multifactor authentication, an administrator reviews logs, and a manager approves a policy, but nobody can answer a more important question:&nbsp;<strong>Are the right risks being managed consistently across the business?<\/strong>&nbsp;ISO\/IEC 27001 addresses that management problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ISO\/IEC 27001 is a requirements standard for an Information Security Management System (ISMS). An ISMS is the coordinated combination of leadership, scope, risk assessment, security controls, evidence, measurement, and improvement that protects information. The published edition is ISO\/IEC 27001:2022, supplemented by Amendment 1:2024. ISO\/IEC 27002:2022 supplies implementation guidance for controls. ISO\/IEC 27001 certification is possible; there is&nbsp;<strong>no universal official ISO\/IEC 27001 maturity-level ladder<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The business problem behind the standard<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Consider a fictional company, Northstar Mobility, operating a cloud-based telemetry service. Its developers deploy APIs, its operations team manages AWS resources, its support team sees customer records, and several suppliers provide hosting and analytics. A single security product cannot answer whether access approvals are appropriate, cloud risks are understood, backups are recoverable, or vendors are reviewed. The ISMS connects those decisions to accountable owners and auditable evidence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The three classic protection objectives are confidentiality (information is disclosed only to authorized parties), integrity (information remains accurate and protected from unauthorized change), and availability (authorized users can access it when needed). The objective is&nbsp;<strong>risk management<\/strong>, not a claim that all risk has been eliminated.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How the ISMS works<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">Business context and scopeIdentify assets and risksEvaluate and treat risksImplement controlsOperate and gather evidenceAudit and management reviewCorrect and improve<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The auditable management-system requirements are organized in Clauses 4-10: context, leadership, planning, support, operation, performance evaluation, and improvement. Annex A is a reference control set used when checking risk treatment completeness. Its 93 controls are grouped into organizational, people, physical, and technological categories (37, 8, 14, and 34 respectively). They are&nbsp;<strong>not 93 universally mandatory implementations<\/strong>: the organization chooses necessary controls based on risk, obligations, and an applicability analysis, then justifies its decisions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Define a defensible ISMS scope<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Start with business services, locations, technologies, organizational units, interfaces, and dependencies. A sample scope statement is:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">The ISMS covers design, development, operation, and customer support of the Northstar Mobility telemetry SaaS platform, including the employees, production cloud accounts, CI\/CD pipeline, relevant suppliers, and supporting corporate identity infrastructure.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Map supporting systems that materially affect security, even if operated by a third party. Excluding a risky system to make an audit easier does not remove a real dependency. Identify interested parties: customers, regulators, personnel, suppliers, shareholders, and certification stakeholders. Record their relevant security requirements.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Deliverable:<\/strong>&nbsp;approved scope statement and a boundary diagram listing included services and critical interfaces.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Establish ownership and policy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Appoint an executive sponsor, an ISMS owner, risk owners, control owners, and independent internal auditors. Publish an information security policy covering objectives, accountability, risk acceptance authority, employee obligations, escalation, and continuous improvement. A policy is meaningful only when teams know what behavior it requires.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A practical responsibility model is:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Decision or activity<\/th><th class=\"has-text-align-left\" data-align=\"left\">Accountable owner<\/th><th class=\"has-text-align-left\" data-align=\"left\">Evidence<\/th><\/tr><\/thead><tbody><tr><td>ISMS objectives and resources<\/td><td>Executive leadership<\/td><td>Approved goals and review minutes<\/td><\/tr><tr><td>Risk assessment method<\/td><td>Security leadership<\/td><td>Approved methodology<\/td><\/tr><tr><td>Application access<\/td><td>Application owner<\/td><td>Access review and approvals<\/td><\/tr><tr><td>Cloud vulnerability remediation<\/td><td>Platform engineering<\/td><td>Tickets, scan output, deployment records<\/td><\/tr><tr><td>Independent internal audit<\/td><td>Internal audit lead<\/td><td>Audit plan and findings<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Inventory assets and assess risks<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Identify information assets, their owners, locations, sensitivity, dependencies, and threats. Choose a consistent assessment methodology before scoring risks. For learning purposes, use likelihood and impact values of 1-5, where&nbsp;<strong>illustrative risk score = likelihood x impact<\/strong>. This numerical method is not prescribed by ISO\/IEC 27001.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Risk ID<\/th><th class=\"has-text-align-left\" data-align=\"left\">Scenario<\/th><th class=\"has-text-align-right\" data-align=\"right\">Likelihood<\/th><th class=\"has-text-align-right\" data-align=\"right\">Impact<\/th><th class=\"has-text-align-right\" data-align=\"right\">Initial score<\/th><th class=\"has-text-align-left\" data-align=\"left\">Treatment<\/th><\/tr><\/thead><tbody><tr><td>R-001<\/td><td>Privileged cloud account compromise<\/td><td class=\"has-text-align-right\" data-align=\"right\">4<\/td><td class=\"has-text-align-right\" data-align=\"right\">5<\/td><td class=\"has-text-align-right\" data-align=\"right\">20<\/td><td>Reduce via phishing-resistant MFA and privileged-access review<\/td><\/tr><tr><td>R-002<\/td><td>Unrecoverable database after ransomware<\/td><td class=\"has-text-align-right\" data-align=\"right\">3<\/td><td class=\"has-text-align-right\" data-align=\"right\">5<\/td><td class=\"has-text-align-right\" data-align=\"right\">15<\/td><td>Reduce via isolated backups and restore tests<\/td><\/tr><tr><td>R-003<\/td><td>Supplier processes telemetry beyond agreed purpose<\/td><td class=\"has-text-align-right\" data-align=\"right\">2<\/td><td class=\"has-text-align-right\" data-align=\"right\">4<\/td><td class=\"has-text-align-right\" data-align=\"right\">8<\/td><td>Reduce via contractual and technical restrictions<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Set risk acceptance criteria with the proper authority. Record residual risk after treatment; a control can reduce risk without removing it. A risk register should track treatment owner, due date, selected controls, evidence, remaining exposure, and acceptance decision.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Create the Statement of Applicability<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Statement of Applicability (SoA) is a central ISMS artifact. It records the controls determined necessary, explains why they are included, states whether they are implemented, and justifies exclusions from Annex A. Review the Annex A set to ensure no necessary control was overlooked; additional non-Annex-A controls can also be selected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example (abbreviated and illustrative):<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Control reference<\/th><th class=\"has-text-align-left\" data-align=\"left\">Applicability<\/th><th class=\"has-text-align-left\" data-align=\"left\">Reason<\/th><th class=\"has-text-align-left\" data-align=\"left\">Implementation evidence<\/th><\/tr><\/thead><tbody><tr><td>A.5.15 Access control<\/td><td>Included<\/td><td>Cloud and customer-data access risk<\/td><td>Identity policy, access review logs<\/td><\/tr><tr><td>A.5.23 Information security for use of cloud services<\/td><td>Included<\/td><td>Cloud-hosted workloads<\/td><td>Supplier review and cloud guardrails<\/td><\/tr><tr><td>A.8.8 Management of technical vulnerabilities<\/td><td>Included<\/td><td>Internet-facing services<\/td><td>Scan reports and remediation tickets<\/td><\/tr><tr><td>Physical control in a provider-operated facility<\/td><td>Assess, do not automatically exclude<\/td><td>Responsibilities may be shared<\/td><td>Provider assurance plus contractual allocation<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The SoA is not a checkbox sheet. Its selection, justifications, implementation status, and links to actual evidence must be consistent with the risk treatment plan.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Implement and operate controls<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Put security measures into normal work rather than making them occasional audit activities:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Identity: joiner\/mover\/leaver processes, least privilege, privileged-access approvals, MFA, service-account ownership.<\/li>\n\n\n\n<li>Engineering: secure coding expectations, dependency checks, code reviews, release approvals, and secrets management.<\/li>\n\n\n\n<li>Operations: asset inventory, configuration baselines, logging, vulnerability remediation, incident response, backups, and recovery testing.<\/li>\n\n\n\n<li>People and suppliers: onboarding, training, contractual requirements, performance reviews, and offboarding.<\/li>\n\n\n\n<li>Governance: document control, exceptions, risk acceptance, scheduled reviews, and performance reporting.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Typical evidence:<\/strong>&nbsp;approved policy versions, risk decisions, identity exports, infrastructure-as-code reviews, incident drills, backup restore logs, supplier due-diligence records, and change tickets. Secure sensitive evidence; audit artifacts can themselves reveal architectural weaknesses.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hands-on lab: Build a small risk register<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Create a file named&nbsp;<code>risk_review.py<\/code>&nbsp;on Windows, macOS, or Linux and paste the following Python 3 code. No extra packages are required.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> csv\n<span class=\"hljs-keyword\">from<\/span> pathlib <span class=\"hljs-keyword\">import<\/span> Path\n\nrisks = &#91;\n    {<span class=\"hljs-string\">\"id\"<\/span>: <span class=\"hljs-string\">\"R-001\"<\/span>, <span class=\"hljs-string\">\"asset\"<\/span>: <span class=\"hljs-string\">\"Cloud admin\"<\/span>, <span class=\"hljs-string\">\"likelihood\"<\/span>: <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-string\">\"impact\"<\/span>: <span class=\"hljs-number\">5<\/span>, <span class=\"hljs-string\">\"owner\"<\/span>: <span class=\"hljs-string\">\"Platform\"<\/span>},\n    {<span class=\"hljs-string\">\"id\"<\/span>: <span class=\"hljs-string\">\"R-002\"<\/span>, <span class=\"hljs-string\">\"asset\"<\/span>: <span class=\"hljs-string\">\"Database backups\"<\/span>, <span class=\"hljs-string\">\"likelihood\"<\/span>: <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-string\">\"impact\"<\/span>: <span class=\"hljs-number\">5<\/span>, <span class=\"hljs-string\">\"owner\"<\/span>: <span class=\"hljs-string\">\"SRE\"<\/span>},\n    {<span class=\"hljs-string\">\"id\"<\/span>: <span class=\"hljs-string\">\"R-003\"<\/span>, <span class=\"hljs-string\">\"asset\"<\/span>: <span class=\"hljs-string\">\"Vendor analytics\"<\/span>, <span class=\"hljs-string\">\"likelihood\"<\/span>: <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-string\">\"impact\"<\/span>: <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-string\">\"owner\"<\/span>: <span class=\"hljs-string\">\"Security\"<\/span>},\n]\n\n<span class=\"hljs-keyword\">for<\/span> risk <span class=\"hljs-keyword\">in<\/span> risks:\n    risk&#91;<span class=\"hljs-string\">\"score\"<\/span>] = risk&#91;<span class=\"hljs-string\">\"likelihood\"<\/span>] * risk&#91;<span class=\"hljs-string\">\"impact\"<\/span>]\n    risk&#91;<span class=\"hljs-string\">\"priority\"<\/span>] = <span class=\"hljs-string\">\"High\"<\/span> <span class=\"hljs-keyword\">if<\/span> risk&#91;<span class=\"hljs-string\">\"score\"<\/span>] &gt;= <span class=\"hljs-number\">15<\/span> <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-string\">\"Review\"<\/span>\n\n<span class=\"hljs-keyword\">with<\/span> Path(<span class=\"hljs-string\">\"risk_register.csv\"<\/span>).open(<span class=\"hljs-string\">\"w\"<\/span>, newline=<span class=\"hljs-string\">\"\"<\/span>, encoding=<span class=\"hljs-string\">\"utf-8\"<\/span>) <span class=\"hljs-keyword\">as<\/span> f:\n    writer = csv.DictWriter(f, fieldnames=risks&#91;<span class=\"hljs-number\">0<\/span>].keys())\n    writer.writeheader()\n    writer.writerows(risks)\n\n<span class=\"hljs-keyword\">for<\/span> risk <span class=\"hljs-keyword\">in<\/span> sorted(risks, key=lambda r: r&#91;<span class=\"hljs-string\">\"score\"<\/span>], reverse=True):\n    print(risk&#91;<span class=\"hljs-string\">\"id\"<\/span>], risk&#91;<span class=\"hljs-string\">\"asset\"<\/span>], risk&#91;<span class=\"hljs-string\">\"score\"<\/span>], risk&#91;<span class=\"hljs-string\">\"priority\"<\/span>])\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Run&nbsp;<code>python3 risk_review.py<\/code>&nbsp;on macOS\/Linux or&nbsp;<code>py -3 risk_review.py<\/code>&nbsp;on Windows where the Python launcher is available. You should see&nbsp;<code>R-001<\/code>&nbsp;first with score 20, then&nbsp;<code>R-002<\/code>&nbsp;with score 15, and&nbsp;<code>R-003<\/code>&nbsp;with score 8. Open&nbsp;<code>risk_register.csv<\/code>&nbsp;and add treatment actions, evidence locations, and residual-risk decisions as an exercise.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Important:<\/strong>&nbsp;the thresholds, asset names, and risk ratings are training examples. A live ISMS must define its own criteria, document assumptions, and obtain appropriate approvals.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Measure, audit, and improve<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Define performance indicators tied to security outcomes, for example:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Metric<\/th><th class=\"has-text-align-left\" data-align=\"left\">Useful interpretation<\/th><th class=\"has-text-align-left\" data-align=\"left\">Common failure<\/th><\/tr><\/thead><tbody><tr><td>Critical vulnerability remediation time<\/td><td>How quickly exposure decreases<\/td><td>Counting only easy-to-fix findings<\/td><\/tr><tr><td>Overdue access reviews<\/td><td>Unverified access entitlement risk<\/td><td>Measuring completions without checking quality<\/td><\/tr><tr><td>Successful recovery exercises<\/td><td>Tested operational resilience<\/td><td>Treating backup success as proof of recoverability<\/td><\/tr><tr><td>Supplier reviews completed<\/td><td>External dependency oversight<\/td><td>Ignoring the riskiest providers<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Plan an&nbsp;<strong>internal audit<\/strong>&nbsp;that checks both ISO requirements and your own processes, using auditors objective enough to assess the work. Record nonconformities, root causes, corrections, corrective actions, owners, and effectiveness checks. Management review should consider performance, risks, findings, changes, resource needs, and improvement opportunities.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For third-party certification, engage an appropriate accredited certification body, confirm scope and applicable edition, complete the document-focused Stage 1 and implementation-focused Stage 2 activities, address findings, and follow the body&#8217;s surveillance and recertification arrangements. An ISO certificate does not mean every attack is prevented; it attests to management-system conformity within its scope.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Common implementation mistakes<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Writing attractive policies but retaining no operating evidence.<\/li>\n\n\n\n<li>Treating all Annex A controls as identical mandatory technical installations.<\/li>\n\n\n\n<li>Leaving risk acceptance undocumented or assigning it to someone without authority.<\/li>\n\n\n\n<li>Excluding suppliers and shared infrastructure without understanding dependencies.<\/li>\n\n\n\n<li>Using a maturity score as though it were an ISO certification result.<\/li>\n\n\n\n<li>Creating evidence only in the weeks immediately before an audit.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Readiness test<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Question 1:<\/strong>&nbsp;Is a firewall configuration sufficient proof of ISO\/IEC 27001 conformity?&nbsp;<strong>Answer:<\/strong>&nbsp;No. Technical control evidence is one part of an ISMS that must also demonstrate governance, risk management, evaluation, and improvement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Question 2:<\/strong>&nbsp;Does ISO\/IEC 27001 require all 93 Annex A controls to be implemented?&nbsp;<strong>Answer:<\/strong>&nbsp;No. Necessary controls are selected and justified through risk treatment, with Annex A used as a completeness reference and exclusion justifications documented.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Question 3:<\/strong>&nbsp;Which artifact directly explains selected and excluded Annex A controls?&nbsp;<strong>Answer:<\/strong>&nbsp;The Statement of Applicability.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Official references<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ISO\/IEC 27001 (published edition and amendments):\u00a0<a href=\"https:\/\/www.iso.org\/standard\/27001\">https:\/\/www.iso.org\/standard\/27001<\/a><\/li>\n\n\n\n<li>ISO\/IEC 27002 (implementation guidance):\u00a0<a href=\"https:\/\/www.iso.org\/standard\/75652.html\">https:\/\/www.iso.org\/standard\/75652.html<\/a><\/li>\n\n\n\n<li>ISO\/IEC 27001 Amendment 1:2024:\u00a0<a href=\"https:\/\/www.iso.org\/standard\/88435.html\">https:\/\/www.iso.org\/standard\/88435.html<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><em>This tutorial paraphrases public descriptions and provides independent examples. Obtain the licensed standard and applicable certification criteria for a formal conformity project.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A security program fails when it depends on individual heroes. A developer enables multifactor authentication, an administrator reviews logs, and a manager approves a policy, but nobody&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[11138],"tags":[],"class_list":["post-79548","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/79548","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=79548"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/79548\/revisions"}],"predecessor-version":[{"id":79549,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/79548\/revisions\/79549"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=79548"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=79548"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=79548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}