How to Implement ISO 27001 Annex A 8.31 Separation of Development, Test, and Production Environments

Implementing ISO 27001 Annex A 8.31 requires the rigid separation of development, testing, and production environments to maintain system integrity. This control mandates network-level segmentation and strict access restrictions to ensure code is verified before deployment. The critical business benefit is effectively preventing unauthorized changes and confidential data leakage.

ISO 27001 Separation of development, test and production environments Implementation Checklist

Use this implementation checklist to achieve compliance with ISO 27001 Annex A 8.31. This control necessitates a rigid logical and physical separation between development, test, and production environments to prevent unauthorised changes and data leakage.

1. Enforce Network-Level Segmentation

Control Requirement: Production environments must be isolated on the network level from development and test environments.

Required Implementation Step: Configure distinct VLANs or VPCs (Virtual Private Clouds) for Prod, Stage, and Dev. Implement ‘Deny All’ firewall rules between the Development network and the Production database ports; developers must not have a direct network route to production data stores.

Minimum Requirement: A `ping` from a development server to a production database server must timeout.

2. Implement Strict Role-Based Access Control (RBAC)

Control Requirement: Access rights must be restricted based on the environment’s classification.

Required Implementation Step: Audit your Identity Provider (IdP) groups. Remove ‘Write’ and ‘Execute’ permissions for the ‘Developers’ group in the Production environment; developers should only have access to view logs or metrics, not to modify infrastructure or data.

Minimum Requirement: Developers have Read-Only access to Production; only DevOps/SRE or CI/CD service accounts have Write access.

3. Mandate CI/CD Deployment Pipelines

Control Requirement: Changes to production must not be made manually by individuals.

Required Implementation Step: Disable SSH/RDP access for code deployment. Configure a CI/CD pipeline (e.g., Jenkins, GitLab CI, GitHub Actions) that is the only authorised mechanism to promote code from Staging to Production, ensuring an audit trail of every release.

Minimum Requirement: Direct editing of code on production servers is technically blocked.

4. Segregate Configuration Secrets

Control Requirement: Authentication credentials must be unique to each environment.

Required Implementation Step: Generate distinct API keys, database passwords, and encryption keys for Dev, Test, and Prod. Store these in a secrets manager (e.g., HashiCorp Vault, AWS Secrets Manager) and inject them at runtime; never hardcode production secrets in the source code repository.

Minimum Requirement: A developer using the ‘Dev’ database password cannot authenticate against the ‘Prod’ database.

5. Sanitise Test Data

Control Requirement: Production data must not be used in development or test environments without protection.

Required Implementation Step: Write automated ETL scripts that mask, scramble, or anonymise Personally Identifiable Information (PII) when replicating data from Production to Staging. Alternatively, use synthetic data generators for lower environments.

Minimum Requirement: Real customer names and credit card numbers do not exist in the Test database.

6. Differentiate Environments Visually

Control Requirement: Staff must be able to immediately identify which environment they are working in to prevent errors.

Required Implementation Step: Configure terminal prompts, dashboard banners, and browser favicons to use distinct colour codes (e.g., Red for Production, Green for Dev). Force these visual cues via group policy or interface configuration settings.

Minimum Requirement: The Production console clearly displays a “PRODUCTION” warning banner.

7. Restrict Compilers and Dev Tools in Prod

Control Requirement: Development tools should not be present in the operational environment to reduce the attack surface.

Required Implementation Step: Strip compilers (gcc, make), debuggers, and unneeded editors from production server images or container builds. Production servers should contain only the compiled binary or runtime necessary to execute the application.

Minimum Requirement: Running `gcc` on a production server returns “command not found”.

8. Implement “Break-Glass” Procedures

Control Requirement: Emergency access to production must be controlled, monitored, and temporary.

Required Implementation Step: Create a specific emergency admin account that is disabled by default. Accessing it should trigger an immediate alert to the security team and require a documented incident ticket; access must be revoked immediately after the incident is resolved.

Minimum Requirement: No standing “Admin” accounts exist; elevation requires a logged approval workflow.

9. Lock Down Deployment Endpoints

Control Requirement: Testing activities must not impact production availability.

Required Implementation Step: Ensure that load testing and penetration testing tools are configured to target the Staging environment endpoints only. Block the IP addresses of load testing agents at the production firewall.

Minimum Requirement: Stress tests run against the Staging URL, never the Live URL.

10. Separate Backups and Archives

Control Requirement: Backups of production systems must be isolated to prevent accidental overwrites by development processes.

Required Implementation Step: Configure backup storage buckets (e.g., S3) with strict IAM policies that prevent the Development environment from reading or writing to Production backup repositories. Ensure retention policies differ appropriate to the environment.

Minimum Requirement: A ‘Restore to Dev’ command cannot accidentally target and overwrite a Production backup file.

ISO 27001 Annex A 8.31 SaaS / GRC Platform Implementation Failure Checklist

Control RequirementThe ‘Checkbox Compliance’ TrapThe Reality Check
Network SegregationSaaS tool checks if a policy document exists named “Network_Architecture.pdf”.Prod and Dev servers reside on the same flat 192.168.x.x subnet, allowing malware to jump laterally instantly.
Access ControlSaaS tool verifies that “Access Control Policy” is signed by the CTO.Developers share a generic `root` password for the production server, pinned in a Slack channel.
Data SanitisationSaaS tool asks “Do you protect test data?” (Yes/No).Developers manually export full production database dumps (GDPR breach) to their unencrypted laptops for debugging.
Code DeploymentSaaS tool confirms a “Change Management” procedure is uploaded.The lead developer edits PHP files directly on the live server using `nano` because “it’s faster”.
Secret ManagementSaaS tool checks for an “Encryption Policy”.AWS Access Keys with full admin privileges are hardcoded and committed into the public GitHub repository.
Environment SeparationSaaS tool looks for an asset register listing “Prod” and “Test”.The “Test” environment is actually just a sub-folder on the Production server, sharing the same resources and vulnerabilities.
Tooling RestrictionsSaaS tool requires a “System Hardening Standard”.Compilers and debugging tools are left installed on Prod, allowing attackers to compile exploits locally.
Fay Barker - High Table - ISO27001 Director

About the author

Stuart Barker
🎓 MSc Security 🛡️ Lead Auditor 30+ Years Exp 🏢 Ex-GE Leader

Stuart Barker

ISO 27001 Ninja

Stuart Barker is a veteran practitioner with over 30 years of experience in systems security and risk management. Holding an MSc in Software and Systems Security, he combines academic rigor with extensive operational experience, including a decade leading Data Governance for General Electric (GE).

As a qualified ISO 27001 Lead Auditor, Stuart possesses distinct insight into the specific evidence standards required by certification bodies. His toolkits represent an auditor-verified methodology designed to minimise operational friction while guaranteeing compliance.

Shopping Basket
Scroll to Top