Skip to main content

Break-Glass Emergency Access

Break-glass emergency access provides a controlled mechanism for obtaining elevated permissions during critical situations when normal access channels are unavailable.

Overview​

Break-glass access is designed for true emergencies:

  • Production outages requiring immediate intervention
  • Security incidents needing rapid response
  • Owner unavailability blocking critical work

Emergency Types​

Owner Unavailable​

When project owners are unreachable and urgent changes are needed:

  • Required Approvals: 2
  • Auto-Expire: 4 hours
  • Use Case: Critical fixes during off-hours

Critical Incident​

Production outage or security incident requiring immediate access:

  • Required Approvals: 2
  • Auto-Expire: 2 hours
  • Use Case: Active incident response

Other Emergency​

Other urgent situations not covered above:

  • Required Approvals: 2
  • Auto-Expire: 4 hours
  • Use Case: Time-sensitive business needs

Requesting Emergency Access​

Web Interface​

  1. Navigate to project
  2. Click Emergency Access (red button)
  3. Select emergency type
  4. Provide detailed description
  5. Submit request

CLI​

# Request emergency access
dotvault emergency request my-project \
--type critical_incident \
--description "Production database down, need to rotate credentials"

# Check status
dotvault emergency status my-project

API​

POST /api/projects/{projectId}/emergency-access
{
"emergencyType": "critical_incident",
"description": "Production database down, need to rotate credentials. Error started at 14:30 UTC. PagerDuty incident #1234."
}

Response:
{
"data": {
"id": "emg_xxx",
"status": "pending",
"emergencyType": "critical_incident",
"requiredApprovals": 2,
"currentApprovals": 0,
"token": "tok_xxx",
"createdAt": "2024-01-15T14:35:00Z"
}
}

Approval Process​

Two-Approver Requirement​

Break-glass requires two separate owners to approve:

  1. First owner approves → Status: "partially_approved"
  2. Second owner approves → Status: "approved"
  3. Access granted immediately

Approval Notifications​

Owners receive immediate notifications via:

  • Email: High-priority with approve/reject links
  • Slack/Discord: Urgent channel mention
  • SMS: If configured (Enterprise only)

Approval Interface​

# Via CLI
dotvault emergency approve my-project --request-id emg_xxx

# Via web
# Click link in notification or go to Emergency Access page

Approval Time Limits​

  • Response Window: 1 hour for each approver
  • Total Window: 2 hours for both approvals
  • Auto-Reject: If window expires

Using Emergency Access​

Immediate Access​

Once fully approved:

  1. Access granted instantly
  2. Full editor permissions
  3. 2-hour expiration (critical) or 4-hour (other)
  4. All actions logged with "emergency" flag

Access Indicators​

UI shows emergency access is active:

  • Red banner: "Emergency access active - expires in 1h 23m"
  • Audit logs: Marked with 🚨 symbol
  • Notifications: Sent to all owners on each action

Scope of Access​

Emergency access grants:

  • ✓ View all environments
  • ✓ Edit all environments
  • ✓ Add/remove variables
  • ✓ Rotate secrets
  • ✓ View audit logs
  • ✗ Delete project
  • ✗ Manage billing
  • ✗ Change ownership

Post-Emergency Procedures​

Automatic Actions​

After emergency access expires:

  1. Access automatically revoked
  2. User returns to normal role
  3. Comprehensive audit report generated
  4. All owners notified of actions taken

Required Follow-Up​

Within 24 hours:

  1. Document incident: Write post-mortem
  2. Review actions: Verify all changes were necessary
  3. Rotate secrets: If any were viewed
  4. Update procedures: Improve prevention

Audit Report​

Generated report includes:

  • Who requested access and why
  • Who approved and when
  • All actions performed
  • Variables viewed or modified
  • IP addresses and timestamps

Security Controls​

Prevention of Abuse​

  • Multiple approvers: No single person can grant access
  • Time limits: Short expiration windows
  • Audit trail: Complete logging of all activity
  • Notifications: Real-time alerts to all owners
  • Rate limiting: Max 1 request per day per user

Detection​

Alert on suspicious patterns:

  • Frequent emergency requests
  • Requests during non-emergency times
  • Access used for non-critical changes
  • Same approver pair repeatedly

Response​

If abuse suspected:

  1. Immediately revoke access
  2. Disable requester's account
  3. Review all actions taken
  4. Rotate all potentially exposed secrets
  5. Conduct security review

Configuration​

Custom Approvers​

Designate specific emergency approvers:

POST /api/projects/{projectId}/emergency-config
{
"emergencyApprovers": [
"user_xxx", // Primary on-call
"user_yyy", // Secondary on-call
"user_zzz" // Manager
],
"requireApprovers": 2
}

Notification Settings​

Configure emergency notifications:

POST /api/projects/{projectId}/emergency-config
{
"notifications": {
"email": true,
"slack": true,
"sms": true, // Enterprise only
"pagerduty": true // Enterprise only
}
}

For specific scenarios (use with caution):

POST /api/projects/{projectId}/emergency-config
{
"autoApprove": {
"enabled": true,
"conditions": {
"pagerDutyIncident": true,
"businessHoursOnly": false
}
}
}

