- api-service - REST API deployment (2 replicas, HPA to 10)
- rule-runner - CronJob running every 6 hours
- IRSA roles - IAM roles for pod authentication to Neptune/DynamoDB
User → ALB (443) → api-service (ClusterIP) → Neptune (8182)
↓
DynamoDB (Issues table)
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:PutItem",
"dynamodb:UpdateItem"
],
"Resource": [
"arn:aws:dynamodb:REGION:ACCOUNT:table/SecurityIssues",
"arn:aws:dynamodb:REGION:ACCOUNT:table/SecurityIssues/index/*"
]
}, {
"Effect": "Allow",
"Action": ["neptune-db:Connect"],
"Resource": "arn:aws:neptune-db:REGION:ACCOUNT:*"
}]
}Same as API Service + dynamodb:UpdateItem for status updates.
- api-service: Only to Neptune (8182), AWS API (443)
- rule-runner: Only to Neptune (8182), AWS API (443), DynamoDB
Apply with:
kubectl apply -f eks-manifests/08-network-policy.yaml# Log group retention
aws logs put-retention-policy \
--log-group-name /aws/eks/security-graph-cluster/workload \
--retention-in-days 90- API latency (p50, p95, p99)
- Issue count by severity
- Rule execution success/failure
- Neptune query latency
| Service | SLO | Alert Threshold |
|---|---|---|
| API | 99.9% availability | < 99.5% for 5 min |
| API | p99 latency < 500ms | > 1s for 5 min |
| Rule Runner | 99% execution success | > 2 failures/day |
| Rule Runner | Execution < 30 min | > 45 min |
- Check HPA:
kubectl get hpa -n security-graph - Describe pod:
kubectl describe pod -l app=api-service -n security-graph - Check logs:
kubectl logs -l app=api-service -n security-graph --tail=100 - Scale manually if needed:
kubectl scale deployment api-service --replicas=5 -n security-graph
- Check job status:
kubectl get job -n security-graph - View logs:
kubectl logs job/<job-name> -n security-graph - Check Neptune connectivity from pod
- Retry manually:
kubectl create job --from=cronjob/rule-runner rule-runner-manual -n security-graph
- Check Neptune cluster status in Console
- Increase query timeout in configmap
- Check for long-running queries in Neptune Insights
- Consider scaling Neptune instance
- Enable VPC Flow Logs
- Configure GuardDuty on all accounts
- Enable CloudTrail with Lake integration
- Restrict IAM roles to minimum required permissions
- Enable encryption at rest for DynamoDB
- Enable encryption in transit for Neptune
- Configure WAF on ALB
- Review and restrict NetworkPolicies
- Enable Pod Security Standards (restricted)
- Configure RBAC for namespace access
# Deploy manifests
kubectl apply -f eks-manifests/
# Check deployment status
kubectl rollout status deployment/api-service -n security-graph
# View API logs
kubectl logs -l app=api-service -n security-graph -f
# Scale API service
kubectl scale deployment api-service --replicas=5 -n security-graph
# Manual rule runner execution
kubectl create job --from=cronjob/rule-runner rule-runner-manual -n security-graph- CloudWatch Log Insights:
/aws/eks/security-graph-cluster/workload - X-Ray: Service map for api-service
- Prometheus metrics:
http://<pod>:8080/metrics