From c65cb736ba778ebe40d09dfe40b34a6c306dca14 Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Wed, 6 Dec 2023 17:37:56 -0800 Subject: [PATCH 01/10] Adds tests for setting STS endpoint --- aws_config_test.go | 209 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) diff --git a/aws_config_test.go b/aws_config_test.go index 26718eb8..c6b4b849 100644 --- a/aws_config_test.go +++ b/aws_config_test.go @@ -3075,6 +3075,197 @@ web_identity_token_file = no-such-file } } +func TestStsEndpoint(t *testing.T) { + testcases := map[string]struct { + Config Config + SetConfig bool + SetEnv string + SetInvalidEnv string + ConfigFile string + InvalidConfigFile string + ExpectedCredentials aws.Credentials + }{ + "config": { + Config: Config{ + AccessKey: servicemocks.MockStaticAccessKey, + Region: "us-east-1", + SecretKey: servicemocks.MockStaticSecretKey, + }, + SetConfig: true, + ExpectedCredentials: mockdata.MockStaticCredentials, + }, + + "service envvar": { + Config: Config{ + AccessKey: servicemocks.MockStaticAccessKey, + Region: "us-east-1", + SecretKey: servicemocks.MockStaticSecretKey, + }, + SetEnv: "AWS_ENDPOINT_URL_STS", + ExpectedCredentials: mockdata.MockStaticCredentials, + }, + + "global envvar": { + Config: Config{ + AccessKey: servicemocks.MockStaticAccessKey, + Region: "us-east-1", + SecretKey: servicemocks.MockStaticSecretKey, + }, + SetEnv: "AWS_ENDPOINT_URL", + ExpectedCredentials: mockdata.MockStaticCredentials, + }, + + "service envvar overrides global envvar": { + Config: Config{ + AccessKey: servicemocks.MockStaticAccessKey, + Region: "us-east-1", + SecretKey: servicemocks.MockStaticSecretKey, + }, + SetEnv: "AWS_ENDPOINT_URL_STS", + SetInvalidEnv: "AWS_ENDPOINT_URL", + ExpectedCredentials: mockdata.MockStaticCredentials, + }, + + // "service config_file": { + // Config: Config{ + // Profile: "default", + // }, + // ConfigFile: ` + // [default] + // aws_access_key_id = DefaultSharedCredentialsAccessKey + // aws_secret_access_key = DefaultSharedCredentialsSecretKey + // services = sts-test + + // [services sts-test] + // sts = + // endpoint_url = %s + // `, + // ExpectedCredentials: aws.Credentials{ + // AccessKeyID: "DefaultSharedCredentialsAccessKey", + // SecretAccessKey: "DefaultSharedCredentialsSecretKey", + // Source: sharedConfigCredentialsProvider, + // }, + // }, + + // TODO: service envvar overrides service config_file + + // TODO: does global envvar override service config_file? + + "global config_file": { + Config: Config{ + Profile: "default", + }, + ConfigFile: ` +[default] +aws_access_key_id = DefaultSharedCredentialsAccessKey +aws_secret_access_key = DefaultSharedCredentialsSecretKey +endpoint_url = %s +`, + ExpectedCredentials: aws.Credentials{ + AccessKeyID: "DefaultSharedCredentialsAccessKey", + SecretAccessKey: "DefaultSharedCredentialsSecretKey", + Source: sharedConfigCredentialsProvider, + }, + }, + + "global envvar overrides global config_file": { + Config: Config{ + Profile: "default", + }, + SetEnv: "AWS_ENDPOINT_URL", + InvalidConfigFile: ` +[default] +aws_access_key_id = DefaultSharedCredentialsAccessKey +aws_secret_access_key = DefaultSharedCredentialsSecretKey +endpoint_url = %s +`, + ExpectedCredentials: aws.Credentials{ + AccessKeyID: "DefaultSharedCredentialsAccessKey", + SecretAccessKey: "DefaultSharedCredentialsSecretKey", + Source: sharedConfigCredentialsProvider, + }, + }, + + "service envvar overrides global config_file": { + Config: Config{ + Profile: "default", + }, + SetEnv: "AWS_ENDPOINT_URL_STS", + InvalidConfigFile: ` +[default] +aws_access_key_id = DefaultSharedCredentialsAccessKey +aws_secret_access_key = DefaultSharedCredentialsSecretKey +endpoint_url = %s +`, + ExpectedCredentials: aws.Credentials{ + AccessKeyID: "DefaultSharedCredentialsAccessKey", + SecretAccessKey: "DefaultSharedCredentialsSecretKey", + Source: sharedConfigCredentialsProvider, + }, + }, + } + + for name, testcase := range testcases { + testcase := testcase + + t.Run(name, func(t *testing.T) { + servicemocks.InitSessionTestEnv(t) + + ctx := context.Background() + + ts := servicemocks.MockAwsApiServer("STS", []*servicemocks.MockEndpoint{ + servicemocks.MockStsGetCallerIdentityValidEndpoint, + }) + defer ts.Close() + stsEndpoint := ts.URL + + invalidTS := servicemocks.MockAwsApiServer("STS", []*servicemocks.MockEndpoint{ + servicemocks.MockStsGetCallerIdentityInvalidEndpointAccessDenied, + }) + defer invalidTS.Close() + stsInvalidEndpoint := invalidTS.URL + + if testcase.SetConfig { + testcase.Config.StsEndpoint = stsEndpoint + } + if testcase.SetEnv != "" { + t.Setenv(testcase.SetEnv, stsEndpoint) + } + if testcase.SetInvalidEnv != "" { + t.Setenv(testcase.SetInvalidEnv, stsInvalidEndpoint) + } + if testcase.ConfigFile != "" { + tempDir := t.TempDir() + filename := writeSharedConfigFile(t, &testcase.Config, tempDir, fmt.Sprintf(testcase.ConfigFile, stsEndpoint)) + testcase.ExpectedCredentials.Source = sharedConfigCredentialsSource(filename) + } + if testcase.InvalidConfigFile != "" { + tempDir := t.TempDir() + filename := writeSharedConfigFile(t, &testcase.Config, tempDir, fmt.Sprintf(testcase.InvalidConfigFile, stsInvalidEndpoint)) + testcase.ExpectedCredentials.Source = sharedConfigCredentialsSource(filename) + } + + ctx, awsConfig, diags := GetAwsConfig(ctx, &testcase.Config) + + if diff := cmp.Diff(diags, diag.Diagnostics{}); diff != "" { + t.Errorf("Unexpected response (+wanted, -got): %s", diff) + } + if diags.HasError() { + return + } + + credentialsValue, err := awsConfig.Credentials.Retrieve(ctx) + if err != nil { + t.Fatalf("unexpected credentials Retrieve() error: %s", err) + } + + if diff := cmp.Diff(credentialsValue, testcase.ExpectedCredentials, cmpopts.IgnoreFields(aws.Credentials{}, "Expires")); diff != "" { + t.Fatalf("unexpected credentials: (- got, + expected)\n%s", diff) + } + }) + } +} + var _ configtesting.TestDriver = &testDriver{} type testDriver struct { @@ -4006,3 +4197,21 @@ func configureHcLogger(name string, output io.Writer) hclog.Logger { return logger } + +func writeSharedConfigFile(t *testing.T, config *Config, tempDir, content string) string { + t.Helper() + + file, err := os.Create(filepath.Join(tempDir, "aws-sdk-go-base-shared-configuration-file")) + if err != nil { + t.Fatalf("creating shared configuration file: %s", err) + } + + _, err = file.WriteString(content) + if err != nil { + t.Fatalf(" writing shared configuration file: %s", err) + } + + config.SharedConfigFiles = append(config.SharedConfigFiles, file.Name()) + + return file.Name() +} From b9b8a79d11d0e10414a82bfd01d7afc7a098b968 Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Fri, 8 Dec 2023 11:59:01 -0800 Subject: [PATCH 02/10] Enables test for service-specific endpoint override --- aws_config_test.go | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/aws_config_test.go b/aws_config_test.go index c6b4b849..9290b6cd 100644 --- a/aws_config_test.go +++ b/aws_config_test.go @@ -3126,26 +3126,26 @@ func TestStsEndpoint(t *testing.T) { ExpectedCredentials: mockdata.MockStaticCredentials, }, - // "service config_file": { - // Config: Config{ - // Profile: "default", - // }, - // ConfigFile: ` - // [default] - // aws_access_key_id = DefaultSharedCredentialsAccessKey - // aws_secret_access_key = DefaultSharedCredentialsSecretKey - // services = sts-test - - // [services sts-test] - // sts = - // endpoint_url = %s - // `, - // ExpectedCredentials: aws.Credentials{ - // AccessKeyID: "DefaultSharedCredentialsAccessKey", - // SecretAccessKey: "DefaultSharedCredentialsSecretKey", - // Source: sharedConfigCredentialsProvider, - // }, - // }, + "service config_file": { + Config: Config{ + Profile: "default", + }, + ConfigFile: ` +[default] +aws_access_key_id = DefaultSharedCredentialsAccessKey +aws_secret_access_key = DefaultSharedCredentialsSecretKey +services = sts-test + +[services sts-test] +sts = + endpoint_url = %s +`, + ExpectedCredentials: aws.Credentials{ + AccessKeyID: "DefaultSharedCredentialsAccessKey", + SecretAccessKey: "DefaultSharedCredentialsSecretKey", + Source: sharedConfigCredentialsProvider, + }, + }, // TODO: service envvar overrides service config_file From 4eba21c3b4dece3baea44e59a105a22d04b1dd2d Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Fri, 8 Dec 2023 12:08:31 -0800 Subject: [PATCH 03/10] Consolidates `ConfigFile` and `InvalidConfigFile` --- aws_config_test.go | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/aws_config_test.go b/aws_config_test.go index 9290b6cd..efe2b1a7 100644 --- a/aws_config_test.go +++ b/aws_config_test.go @@ -3077,12 +3077,12 @@ web_identity_token_file = no-such-file func TestStsEndpoint(t *testing.T) { testcases := map[string]struct { - Config Config - SetConfig bool - SetEnv string - SetInvalidEnv string + Config Config + SetConfig bool + SetEnv string + SetInvalidEnv string + // Use string at index 1 for valid endpoint url and index 2 for invalid endpoint url ConfigFile string - InvalidConfigFile string ExpectedCredentials aws.Credentials }{ "config": { @@ -3138,7 +3138,7 @@ services = sts-test [services sts-test] sts = - endpoint_url = %s + endpoint_url = %[1]s `, ExpectedCredentials: aws.Credentials{ AccessKeyID: "DefaultSharedCredentialsAccessKey", @@ -3159,7 +3159,7 @@ sts = [default] aws_access_key_id = DefaultSharedCredentialsAccessKey aws_secret_access_key = DefaultSharedCredentialsSecretKey -endpoint_url = %s +endpoint_url = %[1]s `, ExpectedCredentials: aws.Credentials{ AccessKeyID: "DefaultSharedCredentialsAccessKey", @@ -3173,11 +3173,11 @@ endpoint_url = %s Profile: "default", }, SetEnv: "AWS_ENDPOINT_URL", - InvalidConfigFile: ` + ConfigFile: ` [default] aws_access_key_id = DefaultSharedCredentialsAccessKey aws_secret_access_key = DefaultSharedCredentialsSecretKey -endpoint_url = %s +endpoint_url = %[2]s `, ExpectedCredentials: aws.Credentials{ AccessKeyID: "DefaultSharedCredentialsAccessKey", @@ -3191,11 +3191,11 @@ endpoint_url = %s Profile: "default", }, SetEnv: "AWS_ENDPOINT_URL_STS", - InvalidConfigFile: ` + ConfigFile: ` [default] aws_access_key_id = DefaultSharedCredentialsAccessKey aws_secret_access_key = DefaultSharedCredentialsSecretKey -endpoint_url = %s +endpoint_url = %[2]s `, ExpectedCredentials: aws.Credentials{ AccessKeyID: "DefaultSharedCredentialsAccessKey", @@ -3236,12 +3236,7 @@ endpoint_url = %s } if testcase.ConfigFile != "" { tempDir := t.TempDir() - filename := writeSharedConfigFile(t, &testcase.Config, tempDir, fmt.Sprintf(testcase.ConfigFile, stsEndpoint)) - testcase.ExpectedCredentials.Source = sharedConfigCredentialsSource(filename) - } - if testcase.InvalidConfigFile != "" { - tempDir := t.TempDir() - filename := writeSharedConfigFile(t, &testcase.Config, tempDir, fmt.Sprintf(testcase.InvalidConfigFile, stsInvalidEndpoint)) + filename := writeSharedConfigFile(t, &testcase.Config, tempDir, fmt.Sprintf(testcase.ConfigFile, stsEndpoint, stsInvalidEndpoint)) testcase.ExpectedCredentials.Source = sharedConfigCredentialsSource(filename) } From 9d81ed018c286d18a849a686b03dd215e61c820e Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Fri, 8 Dec 2023 12:10:06 -0800 Subject: [PATCH 04/10] Adds test for service-specific endpoint in config file overriding base endpoint --- aws_config_test.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/aws_config_test.go b/aws_config_test.go index efe2b1a7..e71375a8 100644 --- a/aws_config_test.go +++ b/aws_config_test.go @@ -3136,6 +3136,28 @@ aws_access_key_id = DefaultSharedCredentialsAccessKey aws_secret_access_key = DefaultSharedCredentialsSecretKey services = sts-test +[services sts-test] +sts = + endpoint_url = %[1]s +`, + ExpectedCredentials: aws.Credentials{ + AccessKeyID: "DefaultSharedCredentialsAccessKey", + SecretAccessKey: "DefaultSharedCredentialsSecretKey", + Source: sharedConfigCredentialsProvider, + }, + }, + + "service config_file overrides global config_file": { + Config: Config{ + Profile: "default", + }, + ConfigFile: ` +[default] +aws_access_key_id = DefaultSharedCredentialsAccessKey +aws_secret_access_key = DefaultSharedCredentialsSecretKey +services = sts-test +endpoint_url = %[2]s + [services sts-test] sts = endpoint_url = %[1]s From 0392f428c38432f009acb74ff8b1ef3ff5bc22af Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Fri, 8 Dec 2023 12:13:45 -0800 Subject: [PATCH 05/10] Adds test for service-specific envvar overriding service-specific configuration --- aws_config_test.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/aws_config_test.go b/aws_config_test.go index e71375a8..ea17e8ca 100644 --- a/aws_config_test.go +++ b/aws_config_test.go @@ -3169,7 +3169,27 @@ sts = }, }, - // TODO: service envvar overrides service config_file + "service envvar overrides service config_file": { + Config: Config{ + Profile: "default", + }, + SetEnv: "AWS_ENDPOINT_URL_STS", + ConfigFile: ` +[default] +aws_access_key_id = DefaultSharedCredentialsAccessKey +aws_secret_access_key = DefaultSharedCredentialsSecretKey +services = sts-test + +[services sts-test] +sts = + endpoint_url = %[2]s +`, + ExpectedCredentials: aws.Credentials{ + AccessKeyID: "DefaultSharedCredentialsAccessKey", + SecretAccessKey: "DefaultSharedCredentialsSecretKey", + Source: sharedConfigCredentialsProvider, + }, + }, // TODO: does global envvar override service config_file? From 72de540794a6ca69de2c85e383e41cef01942507 Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Fri, 8 Dec 2023 12:18:17 -0800 Subject: [PATCH 06/10] Adds test confirming that base endpoint url in envvar overrides service-specific endpoint configured in config file --- aws_config_test.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/aws_config_test.go b/aws_config_test.go index ea17e8ca..8de5ffbb 100644 --- a/aws_config_test.go +++ b/aws_config_test.go @@ -3191,7 +3191,27 @@ sts = }, }, - // TODO: does global envvar override service config_file? + "global envvar overrides service config_file": { + Config: Config{ + Profile: "default", + }, + SetEnv: "AWS_ENDPOINT_URL", + ConfigFile: ` +[default] +aws_access_key_id = DefaultSharedCredentialsAccessKey +aws_secret_access_key = DefaultSharedCredentialsSecretKey +services = sts-test + +[services sts-test] +sts = + endpoint_url = %[2]s +`, + ExpectedCredentials: aws.Credentials{ + AccessKeyID: "DefaultSharedCredentialsAccessKey", + SecretAccessKey: "DefaultSharedCredentialsSecretKey", + Source: sharedConfigCredentialsProvider, + }, + }, "global config_file": { Config: Config{ From 1eb55a95ff7d7cbfd7f8131749ce42a43dd7365b Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Fri, 8 Dec 2023 12:30:59 -0800 Subject: [PATCH 07/10] renames `global` to `base` to match AWS terminology --- aws_config_test.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/aws_config_test.go b/aws_config_test.go index 8de5ffbb..dadcfcdc 100644 --- a/aws_config_test.go +++ b/aws_config_test.go @@ -3105,7 +3105,7 @@ func TestStsEndpoint(t *testing.T) { ExpectedCredentials: mockdata.MockStaticCredentials, }, - "global envvar": { + "base envvar": { Config: Config{ AccessKey: servicemocks.MockStaticAccessKey, Region: "us-east-1", @@ -3115,7 +3115,7 @@ func TestStsEndpoint(t *testing.T) { ExpectedCredentials: mockdata.MockStaticCredentials, }, - "service envvar overrides global envvar": { + "service envvar overrides base envvar": { Config: Config{ AccessKey: servicemocks.MockStaticAccessKey, Region: "us-east-1", @@ -3147,7 +3147,7 @@ sts = }, }, - "service config_file overrides global config_file": { + "service config_file overrides base config_file": { Config: Config{ Profile: "default", }, @@ -3191,7 +3191,7 @@ sts = }, }, - "global envvar overrides service config_file": { + "base envvar overrides service config_file": { Config: Config{ Profile: "default", }, @@ -3213,7 +3213,7 @@ sts = }, }, - "global config_file": { + "base config_file": { Config: Config{ Profile: "default", }, @@ -3230,7 +3230,7 @@ endpoint_url = %[1]s }, }, - "global envvar overrides global config_file": { + "base envvar overrides base config_file": { Config: Config{ Profile: "default", }, @@ -3248,7 +3248,7 @@ endpoint_url = %[2]s }, }, - "service envvar overrides global config_file": { + "service envvar overrides base config_file": { Config: Config{ Profile: "default", }, From 9afea9464929ab939f255f6a767d4b7c71920a94 Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Fri, 8 Dec 2023 12:40:15 -0800 Subject: [PATCH 08/10] Allows setting either valid or invalid endpoint on `Config` --- aws_config_test.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/aws_config_test.go b/aws_config_test.go index dadcfcdc..ad243c1a 100644 --- a/aws_config_test.go +++ b/aws_config_test.go @@ -3076,11 +3076,17 @@ web_identity_token_file = no-such-file } func TestStsEndpoint(t *testing.T) { + type settype int + const ( + setNone settype = iota + setValid + setInvalid + ) testcases := map[string]struct { - Config Config - SetConfig bool - SetEnv string - SetInvalidEnv string + Config Config + SetServiceEndpoint settype + SetEnv string + SetInvalidEnv string // Use string at index 1 for valid endpoint url and index 2 for invalid endpoint url ConfigFile string ExpectedCredentials aws.Credentials @@ -3091,7 +3097,7 @@ func TestStsEndpoint(t *testing.T) { Region: "us-east-1", SecretKey: servicemocks.MockStaticSecretKey, }, - SetConfig: true, + SetServiceEndpoint: setValid, ExpectedCredentials: mockdata.MockStaticCredentials, }, @@ -3287,7 +3293,7 @@ endpoint_url = %[2]s defer invalidTS.Close() stsInvalidEndpoint := invalidTS.URL - if testcase.SetConfig { + if testcase.SetServiceEndpoint == setValid { testcase.Config.StsEndpoint = stsEndpoint } if testcase.SetEnv != "" { From a355034d4044d192c9112bd5fca4164879e36be1 Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Fri, 8 Dec 2023 13:03:42 -0800 Subject: [PATCH 09/10] Adds tests to ensure service endpoint set on `Config` overrides envvar or config file --- aws_config_test.go | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/aws_config_test.go b/aws_config_test.go index ad243c1a..0ed8fb8e 100644 --- a/aws_config_test.go +++ b/aws_config_test.go @@ -3091,7 +3091,7 @@ func TestStsEndpoint(t *testing.T) { ConfigFile string ExpectedCredentials aws.Credentials }{ - "config": { + "service config": { Config: Config{ AccessKey: servicemocks.MockStaticAccessKey, Region: "us-east-1", @@ -3101,6 +3101,39 @@ func TestStsEndpoint(t *testing.T) { ExpectedCredentials: mockdata.MockStaticCredentials, }, + "service config overrides service envvar": { + Config: Config{ + AccessKey: servicemocks.MockStaticAccessKey, + Region: "us-east-1", + SecretKey: servicemocks.MockStaticSecretKey, + }, + SetServiceEndpoint: setValid, + SetInvalidEnv: "AWS_ENDPOINT_URL_STS", + ExpectedCredentials: mockdata.MockStaticCredentials, + }, + + "service config overrides service config_file": { + Config: Config{ + Profile: "default", + }, + ConfigFile: ` +[default] +aws_access_key_id = DefaultSharedCredentialsAccessKey +aws_secret_access_key = DefaultSharedCredentialsSecretKey +services = sts-test + +[services sts-test] +sts = + endpoint_url = %[2]s +`, + SetServiceEndpoint: setValid, + ExpectedCredentials: aws.Credentials{ + AccessKeyID: "DefaultSharedCredentialsAccessKey", + SecretAccessKey: "DefaultSharedCredentialsSecretKey", + Source: sharedConfigCredentialsProvider, + }, + }, + "service envvar": { Config: Config{ AccessKey: servicemocks.MockStaticAccessKey, From 92e7c3fad9add5f4f721d68de80dcf92e21f85e6 Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Fri, 8 Dec 2023 13:05:59 -0800 Subject: [PATCH 10/10] Adds tests confirming service endpoint set on `Config` overrides base endpoint from envvar or config file --- aws_config_test.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/aws_config_test.go b/aws_config_test.go index 0ed8fb8e..77348f89 100644 --- a/aws_config_test.go +++ b/aws_config_test.go @@ -3112,6 +3112,17 @@ func TestStsEndpoint(t *testing.T) { ExpectedCredentials: mockdata.MockStaticCredentials, }, + "service config overrides base envvar": { + Config: Config{ + AccessKey: servicemocks.MockStaticAccessKey, + Region: "us-east-1", + SecretKey: servicemocks.MockStaticSecretKey, + }, + SetServiceEndpoint: setValid, + SetInvalidEnv: "AWS_ENDPOINT_URL", + ExpectedCredentials: mockdata.MockStaticCredentials, + }, + "service config overrides service config_file": { Config: Config{ Profile: "default", @@ -3134,6 +3145,24 @@ sts = }, }, + "service config overrides base config_file": { + Config: Config{ + Profile: "default", + }, + ConfigFile: ` +[default] +aws_access_key_id = DefaultSharedCredentialsAccessKey +aws_secret_access_key = DefaultSharedCredentialsSecretKey +endpoint_url = %[2]s +`, + SetServiceEndpoint: setValid, + ExpectedCredentials: aws.Credentials{ + AccessKeyID: "DefaultSharedCredentialsAccessKey", + SecretAccessKey: "DefaultSharedCredentialsSecretKey", + Source: sharedConfigCredentialsProvider, + }, + }, + "service envvar": { Config: Config{ AccessKey: servicemocks.MockStaticAccessKey,