Skip to content

Commit 4abfae7

Browse files
committed
Default S3 endpoint scheme to HTTPS when not specified
1 parent 9106a44 commit 4abfae7

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

modules/repository-s3/src/main/java/org/elasticsearch/repositories/s3/S3Service.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,13 @@ protected S3ClientBuilder buildClientBuilder(S3ClientSettings clientSettings, Sd
254254
}
255255

256256
if (Strings.hasLength(clientSettings.endpoint)) {
257-
s3clientBuilder.endpointOverride(URI.create(clientSettings.endpoint));
257+
String endpoint = clientSettings.endpoint;
258+
if ((endpoint.startsWith("http://") || endpoint.startsWith("https://")) == false) {
259+
// Default protocol to https if not specified
260+
// See https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/client-configuration.html#client-config-other-diffs
261+
endpoint = "https://" + endpoint;
262+
}
263+
s3clientBuilder.endpointOverride(URI.create(endpoint));
258264
}
259265

260266
return s3clientBuilder;

modules/repository-s3/src/test/java/org/elasticsearch/repositories/s3/S3ServiceTests.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
import software.amazon.awssdk.awscore.exception.AwsServiceException;
1313
import software.amazon.awssdk.core.retry.RetryPolicyContext;
1414
import software.amazon.awssdk.core.retry.conditions.RetryCondition;
15+
import software.amazon.awssdk.http.SdkHttpClient;
1516
import software.amazon.awssdk.regions.Region;
17+
import software.amazon.awssdk.services.s3.S3Client;
1618
import software.amazon.awssdk.services.s3.endpoints.S3EndpointParams;
1719
import software.amazon.awssdk.services.s3.endpoints.internal.DefaultS3EndpointProvider;
1820
import software.amazon.awssdk.services.s3.model.S3Exception;
@@ -29,8 +31,10 @@
2931
import org.elasticsearch.watcher.ResourceWatcherService;
3032

3133
import java.io.IOException;
34+
import java.net.URI;
3235
import java.util.concurrent.atomic.AtomicBoolean;
3336

37+
import static org.hamcrest.Matchers.equalTo;
3438
import static org.mockito.Mockito.mock;
3539

3640
public class S3ServiceTests extends ESTestCase {
@@ -217,4 +221,19 @@ public void testGetClientRegionFallbackToUsEast1() {
217221
);
218222
}
219223
}
224+
225+
public void testEndpointOverrideSchemeDefaultsToHttpsWhenNotSpecified() {
226+
final S3Service s3Service = new S3Service(
227+
mock(Environment.class),
228+
Settings.EMPTY,
229+
mock(ResourceWatcherService.class),
230+
() -> Region.of("es-test-region")
231+
);
232+
String servername = randomIdentifier() + ".ignore";
233+
S3Client s3Client = s3Service.buildClient(
234+
S3ClientSettings.getClientSettings(Settings.builder().put("s3.client.test-client.endpoint", servername).build(), "test-client"),
235+
mock(SdkHttpClient.class)
236+
);
237+
assertThat(s3Client.serviceClientConfiguration().endpointOverride().get(), equalTo(URI.create("https://" + servername)));
238+
}
220239
}

0 commit comments

Comments
 (0)