mirror of
https://github.com/fleetdm/fleet
synced 2026-05-23 00:49:03 +00:00
41 lines
1.3 KiB
Go
41 lines
1.3 KiB
Go
|
|
// Package aws_common contains common functionality used
|
||
|
|
// by packages that use AWS features (kinesis, firehose, ses, lambda, s3)
|
||
|
|
package aws_common
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"fmt"
|
||
|
|
|
||
|
|
"github.com/aws/aws-sdk-go-v2/aws"
|
||
|
|
aws_config "github.com/aws/aws-sdk-go-v2/config"
|
||
|
|
"github.com/aws/aws-sdk-go-v2/credentials/stscreds"
|
||
|
|
"github.com/aws/aws-sdk-go-v2/service/sts"
|
||
|
|
)
|
||
|
|
|
||
|
|
// ConfigureAssumeRoleProvider configures the credential provider with a "Assume Role"
|
||
|
|
// provider and returns a new aws.Config.
|
||
|
|
//
|
||
|
|
// It overrides any aws_config.WithCredentialsProvider set in opts.
|
||
|
|
func ConfigureAssumeRoleProvider(
|
||
|
|
conf aws.Config,
|
||
|
|
opts []func(*aws_config.LoadOptions) error,
|
||
|
|
stsAssumeRoleARN,
|
||
|
|
stsExternalID string,
|
||
|
|
) (aws.Config, error) {
|
||
|
|
stsClient := sts.NewFromConfig(conf)
|
||
|
|
credsProvider := stscreds.NewAssumeRoleProvider(stsClient, stsAssumeRoleARN, func(r *stscreds.AssumeRoleOptions) {
|
||
|
|
if stsExternalID != "" {
|
||
|
|
r.ExternalID = &stsExternalID
|
||
|
|
}
|
||
|
|
})
|
||
|
|
// Overrides any previous aws_config.WithCredentialsProvider set in opts.
|
||
|
|
opts = append(opts,
|
||
|
|
aws_config.WithCredentialsProvider(credsProvider),
|
||
|
|
)
|
||
|
|
conf, err := aws_config.LoadDefaultConfig(context.Background(), opts...)
|
||
|
|
if err != nil {
|
||
|
|
return aws.Config{}, fmt.Errorf("failed to create default config with sts assume role: %w", err)
|
||
|
|
}
|
||
|
|
return conf, nil
|
||
|
|
}
|