@csermet/multiprovider
Version:
cloud-graph provider plugin for AWS used to fetch AWS cloud data.
72 lines (71 loc) • 2.96 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const sdk_1 = __importDefault(require("@cloudgraph/sdk"));
const groupBy_1 = __importDefault(require("lodash/groupBy"));
const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
const accessanalyzer_1 = __importDefault(require("aws-sdk/clients/accessanalyzer"));
const logger_1 = __importDefault(require("../../properties/logger"));
const utils_1 = require("../../utils");
const errorLog_1 = __importDefault(require("../../utils/errorLog"));
const lt = { ...logger_1.default };
const { logger } = sdk_1.default;
const serviceName = 'IAM Access Analyzer';
const errorLog = new errorLog_1.default(serviceName);
const endpoint = utils_1.initTestEndpoint(serviceName);
const listAnalyzersData = async ({ accessAnalyzer, region, nextToken: NextToken = '', }) => new Promise(resolve => {
let analyzerSummarytData = [];
const analyzersList = [];
let args = {};
if (NextToken) {
args = { ...args, nextToken: NextToken };
}
accessAnalyzer.listAnalyzers(args, (err, data) => {
if (err) {
errorLog.generateAwsErrorLog({
functionName: 'accessAnalyzer:listAnalyzers',
err,
});
}
if (!isEmpty_1.default(data)) {
const { nextToken, analyzers: analyzersData = [] } = data;
analyzersList.push(...analyzersData);
logger.debug(lt.fetchedaccessAnalyzers(analyzersList.length));
if (nextToken) {
listAnalyzersData({ accessAnalyzer, region, nextToken });
}
analyzerSummarytData = analyzersList.map(analyzer => ({
...analyzer,
region,
}));
}
resolve(analyzerSummarytData);
});
});
exports.default = async ({ regions, config, }) => new Promise(async (resolve) => {
const analyzerSummaryResult = [];
const regionPromises = regions.split(',').map(region => {
const accessAnalyzer = new accessanalyzer_1.default({ ...config, region, endpoint });
return new Promise(async (resolveAnalyzerSummaryData) => {
const analyzerSummaryData = await listAnalyzersData({
accessAnalyzer,
region,
});
if (!isEmpty_1.default(analyzerSummaryData)) {
for (const analyzer of analyzerSummaryData) {
analyzerSummaryResult.push({
...analyzer,
region,
Tags: analyzer.tags || {}
});
}
}
resolveAnalyzerSummaryData();
});
});
await Promise.all(regionPromises);
errorLog.reset();
resolve(groupBy_1.default(analyzerSummaryResult, 'region'));
});