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 nameWhat it checksParameters
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:

TemplateWhat it covers
BACKUP_JOB_REPORTAll backup job results (started, completed, failed) during the reporting window
COPY_JOB_REPORTAll cross-account and cross-region copy job results
RESTORE_JOB_REPORTAll restore job results including restore testing jobs
RESOURCE_COMPLIANCE_REPORTPer-resource compliance status for each framework control
CONTROL_COMPLIANCE_REPORTPer-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:

ControlSOC 2 (CC9.1)HIPAA (§164.308(a)(7))ISO 27001 (A.12.3.1)
BACKUP_PLAN_MIN_FREQUENCYRecovery time + point objectivesContingency plan — data backupInformation backup
BACKUP_RECOVERY_POINT_ENCRYPTEDEncryption at restEncryption of PHI at restCryptographic controls
BACKUP_RESOURCES_PROTECTEDSystem availability controlsData backup completenessInformation backup scope
BACKUP_MIN_RETENTION_CHECKRetention period controls7-year PHI retention requirementBackup retention schedule
BACKUP_LAST_RECOVERY_POINTContinuous availability evidenceContingency plan testingBackup 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

SymptomCauseFix
Framework stuck in CREATE_IN_PROGRESS for more than 15 minutesUnderlying AWS Config rules are still being created; large accounts with many resources take longer to evaluateWait 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=trueThe tag was added to the resource but the backup plan selection has not yet evaluated the new resourceAWS 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 hoursThe S3 bucket policy does not grant backup.amazonaws.com permission to write reportsAdd a bucket policy statement: "Principal": {"Service": "reports.backup.amazonaws.com"}, "Action": ["s3:PutObject"]
All recovery points show non-compliant for BACKUP_RECOVERY_POINT_ENCRYPTEDThe 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 compliantMigrate 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_DATAThe Config rule has not yet evaluated the resource — occurs for newly-created resources within the first evaluation cycleWait for the next Config evaluation cycle (up to 24 hours) or trigger manual evaluation: aws configservice start-config-rules-evaluation