@cloud-copilot/iam-collect
Version:
Collect IAM information from AWS Accounts
132 lines • 6.42 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AwsConfigClientPool = void 0;
const client_config_service_1 = require("@aws-sdk/client-config-service");
const auth_js_1 = require("../aws/auth.js");
const ClientPool_js_1 = require("../aws/ClientPool.js");
const coreAuth_js_1 = require("../aws/coreAuth.js");
const AbstractClientPool_js_1 = require("../customClients/AbstractClientPool.js");
const AwsConfigAccountClient_js_1 = require("./clients/AwsConfigAccountClient.js");
const AwsConfigApiGatewayClient_js_1 = require("./clients/AwsConfigApiGatewayClient.js");
const AwsConfigBackupClient_js_1 = require("./clients/AwsConfigBackupClient.js");
const AwsConfigDynamoDBClient_js_1 = require("./clients/AwsConfigDynamoDBClient.js");
const AwsConfigEC2Client_js_1 = require("./clients/AwsConfigEC2Client.js");
const AwsConfigEcrClient_js_1 = require("./clients/AwsConfigEcrClient.js");
const AwsConfigEfsClient_js_1 = require("./clients/AwsConfigEfsClient.js");
const AwsConfigEventBridgeClient_js_1 = require("./clients/AwsConfigEventBridgeClient.js");
const AwsConfigGlueClient_js_1 = require("./clients/AwsConfigGlueClient.js");
const AwsConfigIamClient_js_1 = require("./clients/AwsConfigIamClient.js");
const AwsConfigKafkaClient_js_1 = require("./clients/AwsConfigKafkaClient.js");
const AwsConfigKinesisClient_js_1 = require("./clients/AwsConfigKinesisClient.js");
const AwsConfigKmsClient_js_1 = require("./clients/AwsConfigKmsClient.js");
const AwsConfigLambdaClient_js_1 = require("./clients/AwsConfigLambdaClient.js");
const AwsConfigOpenSearchClient_js_1 = require("./clients/AwsConfigOpenSearchClient.js");
const AwsConfigOrganizationsClient_js_1 = require("./clients/AwsConfigOrganizationsClient.js");
const AwsConfigS3Client_js_1 = require("./clients/AwsConfigS3Client.js");
const AwsConfigS3ControlClient_js_1 = require("./clients/AwsConfigS3ControlClient.js");
const AwsConfigSecretsManagerClient_js_1 = require("./clients/AwsConfigSecretsManagerClient.js");
const AwsConfigSNSClient_js_1 = require("./clients/AwsConfigSNSClient.js");
const AwsConfigSQSClient_js_1 = require("./clients/AwsConfigSQSClient.js");
const fullySupportedServices = new Set([
'backup',
'ec2',
'ecr',
'elasticfilesystem',
'es',
'events',
'iam',
'kafka',
'kms',
'sns',
'sqs'
]);
/**
* AWS Config-based client pool using the new abstract base classes
*/
class AwsConfigClientPool extends AbstractClientPool_js_1.AbstractClientPool {
options;
configClient;
aggregatorName;
configCredentials;
/**
* Constructor
*
* @param options Options for the Config client pool
*/
constructor(options) {
super();
this.options = options;
}
async init() {
this.aggregatorName = this.options.aggregatorName;
const authConfig = this.options.auth;
const defaultCredentials = await (0, coreAuth_js_1.getNewInitialCredentials)(authConfig, {
phase: 'initial AwsConfig credentials'
});
let credentials = defaultCredentials;
if (this.options.accountId || authConfig?.role) {
const targetAccountId = this.options.accountId || credentials.accountId;
credentials = await (0, auth_js_1.getCredentials)(targetAccountId, authConfig);
}
this.configCredentials = credentials;
this.configClient = ClientPool_js_1.AwsClientPool.defaultInstance.client(client_config_service_1.ConfigServiceClient, credentials, this.options.region, undefined);
}
requiresAwsCredentials() {
return false;
}
/**
* Register the default supported Config-based clients
*/
registerDefaultClients() {
this.registerClient(AwsConfigAccountClient_js_1.AwsConfigAccountClient);
this.registerClient(AwsConfigApiGatewayClient_js_1.AwsConfigApiGatewayClient);
this.registerClient(AwsConfigBackupClient_js_1.AwsConfigBackupClient);
this.registerClient(AwsConfigDynamoDBClient_js_1.AwsConfigDynamoDBClient);
this.registerClient(AwsConfigEC2Client_js_1.AwsConfigEC2Client);
this.registerClient(AwsConfigEcrClient_js_1.AwsConfigEcrClient);
this.registerClient(AwsConfigEfsClient_js_1.AwsConfigEfsClient);
this.registerClient(AwsConfigEventBridgeClient_js_1.AwsConfigEventBridgeClient);
this.registerClient(AwsConfigGlueClient_js_1.AwsConfigGlueClient);
this.registerClient(AwsConfigIamClient_js_1.AwsConfigIamClient);
this.registerClient(AwsConfigKafkaClient_js_1.AwsConfigKafkaClient);
this.registerClient(AwsConfigKinesisClient_js_1.AwsConfigKinesisClient);
this.registerClient(AwsConfigKmsClient_js_1.AwsConfigKmsClient);
this.registerClient(AwsConfigLambdaClient_js_1.AwsConfigLambdaClient);
this.registerClient(AwsConfigOpenSearchClient_js_1.AwsConfigOpenSearchClient);
this.registerClient(AwsConfigOrganizationsClient_js_1.AwsConfigOrganizationsClient);
this.registerClient(AwsConfigS3Client_js_1.AwsConfigS3Client);
this.registerClient(AwsConfigS3ControlClient_js_1.AwsConfigS3ControlClient);
this.registerClient(AwsConfigSecretsManagerClient_js_1.AwsConfigSecretsManagerClient);
this.registerClient(AwsConfigSNSClient_js_1.AwsConfigSNSClient);
this.registerClient(AwsConfigSQSClient_js_1.AwsConfigSQSClient);
}
/**
* Get custom client context for Config-based implementations
*/
getClientContext(ClientType, credentials, region, endpoint) {
return {
configClient: this.configClient,
aggregatorName: this.aggregatorName,
configCredentials: this.configCredentials
};
}
isSyncSupported(service, syncName, region) {
const fullySupported = fullySupportedServices.has(service);
if (fullySupported) {
return true;
}
if (service === 'lambda') {
return syncName === 'lambdaFunctions';
}
if (service === 's3') {
return ['generalPurposeBuckets', 'accessPoints', 'accountBpa'].includes(syncName);
}
if (service === 's3express') {
return syncName === 'directoryBuckets';
}
// By default, nothing is supported
return false;
}
}
exports.AwsConfigClientPool = AwsConfigClientPool;
//# sourceMappingURL=AwsConfigClientPool.js.map