Skip to content

Commit d56d2cf

Browse files
Upgrade to AWS SDK 1.11.749 (#53962)
Upgrading AWS SDK to v1.11.749. Required building clients inside privileged contexts because some class loading that requires privileges now happens there and working around a new SDK bug in the S3 client builder. Closes #53191
1 parent b1f4f32 commit d56d2cf

File tree

16 files changed

+38
-27
lines changed

16 files changed

+38
-27
lines changed

plugins/discovery-ec2/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ esplugin {
2525
}
2626

2727
versions << [
28-
'aws': '1.11.636'
28+
'aws': '1.11.749'
2929
]
3030

3131
dependencies {

plugins/discovery-ec2/licenses/aws-java-sdk-core-1.11.636.jar.sha1

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
1da5c1549295cfeebc67fc1c7539785a9441755b

plugins/discovery-ec2/licenses/aws-java-sdk-ec2-1.11.636.jar.sha1

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0865e0937c6500acf62ce9c8964eac76a8718f5f

plugins/discovery-ec2/qa/amazon-ec2/src/test/java/org/elasticsearch/discovery/ec2/AmazonEC2Fixture.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.apache.http.NameValuePair;
2323
import org.apache.http.client.methods.HttpGet;
2424
import org.apache.http.client.methods.HttpPost;
25+
import org.apache.http.client.methods.HttpPut;
2526
import org.apache.http.client.utils.URLEncodedUtils;
2627
import org.elasticsearch.common.Booleans;
2728
import org.elasticsearch.common.SuppressForbidden;
@@ -106,6 +107,13 @@ protected Response handle(final Request request) throws IOException {
106107
return new Response(RestStatus.OK.getStatus(), headers, "my_iam_profile".getBytes(UTF_8));
107108
}
108109

110+
if (instanceProfile && "/latest/api/token".equals(request.getPath())
111+
&& HttpPut.METHOD_NAME.equals(request.getMethod())) {
112+
// TODO: Implement IMDSv2 behavior here. For now this just returns a 403 which makes the SDK fall back to IMDSv1
113+
// which is implemented in this fixture
114+
return new Response(RestStatus.FORBIDDEN.getStatus(), TEXT_PLAIN_CONTENT_TYPE, EMPTY_BYTE);
115+
}
116+
109117
if ((containerCredentials &&
110118
"/ecs_credentials_endpoint".equals(request.getPath()) &&
111119
HttpGet.METHOD_NAME.equals(request.getMethod())) ||

plugins/discovery-ec2/src/main/java/org/elasticsearch/discovery/ec2/AwsEc2ServiceImpl.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@
2424
import com.amazonaws.auth.AWSCredentialsProvider;
2525
import com.amazonaws.auth.AWSStaticCredentialsProvider;
2626
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
27+
import com.amazonaws.client.builder.AwsClientBuilder;
2728
import com.amazonaws.http.IdleConnectionReaper;
2829
import com.amazonaws.services.ec2.AmazonEC2;
29-
import com.amazonaws.services.ec2.AmazonEC2Client;
30+
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
3031
import org.apache.logging.log4j.LogManager;
3132
import org.apache.logging.log4j.Logger;
3233
import org.elasticsearch.ElasticsearchException;
@@ -45,17 +46,18 @@ class AwsEc2ServiceImpl implements AwsEc2Service {
4546
private AmazonEC2 buildClient(Ec2ClientSettings clientSettings) {
4647
final AWSCredentialsProvider credentials = buildCredentials(logger, clientSettings);
4748
final ClientConfiguration configuration = buildConfiguration(clientSettings);
48-
final AmazonEC2 client = buildClient(credentials, configuration);
49-
if (Strings.hasText(clientSettings.endpoint)) {
50-
logger.debug("using explicit ec2 endpoint [{}]", clientSettings.endpoint);
51-
client.setEndpoint(clientSettings.endpoint);
52-
}
53-
return client;
49+
return buildClient(credentials, configuration, clientSettings.endpoint);
5450
}
5551

5652
// proxy for testing
57-
AmazonEC2 buildClient(AWSCredentialsProvider credentials, ClientConfiguration configuration) {
58-
return new AmazonEC2Client(credentials, configuration);
53+
AmazonEC2 buildClient(AWSCredentialsProvider credentials, ClientConfiguration configuration, String endpoint) {
54+
final AmazonEC2ClientBuilder builder = AmazonEC2ClientBuilder.standard().withCredentials(credentials)
55+
.withClientConfiguration(configuration);
56+
if (Strings.hasText(endpoint)) {
57+
logger.debug("using explicit ec2 endpoint [{}]", endpoint);
58+
builder.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpoint, null));
59+
}
60+
return SocketAccess.doPrivileged(builder::build);
5961
}
6062

6163
// pkg private for tests

plugins/discovery-ec2/src/test/java/org/elasticsearch/discovery/ec2/Ec2DiscoveryPluginTests.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939

4040
import static org.hamcrest.Matchers.instanceOf;
4141
import static org.hamcrest.Matchers.is;
42-
import static org.hamcrest.Matchers.nullValue;
4342

4443
public class Ec2DiscoveryPluginTests extends ESTestCase {
4544

@@ -96,7 +95,7 @@ public void testNodeAttributesErrorLenient() throws Exception {
9695
public void testDefaultEndpoint() throws IOException {
9796
try (Ec2DiscoveryPluginMock plugin = new Ec2DiscoveryPluginMock(Settings.EMPTY)) {
9897
final String endpoint = ((AmazonEC2Mock) plugin.ec2Service.client().client()).endpoint;
99-
assertThat(endpoint, nullValue());
98+
assertThat(endpoint, is(""));
10099
}
101100
}
102101

@@ -199,8 +198,9 @@ private static class Ec2DiscoveryPluginMock extends Ec2DiscoveryPlugin {
199198
Ec2DiscoveryPluginMock(Settings settings) {
200199
super(settings, new AwsEc2ServiceImpl() {
201200
@Override
202-
AmazonEC2 buildClient(AWSCredentialsProvider credentials, ClientConfiguration configuration) {
203-
return new AmazonEC2Mock(credentials, configuration);
201+
AmazonEC2 buildClient(AWSCredentialsProvider credentials, ClientConfiguration configuration,
202+
String endpoint) {
203+
return new AmazonEC2Mock(credentials, configuration, endpoint);
204204
}
205205
});
206206
}
@@ -212,13 +212,9 @@ private static class AmazonEC2Mock extends AbstractAmazonEC2 {
212212
final AWSCredentialsProvider credentials;
213213
final ClientConfiguration configuration;
214214

215-
AmazonEC2Mock(AWSCredentialsProvider credentials, ClientConfiguration configuration) {
215+
AmazonEC2Mock(AWSCredentialsProvider credentials, ClientConfiguration configuration, String endpoint) {
216216
this.credentials = credentials;
217217
this.configuration = configuration;
218-
}
219-
220-
@Override
221-
public void setEndpoint(String endpoint) throws IllegalArgumentException {
222218
this.endpoint = endpoint;
223219
}
224220

plugins/repository-s3/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ esplugin {
3030
}
3131

3232
versions << [
33-
'aws': '1.11.636'
33+
'aws': '1.11.749'
3434
]
3535

3636
dependencies {

plugins/repository-s3/licenses/aws-java-sdk-core-1.11.636.jar.sha1

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)