Skip to content

Commit 214ff7e

Browse files
committed
fix: added support for IAM role S3 blob client
1 parent f26fae5 commit 214ff7e

1 file changed

Lines changed: 41 additions & 17 deletions

File tree

common-lib/blob-storage/AwsS3Blob.go

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -203,31 +203,55 @@ func (r *Resolver) ResolveEndpoint(_ context.Context, params s3v2.EndpointParame
203203
return transport.Endpoint{URI: u}, nil
204204
}
205205

206-
func GetS3BucketBasicsClient(ctx context.Context, region string, accessKey, secretKey string, endpointUrl string) (BucketBasics, error) {
207-
cfg, err := config.LoadDefaultConfig(ctx, config.WithCredentialsProvider(credentialsv2.NewStaticCredentialsProvider(accessKey, secretKey, "")))
208-
if err != nil {
209-
return BucketBasics{}, err
206+
func getS3DefaultSDKConfig(ctx context.Context, region, accessKey, secretKey, endpointUrl string) (s3Cfg awsv2.Config, err error) {
207+
if len(endpointUrl) != 0 && len(region) == 0 {
208+
// case handled for minio
209+
region = "us-east-1"
210+
s3Cfg = awsv2.Config{Region: region}
211+
return s3Cfg, nil
210212
}
211-
sdkConfig := awsv2.Config{Region: region}
212-
sdkConfig.Credentials = cfg.Credentials
213-
var s3Client *s3v2.Client
214-
if len(endpointUrl) > 0 {
215-
if len(region) == 0 {
216-
region = "us-east-1" //for minio
217-
sdkConfig = awsv2.Config{Region: region}
213+
var cfg awsv2.Config
214+
if len(accessKey) == 0 || len(secretKey) == 0 {
215+
// case handled for S3 IAM role
216+
cfg, err = config.LoadDefaultConfig(ctx, config.WithRegion(region))
217+
if err != nil {
218+
return awsv2.Config{}, err
218219
}
219-
endpointURL, err := url.Parse(endpointUrl)
220+
} else {
221+
// case handled for S3 with access key and secret key
222+
cfg, err = config.LoadDefaultConfig(ctx, config.WithCredentialsProvider(credentialsv2.NewStaticCredentialsProvider(accessKey, secretKey, "")))
223+
if err != nil {
224+
return awsv2.Config{}, err
225+
}
226+
}
227+
s3Cfg = awsv2.Config{Region: region, Credentials: cfg.Credentials}
228+
return s3Cfg, nil
229+
}
230+
231+
func getS3Client(s3Cfg awsv2.Config, endpointUrl string) (s3Client *s3v2.Client, err error) {
232+
if len(endpointUrl) > 0 {
233+
parsedEndpointUrl, err := url.Parse(endpointUrl)
220234
if err != nil {
221-
return BucketBasics{}, err
235+
return s3Client, err
222236
}
223-
s3Client = s3v2.NewFromConfig(sdkConfig, func(o *s3v2.Options) {
237+
return s3v2.NewFromConfig(s3Cfg, func(o *s3v2.Options) {
224238
o.UsePathStyle = true
225-
o.EndpointResolverV2 = &Resolver{URL: endpointURL}
226-
})
239+
o.EndpointResolverV2 = &Resolver{URL: parsedEndpointUrl}
240+
}), nil
227241
} else {
228-
s3Client = s3v2.NewFromConfig(sdkConfig)
242+
return s3v2.NewFromConfig(s3Cfg), nil
229243
}
244+
}
230245

246+
func GetS3BucketBasicsClient(ctx context.Context, region, accessKey, secretKey, endpointUrl string) (BucketBasics, error) {
247+
s3Cfg, err := getS3DefaultSDKConfig(ctx, region, accessKey, secretKey, endpointUrl)
248+
if err != nil {
249+
return BucketBasics{}, err
250+
}
251+
s3Client, err := getS3Client(s3Cfg, endpointUrl)
252+
if err != nil {
253+
return BucketBasics{}, err
254+
}
231255
bucketBasics := BucketBasics{S3Client: s3Client}
232256
return bucketBasics, nil
233257
}

0 commit comments

Comments
 (0)