Skip to main content

Compliance

Last Updated: 2026-03-06 Sources: .state/scps/*.json (19 SCPs), ndx-try-aws-lza (security-config.yaml), innovation-sandbox-on-aws (kms.ts, rest-api-all.ts, cloudfront-ui-api.ts), ndx-try-aws-scp

Executive Summary

The NDX:Try AWS platform enforces compliance through a four-layered policy hierarchy: AWS Control Tower managed guardrails, Landing Zone Accelerator (LZA) service control policies and AWS Config rules, Terraform-managed Innovation Sandbox cost and security SCPs, and ISB Core lifecycle protection policies. Together, 19 Service Control Policies restrict region usage to us-east-1 and us-west-2, block expensive services, limit compute instance sizes, protect the ISB control plane, and enforce write protection on idle accounts. The LZA further enables GuardDuty, Security Hub (with FSBP, NIST 800-53 Rev 5, and CIS v3.0.0 standards), Macie, IAM Access Analyzer, and 25+ AWS Config rules across the organization.


Policy Hierarchy


1. Service Control Policies (19 Total)

SCP Inventory by Source

SourceCountManagement Tool
AWS (FullAWSAccess)1AWS Managed
AWS Control Tower4Control Tower Managed
LZA8LZA Pipeline (security-config.yaml)
Terraform4co-cddo/ndx-try-aws-scp
ISB Core2innovation-sandbox-on-aws
Total19

Complete SCP List

Policy IDNameSource
p-FullAWSAccessFullAWSAccessAWS
p-8wd7ba5zaws-guardrails-NllhqIControl Tower
p-nxzjmfvtaws-guardrails-LfCVzNControl Tower
p-trgexdi8aws-guardrails-ZkxPzjControl Tower
p-u1nq4ha1aws-guardrails-mQGCETControl Tower
p-wr0deafeAWSAccelerator-Core-Guardrails-1LZA
p-eybze26qAWSAccelerator-Core-Guardrails-2LZA
p-eolruvn3AWSAccelerator-Core-Sandbox-Guardrails-1LZA
p-k3kvpq9aAWSAccelerator-Core-Workloads-Guardrails-1LZA
p-s37b6cezAWSAccelerator-Suspended-GuardrailsLZA
p-txuho3u8AWSAccelerator-Quarantine-New-ObjectLZA
p-vtn1xi9mAWSAccelerator-Security-Guardrails-1LZA
p-w2ssyciyAWSAccelerator-Infrastructure-Guardrails-1LZA
p-6tw8eixpInnovationSandboxRestrictionsScpTerraform
p-1rzl0ufvInnovationSandboxCostAvoidanceComputeScpTerraform
p-64setrznInnovationSandboxCostAvoidanceServicesScpTerraform
p-7pd0szg9InnovationSandboxAwsNukeSupportedServicesScpTerraform
p-gn4fu3coInnovationSandboxProtectISBResourcesScpISB Core
p-tyb1wjxvInnovationSandboxWriteProtectionScpISB Core

2. Innovation Sandbox SCPs (Detail)

InnovationSandboxRestrictionsScp (p-6tw8eixp)

Attached To: ndx_InnovationSandboxAccountPool OU (parent, inherited by all child OUs)

Statements:

SIDEffectWhat It Does
DenyRegionAccessDenyRestricts all actions (except Bedrock) to us-east-1 and us-west-2 only
DenyExpensiveBedrockModelsDenyBlocks InvokeModel/Converse on anthropic.claude*opus* and anthropic.claude*sonnet* models
SecurityAndIsolationRestrictionsDenyBlocks billing portal, CloudTrail service channels, RAM resource sharing, WAFv2 firewall manager, SSM document sharing, network manager
CostImplicationRestrictionsDenyBlocks reserved instance purchases, billing modifications, Shield subscriptions, Cost Explorer modifications
OperationalRestrictionsDenyBlocks Direct Connect, CloudHSM, Route53 Domains, Storage Gateway, Chime, region enablement, and 30+ other restricted services

Exempted Principals: InnovationSandbox-ndx*, AWSReservedSSO_ndx_IsbAdmins*, stacksets-exec-*, AWSControlTowerExecution

Source: .state/scps/p-6tw8eixp.json

InnovationSandboxCostAvoidanceComputeScp (p-1rzl0ufv)

Attached To: Active OU

Statements:

SIDEffectWhat It Does
DenyUnallowedEC2DenyOnly allows: t2.micro/small/medium, t3.micro/small/medium/large, t3a.micro/small/medium/large, m5.large/xlarge, m6i.large/xlarge
DenyExpensiveEC2DenyBlocks GPU (p*, g*), Inferentia (inf*, trn*), bare metal (.metal), and instances >= 12xlarge
DenyExpensiveEBSDenyBlocks Provisioned IOPS volumes (io1, io2)
DenyLargeEBSDenyBlocks EBS volumes > 500 GB
DenyUnallowedRDSDenyOnly allows: db.t3., db.t4g., db.m5.large/xlarge, db.m6g.large/xlarge, db.m6i.large/xlarge
DenyUnallowedCacheDenyOnly allows: cache.t3., cache.t4g., cache.m5.large, cache.m6g.large
LimitEKSSizeDenyBlocks EKS node groups with maxSize > 5
LimitASGSizeDenyBlocks Auto Scaling Groups with MaxSize > 10
DenyLambdaPCDenyBlocks Lambda provisioned concurrency

Source: .state/scps/p-1rzl0ufv.json

InnovationSandboxCostAvoidanceServicesScp (p-64setrzn)

Attached To: Active OU

Statements:

SIDEffectBlocked Services
DenyExpensiveMLDenySageMaker endpoints, training jobs, hyperparameter tuning
DenyExpensiveDataDenyEMR, Redshift clusters, GameLift fleets
DenyExpensiveServicesDenyMSK, FSx, Kinesis streams, dedicated hosts, reserved instances/savings plans, Neptune, DocumentDB, MemoryDB, OpenSearch, Batch compute environments, Glue jobs/dev endpoints, Timestream, QLDB

Source: .state/scps/p-64setrzn.json

InnovationSandboxAwsNukeSupportedServicesScp (p-7pd0szg9)

Attached To: ndx_InnovationSandboxAccountPool OU (parent)

Type: Allow-list (uses NotAction to deny everything except listed services)

Purpose: Restricts sandbox accounts to only use AWS services that AWS Nuke can clean up, ensuring accounts can be properly recycled after lease termination.

Allowed Services: 130+ services including EC2, S3, Lambda, DynamoDB, RDS, ECS, EKS, CloudFormation, IAM, Bedrock, SageMaker, ElastiCache, API Gateway, CloudFront, and more.

Source: .state/scps/p-7pd0szg9.json

InnovationSandboxProtectISBResourcesScp (p-gn4fu3co)

Attached To: ndx_InnovationSandboxAccountPool OU (parent)

Statements:

SIDEffectWhat It Protects
ProtectIsbControlPlaneResourcesDeny allISB IAM roles (InnovationSandbox-ndx*), SSO reserved roles, ISB-prefixed resources (*Isb-ndx*), stacksets-exec roles, SAML providers
ProtectControlTowerResourcesDeny allCloudTrail trails, EventBridge rules, Lambda functions, log groups, SNS topics, IAM roles prefixed with aws-controltower-
DenyConfigActionsDenyPrevents deletion/modification of AWS Config recorder and delivery channel
ProtectControlTowerTaggedConfigResourcesDenyPrevents modification of Config resources tagged aws-control-tower: managed-by-control-tower
DenyControlTowerConfigTagActionsDenyPrevents adding/removing aws-control-tower tags from Config resources

Source: .state/scps/p-gn4fu3co.json

InnovationSandboxWriteProtectionScp (p-tyb1wjxv)

Attached To: Available OU, Quarantine OU

Statement: A single statement (DenyAllExceptIsbRoles) that denies all actions (Action: *) on all resources (Resource: *) for all principals except the ISB control plane roles. This effectively makes accounts read-only until they are leased or after they enter quarantine.

Source: .state/scps/p-tyb1wjxv.json


3. OU-to-SCP Attachment and Effective Permissions

Effective SCP Stack by Account State

Account StateEffective SCPs (cumulative)
AvailableFullAWSAccess + CT guardrails + LZA guardrails + RestrictionsScp + NukeSupportedScp + ProtectISBScp + WriteProtectionScp
ActiveFullAWSAccess + CT guardrails + LZA guardrails + RestrictionsScp + NukeSupportedScp + ProtectISBScp + CostComputeScp + CostServicesScp
FrozenFullAWSAccess + CT guardrails + LZA guardrails + RestrictionsScp + NukeSupportedScp + ProtectISBScp
QuarantineFullAWSAccess + CT guardrails + LZA guardrails + RestrictionsScp + NukeSupportedScp + ProtectISBScp + WriteProtectionScp

4. LZA Security Services

The Landing Zone Accelerator enables the following security services across all accounts in the organization:

Security Monitoring

ServiceStatusConfiguration
AWS GuardDutyEnabledS3 protection, EKS protection, findings exported to S3 every 6 hours
AWS Security HubEnabledMulti-region aggregation, 3 standards enabled
Amazon MacieEnabledPolicy findings every 15 minutes, published to Security Hub
IAM Access AnalyzerEnabledOrganization-level analyzer

Security Hub Standards

StandardStatusScope
AWS Foundational Security Best Practices (FSBP) v1.0.0EnabledRoot OU (all accounts)
NIST SP 800-53 Rev 5EnabledRoot OU (all accounts)
CIS AWS Foundations Benchmark v3.0.0EnabledRoot OU (all accounts)
CIS AWS Foundations Benchmark v1.2.0Disabled-

Source: ndx-try-aws-lza/security-config.yaml lines 43-80

SCP Integrity

scpRevertChangesConfig:
enable: true

The LZA automatically reverts unauthorized manual changes to SCPs, maintaining policy integrity.


5. AWS Config Rules

The LZA deploys 25+ AWS Config rules for compliance monitoring. Key rules include:

Encryption Compliance

RuleResource TypePurpose
dynamodb-table-encrypted-kmsDynamoDB TableEnsures KMS encryption
secretsmanager-using-cmkSecrets ManagerEnsures CMK usage
backup-recovery-point-encryptedBackup Recovery PointEnsures encrypted backups
codebuild-project-artifact-encryptionCodeBuildEnsures artifact encryption
cloudwatch-log-group-encryptedCloudWatchEnsures log encryption
api-gw-cache-enabled-and-encryptedAPI Gateway StageEnsures cache encryption

IAM and Access

RuleResource TypePurpose
iam-user-group-membership-checkIAM UserUsers must belong to groups
iam-no-inline-policy-checkIAM User/Role/GroupNo inline policies
iam-group-has-users-checkIAM GroupGroups must have members
ec2-instance-profile-attachedEC2 InstanceInstances need profiles (auto-remediation)

Monitoring and Logging

RuleResource TypePurpose
cloudtrail-enabledCloudTrailCloudTrail must be active
cloudtrail-security-trail-enabledCloudTrailSecurity trail required
cloudtrail-s3-dataevents-enabledCloudTrailS3 data events logging
guardduty-non-archived-findingsGuardDutyFindings must be resolved (High: 1 day, Medium: 7 days, Low: 30 days)
securityhub-enabledSecurity HubSecurity Hub active

Infrastructure

RuleResource TypePurpose
ec2-instance-detailed-monitoring-enabledEC2 InstanceDetailed monitoring required
ec2-volume-inuse-checkEC2 VolumeVolumes must be attached (deleteOnTermination: TRUE)
ec2-instances-in-vpcEC2 InstanceInstances must be in VPC
ebs-optimized-instanceEC2 InstanceEBS optimization required
ebs-in-backup-planEBSEBS in backup plan
rds-in-backup-planRDSRDS in backup plan
elb-logging-enabledELBELB logging required (auto-remediation)
no-unrestricted-route-to-igwRoute TableNo open routes to IGW
s3-bucket-policy-grantee-checkS3 BucketBucket policy validation

Auto-Remediation

Two Config rules have automated remediation enabled:

  1. ec2-instance-profile-attached: Automatically attaches an IAM instance profile using SSM Automation (Attach-IAM-Instance-Profile document)
  2. elb-logging-enabled: Automatically enables ELB access logging using SSM Automation (SSM-ELB-Enable-Logging document)

Source: ndx-try-aws-lza/security-config.yaml lines 118-391


6. IAM Password Policy

The LZA enforces a strict IAM password policy across the organization:

SettingValue
Minimum length14 characters
Require uppercaseYes
Require lowercaseYes
Require numbersYes
Require symbolsYes
Allow user to changeYes
Password reuse prevention24 previous passwords
Max password age90 days
Hard expiryNo (grace period allowed)

Source: ndx-try-aws-lza/security-config.yaml lines 99-108


7. Application-Level Security Controls

Beyond organization-level policies, the ISB application enforces:

ControlImplementationSource
SAML 2.0 Authenticationpassport-saml with IdP cert validationsso-handler
JWT Bearer Token AuthHMAC-SHA256, configurable session durationauthorizer-handler.ts
RBAC (3 roles)Path+method authorization mapauthorization-map.ts
WAF IP Allow-ListCIDR-based on X-Forwarded-Forrest-api-all.ts
WAF Rate Limiting200 req/min per IPrest-api-all.ts
AWS Managed WAF RulesCommon Rule Set, IP Reputation, Anonymous IPrest-api-all.ts
HSTS540-day max-age with includeSubDomainscloudfront-ui-api.ts
Content Security PolicyStrict self-only CSPcloudfront-ui-api.ts
X-Frame-OptionsDENYcloudfront-ui-api.ts
HTTPS EnforcementCloudFront REDIRECT_TO_HTTPScloudfront-ui-api.ts
S3 SSL EnforcementenforceSSL: true on all bucketscloudfront-ui-api.ts
KMS Encryption at RestCustomer-managed keys for DynamoDB, Secrets, S3kms.ts
30-day Secret RotationAutomated JWT secret rotationauth-api.ts
Maintenance ModeAppConfig-driven, Admin-only accessauthorizer-handler.ts

8. Compliance Summary

NCSC Cloud Security Principles Alignment

PrincipleStatusKey Evidence
1. Data in TransitCompliantTLS 1.2+, HSTS, S3 SSL enforcement
2. Asset ProtectionPartialMulti-AZ (DynamoDB, Lambda), PITR, but single-region
3. User SeparationCompliantDedicated AWS accounts per sandbox lease
4. GovernancePartialIaC, code review, SCPs, but no formal ISMS
5. Operational SecurityPartialDependabot, CloudTrail, Config, but no centralized SIEM
6. Personnel SecurityCompliantSSO with MFA, organizational access controls
7. Secure DevelopmentPartialTypeScript strict, ESLint, Dependabot, but no SAST/DAST
8. Supply ChainPartialPinned GitHub Actions, npm audit, OpenSSF Scorecard
9. User ManagementCompliantIAM Identity Center, group-based RBAC, short-lived credentials
10. Identity & AuthCompliantSAML 2.0, JWT, OIDC, no long-lived credentials
11. External InterfacesCompliantWAF, Lambda authorizer, no public S3 buckets
12. Secure AdminCompliantSSO only, no IAM users, branch protection
13. Audit InformationPartialCloudTrail, CloudWatch, but limited retention archival
14. Secure UsePartialDocumentation provided, but no formal training programme

GDS Service Standard

PointStatusKey Evidence
5. AccessibilityMetpa11y-ci, GOV.UK Design System
9. Create Secure ServiceMetAll security controls above
12. Open SourceMetAll repositories public on GitHub
14. Reliable ServicePartialMulti-AZ, PITR, but no documented SLA


Generated from source analysis. See 00-repo-inventory.md for full inventory.