Guide · AWS Backup · Audit Manager · Compliance · SOC 2 · HIPAA
AWS Backup Audit Manager — Compliance Reporting for MCP Server Data Protection
When auditors ask "how do you ensure your data is backed up and those backups are encrypted?" you need more than "we have a cron job." AWS Backup Audit Manager continuously evaluates every protected resource in your account against a set of named controls — checking that backups run at the required frequency, that all recovery points are encrypted with KMS, that every resource with the right tag is covered by a backup plan, and that the minimum retention period is enforced. It generates a daily compliance report to S3 and maintains a per-resource compliance status dashboard. This guide covers the five most important backup controls for MCP servers, how to assemble them into a framework, how to export reports for auditors, and how to use AWS Config remediation rules to bring non-compliant resources back into compliance automatically.
TL;DR
Create an Audit Manager framework with these five controls: BACKUP_PLAN_MIN_FREQUENCY_AND_MIN_RETENTION_CHECK (daily frequency, 35-day minimum retention), BACKUP_RECOVERY_POINT_ENCRYPTED, BACKUP_RESOURCES_PROTECTED_BY_BACKUP_PLAN (all DynamoDB and EFS), BACKUP_RECOVERY_POINT_MINIMUM_RETENTION_CHECK (35 days), and BACKUP_LAST_RECOVERY_POINT_CREATED (within 1 day). Enable daily compliance reports to an S3 bucket. The framework evaluates continuously — view per-resource compliance status in the console or query it via CLI for your security questionnaire responses.
Audit Manager vs AWS Audit Manager
There are two separate services with similar names: AWS Backup Audit Manager (described here) and AWS Audit Manager (a broader compliance assessment service). They are different services. AWS Backup Audit Manager is focused exclusively on backup compliance — backup frequency, encryption, retention, and resource coverage. AWS Audit Manager is a broader audit management tool that can gather evidence from many services. For backup compliance specifically, AWS Backup Audit Manager is the right choice because it has pre-built controls that understand backup-specific concepts (recovery point metadata, vault encryption, backup job frequency).
Key backup controls for MCP servers
AWS Backup Audit Manager provides 14 built-in controls. For MCP servers, these five are the most critical:
| Control name | What it checks | Parameters |
|---|---|---|
BACKUP_PLAN_MIN_FREQUENCY_AND_MIN_RETENTION_CHECK |
Every backup plan rule runs at least every N days and retains recovery points at least M days | requiredFrequencyUnit, requiredFrequencyValue, requiredRetentionDays |
BACKUP_RECOVERY_POINT_ENCRYPTED |
All recovery points in all vaults are encrypted (checks for KMS encryption on the vault) | None — all recovery points must be encrypted |
BACKUP_RESOURCES_PROTECTED_BY_BACKUP_PLAN |
All resources of the specified types are assigned to at least one backup plan | resourceType (comma-separated list: DynamoDB, EFS, RDS, EBS, etc.) |
BACKUP_RECOVERY_POINT_MINIMUM_RETENTION_CHECK |
All recovery points have a retention period of at least N days | requiredRetentionDays |
BACKUP_LAST_RECOVERY_POINT_CREATED |
At least one recovery point was created within the last N hours for each protected resource | recoveryPointAgeUnit, recoveryPointAgeValue |
Creating a backup framework
AWS Backup Audit Manager frameworks are created via the console, CLI, or CloudFormation. Use CLI for repeatability:
aws backup create-framework \
--framework-name "alivemcp-backup-compliance" \
--framework-controls '[
{
"ControlName": "BACKUP_PLAN_MIN_FREQUENCY_AND_MIN_RETENTION_CHECK",
"ControlInputParameters": [
{"ParameterName": "requiredFrequencyUnit", "ParameterValue": "days"},
{"ParameterName": "requiredFrequencyValue", "ParameterValue": "1"},
{"ParameterName": "requiredRetentionDays", "ParameterValue": "35"}
],
"ControlScope": {
"Tags": {"Backup": "true"}
}
},
{
"ControlName": "BACKUP_RECOVERY_POINT_ENCRYPTED",
"ControlScope": {
"ComplianceResourceTypes": ["DynamoDB", "EFS", "RDS", "EBS"]
}
},
{
"ControlName": "BACKUP_RESOURCES_PROTECTED_BY_BACKUP_PLAN",
"ControlInputParameters": [
{"ParameterName": "resourceType", "ParameterValue": "DynamoDB,EFS,RDS"}
],
"ControlScope": {
"Tags": {"Backup": "true"}
}
},
{
"ControlName": "BACKUP_RECOVERY_POINT_MINIMUM_RETENTION_CHECK",
"ControlInputParameters": [
{"ParameterName": "requiredRetentionDays", "ParameterValue": "35"}
]
},
{
"ControlName": "BACKUP_LAST_RECOVERY_POINT_CREATED",
"ControlInputParameters": [
{"ParameterName": "recoveryPointAgeUnit", "ParameterValue": "hours"},
{"ParameterName": "recoveryPointAgeValue", "ParameterValue": "26"}
],
"ControlScope": {
"Tags": {"Backup": "true"}
}
}
]'
The ControlScope limits which resources the control evaluates. Using Tags: {"Backup": "true"} is consistent with the resource selection tag in your backup plan — only tagged resources are evaluated, so you don't get false compliance failures for scratch tables that are intentionally unprotected.
Setting recoveryPointAgeValue: 26 hours (not 24) gives a 2-hour buffer for backup jobs that start at exactly 24 hours but take time to complete. A strict 24-hour window would trigger false negatives for backup jobs that complete at hour 25.
CloudFormation / CDK deployment
AWS Backup Audit Manager is exposed via CloudFormation as AWS::Backup::Framework:
// CDK using CloudFormation L1 construct
import { CfnFramework } from 'aws-cdk-lib/aws-backup';
new CfnFramework(this, 'BackupComplianceFramework', {
frameworkName: 'alivemcp-backup-compliance',
frameworkControls: [
{
controlName: 'BACKUP_PLAN_MIN_FREQUENCY_AND_MIN_RETENTION_CHECK',
controlInputParameters: [
{ parameterName: 'requiredFrequencyUnit', parameterValue: 'days' },
{ parameterName: 'requiredFrequencyValue', parameterValue: '1' },
{ parameterName: 'requiredRetentionDays', parameterValue: '35' },
],
controlScope: { tags: [{ key: 'Backup', value: 'true' }] },
},
{
controlName: 'BACKUP_RECOVERY_POINT_ENCRYPTED',
controlScope: {
complianceResourceTypes: ['DynamoDB', 'EFS', 'RDS', 'EBS'],
},
},
{
controlName: 'BACKUP_RESOURCES_PROTECTED_BY_BACKUP_PLAN',
controlInputParameters: [
{ parameterName: 'resourceType', parameterValue: 'DynamoDB,EFS,RDS' },
],
controlScope: { tags: [{ key: 'Backup', value: 'true' }] },
},
{
controlName: 'BACKUP_RECOVERY_POINT_MINIMUM_RETENTION_CHECK',
controlInputParameters: [
{ parameterName: 'requiredRetentionDays', parameterValue: '35' },
],
},
{
controlName: 'BACKUP_LAST_RECOVERY_POINT_CREATED',
controlInputParameters: [
{ parameterName: 'recoveryPointAgeUnit', parameterValue: 'hours' },
{ parameterName: 'recoveryPointAgeValue', parameterValue: '26' },
],
controlScope: { tags: [{ key: 'Backup', value: 'true' }] },
},
],
});
Enabling daily compliance reports
AWS Backup Audit Manager can export daily compliance reports to S3 in CSV or JSON format. Create a report plan to enable this:
aws backup create-report-plan \
--report-plan-name "alivemcp-daily-compliance-report" \
--report-delivery-channel '{
"S3BucketName": "alivemcp-compliance-reports",
"S3KeyPrefix": "backup/",
"Formats": ["CSV", "JSON"]
}' \
--report-setting '{
"ReportTemplate": "BACKUP_JOB_REPORT",
"FrameworkArns": [
"arn:aws:backup:us-east-1:123456789012:framework/alivemcp-backup-compliance"
]
}' \
--report-plan-tags '{"Env": "prod", "Team": "platform"}'
AWS Backup generates reports once per day at approximately 05:00 UTC. The report covers the previous 24 hours. Available report templates:
| Template | What it covers |
|---|---|
BACKUP_JOB_REPORT | All backup job results (started, completed, failed) during the reporting window |
COPY_JOB_REPORT | All cross-account and cross-region copy job results |
RESTORE_JOB_REPORT | All restore job results including restore testing jobs |
RESOURCE_COMPLIANCE_REPORT | Per-resource compliance status for each framework control |
CONTROL_COMPLIANCE_REPORT | Per-control aggregate compliance (N compliant / M total resources) |
For SOC 2 audit evidence, the most useful templates are RESOURCE_COMPLIANCE_REPORT (shows each DynamoDB table's compliance status for each control) and BACKUP_JOB_REPORT (shows backup jobs completed during the audit period). Request both for the audit period (typically 6 or 12 months).
Querying compliance status via CLI
To answer security questionnaire questions like "are all production databases covered by a backup plan?" in real-time:
# List all controls in the framework and their compliance status
aws backup list-framework-controls \
--framework-name alivemcp-backup-compliance \
--query 'FrameworkControls[*].{Control:ControlName,Status:ControlStatus}'
# List non-compliant resources for a specific control
aws backup list-compliance-results \
--framework-name alivemcp-backup-compliance \
--query 'Results[?ComplianceType==`NON_COMPLIANT`].{Resource:ResourceArn,Control:ControlName,Reason:ResultDetail}'
# Get aggregate compliance summary
aws backup describe-framework \
--framework-name alivemcp-backup-compliance \
--query '{Status:DeploymentStatus,ComplianceStatus:FrameworkStatus}'
Automatic remediation for non-compliant resources
AWS Backup Audit Manager uses AWS Config rules under the hood to evaluate controls. Each control maps to a managed Config rule (for example, BACKUP_PLAN_MIN_FREQUENCY_AND_MIN_RETENTION_CHECK maps to backup-plan-min-frequency-and-min-retention-check). You can attach an SSM Automation remediation action to the Config rule so that when a resource goes non-compliant, it is automatically tagged Backup=true (adding it to the backup plan selection):
# Find the Config rule backing the BACKUP_RESOURCES_PROTECTED_BY_BACKUP_PLAN control
aws configservice describe-config-rules \
--query 'ConfigRules[?contains(ConfigRuleName,`backup-resources-protected`)]'
# Add an SSM Automation remediation for auto-tagging unprotected resources
aws configservice put-remediation-configurations --cli-input-json '{
"RemediationConfigurations": [{
"ConfigRuleName": "backup-resources-protected-by-backup-plan",
"TargetType": "SSM_DOCUMENT",
"TargetId": "AWS-AddTagsToResource",
"Parameters": {
"ResourceArn": {
"ResourceValue": { "Value": "RESOURCE_ID" }
},
"Tags": {
"StaticValue": { "Values": ["{\"Backup\":\"true\"}"] }
}
},
"Automatic": true,
"MaximumAutomaticAttempts": 3,
"RetryAttemptSeconds": 60
}]
}'
Automatic remediation is an aggressive stance — it tags every unprotected resource without review. For a startup MCP server team, manual remediation (review weekly Config compliance report, add Backup=true tag to new resources) is often safer until your tagging conventions are stable.
Mapping controls to audit frameworks
AWS Backup Audit Manager controls map to these compliance framework requirements:
| Control | SOC 2 (CC9.1) | HIPAA (§164.308(a)(7)) | ISO 27001 (A.12.3.1) |
|---|---|---|---|
| BACKUP_PLAN_MIN_FREQUENCY | Recovery time + point objectives | Contingency plan — data backup | Information backup |
| BACKUP_RECOVERY_POINT_ENCRYPTED | Encryption at rest | Encryption of PHI at rest | Cryptographic controls |
| BACKUP_RESOURCES_PROTECTED | System availability controls | Data backup completeness | Information backup scope |
| BACKUP_MIN_RETENTION_CHECK | Retention period controls | 7-year PHI retention requirement | Backup retention schedule |
| BACKUP_LAST_RECOVERY_POINT | Continuous availability evidence | Contingency plan testing | Backup timeliness verification |
When submitting evidence for SOC 2 Type II, attach the RESOURCE_COMPLIANCE_REPORT exports for each month of the audit period. Auditors will look for consistent COMPLIANT status across all reporting months — a single non-compliant month requires a management response explaining the gap and the remediation taken.
Common failures
| Symptom | Cause | Fix |
|---|---|---|
Framework stuck in CREATE_IN_PROGRESS for more than 15 minutes | Underlying AWS Config rules are still being created; large accounts with many resources take longer to evaluate | Wait up to 30 minutes; if still stuck, delete and recreate the framework — this is an eventual consistency issue |
BACKUP_RESOURCES_PROTECTED_BY_BACKUP_PLAN shows non-compliant despite resource having tag Backup=true | The tag was added to the resource but the backup plan selection has not yet evaluated the new resource | AWS Backup re-evaluates selections at the next scheduled backup job — the control will show compliant after the first backup job succeeds |
| Compliance report S3 bucket shows no files after 24 hours | The S3 bucket policy does not grant backup.amazonaws.com permission to write reports | Add a bucket policy statement: "Principal": {"Service": "reports.backup.amazonaws.com"}, "Action": ["s3:PutObject"] |
All recovery points show non-compliant for BACKUP_RECOVERY_POINT_ENCRYPTED | The backup vault uses the AWS-managed key (aws/backup) rather than a customer-managed key; some older control evaluations consider only CMK-encrypted vaults as compliant | Migrate the vault to use a customer-managed KMS key; create a new vault with a CMK, copy recovery points (or allow old ones to age out), update the backup plan to target the new vault |
Framework compliance report shows some resources with INSUFFICIENT_DATA | The Config rule has not yet evaluated the resource — occurs for newly-created resources within the first evaluation cycle | Wait for the next Config evaluation cycle (up to 24 hours) or trigger manual evaluation: aws configservice start-config-rules-evaluation |