UNPKG

@csermet/multiprovider

Version:

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

83 lines (82 loc) 3.29 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const ssm_1 = __importDefault(require("aws-sdk/clients/ssm")); const sts_1 = __importDefault(require("aws-sdk/clients/sts")); const isEmpty_1 = __importDefault(require("lodash/isEmpty")); const groupBy_1 = __importDefault(require("lodash/groupBy")); const format_1 = require("../../utils/format"); const utils_1 = require("../../utils"); const errorLog_1 = __importDefault(require("../../utils/errorLog")); const serviceName = 'systemsManagerDocument'; const endpoint = utils_1.initTestEndpoint(serviceName); const errorLog = new errorLog_1.default(serviceName); /** * SystemsManagerDocument */ exports.default = async ({ regions, config, }) => { const result = []; const activeRegions = regions.split(','); // We need the account in the raw data so we can connect to trags let account; try { account = await new sts_1.default(config).getCallerIdentity().promise(); } catch (err) { errorLog.generateAwsErrorLog({ functionName: 'getCallerIdentity', err }); } const accountId = account?.Account; for (const region of activeRegions) { const client = new ssm_1.default({ ...config, region, endpoint }); const systemsManagerDocumentData = []; try { const filterParam = { Filters: [{ Key: 'Owner', Values: ['Self'] }] }; const data = await client.listDocuments(filterParam).promise(); systemsManagerDocumentData.push(...data.DocumentIdentifiers); let marker = data.NextToken; while (marker) { const nextPage = await client .listDocuments({ ...filterParam, NextToken: marker }) .promise(); if (!isEmpty_1.default(data.DocumentIdentifiers)) { systemsManagerDocumentData.push(...nextPage.DocumentIdentifiers); marker = nextPage.NextToken; } } } catch (err) { errorLog.generateAwsErrorLog({ functionName: 'listDocuments', err }); } for (const doc of systemsManagerDocumentData) { let documentPermissions; try { documentPermissions = await client .describeDocumentPermission({ Name: doc.Name, PermissionType: 'Share', }) .promise(); } catch (err) { errorLog.generateAwsErrorLog({ functionName: 'describeDocumentPermission', err, }); } result.push({ ...doc, accountId, permissions: { accountIds: documentPermissions?.AccountIds, accountSharingInfoList: documentPermissions?.AccountSharingInfoList, }, Tags: format_1.convertAwsTagsToTagMap(doc.Tags ?? []), region, }); } } errorLog.reset(); return groupBy_1.default(result, 'region'); };