|
49 | 49 | import java.util.stream.Stream; |
50 | 50 |
|
51 | 51 | import org.apache.lucene.index.DirectoryReader; |
| 52 | +import com.amazon.opendistroforelasticsearch.security.ssl.rest.OpenDistroSecuritySSLReloadCertsAction; |
| 53 | +import com.amazon.opendistroforelasticsearch.security.ssl.rest.OpenDistroSecuritySSLCertsInfoAction; |
52 | 54 | import org.apache.lucene.search.QueryCachingPolicy; |
53 | 55 | import org.apache.lucene.search.Weight; |
54 | 56 | import org.bouncycastle.jce.provider.BouncyCastleProvider; |
@@ -168,6 +170,7 @@ public final class OpenDistroSecurityPlugin extends OpenDistroSecuritySSLPlugin |
168 | 170 | private static final String KEYWORD = ".keyword"; |
169 | 171 | private final boolean dlsFlsAvailable; |
170 | 172 | private final Constructor<?> dlsFlsConstructor; |
| 173 | + private boolean sslCertReloadEnabled; |
171 | 174 | private volatile OpenDistroSecurityRestFilter securityRestHandler; |
172 | 175 | private volatile OpenDistroSecurityInterceptor odsi; |
173 | 176 | private volatile PrivilegesEvaluator evaluator; |
@@ -210,28 +213,40 @@ private static boolean isDisabled(final Settings settings) { |
210 | 213 | private static boolean isSslOnlyMode(final Settings settings) { |
211 | 214 | return settings.getAsBoolean(ConfigConstants.OPENDISTRO_SECURITY_SSL_ONLY, false); |
212 | 215 | } |
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 | + |
214 | 226 | public OpenDistroSecurityPlugin(final Settings settings, final Path configPath) { |
215 | 227 | super(settings, configPath, isDisabled(settings)); |
216 | 228 |
|
217 | 229 | disabled = isDisabled(settings); |
| 230 | + sslCertReloadEnabled = isSslCertReloadEnabled(settings); |
218 | 231 |
|
219 | 232 | if (disabled) { |
220 | 233 | this.dlsFlsAvailable = false; |
221 | 234 | this.dlsFlsConstructor = null; |
222 | 235 | this.advancedModulesEnabled = false; |
223 | 236 | this.sslOnly = false; |
| 237 | + this.sslCertReloadEnabled = false; |
224 | 238 | complianceConfig = null; |
225 | 239 | log.warn("Open Distro Security plugin installed but disabled. This can expose your configuration (including passwords) to the public."); |
226 | 240 | return; |
227 | 241 | } |
228 | 242 |
|
229 | 243 | sslOnly = isSslOnlyMode(settings); |
230 | | - |
| 244 | + |
231 | 245 | if (sslOnly) { |
232 | 246 | this.dlsFlsAvailable = false; |
233 | 247 | this.dlsFlsConstructor = null; |
234 | 248 | this.advancedModulesEnabled = false; |
| 249 | + this.sslCertReloadEnabled = false; |
235 | 250 | complianceConfig = null; |
236 | 251 | log.warn("Open Distro Security plugin run in ssl only mode. No authentication or authorization is performed"); |
237 | 252 | return; |
@@ -433,9 +448,13 @@ public List<RestHandler> getRestHandlers(Settings settings, RestController restC |
433 | 448 | handlers.add(new OpenDistroSecurityInfoAction(settings, restController, Objects.requireNonNull(evaluator), Objects.requireNonNull(threadPool))); |
434 | 449 | handlers.add(new KibanaInfoAction(settings, restController, Objects.requireNonNull(evaluator), Objects.requireNonNull(threadPool))); |
435 | 450 | 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 | + } |
439 | 458 | Collection<RestHandler> apiHandler = ReflectionHelper |
440 | 459 | .instantiateMngtRestApiHandler(settings, configPath, restController, localClient, adminDns, cr, cs, Objects.requireNonNull(principalExtractor), evaluator, threadPool, Objects.requireNonNull(auditLog)); |
441 | 460 | handlers.addAll(apiHandler); |
@@ -965,6 +984,7 @@ public List<Setting<?>> getSettings() { |
965 | 984 | settings.add(Setting.boolSetting(ConfigConstants.OPENDISTRO_SECURITY_UNSUPPORTED_ALLOW_NOW_IN_DLS, false, Property.NodeScope, Property.Filtered)); |
966 | 985 | settings.add(Setting.boolSetting(ConfigConstants.OPENDISTRO_SECURITY_UNSUPPORTED_RESTAPI_ALLOW_SECURITYCONFIG_MODIFICATION, false, Property.NodeScope, Property.Filtered)); |
967 | 986 | 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)); |
968 | 988 | } |
969 | 989 |
|
970 | 990 | return settings; |
|
0 commit comments