Untitled

 avatar
unknown
plain_text
9 months ago
1.1 kB
16
Indexable
package sharedcreds

import (
    "context"
    "fmt"
    "time"

    "github.com/aws/aws-sdk-go-v2/aws"
)

type ForceRefreshProvider struct {
    Provider aws.CredentialsProvider
}

func (p *ForceRefreshProvider) Retrieve(ctx context.Context) (aws.Credentials, error) {
    creds, err := p.Provider.Retrieve(ctx)
    if err != nil {
        return aws.Credentials{}, fmt.Errorf("failed to retrieve credentials: %w", err)
    }

    // Markiere die Credentials als abgelaufen, damit SDK immer neu lädt
    creds.CanExpire = true
    creds.Expires = time.Now().Add(-1 * time.Second)
    return creds, nil
}





// Zum Beispiel: Shared Credentials Provider (aus Datei)
sharedProvider := credentials.NewSharedCredentialsProvider("", "default")

// Oder jeder andere aws.CredentialsProvider, z.B. Env, STS, etc.

// Wrappe ihn mit ForceRefreshProvider
provider := &sharedcreds.ForceRefreshProvider{
    Provider: sharedProvider,
}

cfg, err := config.LoadDefaultConfig(context.TODO(),
    config.WithCredentialsProvider(provider),
)
if err != nil {
    log.Fatal(err)
}

s3Client := s3.NewFromConfig(cfg)
Editor is loading...
Leave a Comment