@csermet/multiprovider
Version:
cloud-graph provider plugin for AWS used to fetch AWS cloud data.
121 lines (120 loc) • 4.85 kB
JavaScript
"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;
};