aws-resource-remediation
Version:
A module to remediate AWS resources.
58 lines (51 loc) • 3.32 kB
JavaScript
/**
* Created by kpadmawa on 1/19/2017.
*/
const constants = require('./constants');
var logger = require('node-generic-logger');
const ActionExecutor = require('node-action-executor').ActionExecutor;
const ActionExecutorEvents = require('node-action-executor').ActionExecutorEvents;
const IAMPasswordPolicyRemediator = require('./remediators/IAMPasswordPolicyRemediator');
const IAMCredentialsRemediator = require('./remediators/IAMCredentialsRemediator');
const ElasticSearchRemediator = require('./remediators/ElasticSearchRemediator');
const S3Remediator = require('./remediators/S3Remediator');
const KMSRemediator = require('./remediators/KMSRemediator');
const CloudTrailRemediator = require('./remediators/CloudTrailRemediator');
function ResourceRemediator (dependencies) {
this.remediators = {};
//for(var property in constants.ResourceTypes){
// var remediatorClass = constants.ResourceTypes[property];
// this.remediators[property] = new [remediatorClass](config, dependencies[property]);
//}
if(dependencies){
this.remediators[constants.ResourceTypes.IAM_CREDS] = new IAMCredentialsRemediator( dependencies[constants.ResourceTypes.IAM_CREDS]);
this.remediators[constants.ResourceTypes.IAM_PASSWORD_POLICY] = new IAMPasswordPolicyRemediator( dependencies[constants.ResourceTypes.IAM_PASSWORD_POLICY]);
this.remediators[constants.ResourceTypes.KMS] = new KMSRemediator( dependencies[constants.ResourceTypes.KMS]);
} else {
this.remediators[constants.ResourceTypes.IAM_CREDS] = new IAMCredentialsRemediator();
this.remediators[constants.ResourceTypes.IAM_PASSWORD_POLICY] = new IAMPasswordPolicyRemediator();
this.remediators[constants.ResourceTypes.KMS] = new KMSRemediator();
this.remediators[constants.ResourceTypes.S3] = new S3Remediator();
this.remediators[constants.ResourceTypes.ES_DOMAINS] = new ElasticSearchRemediator();
this.remediators[constants.ResourceTypes.CLOUD_TRAILS] = new CloudTrailRemediator();
}
this.executor = new ActionExecutor();
this.executor.subscribe(this.remediators[constants.ResourceTypes.IAM_CREDS],constants.ResourceTypes.IAM_CREDS);
this.executor.subscribe(this.remediators[constants.ResourceTypes.IAM_PASSWORD_POLICY],constants.ResourceTypes.IAM_PASSWORD_POLICY);
this.executor.subscribe(this.remediators[constants.ResourceTypes.S3],constants.ResourceTypes.S3);
this.executor.subscribe(this.remediators[constants.ResourceTypes.KMS],constants.ResourceTypes.KMS);
this.executor.subscribe(this.remediators[constants.ResourceTypes.ES_DOMAINS],constants.ResourceTypes.ES_DOMAINS);
this.executor.subscribe(this.remediators[constants.ResourceTypes.CLOUD_TRAILS],constants.ResourceTypes.CLOUD_TRAILS);
}
ResourceRemediator.prototype.remediate = function (payload, cb) {
var self = this;
logger.info('Remediate with params::' + JSON.stringify(payload));
var context = this.executor.handlePayload(payload , cb);
context.on(ActionExecutorEvents.STATUS , function(status, args){
if('done' === status){
logger.info("\n" + JSON.stringify(args,null,2));
return cb(null,"Successfully remediated.");
}
});
};
module.exports = ResourceRemediator;