المراقبة والتنبيه
المراقبة والتنبيه
مراقبة سلامة وأداء وأمان وكيل DuoKey AWS XKS Proxy
ينطبق على:
AWS CloudWatchXKS Proxy LogsPerformance Monitoring
نظرة عامة
تشمل المراقبة الفعّالة لـ AWS XKS ما يلي:
مقاييس CloudWatch
تتبّع أداء وكيل XKS وسلامته
سجلّات الوكيل
مراقبة عمليات الوكيل التفصيلية
سجلّات مدير المفاتيح
تتبّع عمليات المفاتيح عند المصدر
المراقبة الأمنية
اكتشاف الأنماط الشاذّة والوصول غير المصرّح به
مقاييس AWS CloudWatch
المقاييس الرئيسية
| المقياس | الوصف | العتبات |
|---|---|---|
| XksProxyLatency | الوقت الذي ينتظره AWS KMS لاستجابات الوكيل | عادي: <50 مللي ثانية، تحذير: 50-100 مللي ثانية، حرج: >100 مللي ثانية |
| XksProxyCredentialAge | عمر بيانات اعتماد مصادقة الوكيل | التدوير كل 90 يومًا |
| NumberOfRequests | عدد طلبات KMS | مراقبة الأنماط الشاذّة |
| UserErrorCount | عدد الطلبات الفاشلة | التنبيه عند المعدلات المرتفعة |
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 tableإنشاء تنبيهات 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لوحة معلومات 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تسجيل وكيل XKS
تكوين تسجيل الوكيل
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تحليل السجلّات
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')'")'شحن السجلّات إلى 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"
}
]
}
}
}
}مراقبة الشبكة
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"
fiالمراقبة الأمنية
التكامل مع 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اكتشاف النشاط غير المعتاد
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استراتيجيات التنبيه
التنبيهات الحرجة (إجراء فوري)
| التنبيه | المُطلِق | الإجراء |
|---|---|---|
| تعذّر الوصول إلى وكيل XKS | 3 حالات فشل متتالية في فحص السلامة | استدعاء مهندس المناوبة |
| فشل المصادقة | >10 حالات فشل مصادقة خلال 5 دقائق | إشعار فريق الأمن |
| زمن استجابة شديد | متوسط >200 مللي ثانية لمدة 10 دقائق | إشعار فريق العمليات |
تنبيهات التحذير (تتطلب تحقيقًا)
| التنبيه | المُطلِق | الإجراء |
|---|---|---|
| زمن استجابة مرتفع | متوسط >100 مللي ثانية لمدة 15 دقيقة | إرسال بريد إلكتروني لفريق العمليات |
| انتهاء صلاحية الشهادة | <30 يومًا حتى انتهاء الصلاحية | إرسال بريد إلكتروني لفريق الأمن |
| معدل خطأ مرتفع | معدل الخطأ >5% لمدة 10 دقائق | إرسال بريد إلكتروني لفريق العمليات |
التنبيهات الإعلامية (للتوعية)
| التنبيه | المُطلِق | الإجراء |
|---|---|---|
| عمر بيانات الاعتماد | بيانات اعتماد أقدم من 60 يومًا | تذكير بالبريد الإلكتروني للتدوير |
| ارتفاع الاستخدام | حجم الطلبات ضعف الخط الأساسي المعتاد | إرسال بريد إلكتروني لفريق العمليات |
أفضل ممارسات المراقبة
قائمة تحقق المراقبة
وضع خطوط أساسجمع المقاييس لمدة أسبوع إلى أسبوعين لتحديد الخطوط الأساسية التشغيلية العادية
إنشاء أدلة تشغيليةتوثيق إجراءات الاستجابة لكل نوع من أنواع التنبيهات
مراجعة منتظمةمراجعة أسبوعية للمقاييس، وتحديث شهري للعتبات
اختبار المراقبةاختبار التنبيهات بانتظام عبر محاكاة حالات الفشل
إعداد تقارير الامتثال
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