UNPKG

@cloud-copilot/iam-collect

Version:

Collect IAM information from AWS Accounts

60 lines 2.21 kB
import { SelectAggregateResourceConfigCommand } from '@aws-sdk/client-config-service'; import {} from './AwsConfigClientContext.js'; /** * Common utility functions for AWS Config-based command implementations */ /** * Execute AWS Config query and return all paginated results * * @param query The AWS Config query string * @param context The AWS Config client context * * @returns An array of results */ export async function executeConfigQuery(query, context) { const { configClient } = context; const allResults = []; let nextToken = undefined; do { const result = await configClient.send(new SelectAggregateResourceConfigCommand({ ConfigurationAggregatorName: context.aggregatorName, Expression: query, MaxResults: 100, NextToken: nextToken })); // Add current page results to the collection if (result.Results) { allResults.push(...result.Results); } // Update nextToken for next iteration nextToken = result.NextToken; } while (nextToken); return allResults; } /** * Parse a Config result item into structured data * * @param configItemString The JSON string of the config item * @returns An object containing the parsed config item and its components */ export function parseConfigItem(configItemString) { const configItem = JSON.parse(configItemString); let configuration = configItem.configuration; if (typeof configuration === 'string') { configuration = JSON.parse(configuration || '{}'); } let supplementaryConfiguration = configItem.supplementaryConfiguration; if (typeof supplementaryConfiguration === 'string') { supplementaryConfiguration = JSON.parse(supplementaryConfiguration || '{}'); } let tags = configItem.tags; if (typeof tags === 'string') { tags = JSON.parse(tags || '{}'); } return { configItem, configuration, supplementaryConfiguration, tags }; } /** * Where clause to filter for resources that are active/discovered */ export const resourceStatusWhereClause = `configurationItemStatus IN ('ResourceDiscovered', 'OK')`; //# sourceMappingURL=awsConfigUtils.js.map