Skip to content

Commit 08ca7d9

Browse files
committed
add new ignore status
Signed-off-by: Markus Blaschke <[email protected]>
1 parent 3efb981 commit 08ca7d9

16 files changed

+140
-53
lines changed

auditor/auditor.keyvaultaccesspolicies.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func (auditor *AzureAuditor) auditKeyvaultAccessPolicies(ctx context.Context, lo
2424
matchingRuleId, status := auditor.config.KeyvaultAccessPolicies.Validate(object)
2525
report.Add(object, matchingRuleId, status)
2626

27-
if !status && auditor.config.KeyvaultAccessPolicies.IsMetricsEnabled() {
27+
if status.IsDeny() && auditor.config.KeyvaultAccessPolicies.IsMetricsEnabled() {
2828
violationMetric.AddInfo(
2929
auditor.config.KeyvaultAccessPolicies.CreatePrometheusMetricFromAzureObject(object, matchingRuleId),
3030
)

auditor/auditor.loganalytics.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func (auditor *AzureAuditor) auditLogAnalytics(ctx context.Context, logger *zap.
4040
matchingRuleId, status := config.Validate(object)
4141
report.Add(object, matchingRuleId, status)
4242

43-
if !status && config.IsMetricsEnabled() {
43+
if status.IsDeny() && config.IsMetricsEnabled() {
4444
violationMetric.AddInfo(
4545
config.CreatePrometheusMetricFromAzureObject(object, matchingRuleId),
4646
)

auditor/auditor.report.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
yaml "gopkg.in/yaml.v3"
1111

12+
"github.com/webdevops/azure-auditor/auditor/types"
1213
"github.com/webdevops/azure-auditor/auditor/validator"
1314
)
1415

@@ -25,15 +26,16 @@ type (
2526
}
2627

2728
AzureAuditorReportSummary struct {
28-
Ok int64
29-
Failed int64
29+
Ignore int64
30+
Deny int64
31+
Allow int64
3032
}
3133

3234
AzureAuditorReportLine struct {
3335
Resource map[string]interface{} `json:"resource"`
3436
RuleID string `json:"rule"`
3537
GroupBy interface{} `json:"groupBy"`
36-
Status bool `json:"status"`
38+
Status string `json:"status"`
3739
Count uint64 `json:"count"`
3840
}
3941
)
@@ -73,7 +75,7 @@ func (report *AzureAuditorReport) Clear() {
7375
report.Lines = []*AzureAuditorReportLine{}
7476
}
7577

76-
func (report *AzureAuditorReport) Add(resource *validator.AzureObject, ruleID string, status bool) {
78+
func (report *AzureAuditorReport) Add(resource *validator.AzureObject, ruleID string, status types.RuleStatus) {
7779
report.lock.Lock()
7880
defer report.lock.Unlock()
7981

@@ -82,13 +84,16 @@ func (report *AzureAuditorReport) Add(resource *validator.AzureObject, ruleID st
8284
&AzureAuditorReportLine{
8385
Resource: *resource,
8486
RuleID: ruleID,
85-
Status: status,
87+
Status: status.String(),
8688
},
8789
)
8890

89-
if status {
90-
report.Summary.Ok++
91-
} else {
92-
report.Summary.Failed++
91+
switch status {
92+
case types.RuleStatusIgnore:
93+
report.Summary.Ignore++
94+
case types.RuleStatusDeny:
95+
report.Summary.Deny++
96+
case types.RuleStatusAllow:
97+
report.Summary.Allow++
9398
}
9499
}

auditor/auditor.resourcegraph.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func (auditor *AzureAuditor) auditResourceGraph(ctx context.Context, logger *zap
2424
matchingRuleId, status := config.Validate(object)
2525
report.Add(object, matchingRuleId, status)
2626

27-
if !status && config.IsMetricsEnabled() {
27+
if status.IsDeny() && config.IsMetricsEnabled() {
2828
violationMetric.AddInfo(
2929
config.CreatePrometheusMetricFromAzureObject(object, matchingRuleId),
3030
)

auditor/auditor.resourcegroups.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func (auditor *AzureAuditor) auditResourceGroups(ctx context.Context, logger *za
2121
matchingRuleId, status := auditor.config.ResourceGroups.Validate(object)
2222
report.Add(object, matchingRuleId, status)
2323

24-
if !status && auditor.config.ResourceGroups.IsMetricsEnabled() {
24+
if status.IsDeny() && auditor.config.ResourceGroups.IsMetricsEnabled() {
2525
violationMetric.AddInfo(
2626
auditor.config.ResourceGroups.CreatePrometheusMetricFromAzureObject(object, matchingRuleId),
2727
)

auditor/auditor.resourceproviderfeatures.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func (auditor *AzureAuditor) auditResourceProviderFeatures(ctx context.Context,
2222
matchingRuleId, status := auditor.config.ResourceProviderFeatures.Validate(object)
2323
report.Add(object, matchingRuleId, status)
2424

25-
if !status && auditor.config.ResourceProviderFeatures.IsMetricsEnabled() {
25+
if status.IsDeny() && auditor.config.ResourceProviderFeatures.IsMetricsEnabled() {
2626
violationMetric.AddInfo(
2727
auditor.config.ResourceProviderFeatures.CreatePrometheusMetricFromAzureObject(object, matchingRuleId),
2828
)

auditor/auditor.resourceproviders.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func (auditor *AzureAuditor) auditResourceProviders(ctx context.Context, logger
2323
matchingRuleId, status := auditor.config.ResourceProviders.Validate(object)
2424
report.Add(object, matchingRuleId, status)
2525

26-
if !status && auditor.config.ResourceProviders.IsMetricsEnabled() {
26+
if status.IsDeny() && auditor.config.ResourceProviders.IsMetricsEnabled() {
2727
violationMetric.AddInfo(
2828
auditor.config.ResourceProviders.CreatePrometheusMetricFromAzureObject(object, matchingRuleId),
2929
)

auditor/auditor.roleassignments.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func (auditor *AzureAuditor) auditRoleAssignments(ctx context.Context, logger *z
2525
matchingRuleId, status := auditor.config.RoleAssignments.Validate(object)
2626
report.Add(object, matchingRuleId, status)
2727

28-
if !status && auditor.config.RoleAssignments.IsMetricsEnabled() {
28+
if status.IsDeny() && auditor.config.RoleAssignments.IsMetricsEnabled() {
2929
violationMetric.AddInfo(
3030
auditor.config.RoleAssignments.CreatePrometheusMetricFromAzureObject(object, matchingRuleId),
3131
)

auditor/types/const.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package types
2+
3+
import (
4+
"strings"
5+
)
6+
7+
type RuleStatus int
8+
9+
var (
10+
RuleStatusIgnore RuleStatus = -1
11+
RuleStatusDeny RuleStatus = 0
12+
RuleStatusAllow RuleStatus = 1
13+
)
14+
15+
func StringToRuleStatus(val string) RuleStatus {
16+
val = strings.TrimSpace(val)
17+
val = strings.ToLower(val)
18+
19+
switch strings.ToLower(val) {
20+
case "-1", "ignore":
21+
return RuleStatusIgnore
22+
case "0", "false", "deny":
23+
return RuleStatusDeny
24+
case "1", "true", "allow":
25+
return RuleStatusAllow
26+
}
27+
return RuleStatusDeny
28+
}
29+
30+
func (s RuleStatus) String() (ret string) {
31+
ret = "unknown"
32+
switch s {
33+
case RuleStatusIgnore:
34+
ret = "ignore"
35+
case RuleStatusDeny:
36+
ret = "deny"
37+
case RuleStatusAllow:
38+
ret = "allow"
39+
}
40+
return
41+
}
42+
43+
func (s RuleStatus) IsIgnore() bool {
44+
return s == RuleStatusIgnore
45+
}
46+
func (s RuleStatus) IsDeny() bool {
47+
return s == RuleStatusDeny
48+
}
49+
func (s RuleStatus) IsAllow() bool {
50+
return s == RuleStatusAllow
51+
}

auditor/validator/validation.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"strings"
55

66
"github.com/prometheus/client_golang/prometheus"
7+
8+
"github.com/webdevops/azure-auditor/auditor/types"
79
)
810

911
type (
@@ -97,7 +99,7 @@ func (validation *AuditConfigValidation) CreatePrometheusMetricFromAzureObject(o
9799
return labels
98100
}
99101

100-
func (validation *AuditConfigValidation) Validate(object *AzureObject) (string, bool) {
102+
func (validation *AuditConfigValidation) Validate(object *AzureObject) (string, types.RuleStatus) {
101103
resourceID := object.ResourceID()
102104

103105
if validation.Rules != nil {
@@ -108,7 +110,7 @@ func (validation *AuditConfigValidation) Validate(object *AzureObject) (string,
108110
continue
109111
} else {
110112
// valid is not valid, returning here
111-
return rule.Rule, rule.handleRuleStatus(object, false)
113+
return rule.Rule, rule.handleRuleStatus(object, types.RuleStatusDeny)
112114
}
113115
}
114116

@@ -127,7 +129,7 @@ func (validation *AuditConfigValidation) Validate(object *AzureObject) (string,
127129
continue
128130
} else {
129131
// valid is not valid, returning here
130-
return rule.Rule, rule.handleRuleStatus(object, false)
132+
return rule.Rule, rule.handleRuleStatus(object, types.RuleStatusDeny)
131133
}
132134
}
133135

@@ -138,5 +140,5 @@ func (validation *AuditConfigValidation) Validate(object *AzureObject) (string,
138140
}
139141
}
140142

141-
return "__DEFAULTDENY__", false
143+
return "__DEFAULTDENY__", types.RuleStatusDeny
142144
}

0 commit comments

Comments
 (0)