Skip to content

Commit 76111fd

Browse files
authored
Merge pull request #269 from debjanibnrj/opendistro-0.10
Adding capability to hot reload ssl certificates
2 parents a6b1454 + 544a56c commit 76111fd

23 files changed

+1564
-337
lines changed

src/main/java/com/amazon/opendistroforelasticsearch/security/OpenDistroSecurityPlugin.java

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@
5656
import java.util.stream.Collectors;
5757
import java.util.stream.Stream;
5858

59+
import com.amazon.opendistroforelasticsearch.security.ssl.rest.OpenDistroSecuritySSLReloadCertsAction;
60+
import com.amazon.opendistroforelasticsearch.security.ssl.rest.OpenDistroSecuritySSLCertsInfoAction;
5961
import org.apache.lucene.search.QueryCachingPolicy;
6062
import org.apache.lucene.search.Weight;
6163
import org.bouncycastle.jce.provider.BouncyCastleProvider;
@@ -178,6 +180,7 @@ public final class OpenDistroSecurityPlugin extends OpenDistroSecuritySSLPlugin
178180
private final boolean tribeNodeClient;
179181
private final boolean dlsFlsAvailable;
180182
private final Constructor<?> dlsFlsConstructor;
183+
private boolean sslCertReloadEnabled;
181184
private volatile OpenDistroSecurityRestFilter securityRestHandler;
182185
private volatile OpenDistroSecurityInterceptor odsi;
183186
private volatile PrivilegesEvaluator evaluator;
@@ -218,30 +221,41 @@ private static boolean isDisabled(final Settings settings) {
218221
private static boolean isSslOnlyMode(final Settings settings) {
219222
return settings.getAsBoolean(ConfigConstants.OPENDISTRO_SECURITY_SSL_ONLY, false);
220223
}
221-
224+
225+
/**
226+
* SSL Cert Reload will be enabled only if security is not disabled and not in we are not using sslOnly mode.
227+
* @param settings Elastic configuration settings
228+
* @return true if ssl cert reload is enabled else false
229+
*/
230+
private static boolean isSslCertReloadEnabled(final Settings settings) {
231+
return settings.getAsBoolean(ConfigConstants.OPENDISTRO_SECURITY_SSL_CERT_RELOAD_ENABLED, false);
232+
}
233+
222234
public OpenDistroSecurityPlugin(final Settings settings, final Path configPath) {
223235
super(settings, configPath, isDisabled(settings));
224236

225237
disabled = isDisabled(settings);
238+
sslCertReloadEnabled = isSslCertReloadEnabled(settings);
226239

227240
if(disabled) {
228241
this.tribeNodeClient = false;
229242
this.dlsFlsAvailable = false;
230243
this.dlsFlsConstructor = null;
231244
this.advancedModulesEnabled = false;
232245
this.sslOnly = false;
246+
this.sslCertReloadEnabled = false;
233247
complianceConfig = null;
234248
log.warn("Open Distro Security plugin installed but disabled. This can expose your configuration (including passwords) to the public.");
235249
return;
236250
}
237251

238252
sslOnly = isSslOnlyMode(settings);
239-
240253
if(sslOnly) {
241254
this.tribeNodeClient = false;
242255
this.dlsFlsAvailable = false;
243256
this.dlsFlsConstructor = null;
244257
this.advancedModulesEnabled = false;
258+
this.sslCertReloadEnabled = false;
245259
complianceConfig = null;
246260
log.warn("Open Distro Security plugin run in ssl only mode. No authentication or authorization is performed");
247261
return;
@@ -452,9 +466,13 @@ public List<RestHandler> getRestHandlers(Settings settings, RestController restC
452466
handlers.add(new OpenDistroSecurityInfoAction(settings, restController, Objects.requireNonNull(evaluator), Objects.requireNonNull(threadPool)));
453467
handlers.add(new KibanaInfoAction(settings, restController, Objects.requireNonNull(evaluator), Objects.requireNonNull(threadPool)));
454468
handlers.add(new OpenDistroSecurityHealthAction(settings, restController, Objects.requireNonNull(backendRegistry)));
455-
handlers.add(new TenantInfoAction(settings, restController, Objects.requireNonNull(evaluator), Objects.requireNonNull(threadPool),
456-
Objects.requireNonNull(cs), Objects.requireNonNull(adminDns)));
457-
469+
handlers.add(new OpenDistroSecuritySSLCertsInfoAction(settings, restController, odsks, Objects.requireNonNull(threadPool), Objects.requireNonNull(adminDns)));
470+
handlers.add(new TenantInfoAction(settings, restController, Objects.requireNonNull(evaluator), Objects.requireNonNull(threadPool),
471+
Objects.requireNonNull(cs), Objects.requireNonNull(adminDns)));
472+
473+
if (sslCertReloadEnabled) {
474+
handlers.add(new OpenDistroSecuritySSLReloadCertsAction(settings, restController, odsks, Objects.requireNonNull(threadPool), Objects.requireNonNull(adminDns)));
475+
}
458476
Collection<RestHandler> apiHandler = ReflectionHelper
459477
.instantiateMngtRestApiHandler(settings, configPath, restController, localClient, adminDns, cr, cs, Objects.requireNonNull(principalExtractor), evaluator, threadPool, Objects.requireNonNull(auditLog));
460478
handlers.addAll(apiHandler);
@@ -983,6 +1001,7 @@ public List<Setting<?>> getSettings() {
9831001

9841002
settings.add(Setting.boolSetting(ConfigConstants.OPENDISTRO_SECURITY_UNSUPPORTED_ALLOW_NOW_IN_DLS, false, Property.NodeScope, Property.Filtered));
9851003
settings.add(Setting.boolSetting(ConfigConstants.OPENDISTRO_SECURITY_UNSUPPORTED_RESTAPI_ALLOW_SECURITYCONFIG_MODIFICATION, false, Property.NodeScope, Property.Filtered));
1004+
settings.add(Setting.boolSetting(ConfigConstants.OPENDISTRO_SECURITY_SSL_CERT_RELOAD_ENABLED, false, Property.NodeScope, Property.Filtered));
9861005
}
9871006

9881007
return settings;

0 commit comments

Comments
 (0)