-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_engine.py
More file actions
78 lines (69 loc) · 2.82 KB
/
Copy pathtest_engine.py
File metadata and controls
78 lines (69 loc) · 2.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env python3
"""
DriftGuard — Local Engine Test
Run: python3 test_engine.py
Tests the drift detection engine with fake AWS state (no AWS account needed)
"""
import sys, os
sys.path.insert(0, os.path.expanduser("~/driftguard"))
from backend.engines.drift import TerraformStateParser, DriftAnalyzer, PostureScorer
print("=" * 55)
print(" DriftGuard Engine Test")
print("=" * 55)
# This simulates what your terraform.tfstate looks like
fake_state = {
"version": 4,
"resources": [
{
"mode": "managed", "type": "aws_instance", "name": "web_server",
"instances": [{"attributes": {"id":"i-0abc123","instance_type":"t3.micro","vpc_security_group_ids":["sg-111"],"tags":{"Name":"web"}}}]
},
{
"mode": "managed", "type": "aws_s3_bucket", "name": "data_bucket",
"instances": [{"attributes": {"id":"my-prod-bucket","versioning":"Enabled","server_side_encryption_configuration":{"rule":"AES256"},"acl":"private"}}]
},
{
"mode": "managed", "type": "aws_db_instance", "name": "prod_db",
"instances": [{"attributes": {"id":"prod-db","instance_class":"db.t3.medium","publicly_accessible":False,"storage_encrypted":True}}]
}
]
}
# This simulates what AWS actually looks like AFTER someone manually changed things
live_resources = {
"aws_instance": {
"i-0abc123": {"id":"i-0abc123","instance_type":"t3.large","vpc_security_group_ids":["sg-999"],"tags":{"Name":"web"}}
},
"aws_s3_bucket": {
"my-prod-bucket": {"id":"my-prod-bucket","versioning":"Disabled","server_side_encryption_configuration":None,"acl":"public-read"}
},
"aws_db_instance": {
"prod-db": {"id":"prod-db","instance_class":"db.t3.medium","publicly_accessible":True,"storage_encrypted":True}
},
"aws_security_group": {}
}
parser = TerraformStateParser()
tf = parser.parse(fake_state)
print(f"\nTerraform resources: {len(tf)}")
for k in tf: print(f" - {k}")
analyzer = DriftAnalyzer()
findings = analyzer.analyze(tf, live_resources, "us-east-1")
scorer = PostureScorer()
score = scorer.score(findings, 10)
print(f"\nDrift findings: {len(findings)}")
print(f"Posture score: {score}/100")
print()
icons = {"critical":"🔴","high":"🟠","medium":"🟡","low":"🟢"}
for f in findings:
print(f"{icons.get(f.severity.value,'⚪')} [{f.severity.value.upper()}] {f.resource_type} / {f.resource_id}")
if f.security_impact:
print(f" Security: {f.security_impact[0]}")
if f.compliance_violations:
print(f" Compliance: {f.compliance_violations[0]}")
if f.cost_delta_monthly:
print(f" Cost delta: ${f.cost_delta_monthly}/month")
if f.terraform_patch:
print(f" Patch:\n{f.terraform_patch}")
print()
print("=" * 55)
print("Engine test complete. All systems working.")
print("=" * 55)