Skip to content

Commit c06d167

Browse files
syncing plugins to open source
1 parent 66ad39d commit c06d167

13 files changed

Lines changed: 306 additions & 22 deletions

‎collectors/aws/collector.js‎

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,12 @@ var calls = {
321321
paginate: 'nextToken'
322322
}
323323
},
324+
ECS: {
325+
listClusters: {
326+
property: 'clusterArns',
327+
paginate: 'nextToken'
328+
}
329+
},
324330
ElasticBeanstalk: {
325331
describeEnvironments: {
326332
property: 'Environments',
@@ -744,6 +750,23 @@ var postcalls = [
744750
reliesOnService: 'eks',
745751
reliesOnCall: 'listClusters',
746752
override: true
753+
},
754+
listNodegroups: {
755+
reliesOnService: 'eks',
756+
reliesOnCall: 'listClusters',
757+
override: true
758+
}
759+
},
760+
ECS: {
761+
describeCluster: {
762+
reliesOnService: 'ecs',
763+
reliesOnCall: 'listClusters',
764+
override: true
765+
},
766+
listContainerInstances: {
767+
reliesOnService: 'ecs',
768+
reliesOnCall: 'listClusters',
769+
override: true
747770
}
748771
},
749772
ElasticBeanstalk: {
@@ -1007,6 +1030,13 @@ var postcalls = [
10071030
filterKey: 'RoleName',
10081031
filterValue: 'RoleName'
10091032
}
1033+
},
1034+
EKS:{
1035+
describeNodegroups: {
1036+
reliesOnService: 'eks',
1037+
reliesOnCall: 'listClusters',
1038+
override: true
1039+
}
10101040
}
10111041
}
10121042
];
@@ -1154,7 +1184,8 @@ var collect = function(AWSConfig, settings, callback) {
11541184
!collection[callObj.reliesOnService][callObj.reliesOnCall] ||
11551185
!collection[callObj.reliesOnService][callObj.reliesOnCall][region] ||
11561186
!collection[callObj.reliesOnService][callObj.reliesOnCall][region].data ||
1157-
!collection[callObj.reliesOnService][callObj.reliesOnCall][region].data.length)) return regionCb();
1187+
!collection[callObj.reliesOnService][callObj.reliesOnCall][region].data.length))
1188+
return regionCb();
11581189

