UNPKG

@csermet/multiprovider

Version:

cloud-graph provider plugin for AWS used to fetch AWS cloud data.

121 lines (120 loc) 4.85 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const isEmpty_1 = __importDefault(require("lodash/isEmpty")); const generateArns_1 = require("../../utils/generateArns"); const ids_1 = require("../../utils/ids"); const services_1 = __importDefault(require("../../enums/services")); /** * CloudTrail */ exports.default = ({ service: cloudTrail, data, region, }) => { const connections = []; const { id, S3BucketName: s3BucketName, SnsTopicARN: snsTopicARN, KmsKeyId: kmsKeyId, CloudWatchLogsLogGroupArn: cloudWatchLogsLogGroupArn, } = cloudTrail; /** * Find S3 bucket * related to the cloudTrail */ const s3Buckets = data.find(({ name }) => name === services_1.default.s3); const s3Arn = generateArns_1.s3BucketArn({ name: s3BucketName }); if (s3Buckets?.data?.[region]) { const s3BucketInRegion = s3Buckets.data[region].filter(bucket => generateArns_1.s3BucketArn({ name: bucket.Name }) === s3Arn); if (!isEmpty_1.default(s3BucketInRegion)) { for (const s3 of s3BucketInRegion) { connections.push({ id: ids_1.gets3BucketId(s3.Name), resourceType: services_1.default.s3, relation: 'child', field: 's3', }); } } } /** * Find SNS topic * related to the cloudTrail */ const snsTopics = data.find(({ name }) => name === services_1.default.sns); if (snsTopics?.data?.[region]) { const snsTopicsInRegion = snsTopics.data[region].filter(topic => topic.TopicArn === snsTopicARN); if (!isEmpty_1.default(snsTopicsInRegion)) { for (const topic of snsTopicsInRegion) { connections.push({ id: topic.TopicArn, resourceType: services_1.default.sns, relation: 'child', field: 'sns', }); } } } /** * Find KMS * related to the cloudTrail */ const kmsKeys = data.find(({ name }) => name === services_1.default.kms); if (kmsKeys?.data?.[region]) { const kmsKeyInRegion = kmsKeys.data[region].filter(kmsKey => kmsKey.Arn === kmsKeyId); if (!isEmpty_1.default(kmsKeyInRegion)) { for (const kms of kmsKeyInRegion) { connections.push({ id: kms.KeyId, resourceType: services_1.default.kms, relation: 'child', field: 'kms', }); } } } /** * Find Cloudwatch Log Groups * related to the cloudTrail */ const logGroups = data.find(({ name }) => name === services_1.default.cloudwatchLog); let logGroupsInRegion = []; if (logGroups?.data?.[region]) { logGroupsInRegion = logGroups.data[region].filter(logGroup => logGroup.arn === cloudWatchLogsLogGroupArn); } if (!isEmpty_1.default(logGroupsInRegion)) { for (const logGroup of logGroupsInRegion) { connections.push({ id: logGroup.logGroupName, resourceType: services_1.default.cloudwatchLog, relation: 'child', field: 'cloudwatchLog', }); } } /** * Find cloudwatch metric alarms * related to the cloudTrail log groups */ if (!isEmpty_1.default(logGroupsInRegion)) { const metricAlarms = data.find(({ name }) => name === services_1.default.cloudwatch); for (const logGroup of logGroupsInRegion) { let metricNames = []; logGroup.MetricFilters?.map(({ metricTransformations }) => metricTransformations)?.forEach(transformation => { metricNames = metricNames.concat(transformation?.map(({ metricName }) => metricName)); }); if (metricAlarms?.data?.[region] && !isEmpty_1.default(metricNames)) { const metricAlarmsInRegion = metricAlarms.data[region].filter(({ MetricName }) => metricNames.includes(MetricName)); if (!isEmpty_1.default(metricAlarmsInRegion)) { for (const metricAlarm of metricAlarmsInRegion) { connections.push({ id: metricAlarm.AlarmName, resourceType: services_1.default.cloudwatch, relation: 'child', field: 'cloudwatch', }); } } } } } const cloudTrailResult = { [id]: connections, }; return cloudTrailResult; };