Skip to content

Commit a4afc22

Browse files
authored
Wrap getCredentials() in a doPrivileged() block (#23297)
This commit fixes an issue that was missed in #22534. `AWSCredentialsProvider.getCredentials()` appears to potentially open a socket connect. This operation needed to be wrapped in `doPrivileged()`. This should fix issue #23271.
1 parent 3e69c38 commit a4afc22

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

plugins/repository-s3/src/main/java/org/elasticsearch/cloud/aws/InternalAwsS3Service.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
import com.amazonaws.ClientConfiguration;
2727
import com.amazonaws.Protocol;
28+
import com.amazonaws.auth.AWSCredentials;
2829
import com.amazonaws.auth.AWSCredentialsProvider;
2930
import com.amazonaws.auth.BasicAWSCredentials;
3031
import com.amazonaws.auth.InstanceProfileCredentialsProvider;
@@ -35,6 +36,7 @@
3536
import com.amazonaws.services.s3.S3ClientOptions;
3637
import org.apache.logging.log4j.Logger;
3738
import org.elasticsearch.ElasticsearchException;
39+
import org.elasticsearch.cloud.aws.util.SocketAccess;
3840
import org.elasticsearch.common.Strings;
3941
import org.elasticsearch.common.collect.Tuple;
4042
import org.elasticsearch.common.component.AbstractLifecycleComponent;
@@ -141,22 +143,30 @@ static ClientConfiguration buildConfiguration(Logger logger, Settings repository
141143

142144
public static AWSCredentialsProvider buildCredentials(Logger logger, DeprecationLogger deprecationLogger,
143145
Settings settings, Settings repositorySettings, String clientName) {
144-
AWSCredentialsProvider credentials;
145146
try (SecureString key = getConfigValue(repositorySettings, settings, clientName, S3Repository.ACCESS_KEY_SETTING,
146147
S3Repository.Repository.KEY_SETTING, S3Repository.Repositories.KEY_SETTING);
147148
SecureString secret = getConfigValue(repositorySettings, settings, clientName, S3Repository.SECRET_KEY_SETTING,
148149
S3Repository.Repository.SECRET_SETTING, S3Repository.Repositories.SECRET_SETTING)) {
149150

150151
if (key.length() == 0 && secret.length() == 0) {
151152
logger.debug("Using instance profile credentials");
152-
credentials = new InstanceProfileCredentialsProvider();
153+
AWSCredentialsProvider credentials = new InstanceProfileCredentialsProvider();
154+
return new AWSCredentialsProvider() {
155+
@Override
156+
public AWSCredentials getCredentials() {
157+
return SocketAccess.doPrivileged(credentials::getCredentials);
158+
}
159+
160+
@Override
161+
public void refresh() {
162+
SocketAccess.doPrivilegedVoid(credentials::refresh);
163+
}
164+
};
153165
} else {
154166
logger.debug("Using basic key/secret credentials");
155-
credentials = new StaticCredentialsProvider(new BasicAWSCredentials(key.toString(), secret.toString()));
167+
return new StaticCredentialsProvider(new BasicAWSCredentials(key.toString(), secret.toString()));
156168
}
157169
}
158-
159-
return credentials;
160170
}
161171

162172
// pkg private for tests

0 commit comments

Comments
 (0)