cloud-report
Version:
Collects and analyzes cloud resources
58 lines (57 loc) • 3.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = require("../../../types");
const utils_1 = require("../../../utils");
const base_1 = require("../../base");
class EC2VolumeDeleteProtectionOnTerminationAnalyzer extends base_1.BaseAnalyzer {
analyze(params, fullReport) {
const allTerminationProtectionStatuses = params.termination_protection;
const allInstances = params.instances;
if (!allTerminationProtectionStatuses || !allInstances) {
return undefined;
}
const volume_delete_protection_enabled = { type: types_1.CheckAnalysisType.Reliability };
volume_delete_protection_enabled.what = "Are there any instances without deletion protection for volumes?";
volume_delete_protection_enabled.why = `Instances can be accidentally terminated and data can be
lost when they are without deletion protection for volumes`;
volume_delete_protection_enabled.recommendation = `Recommended to enable deletion
protection for volumes attached to all production critical instances`;
volume_delete_protection_enabled.benchmark = ['all'];
const allRegionsAnalysis = {};
for (const region in allInstances) {
const regionInstances = allInstances[region];
allRegionsAnalysis[region] = [];
for (const instance of regionInstances) {
if (!instance.BlockDeviceMappings || !instance.BlockDeviceMappings.length) {
continue;
}
for (const volume of instance.BlockDeviceMappings) {
const instanceAnalysis = {};
instanceAnalysis.resource = {
instanceId: instance.InstanceId,
instanceName: utils_1.ResourceUtil.getNameByTags(instance),
volume,
};
instanceAnalysis.resourceSummary = {
name: "Instance-Volume",
value: `${instanceAnalysis.resource.instanceName} |
${instance.InstanceId} - ${volume.DeviceName}`,
};
if (!volume.Ebs.DeleteOnTermination) {
instanceAnalysis.severity = types_1.SeverityStatus.Good;
instanceAnalysis.message = "Already enabled";
}
else {
instanceAnalysis.severity = types_1.SeverityStatus.Warning;
instanceAnalysis.message = "Not enabled";
instanceAnalysis.action = "Enable deletion protection";
}
allRegionsAnalysis[region].push(instanceAnalysis);
}
}
}
volume_delete_protection_enabled.regions = allRegionsAnalysis;
return { volume_delete_protection_enabled };
}
}
exports.EC2VolumeDeleteProtectionOnTerminationAnalyzer = EC2VolumeDeleteProtectionOnTerminationAnalyzer;