in internal/resources/providers/awslib/s3/provider.go [61:121]
func (p Provider) DescribeBuckets(ctx context.Context) ([]awslib.AwsResource, error) {
defaultClient, err := awslib.GetDefaultClient(p.clients)
if err != nil {
return nil, fmt.Errorf("could not select default region client: %w", err)
}
clientBuckets, err := defaultClient.ListBuckets(ctx, &s3Client.ListBucketsInput{})
if err != nil {
p.log.Errorf("Could not list s3 buckets: %v", err)
return nil, err
}
var result []awslib.AwsResource
if len(clientBuckets.Buckets) == 0 {
return result, nil
}
accountPublicAccessBlockConfig, accountPublicAccessBlockErr := p.getAccountPublicAccessBlock(ctx)
if accountPublicAccessBlockErr != nil {
p.log.Errorf("Could not get account public access block configuration. Err: %v", accountPublicAccessBlockErr)
}
bucketsRegionsMapping := p.getBucketsRegionMapping(ctx, clientBuckets.Buckets)
for region, buckets := range bucketsRegionsMapping {
for _, bucket := range buckets {
// Getting the bucket encryption, policy, versioning and public access block is not critical for the rest
// of the flow, so we should keep describing the bucket even if getting these objects fails.
sseAlgorithm, encryptionErr := p.getBucketEncryptionAlgorithm(ctx, bucket.Name, region)
if encryptionErr != nil {
p.log.Errorf("Could not get encryption for bucket %s. Error: %v", *bucket.Name, encryptionErr)
}
bucketPolicy, policyErr := p.GetBucketPolicy(ctx, bucket.Name, region)
if policyErr != nil {
p.log.Errorf("Could not get bucket policy for bucket %s. Error: %v", *bucket.Name, policyErr)
}
bucketVersioning, versioningErr := p.getBucketVersioning(ctx, bucket.Name, region)
if versioningErr != nil {
p.log.Errorf("Could not get bucket versioning for bucket %s. Err: %v", *bucket.Name, versioningErr)
}
publicAccessBlockConfiguration, publicAccessBlockErr := p.getPublicAccessBlock(ctx, bucket.Name, region)
if publicAccessBlockErr != nil {
p.log.Errorf("Could not get public access block configuration for bucket %s. Err: %v", *bucket.Name, publicAccessBlockErr)
}
result = append(result, BucketDescription{
Name: *bucket.Name,
SSEAlgorithm: sseAlgorithm,
BucketPolicy: bucketPolicy,
BucketVersioning: bucketVersioning,
PublicAccessBlockConfiguration: publicAccessBlockConfiguration,
AccountPublicAccessBlockConfiguration: accountPublicAccessBlockConfig,
Region: region,
})
}
}
return result, nil
}