@cloud-copilot/iam-collect
Version:
Collect IAM information from AWS Accounts
60 lines • 2.21 kB
JavaScript
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