Skip to content

Commit 03bb387

Browse files
committed
feat: add support for a credentials chain for minio access
If a static access key id and secret are not provided, instead fallback to a pulling credentials from other places, in priority order: 1. MINIO_ prefixed environment variables 2. AWS_ prefixed environment variables 3. a minio credentials file 4. an aws credentials file 5. EC2 instance metadata This enables using temporary credentials that are auto-refreshed upon expiration.
1 parent c9eac51 commit 03bb387

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

modules/storage/minio.go

+27-1
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,34 @@ func NewMinioStorage(ctx context.Context, cfg *setting.Storage) (ObjectStorage,
9696
return nil, fmt.Errorf("invalid minio bucket lookup type: %s", config.BucketLookUpType)
9797
}
9898

99+
// By default, use the static credentials
100+
creds := credentials.NewStaticV4(config.AccessKeyID, config.SecretAccessKey, "")
101+
102+
// If the Access Key ID is empty, configure a credentials chain for S3 access
103+
if config.AccessKeyID == "" {
104+
chain := []credentials.Provider{
105+
// configure based upon MINIO_ prefixed environment variables
106+
&credentials.EnvMinio{},
107+
// configure based upon AWS_ prefixed environment variables
108+
&credentials.EnvAWS{},
109+
// read credentials from MINIO_SHARED_CREDENTIALS_FILE
110+
// environment variable, or default json config files
111+
&credentials.FileMinioClient{},
112+
// read credentials from AWS_SHARED_CREDENTIALS_FILE
113+
// environment variable, or default credentials file
114+
&credentials.FileAWSCredentials{},
115+
// read IAM role from EC2 metadata endpoint if available
116+
&credentials.IAM{
117+
Client: &http.Client{
118+
Transport: http.DefaultTransport,
119+
},
120+
},
121+
}
122+
creds = credentials.NewChainCredentials(chain)
123+
}
124+
99125
minioClient, err := minio.New(config.Endpoint, &minio.Options{
100-
Creds: credentials.NewStaticV4(config.AccessKeyID, config.SecretAccessKey, ""),
126+
Creds: creds,
101127
Secure: config.UseSSL,
102128
Transport: &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: config.InsecureSkipVerify}},
103129
Region: config.Location,

0 commit comments

Comments
 (0)