Aller au contenu principal

Surveillance et alertes

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étriqueDescriptionSeuils
XksProxyLatencyTemps d'attente d'AWS KMS pour les réponses du proxyNormal : <50 ms, Avertissement : 50-100 ms, Critique : >100 ms
XksProxyCredentialAgeAncienneté des identifiants d'authentification du proxyFaire une rotation tous les 90 jours
NumberOfRequestsNombre de requêtes KMSSurveiller les anomalies
UserErrorCountNombre de requêtes en échecAlerter 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 table
Check 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 table

Cré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-alerts

Tableau 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.json

Journalisation 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: warn

Analyse 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
done
Monitor 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"
fi

Surveillance 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 table

Dé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"
fi

Stratégies d'alerte​

Alertes critiques (action immédiate)​

AlerteDéclencheurAction
Proxy XKS injoignable3 échecs consécutifs de contrôle de santéAppeler l'ingénieur d'astreinte
Échecs d'authentification>10 échecs d'authentification en 5 minutesNotification à l'équipe de sécurité
Latence extrêmeMoyenne >200 ms pendant 10 minutesNotification à l'équipe des opérations

Alertes d'avertissement (investigation nécessaire)​

AlerteDéclencheurAction
Latence élevéeMoyenne >100 ms pendant 15 minutesE-mail à l'équipe des opérations
Expiration de certificat<30 jours avant expirationE-mail à l'équipe de sécurité
Taux d'erreur élevéTaux d'erreur >5 % pendant 10 minutesE-mail à l'équipe des opérations

Alertes informatives (prise de connaissance)​

AlerteDéclencheurAction
Ancienneté des identifiantsIdentifiants de plus de 60 joursRappel par e-mail pour effectuer la rotation
Pic d'utilisationVolume de requêtes 2x la référence normaleE-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

Étapes suivantes​