UNPKG

@csermet/multiprovider

Version:

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

55 lines (54 loc) 2.03 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const flatMap_1 = __importDefault(require("lodash/flatMap")); const isEmpty_1 = __importDefault(require("lodash/isEmpty")); const services_1 = __importDefault(require("../../enums/services")); /** * IAM Group */ exports.default = ({ service: group, data, }) => { const connections = []; const { Arn: id, GroupId: groupId, ManagedPolicies: managedPolicies = [], } = group; /** * Find Managed Policies * related to this IAM Group */ const policies = flatMap_1.default(data.find(({ name: serviceName }) => serviceName === services_1.default.iamPolicy) ?.data) || []; const attachedPolicies = policies.filter(({ Arn: arn }) => managedPolicies.find(p => p.PolicyArn === arn)); if (!isEmpty_1.default(attachedPolicies)) { for (const instance of attachedPolicies) { const { Arn: policyId } = instance; connections.push({ id: policyId, resourceType: services_1.default.iamPolicy, relation: 'child', field: 'iamAttachedPolicies', }); } } /** * Find Belonging Users * related to this IAM User */ const users = flatMap_1.default(data.find(({ name: serviceName }) => serviceName === services_1.default.iamUser) ?.data) || []; const belonginUsers = users.filter(({ Groups: groups }) => groups.includes(groupId)); if (!isEmpty_1.default(belonginUsers)) { for (const instance of belonginUsers) { const { Arn: userId } = instance; connections.push({ id: userId, resourceType: services_1.default.iamUser, relation: 'child', field: 'iamUsers', }); } } return { [id]: connections, }; };