mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Merge pull request #13424 from aidan-/master
imguploader: Add support for ECS credential provider for S3
This commit is contained in:
commit
5a2b1b1abf
@ -2,12 +2,15 @@ package imguploader
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds"
|
"github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/credentials/endpointcreds"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/defaults"
|
||||||
"github.com/aws/aws-sdk-go/aws/ec2metadata"
|
"github.com/aws/aws-sdk-go/aws/ec2metadata"
|
||||||
"github.com/aws/aws-sdk-go/aws/endpoints"
|
"github.com/aws/aws-sdk-go/aws/endpoints"
|
||||||
"github.com/aws/aws-sdk-go/aws/session"
|
"github.com/aws/aws-sdk-go/aws/session"
|
||||||
@ -50,7 +53,7 @@ func (u *S3Uploader) Upload(ctx context.Context, imageDiskPath string) (string,
|
|||||||
SecretAccessKey: u.secretKey,
|
SecretAccessKey: u.secretKey,
|
||||||
}},
|
}},
|
||||||
&credentials.EnvProvider{},
|
&credentials.EnvProvider{},
|
||||||
&ec2rolecreds.EC2RoleProvider{Client: ec2metadata.New(sess), ExpiryWindow: 5 * time.Minute},
|
remoteCredProvider(sess),
|
||||||
})
|
})
|
||||||
cfg := &aws.Config{
|
cfg := &aws.Config{
|
||||||
Region: aws.String(u.region),
|
Region: aws.String(u.region),
|
||||||
@ -85,3 +88,27 @@ func (u *S3Uploader) Upload(ctx context.Context, imageDiskPath string) (string,
|
|||||||
}
|
}
|
||||||
return image_url, nil
|
return image_url, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func remoteCredProvider(sess *session.Session) credentials.Provider {
|
||||||
|
ecsCredURI := os.Getenv("AWS_CONTAINER_CREDENTIALS_RELATIVE_URI")
|
||||||
|
|
||||||
|
if len(ecsCredURI) > 0 {
|
||||||
|
return ecsCredProvider(sess, ecsCredURI)
|
||||||
|
}
|
||||||
|
return ec2RoleProvider(sess)
|
||||||
|
}
|
||||||
|
|
||||||
|
func ecsCredProvider(sess *session.Session, uri string) credentials.Provider {
|
||||||
|
const host = `169.254.170.2`
|
||||||
|
|
||||||
|
d := defaults.Get()
|
||||||
|
return endpointcreds.NewProviderClient(
|
||||||
|
*d.Config,
|
||||||
|
d.Handlers,
|
||||||
|
fmt.Sprintf("http://%s%s", host, uri),
|
||||||
|
func(p *endpointcreds.Provider) { p.ExpiryWindow = 5 * time.Minute })
|
||||||
|
}
|
||||||
|
|
||||||
|
func ec2RoleProvider(sess *session.Session) credentials.Provider {
|
||||||
|
return &ec2rolecreds.EC2RoleProvider{Client: ec2metadata.New(sess), ExpiryWindow: 5 * time.Minute}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user