SCP, Tag, Backup, and AI Services Policy OverviewΒΆ
AWS Organizations supports four policy types that govern accounts in your organization. This page explains each type, how to discover them with runbooks, and how they relate to the CSDM-first tag taxonomy.
Business ValueΒΆ
These 3 enforcement guardrails protect cloud spend and compliance posture across the AWS organization.
| Guardrail | Business Impact | Compliance |
|---|---|---|
| Service Control Policies | Prevents unauthorized services from running | APRA CPS 234 Β§36 |
| Tag Policies | Enforces cost allocation attributes | Finance audit trail |
| Backup Policies | Mandates data protection schedules | Business continuity |
Risk: No Enforcement Guardrails
Without SCPs and Tag Policies: uncontrolled service sprawl, cost allocation disputes taking weeks to resolve, APRA CPS 234 audit findings requiring expensive remediation. Estimated risk exposure: significant per audit cycle.
SCP Policy Coverage [UNVERIFIED-FORECAST]ΒΆ
pie title SCP Policy Coverage [UNVERIFIED-FORECAST]
"Compliant Resources" : 85
"Non-Compliant" : 10
"Exempt" : 5
The Four Policy TypesΒΆ
| Policy Type | AWS Name | Purpose | Profile |
|---|---|---|---|
| Service Control Policy (SCP) | SERVICE_CONTROL_POLICY |
Restrict or allow API actions across accounts and OUs | $AWS_MANAGEMENT_PROFILE |
| Tag Policy | TAG_POLICY |
Enforce tag key capitalization and allowed values | $AWS_MANAGEMENT_PROFILE |
| Backup Policy | BACKUP_POLICY |
Define backup plans across accounts | $AWS_MANAGEMENT_PROFILE |
| AI Services Opt-Out | AISERVICES_OPT_OUT_POLICY |
Opt accounts out of AWS AI service data sharing | $AWS_MANAGEMENT_PROFILE |
Service Control Policies (SCP)ΒΆ
SCPs define the maximum permissions boundary for accounts and OUs. They do not grant permissions β they restrict the ceiling of what IAM policies can allow.
Common SCP patterns in multi-account LZΒΆ
Organization Root (FullAWSAccess β default)
βββ Core OU
β βββ DenyLeavingOrganization.json
β βββ DenyDisablingCloudTrail.json
βββ Workload OU
β βββ DenyRootAccountUsage.json
β βββ EnforceTaggingOnEC2.json
βββ Sandbox OU
βββ LimitRegions.json
Discovering SCPsΒΆ
export AWS_MANAGEMENT_PROFILE=<your-management-profile>
# List all SCPs
uv run runbooks inventory list-org-policies \
--profile $AWS_MANAGEMENT_PROFILE \
--policy-type SERVICE_CONTROL_POLICY \
--output-dir tenants/b2b-energy/raw/organizations/
# Count unique SCP names
jq '[.Policies[].Name] | unique | length' \
tenants/b2b-energy/raw/organizations/scp-policies.json
SCP phased rollout (3-phase)ΒΆ
The CSDM-first tag standard enforces bc:* tags via SCPs in three phases:
| Phase | Enforcement Mode | Trigger |
|---|---|---|
| Monitor (Phase A β 2026-Q3) | No deny β CloudWatch metrics only | Tag governance v2.0 published |
| Warn (Phase B β 2026-Q4) | Tag Policy enforcement via @@enforce |
bc:* rollout into terraform-aws-metering |
| Enforce (Phase C β 2027-Q1) | SCP deny on non-compliant resources | APRA CPS 234 Β§36 audit cycle |
Tag PoliciesΒΆ
Tag Policies enforce tag key capitalization (case-sensitive matching) and restrict allowed tag values. They do not prevent resource creation β they flag non-compliant tags in the AWS Console and can optionally prevent tagging of specific resource types.
Tag Policy and bc:* taxonomyΒΆ
The CSDM-first tag taxonomy uses bc: prefixed keys (all lowercase). Tag Policy enforcement ensures:
bc:projectis always lowercase (preventsBC:Project,Bc:projectdrift)- Allowed values for
bc:environmentareprod,staging,dev,sandbox bc:technical-leadis present on allec2:instanceandrds:dbresources
ServiceNow CSDM 5 compatibility target
Tag Policy enforces bc:* key consistency at the AWS layer. ServiceNow CSDM 5 class mapping is a compatibility target prepared; NOT integrated 2026 stage 1. Live CSDM API sync is deferred to CC-S2 Stage 2.
See CSDM-First Taxonomy for the full bc:* tag table.
Discovering Tag PoliciesΒΆ
export AWS_MANAGEMENT_PROFILE=<your-management-profile>
# List all Tag Policies
uv run runbooks inventory list-org-policies \
--profile $AWS_MANAGEMENT_PROFILE \
--policy-type TAG_POLICY \
--output-dir tenants/b2b-energy/raw/organizations/
# List policy names
jq '[.Policies[].Name]' \
tenants/b2b-energy/raw/organizations/tag-policies.json
Backup PoliciesΒΆ
Backup Policies define AWS Backup plans that are applied across accounts. A Backup Policy specifies backup frequency, retention period, and destination vault.
Common backup policy parametersΒΆ
{
"plans": {
"daily-7day-retention": {
"rules": {
"DailyBackup": {
"schedule_expression": {"@@assign": "cron(0 5 ? * * *)"},
"target_backup_vault_name": {"@@assign": "Default"},
"lifecycle": {
"delete_after_days": {"@@assign": "7"}
}
}
}
}
}
}
Discovering Backup PoliciesΒΆ
export AWS_MANAGEMENT_PROFILE=<your-management-profile>
# List all Backup Policies
uv run runbooks inventory list-org-policies \
--profile $AWS_MANAGEMENT_PROFILE \
--policy-type BACKUP_POLICY \
--output-dir tenants/b2b-energy/raw/organizations/
AI Services Opt-Out Policies (Chatbot Policies)ΒΆ
AWS AI services (Amazon Rekognition, Transcribe, Comprehend, Lex, etc.) may use customer data to improve their models unless opted out. These policies control that data sharing at the organization level.
Output filename: chatbot-policies.json
The runbooks CLI writes AI Services Opt-Out policies to chatbot-policies.json (matching HITL team convention). The AWS policy type name is AISERVICES_OPT_OUT_POLICY.
Discovering AI Services Opt-Out PoliciesΒΆ
export AWS_MANAGEMENT_PROFILE=<your-management-profile>
# List AI Services Opt-Out Policies
uv run runbooks inventory list-org-policies \
--profile $AWS_MANAGEMENT_PROFILE \
--policy-type AISERVICES_OPT_OUT_POLICY \
--output-dir tenants/b2b-energy/raw/organizations/
All Policies in One CommandΒΆ
export AWS_MANAGEMENT_PROFILE=<your-management-profile>
# Capture all 4 policy types at once
uv run runbooks inventory list-org-policies \
--profile $AWS_MANAGEMENT_PROFILE \
--policy-type ALL \
--output-dir tenants/b2b-energy/raw/organizations/
# Verify all 4 files were written
ls tenants/b2b-energy/raw/organizations/*-policies.json
Policy Count ValidationΒΆ
After capture, cross-check policy counts against the AWS Console:
# SCP count from runbooks
jq '.Policies | length' tenants/b2b-energy/raw/organizations/scp-policies.json
# Tag Policy count from runbooks
jq '.Policies | length' tenants/b2b-energy/raw/organizations/tag-policies.json
# Cross-check SCP count via direct aws CLI
aws organizations list-policies \
--filter SERVICE_CONTROL_POLICY \
--profile $AWS_MANAGEMENT_PROFILE \
--query 'Policies | length(@)'
Related PagesΒΆ
- CSDM-First Taxonomy β bc:* tag standard and SCP enforcement phases
- CLI Reference β
list-org-policiesfull help - Evidence Pack β b2b-energy policy capture results
- Billing Tag Policy Template β production-ready Tag Policy JSON template