in internal/flavors/benchmark/aws_org.go [68:113]
func (a *AWSOrg) initialize(ctx context.Context, log *clog.Logger, cfg *config.Config, ch chan fetching.ResourceInfo) (registry.Registry, dataprovider.CommonDataProvider, dataprovider.IdProvider, error) {
if err := a.checkDependencies(); err != nil {
return nil, nil, nil, err
}
var (
awsConfig *awssdk.Config
awsIdentity *cloud.Identity
err error
)
awsConfig, awsIdentity, err = a.getIdentity(ctx, cfg)
if err != nil && cfg.CloudConfig.Aws.Cred.DefaultRegion == "" {
log.Warn("failed to initialize identity; retrying to check AWS Gov Cloud regions")
cfg.CloudConfig.Aws.Cred.DefaultRegion = awslib.DefaultGovRegion
awsConfig, awsIdentity, err = a.getIdentity(ctx, cfg)
}
if err != nil {
return nil, nil, nil, fmt.Errorf("failed to get AWS Identity: %w", err)
}
log.Info("successfully retrieved AWS Identity")
a.IAMProvider = iam.NewIAMProvider(ctx, log, *awsConfig, nil)
cache := make(map[string]registry.FetchersMap)
reg := registry.NewRegistry(log, registry.WithUpdater(
func() (registry.FetchersMap, error) {
accounts, err := a.getAwsAccounts(ctx, log, *awsConfig, awsIdentity)
if err != nil {
return nil, fmt.Errorf("failed to get AWS accounts: %w", err)
}
fm := preset.NewCisAwsOrganizationFetchers(ctx, log, ch, accounts, cache)
m := make(registry.FetchersMap)
for accountId, fetchersMap := range fm {
for key, fetcher := range fetchersMap {
m[fmt.Sprintf("%s-%s", accountId, key)] = fetcher
}
}
return m, nil
}))
return reg, cloud.NewDataProvider(cloud.WithAccount(*awsIdentity)), nil, nil
}