diff --git a/services/sts/src/main/java/software/amazon/awssdk/services/sts/internal/StsCredentialsProviderSystemSetting.java b/services/sts/src/main/java/software/amazon/awssdk/services/sts/internal/StsCredentialsProviderSystemSetting.java new file mode 100644 index 000000000000..d5026a3da255 --- /dev/null +++ b/services/sts/src/main/java/software/amazon/awssdk/services/sts/internal/StsCredentialsProviderSystemSetting.java @@ -0,0 +1,54 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.services.sts.internal; + +import software.amazon.awssdk.annotations.SdkProtectedApi; +import software.amazon.awssdk.utils.SystemSetting; + +/** + * STS credentials provider specific system setting + */ +@SdkProtectedApi +public enum StsCredentialsProviderSystemSetting implements SystemSetting { + + /** + * Configure the custom STS endpoint + */ + AWS_ENDPOINT_URL_STS("aws.endpointSTS", null); + + private final String systemProperty; + private final String defaultValue; + + StsCredentialsProviderSystemSetting(String systemProperty, String defaultValue) { + this.systemProperty = systemProperty; + this.defaultValue = defaultValue; + } + + @Override + public String property() { + return systemProperty; + } + + @Override + public String environmentVariable() { + return name(); + } + + @Override + public String defaultValue() { + return defaultValue; + } +} diff --git a/services/sts/src/main/java/software/amazon/awssdk/services/sts/internal/StsProfileCredentialsProviderFactory.java b/services/sts/src/main/java/software/amazon/awssdk/services/sts/internal/StsProfileCredentialsProviderFactory.java index 4e5559e73680..6a1709388354 100644 --- a/services/sts/src/main/java/software/amazon/awssdk/services/sts/internal/StsProfileCredentialsProviderFactory.java +++ b/services/sts/src/main/java/software/amazon/awssdk/services/sts/internal/StsProfileCredentialsProviderFactory.java @@ -15,6 +15,8 @@ package software.amazon.awssdk.services.sts.internal; +import static software.amazon.awssdk.services.sts.internal.StsCredentialsProviderSystemSetting.AWS_ENDPOINT_URL_STS; + import java.net.URI; import software.amazon.awssdk.annotations.SdkInternalApi; import software.amazon.awssdk.auth.credentials.AwsCredentials; @@ -96,6 +98,12 @@ private void configureEndpoint(StsClientBuilder stsClientBuilder, Profile profil stsClientBuilder.region(Region.US_EAST_1); stsClientBuilder.endpointOverride(URI.create("https://sts.amazonaws.com")); } + + // Set custom STS endpoint if it's specified + if (AWS_ENDPOINT_URL_STS.getStringValue().isPresent()) { + stsClientBuilder.endpointOverride(URI.create( + AWS_ENDPOINT_URL_STS.getStringValue().get())); + } } private String requireProperty(Profile profile, String requiredProperty) { diff --git a/services/sts/src/main/java/software/amazon/awssdk/services/sts/internal/StsWebIdentityCredentialsProviderFactory.java b/services/sts/src/main/java/software/amazon/awssdk/services/sts/internal/StsWebIdentityCredentialsProviderFactory.java index 86340d4f857d..25a6d1e4aa8e 100644 --- a/services/sts/src/main/java/software/amazon/awssdk/services/sts/internal/StsWebIdentityCredentialsProviderFactory.java +++ b/services/sts/src/main/java/software/amazon/awssdk/services/sts/internal/StsWebIdentityCredentialsProviderFactory.java @@ -15,6 +15,8 @@ package software.amazon.awssdk.services.sts.internal; +import static software.amazon.awssdk.services.sts.internal.StsCredentialsProviderSystemSetting.AWS_ENDPOINT_URL_STS; + import java.net.URI; import software.amazon.awssdk.annotations.SdkProtectedApi; import software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider; @@ -129,6 +131,12 @@ private void configureEndpoint(StsClientBuilder stsClientBuilder) { stsClientBuilder.region(Region.US_EAST_1); stsClientBuilder.endpointOverride(URI.create("https://sts.amazonaws.com")); } + + // Set custom STS endpoint if it's specified + if (AWS_ENDPOINT_URL_STS.getStringValue().isPresent()) { + stsClientBuilder.endpointOverride(URI.create( + AWS_ENDPOINT_URL_STS.getStringValue().get())); + } } } }