Skip to main content

Overview

AegisShield provides machine-readable control mappings that integrate seamlessly with enterprise Governance, Risk, and Compliance (GRC) tools. The nist-sp-800-53-controls-mapping.json file enables automated import of control implementations, evidence, and assessment data.
Format: JSON with comprehensive control metadataCompatibility: ServiceNow, RSA Archer, and custom GRC platformsAutomation: Fully automated control import and compliance reporting

Machine-Readable Control Mapping

The control mapping file provides structured data for each implemented control:
{
  "metadata": {
    "application": "AegisShield Threat Modeler",
    "framework": "NIST SP 800-53 Rev. 5",
    "version": "1.0",
    "total_controls": 15,
    "control_families": 6
  },
  "controls": [
    {
      "control_id": "AC-3",
      "control_name": "Access Enforcement",
      "control_family": "Access Control",
      "implementation_status": "implemented",
      "primary_file": "api_key_handler.py",
      "evidence": "Password-type input validation, session state management",
      "assessment_methods": ["examine", "interview", "test"],
      "compliance_frameworks": ["FedRAMP", "FISMA"]
    }
  ],
  "assessment_summary": {
    "total_controls_implemented": 15,
    "implementation_coverage": "100%",
    "compliance_frameworks_supported": ["FedRAMP", "FISMA"]
  }
}

ServiceNow Integration

Import Controls via REST API

Integrate AegisShield controls directly into ServiceNow GRC:
# Import NIST controls into ServiceNow
curl -X POST "https://your-instance.servicenow.com/api/now/table/sn_grc_control" \
     -H "Authorization: Bearer $SERVICENOW_TOKEN" \
     -H "Content-Type: application/json" \
     -d @nist-sp-800-53-controls-mapping.json

ServiceNow Import Script

For batch import with transformation:
// ServiceNow Import Script
var AegisShieldImporter = Class.create();
AegisShieldImporter.prototype = {
  initialize: function() {
    this.controlsData = this.loadControlsData();
  },
  
  loadControlsData: function() {
    // Load from attachment or external source
    var jsonData = gs.getProperty('aegisshield.controls.json');
    return JSON.parse(jsonData);
  },
  
  importControls: function() {
    var controls = this.controlsData.controls;
    
    for (var i = 0; i < controls.length; i++) {
      var control = controls[i];
      
      // Create or update control record
      var grControl = new GlideRecord('sn_grc_control');
      grControl.addQuery('control_id', control.control_id);
      grControl.query();
      
      if (!grControl.next()) {
        grControl.initialize();
      }
      
      // Map AegisShield data to ServiceNow fields
      grControl.setValue('control_id', control.control_id);
      grControl.setValue('name', control.control_name);
      grControl.setValue('family', control.control_family);
      grControl.setValue('implementation_status', control.implementation_status);
      grControl.setValue('evidence', control.evidence);
      grControl.setValue('framework', 'NIST SP 800-53 Rev. 5');
      
      // Save the record
      if (grControl.isNewRecord()) {
        grControl.insert();
      } else {
        grControl.update();
      }
      
      gs.info('Imported control: ' + control.control_id);
    }
  },
  
  type: 'AegisShieldImporter'
};

ServiceNow Configuration

1

Create Integration User

Create a ServiceNow user with GRC Admin role for API access
2

Configure REST API

Enable Table API for sn_grc_control table
3

Map Fields

Map AegisShield control attributes to ServiceNow GRC fields
4

Import Data

Run import script or REST API calls to load controls
5

Validate

Verify control records created with correct evidence and status

RSA Archer Integration

Python Integration Script

Integrate AegisShield controls with RSA Archer GRC platform:
import json
import requests

