UNPKG

@csermet/multiprovider

Version:

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

99 lines (98 loc) 3.76 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const wafv2_1 = __importDefault(require("aws-sdk/clients/wafv2")); const isEmpty_1 = __importDefault(require("lodash/isEmpty")); const groupBy_1 = __importDefault(require("lodash/groupBy")); const utils_1 = require("../../utils"); const errorLog_1 = __importDefault(require("../../utils/errorLog")); const serviceName = 'wafV2WebAcl'; const errorLog = new errorLog_1.default(serviceName); const endpoint = utils_1.initTestEndpoint(serviceName); const scopes = { cloudfront: 'CLOUDFRONT', regional: 'REGIONAL', }; const resources = [ { name: 'elasticloadbalancing', type: 'APPLICATION_LOAD_BALANCER' }, { name: 'apigateway', type: 'API_GATEWAY' }, { name: 'appsync', type: 'APPSYNC' }, ]; const listResources = async (client, wafArn) => { const wafResources = {}; for (const { name, type } of resources) { const { ResourceArns } = (await client .listResourcesForWebACL({ WebACLArn: wafArn, ResourceType: type, }) .promise()) ?? { ResourceArns: [] }; wafResources[name] = ResourceArns; } return wafResources; }; /** * WafV2WebAcl */ exports.default = async ({ regions, config, }) => { const result = []; const activeRegions = regions.split(','); activeRegions.push('global'); for (const region of activeRegions) { const client = new wafv2_1.default({ ...config, region: region === 'global' ? 'us-east-1' : region, endpoint, }); const scope = region === 'global' ? scopes.cloudfront : scopes.regional; const WafV2WebAclData = []; try { const { WebACLs, NextMarker } = await client .listWebACLs({ Scope: scope, Limit: 10 }) .promise(); WafV2WebAclData.push(...WebACLs); let marker = NextMarker; while (marker) { const { WebACLs, NextMarker } = await client .listWebACLs({ Scope: scope, Limit: 10, NextMarker: marker }) .promise(); marker = NextMarker; WafV2WebAclData.push(...WebACLs); } } catch (err) { errorLog.generateAwsErrorLog({ functionName: 'listWebAcls', err }); } if (!isEmpty_1.default(WafV2WebAclData)) { for (const waf of WafV2WebAclData) { let wafData; try { wafData = await client .getWebACL({ Name: waf.Name, Id: waf.Id, Scope: scope }) .promise(); const arn = wafData?.WebACL?.ARN; const loggingConfiguration = await client .getLoggingConfiguration({ ResourceArn: arn }) .promise(); wafData.loggingConfiguration = loggingConfiguration.LoggingConfiguration; wafData.wafResources = await listResources(client, arn); } catch (err) { errorLog.generateAwsErrorLog({ functionName: 'getWebACL', err }); } result.push({ ...wafData?.WebACL, loggingConfiguration: wafData?.loggingConfiguration, wafResources: wafData?.wafResources, region, scope }); } } } errorLog.reset(); return groupBy_1.default(result, 'region'); };