Alerts & Notifications¶
Configure email and webhook notifications to stay informed about expiring credentials, failed operations, and security events.
Overview¶
CertifyClouds alerts keep your team notified:
- Multiple channels: Email, Slack, Microsoft Teams, custom webhooks
- 11 alert types: Expiring, expired, rotation, sync, and scan events
- Delivery modes: Real-time, daily digest, or both
- Flexible scheduling: Configure when digests are sent
- Subscription filtering: Scope alerts to specific Azure subscriptions
Alert Types¶
Discovery Alerts¶
| Alert Type | Trigger | Severity |
|---|---|---|
secret_expiring | Secret expires within threshold | Warning |
secret_expired | Secret has already expired | Critical |
key_expiring | Key expires within threshold | Warning |
key_expired | Key has already expired | Critical |
certificate_expiring | Certificate expires within threshold | Warning |
certificate_expired | Certificate has already expired | Critical |
scan_completed | Discovery scan finished | Info |
vault_error | Error accessing Key Vault | Error |
Rotation Alerts (PRO)¶
| Alert Type | Trigger | Severity |
|---|---|---|
rotation_success | Credential successfully rotated | Info |
rotation_failed | Rotation attempt failed | Error |
Sync Alerts (PRO)¶
| Alert Type | Trigger | Severity |
|---|---|---|
sync_success | Secret synced to target cloud | Info |
sync_failed | Sync operation failed | Error |
Notification Channels¶
Email¶
Send alerts to individuals or distribution lists.
Configuration (Settings > Alerts):
- Click Add Rule
- Select alert type (e.g.,
secret_expiring) - Choose Email delivery
- Enter recipient(s)
- Set threshold (for expiring alerts)
- Save
SMTP Setup Required:
Configure email in your environment:
Slack¶
Post alerts to Slack channels using incoming webhooks.
Setup:
- In Slack, create an Incoming Webhook:
- Go to your Slack workspace settings
- Apps > Manage > Custom Integrations > Incoming Webhooks
- Create webhook and copy URL
- In CertifyClouds:
- Settings > Alerts > Add Rule
- Select Webhook delivery
- Choose type: Slack
- Paste webhook URL
- Save
Payload Format:
{
"attachments": [
{
"color": "#EF4444",
"title": "Secret Expiring Alert",
"text": "Found 3 secrets expiring within 30 days",
"footer": "CertifyClouds",
"fields": [
{"title": "Vault", "value": "kv-production", "short": true},
{"title": "Secrets", "value": "api-key, db-password", "short": true}
]
}
]
}
Microsoft Teams¶
Post to Teams channels using Incoming Webhooks.
Setup:
- In Teams, create an Incoming Webhook:
- Go to channel settings > Connectors
- Add Incoming Webhook
- Copy webhook URL
- In CertifyClouds:
- Settings > Alerts > Add Rule
- Select Webhook delivery
- Choose type: Teams
- Paste webhook URL
- Save
Payload Format:
{
"@type": "MessageCard",
"@context": "https://schema.org/extensions",
"themeColor": "EF4444",
"title": "Secret Expiring Alert",
"text": "Found 3 secrets expiring within 30 days",
"sections": [
{
"facts": [
{"name": "Vault", "value": "kv-production"},
{"name": "Secrets", "value": "api-key, db-password"}
]
}
]
}
Generic Webhook¶
For custom integrations, PagerDuty, or other services.
Payload Format:
{
"title": "Secret Expiring Alert",
"message": "Found 3 secrets expiring within 30 days",
"color": "#EF4444",
"timestamp": "2025-12-14T12:00:00.000000",
"source": "CertifyClouds",
"fields": [
{"title": "Vault", "value": "kv-production"},
{"title": "Secrets", "value": "api-key, db-password"}
]
}
Delivery Modes¶
Real-time¶
Alerts sent immediately when events occur.
Best for:
- Critical alerts (expired secrets)
- Rotation failures
- Security events
Digest¶
Alerts batched and sent on a schedule.
Best for:
- Warning-level alerts (expiring soon)
- Reducing notification fatigue
- Non-urgent monitoring
Both¶
Send critical alerts immediately AND include in digest.
Scheduling¶
Digest Schedule¶
Configure when digest emails are sent:
| Schedule | Description |
|---|---|
| Daily 8:00 AM | Once per day |
| Daily 9:00 AM + 5:00 PM | Twice per day |
| Weekly Monday 9:00 AM | Weekly summary |
Configure Schedule¶
- Go to Settings > Alerts
- Click Digest Settings
- Select timezone
- Set delivery times
- Save
Creating Alert Rules¶
Step-by-Step¶
- Navigate: Settings > Alerts
- Add Rule: Click "Add Rule" button
- Configure:
- Name: Descriptive rule name
- Alert Type: What triggers the alert
- Threshold: Days before expiry (for expiring alerts)
- Delivery: Email, Webhook, or both
- Mode: Real-time, Digest, or Both
- Recipients/URL: Destination for alerts
- Filter (optional):
- Specific subscriptions
- Specific vaults
- Asset types
- Save: Enable and save the rule
Example Rules¶
Critical: Expired secrets (real-time)
- Type:
secret_expired - Delivery: Email + Slack
- Mode: Real-time
- Recipients: security-team@company.com
Warning: Secrets expiring in 30 days (digest)
- Type:
secret_expiring - Threshold: 30 days
- Delivery: Email
- Mode: Digest (daily)
- Recipients: ops-team@company.com
Info: Rotation success (real-time)
- Type:
rotation_success - Delivery: Teams webhook
- Mode: Real-time
Testing Alerts¶
Test Button¶
Each alert rule has a "Test" button:
- Go to Settings > Alerts
- Find the rule to test
- Click Test
- Verify notification received
API Test¶
curl -X POST http://localhost:8080/alerts/test \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rule_id": "rule-123",
"test_payload": {
"vault": "kv-test",
"secret": "test-secret"
}
}'
Alert History¶
View all sent alerts:
- Go to Alerts tab
- Click History
- Filter by:
- Date range
- Alert type
- Delivery status
Statuses¶
| Status | Description |
|---|---|
| Delivered | Successfully sent |
| Failed | Delivery failed (check logs) |
| Pending | In digest queue |
| Retrying | Retry in progress |
Retry Logic¶
For failed webhook deliveries:
| Attempt | Delay |
|---|---|
| 1 | Immediate |
| 2 | 2 seconds |
| 3 | 5 seconds |
| 4 | 10 seconds (final) |
After 4 attempts, the alert is marked as failed.
Troubleshooting¶
Emails not received¶
- Check SMTP configuration in environment variables
- Verify recipient email address
- Check spam/junk folder
- Review application logs for errors
Webhook failures¶
- Verify webhook URL is correct
- Check if endpoint is accessible from CertifyClouds
- Ensure endpoint accepts POST requests
- Check for firewall/network restrictions
Duplicate notifications¶
- Check for overlapping rules
- Review threshold settings
- Ensure you don't have both real-time AND digest for the same alert
API Reference¶
List Alert Rules¶
Create Alert Rule¶
POST /alerts/rules
Content-Type: application/json
{
"name": "Expiring Secrets Alert",
"alert_type": "secret_expiring",
"threshold_days": 30,
"delivery_method": "email",
"delivery_mode": "digest",
"recipients": ["team@company.com"],
"enabled": true
}
Update Alert Rule¶
Delete Alert Rule¶
Get Alert History¶
Best Practices¶
- Don't over-alert: Use digests for warnings, real-time for critical
- Route appropriately: Send security alerts to security team, ops alerts to ops
- Test regularly: Use the test button to verify delivery
- Monitor failures: Check alert history for delivery issues
- Use thresholds wisely: 30 days gives time to act without noise