UNPKG

@csermet/multiprovider

Version:

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

215 lines (214 loc) 10 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const sdk_1 = require("@cloudgraph/sdk"); const isEmpty_1 = __importDefault(require("lodash/isEmpty")); const translations_1 = __importDefault(require("../../properties/translations")); const format_1 = require("../../utils/format"); const generateArns_1 = require("../../utils/generateArns"); const data_1 = require("./data"); /** * S3 */ exports.default = ({ service: rawData, account, region, }) => { const { Id: id, Name: name, Contents: bucketContents = [], Tags: tags = {}, AccountLevelBlockPublicAcls: accountLevelBlockPublicAcls, AccountLevelIgnorePublicAcls: accountLevelIgnorePublicAcls, AccountLevelBlockPublicPolicy: accountLevelBlockPublicPolicy, AccountLevelRestrictPublicBuckets: accountLevelRestrictPublicBuckets, AdditionalInfo: { AccelerationConfig: accelerationStatus, BucketOwnerData: { DisplayName: bucketOwnerName }, CorsInfo: corsInfo, EncryptionInfo: encryptionInfo, Grants: grants, LifecycleConfig: lifecycleConfig, LoggingInfo: loggingInfo, Policy: policy, PolicyStatus: policyStatus, PublicAccessBlockConfig: publicAccessBlockConfig, ReplicationConfig: replicationConfig, ReqPaymentConfig: reqPaymentConfig, StaticWebsiteInfo: staticWebsiteInfo, VersioningInfo: versioningInfo, NotificationConfiguration: notificationConfiguration, } = { AccelerationConfig: '', BucketOwnerData: { DisplayName: '' }, CorsInfo: [], EncryptionInfo: {}, Grants: [], LifecycleConfig: [], LoggingInfo: {}, Policy: '', PolicyStatus: {}, PublicAccessBlockConfig: {}, ReplicationConfig: {}, ReqPaymentConfig: '', StaticWebsiteInfo: {}, VersioningInfo: {}, NotificationConfiguration: {}, }, } = rawData; const arn = generateArns_1.s3BucketArn({ name }); let size = '0 Kb'; const total = bucketContents.length; const greaterThanTotalLimit = total === data_1.awsBucketItemsLimit; if (!isEmpty_1.default(bucketContents)) { size = `${Math.round(bucketContents.reduce((a, b) => a + b.Size, 0) * 0.001)} ${translations_1.default.kb} ${greaterThanTotalLimit ? translations_1.default.bucketSizeDisclaimer(data_1.awsBucketItemsLimit) : ''}`; } let publicAccessBlockData = { blockPublicAcls: translations_1.default.no, ignorePublicAcls: translations_1.default.no, blockPublicPolicy: translations_1.default.no, restrictPublicBuckets: translations_1.default.no, }; if (!isEmpty_1.default(publicAccessBlockConfig)) { const { BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy, RestrictPublicBuckets, } = publicAccessBlockConfig; publicAccessBlockData = { blockPublicAcls: BlockPublicAcls ? translations_1.default.yes : translations_1.default.no, ignorePublicAcls: IgnorePublicAcls ? translations_1.default.yes : translations_1.default.no, blockPublicPolicy: BlockPublicPolicy ? translations_1.default.yes : translations_1.default.no, restrictPublicBuckets: RestrictPublicBuckets ? translations_1.default.yes : translations_1.default.no, }; } let versioningAdditions = { mfa: translations_1.default.disabled, versioning: translations_1.default.disabled, }; if (!isEmpty_1.default(versioningInfo)) { const { Status = translations_1.default.disabled, MFADelete = translations_1.default.disabled, } = versioningInfo; versioningAdditions = { mfa: MFADelete, versioning: Status, }; } const websiteAdditions = { staticWebsiteHosting: translations_1.default.disabled }; if (!isEmpty_1.default(staticWebsiteInfo)) { websiteAdditions.staticWebsiteHosting = translations_1.default.enabled; } const loggingAdditions = { logging: translations_1.default.disabled }; if (!isEmpty_1.default(loggingInfo)) { loggingAdditions.logging = translations_1.default.enabled; } const corsAdditions = { corsConfiguration: translations_1.default.no }; if (!isEmpty_1.default(corsInfo)) { corsAdditions.corsConfiguration = translations_1.default.yes; } const encryptionAdditions = { encrypted: translations_1.default.no, encryptionRules: [] }; if (!isEmpty_1.default(encryptionInfo)) { const { Rules } = encryptionInfo; encryptionAdditions.encrypted = translations_1.default.yes; encryptionAdditions.encryptionRules = Rules.map(r => ({ id: sdk_1.generateUniqueId({ arn, ...r, }), sseAlgorithm: r.ApplyServerSideEncryptionByDefault?.SSEAlgorithm, kmsMasterKeyID: r.ApplyServerSideEncryptionByDefault?.KMSMasterKeyID, })); } const replicationAdditions = { crossRegionReplication: translations_1.default.disabled }; if (!isEmpty_1.default(replicationConfig)) { replicationAdditions.crossRegionReplication = translations_1.default.enabled; } const lifecycleAdditions = { lifecycle: translations_1.default.disabled }; if (!isEmpty_1.default(lifecycleConfig)) { lifecycleAdditions.lifecycle = translations_1.default.enabled; } let access = translations_1.default.objectsCanBePublic; if (!isEmpty_1.default(policyStatus)) { const { IsPublic } = policyStatus; access = IsPublic ? translations_1.default.public : translations_1.default.private; } else if (!isEmpty_1.default(grants)) { grants.map(({ Grantee }) => { if (Grantee?.URI === data_1.publicBucketGrant) { access = translations_1.default.public; } }); } let notificationConfigurationData = { topicConfigurations: [], queueConfigurations: [], lambdaFunctionConfigurations: [], }; if (!isEmpty_1.default(notificationConfiguration)) { const { TopicConfigurations: topicConfigurations = [], QueueConfigurations: queueConfigurations = [], LambdaFunctionConfigurations: lambdaFunctionConfigurations = [], } = notificationConfiguration; notificationConfigurationData = { topicConfigurations: topicConfigurations?.map(tc => ({ id: tc.Id || sdk_1.generateUniqueId({ arn, ...tc, }), topicArn: tc.TopicArn, events: tc.Events || [], filterRules: tc.Filter?.Key?.FilterRules?.map(r => ({ id: sdk_1.generateUniqueId({ arn, ...r, }), name: r.Name, value: r.Value, })) || [], })) || [], queueConfigurations: queueConfigurations?.map(qc => ({ id: qc.Id || sdk_1.generateUniqueId({ arn, ...qc, }), queueArn: qc.QueueArn, events: qc.Events || [], filterRules: qc.Filter?.Key?.FilterRules?.map(r => ({ id: sdk_1.generateUniqueId({ arn, ...r, }), name: r.Name, value: r.Value, })) || [], })) || [], lambdaFunctionConfigurations: lambdaFunctionConfigurations?.map(lc => ({ id: lc.Id || sdk_1.generateUniqueId({ arn, ...lc, }), lambdaFunctionArn: lc.LambdaFunctionArn, events: lc.Events || [], filterRules: lc.Filter?.Key?.FilterRules?.map(r => ({ id: sdk_1.generateUniqueId({ arn, ...lc, }), name: r.Name, value: r.Value, })) || [], })) || [], }; } // // Format S3 Tags const s3Tags = format_1.formatTagsFromMap(tags); const s3 = { ...corsAdditions, ...encryptionAdditions, ...lifecycleAdditions, ...loggingAdditions, ...publicAccessBlockData, ...replicationAdditions, ...versioningAdditions, ...websiteAdditions, id, access, accountId: account, arn: generateArns_1.s3BucketArn({ name }), bucketOwnerName, policy: format_1.formatIamJsonPolicy(policy), rawPolicy: policy, region, requesterPays: reqPaymentConfig === 'Requester' ? translations_1.default.enabled : translations_1.default.disabled, size, tags: s3Tags, accountLevelBlockPublicAcls: accountLevelBlockPublicAcls ? translations_1.default.yes : translations_1.default.no, accountLevelIgnorePublicAcls: accountLevelIgnorePublicAcls ? translations_1.default.yes : translations_1.default.no, accountLevelBlockPublicPolicy: accountLevelBlockPublicPolicy ? translations_1.default.yes : translations_1.default.no, accountLevelRestrictPublicBuckets: accountLevelRestrictPublicBuckets ? translations_1.default.yes : translations_1.default.no, totalNumberOfObjectsInBucket: greaterThanTotalLimit ? `${data_1.awsBucketItemsLimit}+` : `${total}`, transferAcceleration: accelerationStatus, notificationConfiguration: notificationConfigurationData, aclGrants: grants?.map(g => ({ id: sdk_1.generateUniqueId({ arn, ...g, }), granteeType: g.Grantee?.Type, granteeUri: g.Grantee?.URI, permission: g.Permission, })) || [], }; return s3; };