11591190
var LocalAWSConfig = JSON.parse(JSON.stringify(AWSConfig));
11601191
if (callObj.deleteRegion) {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
var AWS = require('aws-sdk');
2+
var async = require('async');
3+
4+
module.exports = function(AWSConfig, collection, callback) {
5+
var ecs = new AWS.ECS(AWSConfig);
6+
7+
async.eachLimit(collection.ecs.listClusters[AWSConfig.region].data, 10, function(cluster, cb){
8+
collection.ecs.describeCluster[AWSConfig.region][cluster] = {};
9+
10+
// Check for the multiple subnets in that single VPC
11+
var params = {
12+
clusters: [cluster]
13+
};
14+
15+
ecs.describeClusters(params, function(err, data) {
16+
if (err) {
17+
collection.ecs.describeCluster[AWSConfig.region][cluster].err = err;
18+
}
19+
20+
collection.ecs.describeCluster[AWSConfig.region][cluster].data = data;
21+
22+
cb();
23+
});
24+
}, function(){
25+
callback();
26+
});
27+
};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
var AWS = require('aws-sdk');
2+
var async = require('async');
3+
4+
module.exports = function(AWSConfig, collection, callback) {
5+
var ecs = new AWS.ECS(AWSConfig);
6+
7+
async.eachLimit(collection.ecs.listClusters[AWSConfig.region].data, 10, function(cluster, cb){
8+
collection.ecs.listContainerInstances[AWSConfig.region][cluster] = {};
9+
10+
// Check for the multiple subnets in that single VPC
11+
var params = {
12+
cluster: cluster
13+
};
14+
15+
ecs.listContainerInstances(params, function(err, data) {
16+
if (err) {
17+
collection.ecs.listContainerInstances[AWSConfig.region][cluster].err = err;
18+
}
19+
20+
collection.ecs.listContainerInstances[AWSConfig.region][cluster].data = data.containerInstanceArns;
21+
22+
cb();
23+
});
24+
}, function(){
25+
callback();
26+
});
27+
};
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
var AWS = require('aws-sdk');
2+
var async = require('async');
3+
4+
module.exports = function(AWSConfig, collection, callback) {
5+
var eks = new AWS.EKS(AWSConfig);
6+
//var autoscaling = new AWS.AutoScaling(AWSConfig);
7+
8+
async.eachLimit(collection.eks.listClusters[AWSConfig.region].data, 10, function(cluster, cb){
9+
collection.eks.describeNodegroups[AWSConfig.region][cluster] = {};
10+
async.each(collection.eks.listNodegroups[AWSConfig.region][cluster].data, function(nodeGroup, cb){
11+
collection.eks.describeNodegroups[AWSConfig.region][cluster][nodeGroup] = {};
12+
// Check for the multiple subnets in that single VPC
13+
var params = {
14+
clusterName: cluster,
15+
nodegroupName: nodeGroup
16+
};
17+
18+
eks.describeNodegroup(params, function(err, data) {
19+
if (err) {
20+
collection.eks.describeNodegroups[AWSConfig.region][cluster][nodeGroup].err = err;
21+
}
22+
//var autoScalingGroupNames = [];
23+
collection.eks.describeNodegroups[AWSConfig.region][cluster][nodeGroup].data = data.nodegroup;
24+
// right now we are taking the maxSize to count the node. But if we decide to count the exact node count
25+
// we need to uncomment the below code.
26+
// collection.eks.describeNodegroups[AWSConfig.region][cluster][nodeGroup].data['nodecount'] = 0;
27+
// data.nodegroup.resources.autoScalingGroups.forEach( autoscalingGroup => {
28+
// autoScalingGroupNames.push(autoscalingGroup.name);
29+
// });
30+
// var params = {
31+
// 'AutoScalingGroupNames':
32+
// autoScalingGroupNames
33+
// };
34+
// console.log(params);
35+
// autoscaling.describeAutoScalingGroups(params, function(err, data1){
36+
// if (err) console.log(err);
37+
// data1.AutoScalingGroups.forEach(autoscalingGroup =>{
38+
// collection.eks.describeNodegroups[AWSConfig.region][cluster][nodeGroup].data['nodecount'] +=
39+
// autoscalingGroup.Instances.length;
40+
// });
41+
// cb();
42+
// });
43+
cb();
44+
});
45+
}, function(){
46+
setTimeout(function(){
47+
cb();
48+
}, 100);
49+
});
50+
}, function(){
51+
callback();
52+
});
53+
};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
var AWS = require('aws-sdk');
2+
var async = require('async');
3+
4+
module.exports = function(AWSConfig, collection, callback) {
5+
var eks = new AWS.EKS(AWSConfig);
6+
7+
async.eachLimit(collection.eks.listClusters[AWSConfig.region].data, 10, function(cluster, cb){
8+
collection.eks.listNodegroups[AWSConfig.region][cluster] = {};
9+
10+
// Check for the multiple subnets in that single VPC
11+
var params = {
12+
clusterName: cluster
13+
};
14+
15+
eks.listNodegroups(params, function(err, data) {
16+
if (err) {
17+
collection.eks.listNodegroups[AWSConfig.region][cluster].err = err;
18+
}
19+
20+
collection.eks.listNodegroups[AWSConfig.region][cluster].data = data.nodegroups;
21+
22+
cb();
23+
});
24+
}, function(){
25+
callback();
26+
});
27+
};

‎helpers/aws/functions.js‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,14 @@ function nullArray(object) {
253253
return object;
254254
}
255255

256+
let divideArray = function(array, size) {
257+
var arrayOfArrays = [];
258+
while (array.length > 0) {
259+
arrayOfArrays.push(array.splice(0, size));
260+
}
261+
return arrayOfArrays;
262+
};
263+
256264
function remediatePasswordPolicy(putCall, pluginName, remediation_file, passwordKey, config, cache, settings, resource, input, callback) {
257265
config.region = defaultRegion({});
258266
var params;
@@ -541,6 +549,7 @@ module.exports = {
541549
defaultPartition: defaultPartition,
542550
remediatePlugin: remediatePlugin,
543551
nullArray: nullArray,
552+
divideArray:divideArray,
544553
remediatePasswordPolicy:remediatePasswordPolicy,
545554
remediateOpenPorts: remediateOpenPorts
546555
};

‎plugins/aws/es/esExposedDomain.js‎

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@ module.exports = {
3333
return rcb();
3434
}
3535

36-
listDomainNames.data.forEach(function(domain){
36+
async.each(listDomainNames.data, function(domain, cb){
3737
var describeElasticsearchDomain = helpers.addSource(cache, source,
3838
['es', 'describeElasticsearchDomain', region, domain.DomainName]);
39+
3940
var resource = domain.ARN;
4041

4142
if (!describeElasticsearchDomain ||
@@ -45,6 +46,7 @@ module.exports = {
4546
helpers.addResult(
4647
results, 3,
4748
'Unable to query for ES domain config: ' + helpers.addError(describeElasticsearchDomain), region, resource);
49+
return cb();
4850
}
4951

5052
var goodStatements = [];
@@ -76,9 +78,12 @@ module.exports = {
7678
helpers.addResult(results, 2,
7779
'No access policy found', region, resource);
7880
}
79-
});
8081

81-
rcb();
82+
cb();
83+
}, function() {
84+
rcb();
85+
});
86+
8287
}, function() {
8388
callback(null, results, source);
8489
});

‎plugins/aws/s3/bucketEnforceEncryption.js‎

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,22 @@ module.exports = {
8787
'global', bucketResource);
8888
} else {
8989
try {
90-
var policyJson = JSON.parse(getBucketPolicy.data.Policy);
91-
getBucketPolicy.data.Policy = policyJson;
90+
var policyJson;
91+
92+
if (typeof getBucketPolicy.data.Policy == 'object') {
93+
policyJson = getBucketPolicy.data.Policy;
94+
95+
} else {
96+
try {
97+
policyJson = JSON.parse(getBucketPolicy.data.Policy);
98+
}
99+
catch(e) {
100+
helpers.addResult(results, 3,
101+
`Error querying for bucket policy for bucket: "${bucket.Name}". Policy JSON could not be parsed`,
102+
'global', bucketResource);
103+
return;
104+
}
105+
}
92106

93107
if (!policyJson || !policyJson.Statement) {
94108
helpers.addResult(results, 3,

‎plugins/aws/s3/bucketSecureTransportEnabled.js‎

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,21 @@ module.exports = {
5252
'global', resource);
5353
}
5454
else {
55-
try {
56-
var policyJson = JSON.parse(getBucketPolicy.data.Policy);
57-
}
58-
catch(e) {
59-
helpers.addResult(results, 3,
60-
`Error querying for bucket policy for bucket: "${bucket.Name}". Policy JSON could not be parsed`,
61-
'global', resource);
62-
return;
55+
var policyJson;
56+
57+
if (typeof getBucketPolicy.data.Policy == 'object') {
58+
policyJson = getBucketPolicy.data.Policy;
59+
60+
} else {
61+
try {
62+
policyJson = JSON.parse(getBucketPolicy.data.Policy);
63+
}
64+
catch(e) {
65+
helpers.addResult(results, 3,
66+
`Error querying for bucket policy for bucket: "${bucket.Name}". Policy JSON could not be parsed`,
67+
'global', resource);
68+
return;
69+
}
6370
}
6471

6572
if (!policyJson || !policyJson.Statement) {

0 commit comments

Comments
 (0)