UNPKG

cloud-report

Version:

Collects and analyzes cloud resources

58 lines (57 loc) 3.11 kB
"use strict"; 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;