Best Practices​

1. Document Procedures​

Create runbook for emergency access:

# Emergency Access Runbook

## When to Use

- Production outage > 15 min
- Security incident
- Data loss event

## How to Request

1. Create PagerDuty incident
2. Request emergency access
3. Post in #incidents Slack channel

## After Access Granted

1. Communicate in incident channel
2. Document all actions
3. Notify when complete

2. Regular Drills​

Practice emergency procedures:

  • Quarterly access request drills
  • Verify approvers are responsive
  • Test notification channels
  • Review and update procedures

3. Post-Incident Reviews​

Every emergency access use requires review:

  • Was it truly an emergency?
  • Could it have been prevented?
  • Were procedures followed?
  • What can be improved?

4. Minimize Need​

Reduce emergency situations:

  • Proper access provisioning
  • Cross-training team members
  • Automated rollback capabilities
  • Comprehensive monitoring

5. Communication​

Clear communication during emergencies:

  • Incident channel updates
  • Stakeholder notifications
  • Status page updates
  • Post-incident reports

Comparison: Access Requests vs Break-Glass​

FeatureAccess RequestsBreak-Glass
Use casePlanned elevationTrue emergency
Approvals1 owner2 owners
Duration1-24 hours2-4 hours
Response timeNormalImmediate
Audit levelStandardEnhanced
NotificationsStandardUrgent
Post-reviewOptionalRequired

API Reference​

Create Emergency Request​

POST /api/projects/{projectId}/emergency-access
{
"emergencyType": "critical_incident",
"description": "Production database connection failure. Started 14:30 UTC. Multiple customer reports."
}

Response:
{
"data": {
"id": "emg_xxx",
"projectId": "proj_xxx",
"requesterUserId": "user_xxx",
"emergencyType": "critical_incident",
"description": "Production database connection failure...",
"status": "pending",
"requiredApprovals": 2,
"currentApprovals": 0,
"token": "tok_xxx",
"createdAt": "2024-01-15T14:35:00Z",
"expiresAt": "2024-01-15T16:35:00Z"
}
}

Approve Emergency Request​

POST /api/projects/{projectId}/emergency-access/{emergencyId}/approve

Response:
{
"data": {
"id": "emg_xxx",
"status": "partially_approved", // or "approved"
"approver1UserId": "user_yyy",
"approver1ApprovedAt": "2024-01-15T14:36:00Z",
"approver2UserId": null,
"approver2ApprovedAt": null,
"accessExpiresAt": "2024-01-15T16:36:00Z" // set when fully approved
}
}

Reject Emergency Request​

POST /api/projects/{projectId}/emergency-access/{emergencyId}/reject

Response:
{
"data": {
"id": "emg_xxx",
"status": "rejected",
"reviewedByUserId": "user_yyy",
"reviewedAt": "2024-01-15T14:36:00Z"
}
}

List Emergency Requests​

GET /api/projects/{projectId}/emergency-access?status=pending

Response:
{
"data": {
"requests": [
{
"id": "emg_xxx",
"requester": {
"id": "user_xxx",
"name": "John Doe",
"email": "john@example.com"
},
"emergencyType": "critical_incident",
"description": "Production database connection failure...",
"status": "pending",
"requiredApprovals": 2,
"currentApprovals": 0,
"createdAt": "2024-01-15T14:35:00Z",
"expiresAt": "2024-01-15T16:35:00Z"
}
]
}
}

Get Emergency Access Report​

GET /api/projects/{projectId}/emergency-access/{emergencyId}/report

Response:
{
"data": {
"request": { ... },
"approvals": [ ... ],
"actions": [
{
"action": "env_view",
"resourceId": "env_xxx",
"timestamp": "2024-01-15T14:40:00Z",
"ipAddress": "192.168.1.1"
}
],
"summary": {
"environmentsViewed": 2,
"environmentsModified": 1,
"secretsRotated": 1,
"totalActions": 5
}
}
}

Troubleshooting​

Cannot Get Two Approvers​

  1. Ensure multiple owners are configured
  2. Check notification settings
  3. Use alternative contact methods
  4. Escalate to organization admin

Access Not Granted​

  1. Verify both approvals received
  2. Check request hasn't expired
  3. Confirm you're checking correct project
  4. Contact support if system error

Emergency During Off-Hours​

  1. Use PagerDuty/Slack for urgent contact
  2. Escalation policy should include DotVault owners
  3. Consider SMS notifications (Enterprise)
  4. Document in incident management system

False Positive​

If request was made in error:

  1. Reject the request immediately
  2. Notify requester
  3. Document reason
  4. Review procedures to prevent recurrence

Support​

Emergency support available 24/7:

Regulatory Requirements​

Break-glass access helps meet:

  • SOX: Emergency access controls
  • HIPAA: Break-glass procedures
  • PCI DSS: Emergency access logging
  • GDPR: Data breach response

Audit Requirements​

Maintain records for:

  • Request justifications
  • Approver identities
  • Actions performed
  • Post-incident reviews

Retention: 7 years (configurable)