class ArcherIntegration:
    def __init__(self, instance_url, session_token):
        self.base_url = instance_url
        self.session_token = session_token
        self.headers = {
            'Authorization': f'Archer session-id={session_token}',
            'Content-Type': 'application/json'
        }
    
    def load_aegisshield_controls(self, filepath='nist-sp-800-53-controls-mapping.json'):
        """Load AegisShield control mappings"""
        with open(filepath, 'r') as f:
            return json.load(f)
    
    def transform_control_for_archer(self, control):
        """Transform AegisShield control to Archer format"""
        return {
            'ControlID': control['control_id'],
            'ControlName': control['control_name'],
            'ControlFamily': control['control_family'],
            'ImplementationStatus': self.map_status(control['implementation_status']),
            'Evidence': control['evidence'],
            'PrimaryFile': control['primary_file'],
            'AssessmentMethods': ', '.join(control['assessment_methods']),
            'ComplianceFrameworks': ', '.join(control['compliance_frameworks']),
            'Description': control['description'],
            'ImplementationDetails': control['implementation_details']
        }
    
    def map_status(self, aegis_status):
        """Map AegisShield status to Archer values"""
        status_map = {
            'implemented': 'Implemented',
            'partial': 'Partially Implemented',
            'planned': 'Planned',
            'not_applicable': 'Not Applicable'
        }
        return status_map.get(aegis_status, 'Unknown')
    
    def create_or_update_control(self, control_data):
        """Create or update control in Archer"""
        endpoint = f"{self.base_url}/api/core/content"
        
        # Check if control exists
        search_payload = {
            'applicationId': 123,  # Your Archer app ID
            'fieldId': 456,  # Control ID field
            'value': control_data['ControlID']
        }
        
        search_response = requests.post(
            f"{self.base_url}/api/core/content/search",
            headers=self.headers,
            json=search_payload
        )
        
        existing_records = search_response.json()
        
        if existing_records:
            # Update existing record
            record_id = existing_records[0]['contentId']
            response = requests.put(
                f"{endpoint}/{record_id}",
                headers=self.headers,
                json=control_data
            )
        else:
            # Create new record
            response = requests.post(
                endpoint,
                headers=self.headers,
                json=control_data
            )
        
        return response.json()
    
    def import_all_controls(self):
        """Import all AegisShield controls into Archer"""
        controls_data = self.load_aegisshield_controls()
        results = []
        
        for control in controls_data['controls']:
            archer_control = self.transform_control_for_archer(control)
            result = self.create_or_update_control(archer_control)
            results.append({
                'control_id': control['control_id'],
                'status': 'success' if result else 'failed',
                'result': result
            })
            print(f"Imported {control['control_id']}: {result}")
        
        return results

# Usage example
if __name__ == "__main__":
    archer = ArcherIntegration(
        instance_url="https://your-archer-instance.com",
        session_token="your-session-token"
    )
    
    results = archer.import_all_controls()
    print(f"Import complete: {len(results)} controls processed")

Archer Field Mapping

ControlID
string
Maps to control_id (e.g., “AC-3”)
ControlName
string
Maps to control_name (e.g., “Access Enforcement”)
ControlFamily
string
Maps to control_family (e.g., “Access Control”)
ImplementationStatus
enum
Maps to implementation_status - Implemented, Partially Implemented, Planned, Not Applicable
Evidence
text
Maps to evidence - Implementation evidence and artifacts
PrimaryFile
string
Maps to primary_file - Source code location

Custom Dashboard Integration

JavaScript/React Integration

Load AegisShield compliance data into custom dashboards:
// Load into compliance dashboard
fetch('nist-sp-800-53-controls-mapping.json')
  .then(response => response.json())
  .then(data => {
    // Display summary metrics
    console.log(`Implemented Controls: ${data.assessment_summary.total_controls_implemented}`);
    console.log(`Compliance Coverage: ${data.assessment_summary.implementation_coverage}`);
    
    // Build control family breakdown
    const familyBreakdown = Object.entries(data.control_families).map(([key, family]) => ({
      abbreviation: key,
      name: family.name,
      count: family.controls_count,
      coverage: family.implementation_percentage
    }));
    
    // Render dashboard
    renderComplianceDashboard(familyBreakdown, data.controls);
  });

function renderComplianceDashboard(families, controls) {
  // Example: Render control family cards
  families.forEach(family => {
    const card = `
      <div class="compliance-card">
        <h3>${family.abbreviation} - ${family.name}</h3>
        <p>Controls: ${family.count}</p>
        <p>Coverage: ${family.coverage}%</p>
      </div>
    `;
    document.getElementById('dashboard').innerHTML += card;
  });
  
  // Example: Render control details table
  const table = controls.map(control => `
    <tr>
      <td>${control.control_id}</td>
      <td>${control.control_name}</td>
      <td><span class="badge-implemented">${control.implementation_status}</span></td>
      <td>${control.primary_file}</td>
    </tr>
  `).join('');
  
  document.getElementById('controls-table').innerHTML = table;
}

PowerBI Integration

Import AegisShield compliance data into PowerBI:
1

Import JSON Data

Use PowerBI Web connector to load nist-sp-800-53-controls-mapping.json
2

Transform Data

Expand nested controls array and control_families object
3

Create Relationships

Link controls to families using control_family_abbreviation
4

Build Visualizations

Create charts for control coverage, family breakdown, and framework compliance

Automated Compliance Queries

Using jq for JSON Processing

Extract specific compliance data using jq:
# Find all Access Control implementations
jq '.controls[] | select(.control_family_abbreviation == "AC")' \
  nist-sp-800-53-controls-mapping.json

# Output:
# {
#   "control_id": "AC-3",
#   "control_name": "Access Enforcement",
#   "control_family": "Access Control",
#   "implementation_status": "implemented",
#   ...
# }

Python Query Examples

Query AegisShield controls using Python:
import json

