Skip to content

Commit 4cea089

Browse files
authored
Merge pull request #2144 from AkhtarAmir/plugin/event-hub-namespace-public-access
update plugin Event Hub Namespace public access
2 parents b105f51 + 34f9c3b commit 4cea089

3 files changed

Lines changed: 409 additions & 135 deletions

File tree

helpers/azure/api.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1254,6 +1254,14 @@ var postcalls = {
12541254
url: 'https://management.azure.com/{id}/encryptionScopes?api-version=2023-01-01'
12551255
}
12561256
},
1257+
eventHub: {
1258+
listNetworkRuleSet: {
1259+
reliesOnPath: 'eventHub.listEventHub',
1260+
properties: ['id'],
1261+
url: 'https://management.azure.com/{id}/networkRuleSets/default?api-version=2022-10-01-preview'
1262+
}
1263+
}
1264+
12571265
};
12581266

12591267
var tertiarycalls = {

plugins/azure/eventhub/eventHubPublicAccess.js

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,23 @@ module.exports = {
1010
more_info: 'Configuring Azure Event Hubs namespace with public access poses a security risk. To mitigate this risk, it is advisable to limit access by allowing connections only from specific IP addresses or private networks.',
1111
recommended_action: 'Ensure that public network access is disabled for each Event Hubs namespace.',
1212
link: 'https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-ip-filtering#configure-public-access-when-creating-a-namespace',
13-
apis: ['eventHub:listEventHub'],
13+
apis: ['eventHub:listEventHub', 'eventHub:listNetworkRuleSet'],
1414
realtime_triggers: ['microsofteventhub:namespaces:write', 'microsofteventhub:namespaces:delete', 'microsofteventhub:namespaces:networkrulesets:write'],
15-
15+
settings: {
16+
check_selected_networks: {
17+
name: 'Evaluate Selected Networks',
18+
description: 'Checks if specific IP addresses or virtual networks are set to restrict Event Hub access.',
19+
regex: '^(true|false)$',
20+
default: false,
21+
}
22+
},
1623
run: function(cache, settings, callback) {
1724
var results = [];
1825
var source = {};
1926
var locations = helpers.locations(settings.govcloud);
27+
let config = {
28+
check_selected_networks: settings.check_selected_networks || this.settings.check_selected_networks.default
29+
};
2030

2131
async.each(locations.eventHub, function(location, rcb) {
2232
var eventHubs = helpers.addSource(cache, source,
@@ -35,16 +45,33 @@ module.exports = {
3545
return rcb();
3646
}
3747

38-
for (let eventHub of eventHubs.data){
48+
for (let eventHub of eventHubs.data) {
3949
if (!eventHub.id) continue;
4050

41-
if (eventHub.sku && eventHub.sku.tier && eventHub.sku.tier.toLowerCase() === 'basic') {
51+
if (eventHub.sku && eventHub.sku.tier && eventHub.sku.tier.toLowerCase() === 'basic') {
4252
helpers.addResult(results, 0,
4353
'Event Hubs namespace tier is basic', location, eventHub.id);
4454
} else {
4555
if (eventHub.publicNetworkAccess && eventHub.publicNetworkAccess.toLowerCase() === 'enabled') {
46-
helpers.addResult(results, 2,
47-
'Event Hubs namespace is publicly accessible',location, eventHub.id);
56+
if (config.check_selected_networks) {
57+
const listNetworkRuleSet = helpers.addSource(cache, source,
58+
['eventHub', 'listNetworkRuleSet', eventHub.id, location]);
59+
if (!listNetworkRuleSet || listNetworkRuleSet.err || !listNetworkRuleSet.data) {
60+
helpers.addResult(results, 3,
61+
'Unable to query Event Hubs network rule set: ' + helpers.addError(listNetworkRuleSet), location, eventHub.id);
62+
continue;
63+
}
64+
if ((listNetworkRuleSet.data.ipRules && listNetworkRuleSet.data.ipRules.length > 0) || (listNetworkRuleSet.data.virtualNetworkRules && listNetworkRuleSet.data.virtualNetworkRules.length > 0)) {
65+
helpers.addResult(results, 2,
66+
'Event Hubs namespace is publicly accessible', location, eventHub.id);
67+
} else {
68+
helpers.addResult(results, 0,
69+
'Event Hubs namespace is not publicly accessible', location, eventHub.id);
70+
}
71+
} else {
72+
helpers.addResult(results, 2,
73+
'Event Hubs namespace is publicly accessible', location, eventHub.id);
74+
}
4875
} else {
4976
helpers.addResult(results, 0,
5077
'Event Hubs namespace is not publicly accessible', location, eventHub.id);

0 commit comments

Comments
 (0)