|
56 | 56 | import java.util.stream.Collectors; |
57 | 57 | import java.util.stream.Stream; |
58 | 58 |
|
| 59 | +import com.amazon.opendistroforelasticsearch.security.ssl.rest.OpenDistroSecuritySSLReloadCertsAction; |
| 60 | +import com.amazon.opendistroforelasticsearch.security.ssl.rest.OpenDistroSecuritySSLCertsInfoAction; |
59 | 61 | import org.apache.lucene.search.QueryCachingPolicy; |
60 | 62 | import org.apache.lucene.search.Weight; |
61 | 63 | import org.bouncycastle.jce.provider.BouncyCastleProvider; |
@@ -178,6 +180,7 @@ public final class OpenDistroSecurityPlugin extends OpenDistroSecuritySSLPlugin |
178 | 180 | private final boolean tribeNodeClient; |
179 | 181 | private final boolean dlsFlsAvailable; |
180 | 182 | private final Constructor<?> dlsFlsConstructor; |
| 183 | + private boolean sslCertReloadEnabled; |
181 | 184 | private volatile OpenDistroSecurityRestFilter securityRestHandler; |
182 | 185 | private volatile OpenDistroSecurityInterceptor odsi; |
183 | 186 | private volatile PrivilegesEvaluator evaluator; |
@@ -218,30 +221,41 @@ private static boolean isDisabled(final Settings settings) { |
218 | 221 | private static boolean isSslOnlyMode(final Settings settings) { |
219 | 222 | return settings.getAsBoolean(ConfigConstants.OPENDISTRO_SECURITY_SSL_ONLY, false); |
220 | 223 | } |
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 | + |
222 | 234 | public OpenDistroSecurityPlugin(final Settings settings, final Path configPath) { |
223 | 235 | super(settings, configPath, isDisabled(settings)); |
224 | 236 |
|
225 | 237 | disabled = isDisabled(settings); |
| 238 | + sslCertReloadEnabled = isSslCertReloadEnabled(settings); |
226 | 239 |
|
227 | 240 | if(disabled) { |
228 | 241 | this.tribeNodeClient = false; |
229 | 242 | this.dlsFlsAvailable = false; |
230 | 243 | this.dlsFlsConstructor = null; |
231 | 244 | this.advancedModulesEnabled = false; |
232 | 245 | this.sslOnly = false; |
| 246 | + this.sslCertReloadEnabled = false; |
233 | 247 | complianceConfig = null; |
234 | 248 | log.warn("Open Distro Security plugin installed but disabled. This can expose your configuration (including passwords) to the public."); |
235 | 249 | return; |
236 | 250 | } |
237 | 251 |
|
238 | 252 | sslOnly = isSslOnlyMode(settings); |
239 | | - |
240 | 253 | if(sslOnly) { |
241 | 254 | this.tribeNodeClient = false; |
242 | 255 | this.dlsFlsAvailable = false; |
243 | 256 | this.dlsFlsConstructor = null; |
244 | 257 | this.advancedModulesEnabled = false; |
| 258 | + this.sslCertReloadEnabled = false; |
245 | 259 | complianceConfig = null; |
246 | 260 | log.warn("Open Distro Security plugin run in ssl only mode. No authentication or authorization is performed"); |
247 | 261 | return; |
@@ -452,9 +466,13 @@ public List<RestHandler> getRestHandlers(Settings settings, RestController restC |
452 | 466 | handlers.add(new OpenDistroSecurityInfoAction(settings, restController, Objects.requireNonNull(evaluator), Objects.requireNonNull(threadPool))); |
453 | 467 | handlers.add(new KibanaInfoAction(settings, restController, Objects.requireNonNull(evaluator), Objects.requireNonNull(threadPool))); |
454 | 468 | 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 | + } |
458 | 476 | Collection<RestHandler> apiHandler = ReflectionHelper |
459 | 477 | .instantiateMngtRestApiHandler(settings, configPath, restController, localClient, adminDns, cr, cs, Objects.requireNonNull(principalExtractor), evaluator, threadPool, Objects.requireNonNull(auditLog)); |
460 | 478 | handlers.addAll(apiHandler); |
@@ -983,6 +1001,7 @@ public List<Setting<?>> getSettings() { |
983 | 1001 |
|
984 | 1002 | settings.add(Setting.boolSetting(ConfigConstants.OPENDISTRO_SECURITY_UNSUPPORTED_ALLOW_NOW_IN_DLS, false, Property.NodeScope, Property.Filtered)); |
985 | 1003 | 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)); |
986 | 1005 | } |
987 | 1006 |
|
988 | 1007 | return settings; |
|
0 commit comments