UNPKG

@csermet/multiprovider

Version:

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

118 lines (117 loc) 4.94 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 services_1 = __importDefault(require("../../enums/services")); const regions_1 = require("../../enums/regions"); /** * S3 */ exports.default = ({ service, data, region, }) => { const connections = []; const { Id: id, AdditionalInfo: { ReplicationConfig: replicationConfig, NotificationConfiguration: { LambdaFunctionConfigurations: lambdaFunctionConfigurations, TopicConfigurations: topicConfigurations, QueueConfigurations: queueConfigurations, }, EncryptionInfo: encryptionInfo, }, } = service; /** * Find IAM Roles * related to this S3 */ const roles = data.find(({ name }) => name === services_1.default.iamRole); if (replicationConfig?.Role && roles?.data?.[regions_1.globalRegionName]) { const dataAtRegion = roles.data[regions_1.globalRegionName].filter(role => role.Arn === replicationConfig.Role); if (!isEmpty_1.default(dataAtRegion)) { for (const instance of dataAtRegion) { const { Arn: arn } = instance; connections.push({ id: arn, resourceType: services_1.default.iamRole, relation: 'child', field: 'iamRole', }); } } } /** * Find lambda functions * related to this S3 */ const lambdaFunctions = data.find(({ name }) => name === services_1.default.lambda); const functionArns = lambdaFunctionConfigurations?.map(lambdaConfig => lambdaConfig?.LambdaFunctionArn); if (!isEmpty_1.default(functionArns) && lambdaFunctions?.data?.[region]) { const dataAtRegion = lambdaFunctions.data[region].filter(({ FunctionArn }) => functionArns.includes(FunctionArn)); if (!isEmpty_1.default(dataAtRegion)) { for (const lambdaFunction of dataAtRegion) { const { FunctionArn: functionArn } = lambdaFunction; connections.push({ id: functionArn, resourceType: services_1.default.lambda, relation: 'child', field: 'lambdas', }); } } } /** * Find SNS topic * related to this S3 */ const snsTopics = data.find(({ name }) => name === services_1.default.sns); const topicArns = topicConfigurations?.map(topic => topic?.TopicArn); if (!isEmpty_1.default(topicArns) && snsTopics?.data?.[region]) { const snsTopicsInRegion = snsTopics.data[region].filter(({ TopicArn: topicArn }) => topicArns.includes(topicArn)); if (!isEmpty_1.default(snsTopicsInRegion)) { for (const topic of snsTopicsInRegion) { const { TopicArn: topicArn } = topic; connections.push({ id: topicArn, resourceType: services_1.default.sns, relation: 'child', field: 'sns', }); } } } /** * Find SQS * related to this S3 */ const sqsQueues = data.find(({ name }) => name === services_1.default.sqs); const sqsArns = queueConfigurations?.map(queue => queue?.QueueArn); if (!isEmpty_1.default(sqsArns) && sqsQueues?.data?.[region]) { const dataAtRegion = sqsQueues.data[region].filter(({ sqsAttributes: { QueueArn: queueArn } }) => sqsArns.includes(queueArn)); if (!isEmpty_1.default(dataAtRegion)) { for (const instance of dataAtRegion) { const { sqsAttributes: { QueueArn: queueArn }, } = instance; connections.push({ id: queueArn, resourceType: services_1.default.sqs, relation: 'child', field: 'sqs', }); } } } /** * Find KMS * related to the S3 */ const kmsKeyIds = encryptionInfo?.Rules?.map(r => r.ApplyServerSideEncryptionByDefault?.KMSMasterKeyID); const kmsKeys = data.find(({ name }) => name === services_1.default.kms); if (kmsKeys?.data?.[region] && kmsKeyIds?.length > 0) { const kmsKeyInRegion = kmsKeys.data[region].filter(kmsKey => kmsKeyIds.includes(kmsKey.Arn)); if (!isEmpty_1.default(kmsKeyInRegion)) { for (const kms of kmsKeyInRegion) { connections.push({ id: kms.KeyId, resourceType: services_1.default.kms, relation: 'child', field: 'kms', }); } } } const s3Result = { [id]: connections, }; return s3Result; };