Surveillance et alertes
Surveillance et alertes
Surveillez la santé, les performances et la sécurité de votre proxy DuoKey AWS XKS
S'applique à :
AWS CloudWatchXKS Proxy LogsPerformance Monitoring
Vue d'ensemble
Une surveillance efficace pour AWS XKS comprend :
Métriques CloudWatch
Suivre les performances et la santé du proxy XKS
Journaux du proxy
Surveiller les opérations détaillées du proxy
Journaux du gestionnaire de clés
Suivre les opérations de clé à la source
Surveillance de la sécurité
Détecter les anomalies et les accès non autorisés
Métriques AWS CloudWatch
Métriques clés
| Métrique | Description | Seuils |
|---|---|---|
| XksProxyLatency | Temps d'attente d'AWS KMS pour les réponses du proxy | Normal : <50 ms, Avertissement : 50-100 ms, Critique : >100 ms |
| XksProxyCredentialAge | Ancienneté des identifiants d'authentification du proxy | Faire une rotation tous les 90 jours |
| NumberOfRequests | Nombre de requêtes KMS | Surveiller les anomalies |
| UserErrorCount | Nombre de requêtes en échec | Alerter en cas de taux élevés |
View XksProxyLatency MetricBASH
# View XksProxyLatency metric
aws cloudwatch get-metric-statistics \
--namespace AWS/KMS \
--metric-name XksProxyLatency \
--dimensions Name=CustomKeyStoreId,Value=cks-1234567890abcdef0 \
--start-time $(date -u -d '1 hour ago' '+%Y-%m-%dT%H:%M:%S') \
--end-time $(date -u '+%Y-%m-%dT%H:%M:%S') \
--period 300 \
--statistics Average,Maximum,Minimum \
--output tableCheck Credential AgeBASH
# Check credential age
aws cloudwatch get-metric-statistics \
--namespace AWS/KMS \
--metric-name XksProxyCredentialAge \
--dimensions Name=CustomKeyStoreId,Value=cks-1234567890abcdef0 \
--start-time $(date -u -d '24 hours ago' '+%Y-%m-%dT%H:%M:%S') \
--end-time $(date -u '+%Y-%m-%dT%H:%M:%S') \
--period 3600 \
--statistics Maximum \
--output tableCréation d'alarmes CloudWatch
Create High Latency AlarmBASH
aws cloudwatch put-metric-alarm \
--alarm-name xks-high-latency \
--alarm-description "Alert when XKS proxy latency exceeds threshold" \
--metric-name XksProxyLatency \
--namespace AWS/KMS \
--statistic Average \
--period 300 \
--evaluation-periods 2 \
--threshold 100 \
--comparison-operator GreaterThanThreshold \
--dimensions Name=CustomKeyStoreId,Value=cks-1234567890abcdef0 \
--alarm-actions arn:aws:sns:us-east-1:123456789012:xks-alertsTableau de bord CloudWatch
Dashboard DefinitionJSON
{
"widgets": [
{
"type": "metric",
"properties": {
"metrics": [
["AWS/KMS", "XksProxyLatency", {"stat": "Average"}],
["...", {"stat": "Maximum"}]
],
"period": 300,
"stat": "Average",
"region": "us-east-1",
"title": "XKS Proxy Latency",
"yAxis": {
"left": {
"min": 0,
"max": 200
}
}
}
},
{
"type": "metric",
"properties": {
"metrics": [
["AWS/KMS", "NumberOfRequests", {"stat": "Sum"}]
],
"period": 300,
"stat": "Sum",
"region": "us-east-1",
"title": "Request Volume"
}
},
{
"type": "metric",
"properties": {
"metrics": [
["AWS/KMS", "UserErrorCount", {"stat": "Sum"}],
[".", "SystemErrorCount", {"stat": "Sum"}]
],
"period": 300,
"stat": "Sum",
"region": "us-east-1",
"title": "Error Rates"
}
}
]
}Apply DashboardBASH
aws cloudwatch put-dashboard \
--dashboard-name XKS-Monitoring \
--dashboard-body file://xks-dashboard.jsonJournalisation du proxy XKS
Configurer la journalisation du proxy
Proxy Logging ConfigurationYAML
logging:
level: info # debug, info, warn, error
format: json
output: /var/log/duokey-xks-proxy/proxy.log
rotation:
max_size: 100MB
max_age: 30
max_backups: 10
compress: true
# Log specific components
components:
authentication: debug
encryption: info
routing: info
health: warnAnalyse des journaux
Analyze Proxy LogsBASH
# Count requests by operation
cat /var/log/duokey-xks-proxy/proxy.log | \
jq -r '.operation' | sort | uniq -c
# Average latency by backend
cat /var/log/duokey-xks-proxy/proxy.log | \
jq -r 'select(.backend != null) | "\(.backend) \(.duration_ms)"' | \
awk '{sum[$1]+=$2; count[$1]++} END {for (b in sum) print b, sum[b]/count[b]}'
# Failed requests in last hour
cat /var/log/duokey-xks-proxy/proxy.log | \
jq -r 'select(.status == "error" and .timestamp > "'$(date -u -d '1 hour ago' '+%Y-%m-%dT%H:%M:%S')'")'Acheminer les journaux vers CloudWatch
CloudWatch Logs Agent ConfigurationJSON
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/duokey-xks-proxy/proxy.log",
"log_group_name": "/aws/xks/proxy",
"log_stream_name": "{instance_id}",
"timestamp_format": "%Y-%m-%dT%H:%M:%S"
}
]
}
}
}
}Surveillance du réseau
Monitor Network LatencyBASH
#!/bin/bash
# Monitor round-trip time to XKS proxy
PROXY_HOST="xks-proxy.example.com"
LOG_FILE="/var/log/xks-network-monitor.log"
while true; do
TIMESTAMP=$(date -u '+%Y-%m-%dT%H:%M:%S')
RTT=$(curl -o /dev/null -s -w '%{time_total}' https://$PROXY_HOST/health)
RTT_MS=$(echo "$RTT * 1000" | bc)
echo "$TIMESTAMP,$RTT_MS" >> $LOG_FILE
# Alert if RTT exceeds threshold
if (( $(echo "$RTT_MS > 100" | bc -l) )); then
echo "WARNING: High latency detected: ${RTT_MS}ms" | \
aws sns publish \
--topic-arn arn:aws:sns:us-east-1:123456789012:xks-alerts \
--subject "XKS High Latency Alert"
fi
sleep 60
doneMonitor TLS Certificate ExpirationBASH
#!/bin/bash
# Check XKS proxy TLS certificate expiration
PROXY_HOST="xks-proxy.example.com"
CERT_EXPIRY=$(echo | openssl s_client -servername $PROXY_HOST \
-connect $PROXY_HOST:443 2>/dev/null | openssl x509 -noout -enddate | \
cut -d= -f2)
EXPIRY_EPOCH=$(date -d "$CERT_EXPIRY" +%s)
CURRENT_EPOCH=$(date +%s)
DAYS_UNTIL_EXPIRY=$(( ($EXPIRY_EPOCH - $CURRENT_EPOCH) / 86400 ))
echo "Certificate expires in $DAYS_UNTIL_EXPIRY days"
if [ $DAYS_UNTIL_EXPIRY -lt 30 ]; then
echo "WARNING: Certificate expires soon!" | \
aws sns publish \
--topic-arn arn:aws:sns:us-east-1:123456789012:xks-alerts \
--subject "XKS Certificate Expiration Warning"
fiSurveillance de la sécurité
Intégration AWS CloudTrail
Query CloudTrail for XKS EventsBASH
# Query CloudTrail for XKS-related events
aws cloudtrail lookup-events \
--lookup-attributes \
AttributeKey=ResourceName,AttributeValue=cks-1234567890abcdef0 \
--start-time $(date -u -d '24 hours ago' '+%Y-%m-%dT%H:%M:%S') \
--query 'Events[*].{
Time:EventTime,
User:Username,
Event:EventName,
Resource:Resources[0].ResourceName
}' \
--output tableDétecter les activités inhabituelles
Detect AnomaliesBASH
#!/bin/bash
# Detect unusual patterns in XKS usage
# Spike in failed requests
FAILED_COUNT=$(cat /var/log/duokey-xks-proxy/proxy.log | \
jq -r 'select(.timestamp > "'$(date -u -d '5 minutes ago' '+%Y-%m-%dT%H:%M:%S')'"
and .status == "error")' | wc -l)
if [ $FAILED_COUNT -gt 50 ]; then
echo "ALERT: Unusual spike in failed requests: $FAILED_COUNT in 5 minutes"
fi
# Requests from unexpected IPs
KNOWN_IPS="52.94.133.0/24,52.95.0.0/16"
UNKNOWN_IPS=$(cat /var/log/duokey-xks-proxy/proxy.log | \
jq -r '.source_ip' | sort -u | \
grep -v -f <(echo $KNOWN_IPS | tr ',' '\n'))
if [ -n "$UNKNOWN_IPS" ]; then
echo "ALERT: Requests from unknown IPs: $UNKNOWN_IPS"
fiStratégies d'alerte
Alertes critiques (action immédiate)
| Alerte | Déclencheur | Action |
|---|---|---|
| Proxy XKS injoignable | 3 échecs consécutifs de contrôle de santé | Appeler l'ingénieur d'astreinte |
| Échecs d'authentification | >10 échecs d'authentification en 5 minutes | Notification à l'équipe de sécurité |
| Latence extrême | Moyenne >200 ms pendant 10 minutes | Notification à l'équipe des opérations |
Alertes d'avertissement (investigation nécessaire)
| Alerte | Déclencheur | Action |
|---|---|---|
| Latence élevée | Moyenne >100 ms pendant 15 minutes | E-mail à l'équipe des opérations |
| Expiration de certificat | <30 jours avant expiration | E-mail à l'équipe de sécurité |
| Taux d'erreur élevé | Taux d'erreur >5 % pendant 10 minutes | E-mail à l'équipe des opérations |
Alertes informatives (prise de connaissance)
| Alerte | Déclencheur | Action |
|---|---|---|
| Ancienneté des identifiants | Identifiants de plus de 60 jours | Rappel par e-mail pour effectuer la rotation |
| Pic d'utilisation | Volume de requêtes 2x la référence normale | E-mail à l'équipe des opérations |
Bonnes pratiques de surveillance
Liste de contrôle de surveillance
Établir des référencesCollecter des métriques pendant 1 à 2 semaines pour des références opérationnelles normales
Créer des runbooksDocumenter les procédures de réponse pour chaque type d'alerte
Revue régulièreRevue hebdomadaire des métriques, mise à jour mensuelle des seuils
Tester la surveillanceTester régulièrement les alertes en simulant des pannes
Rapports de conformité
Generate Monthly Compliance ReportBASH
#!/bin/bash
# Generate monthly XKS compliance report
MONTH=$(date -u -d 'last month' '+%Y-%m')
REPORT_FILE="xks-compliance-report-$MONTH.txt"
echo "DuoKey AWS XKS Compliance Report - $MONTH" > $REPORT_FILE
echo "==========================================" >> $REPORT_FILE
echo "" >> $REPORT_FILE
# Key Operations Summary
echo "Key Operations Summary:" >> $REPORT_FILE
aws cloudtrail lookup-events \
--lookup-attributes AttributeKey=ResourceType,AttributeValue=AWS::KMS::Key \
--start-time $(date -u -d "$MONTH-01" '+%Y-%m-%dT%H:%M:%S') \
--end-time $(date -u -d "$MONTH-01 +1 month" '+%Y-%m-%dT%H:%M:%S') \
--query 'Events[*].EventName' | \
jq -r '.[]' | sort | uniq -c >> $REPORT_FILE