class ControlQueryEngine:
    def __init__(self, mapping_file='nist-sp-800-53-controls-mapping.json'):
        with open(mapping_file, 'r') as f:
            self.data = json.load(f)
    
    def get_controls_by_family(self, family_abbr):
        """Get all controls for a specific family"""
        return [
            c for c in self.data['controls']
            if c['control_family_abbreviation'] == family_abbr
        ]
    
    def get_control_evidence(self, control_id):
        """Get implementation evidence for specific control"""
        for control in self.data['controls']:
            if control['control_id'] == control_id:
                return {
                    'evidence': control['evidence'],
                    'locations': control['implementation_locations'],
                    'details': control['implementation_details']
                }
        return None
    
    def get_enhancement_controls(self):
        """Get all controls with enhancements implemented"""
        return [
            {
                'control_id': c['control_id'],
                'enhancement': c['enhancement_implemented']
            }
            for c in self.data['controls']
            if 'enhancement_implemented' in c
        ]
    
    def get_compliance_summary(self, framework='FedRAMP'):
        """Get compliance summary for specific framework"""
        applicable_controls = [
            c for c in self.data['controls']
            if framework in c['compliance_frameworks']
        ]
        
        return {
            'framework': framework,
            'total_controls': len(applicable_controls),
            'implemented': len([c for c in applicable_controls if c['implementation_status'] == 'implemented']),
            'coverage_percentage': 100 * len([c for c in applicable_controls if c['implementation_status'] == 'implemented']) / len(applicable_controls)
        }
    
    def export_to_grc_format(self, output_format='servicenow'):
        """Export to GRC tool format"""
        if output_format == 'servicenow':
            return self._format_for_servicenow()
        elif output_format == 'archer':
            return self._format_for_archer()
        else:
            return self.data
    
    def _format_for_servicenow(self):
        return [
            {
                'control_id': c['control_id'],
                'name': c['control_name'],
                'family': c['control_family'],
                'status': c['implementation_status'],
                'evidence': c['evidence'],
                'framework': 'NIST SP 800-53 Rev. 5'
            }
            for c in self.data['controls']
        ]

# Usage
query = ControlQueryEngine()

# Get all audit controls
audit_controls = query.get_controls_by_family('AU')
print(f"Found {len(audit_controls)} audit controls")

# Get evidence for specific control
evidence = query.get_control_evidence('AC-3')
print(f"AC-3 Evidence: {evidence['evidence']}")

# Get FedRAMP compliance summary
fedramp_summary = query.get_compliance_summary('FedRAMP')
print(f"FedRAMP Coverage: {fedramp_summary['coverage_percentage']}%")

Integration Workflows

Weekly Compliance Sync

Automate weekly synchronization of AegisShield controls to GRC platform:
1

Extract Latest Controls

Pull latest nist-sp-800-53-controls-mapping.json from repository
2

Transform Data

Convert to target GRC platform format
3

Sync to GRC

Push updates via API (ServiceNow, Archer, etc.)
4

Validate

Verify all controls synchronized correctly
5

Report

Generate sync report with any errors or warnings

Automated Assessment Reporting

Generate compliance reports automatically:
#!/bin/bash
# generate-compliance-report.sh

echo "AegisShield Compliance Report" > report.txt
echo "Generated: $(date)" >> report.txt
echo "" >> report.txt

echo "=== Assessment Summary ===" >> report.txt
jq '.assessment_summary' nist-sp-800-53-controls-mapping.json >> report.txt
echo "" >> report.txt

echo "=== Control Families ===" >> report.txt
jq '.control_families' nist-sp-800-53-controls-mapping.json >> report.txt
echo "" >> report.txt

echo "=== FedRAMP Controls ===" >> report.txt
jq '.controls[] | select(.compliance_frameworks[] == "FedRAMP") | 
    {control_id, control_name, status: .implementation_status}' \
  nist-sp-800-53-controls-mapping.json >> report.txt

echo "Report generated: report.txt"

Best Practices

  • Store control mappings in version control
  • Track changes to control implementations
  • Tag releases with compliance milestones
  • Maintain audit trail of all modifications
  • Validate JSON schema before import
  • Test GRC integration in staging environment
  • Verify data integrity after synchronization
  • Monitor for failed imports or API errors
  • Document field mappings for each GRC platform
  • Maintain runbooks for integration procedures
  • Record API credentials securely
  • Keep integration scripts updated
  • Use service accounts for API access
  • Rotate API tokens regularly
  • Encrypt credentials in transit and at rest
  • Audit all integration activities

Additional Resources

NIST SP 800-53 Controls

View detailed control implementations

FedRAMP Readiness

Learn about FedRAMP compliance

ServiceNow GRC

ServiceNow GRC platform documentation

RSA Archer

RSA Archer GRC suite information

Build docs developers (and LLMs) love