Skip to content

Commit 59e4e09

Browse files
authored
Merge pull request #263 from debjanibnrj/master
Adding capability to hot reload ssl certificates
2 parents 292e96e + db97ce7 commit 59e4e09

23 files changed

+1542
-309
lines changed

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

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
import java.util.stream.Stream;
5050

5151
import org.apache.lucene.index.DirectoryReader;
52+
import com.amazon.opendistroforelasticsearch.security.ssl.rest.OpenDistroSecuritySSLReloadCertsAction;
53+
import com.amazon.opendistroforelasticsearch.security.ssl.rest.OpenDistroSecuritySSLCertsInfoAction;
5254
import org.apache.lucene.search.QueryCachingPolicy;
5355
import org.apache.lucene.search.Weight;
5456
import org.bouncycastle.jce.provider.BouncyCastleProvider;
@@ -168,6 +170,7 @@ public final class OpenDistroSecurityPlugin extends OpenDistroSecuritySSLPlugin
168170
private static final String KEYWORD = ".keyword";
169171
private final boolean dlsFlsAvailable;
170172
private final Constructor<?> dlsFlsConstructor;
173+
private boolean sslCertReloadEnabled;
171174
private volatile OpenDistroSecurityRestFilter securityRestHandler;
172175
private volatile OpenDistroSecurityInterceptor odsi;
173176
private volatile PrivilegesEvaluator evaluator;
@@ -210,28 +213,40 @@ private static boolean isDisabled(final Settings settings) {
210213
private static boolean isSslOnlyMode(final Settings settings) {
211214
return settings.getAsBoolean(ConfigConstants.OPENDISTRO_SECURITY_SSL_ONLY, false);
212215
}
213-
216+
217+
/**
218+
* SSL Cert Reload will be enabled only if security is not disabled and not in we are not using sslOnly mode.
219+
* @param settings Elastic configuration settings
220+
* @return true if ssl cert reload is enabled else false
221+
*/
222+
private static boolean isSslCertReloadEnabled(final Settings settings) {
223+
return settings.getAsBoolean(ConfigConstants.OPENDISTRO_SECURITY_SSL_CERT_RELOAD_ENABLED, false);
224+
}
225+
214226
public OpenDistroSecurityPlugin(final Settings settings, final Path configPath) {
215227
super(settings, configPath, isDisabled(settings));
216228

217229
disabled = isDisabled(settings);
230+
sslCertReloadEnabled = isSslCertReloadEnabled(settings);
218231

219232
if (disabled) {
220233
this.dlsFlsAvailable = false;
221234
this.dlsFlsConstructor = null;
222235
this.advancedModulesEnabled = false;
223236
this.sslOnly = false;
237+
this.sslCertReloadEnabled = false;
224238
complianceConfig = null;
225239
log.warn("Open Distro Security plugin installed but disabled. This can expose your configuration (including passwords) to the public.");
226240
return;
227241
}
228242

229243
sslOnly = isSslOnlyMode(settings);
230-
244+
231245
if (sslOnly) {
232246
this.dlsFlsAvailable = false;
233247
this.dlsFlsConstructor = null;
234248
this.advancedModulesEnabled = false;
249+
this.sslCertReloadEnabled = false;
235250
complianceConfig = null;
236251
log.warn("Open Distro Security plugin run in ssl only mode. No authentication or authorization is performed");
237252
return;
@@ -433,9 +448,13 @@ public List<RestHandler> getRestHandlers(Settings settings, RestController restC
433448
handlers.add(new OpenDistroSecurityInfoAction(settings, restController, Objects.requireNonNull(evaluator), Objects.requireNonNull(threadPool)));
434449
handlers.add(new KibanaInfoAction(settings, restController, Objects.requireNonNull(evaluator), Objects.requireNonNull(threadPool)));
435450
handlers.add(new OpenDistroSecurityHealthAction(settings, restController, Objects.requireNonNull(backendRegistry)));
436-
handlers.add(new TenantInfoAction(settings, restController, Objects.requireNonNull(evaluator), Objects.requireNonNull(threadPool),
437-
Objects.requireNonNull(cs), Objects.requireNonNull(adminDns)));
438-
451+
handlers.add(new OpenDistroSecuritySSLCertsInfoAction(settings, restController, odsks, Objects.requireNonNull(threadPool), Objects.requireNonNull(adminDns)));
452+
handlers.add(new TenantInfoAction(settings, restController, Objects.requireNonNull(evaluator), Objects.requireNonNull(threadPool),
453+
Objects.requireNonNull(cs), Objects.requireNonNull(adminDns)));
454+
455+
if (sslCertReloadEnabled) {
456+
handlers.add(new OpenDistroSecuritySSLReloadCertsAction(settings, restController, odsks, Objects.requireNonNull(threadPool), Objects.requireNonNull(adminDns)));
457+
}
439458
Collection<RestHandler> apiHandler = ReflectionHelper
440459
.instantiateMngtRestApiHandler(settings, configPath, restController, localClient, adminDns, cr, cs, Objects.requireNonNull(principalExtractor), evaluator, threadPool, Objects.requireNonNull(auditLog));
441460
handlers.addAll(apiHandler);
@@ -965,6 +984,7 @@ public List<Setting<?>> getSettings() {
965984
settings.add(Setting.boolSetting(ConfigConstants.OPENDISTRO_SECURITY_UNSUPPORTED_ALLOW_NOW_IN_DLS, false, Property.NodeScope, Property.Filtered));
966985
settings.add(Setting.boolSetting(ConfigConstants.OPENDISTRO_SECURITY_UNSUPPORTED_RESTAPI_ALLOW_SECURITYCONFIG_MODIFICATION, false, Property.NodeScope, Property.Filtered));
967986
settings.add(Setting.boolSetting(ConfigConstants.OPENDISTRO_SECURITY_UNSUPPORTED_LOAD_STATIC_RESOURCES, true, Property.NodeScope, Property.Filtered));
987+
settings.add(Setting.boolSetting(ConfigConstants.OPENDISTRO_SECURITY_SSL_CERT_RELOAD_ENABLED, false, Property.NodeScope, Property.Filtered));
968988
}
969989

970990
return settings;

0 commit comments

Comments
 (0)