Skip to content

Commit 4603a29

Browse files
authored
Adding deprecation info api checks for obsolete security settings (#76986)
This commit adds deprecation info API messages for three obsolete security settings which have been removed: "xpack.security.authc.accept_default_password", "xpack.security.authz.store.roles.index.cache.max_size", and "xpack.security.authz.store.roles.index.cache.ttl" Relates #42404 #40496
1 parent 121bd05 commit 4603a29

File tree

3 files changed

+99
-2
lines changed

3 files changed

+99
-2
lines changed

x-pack/plugin/deprecation/src/main/java/org/elasticsearch/xpack/deprecation/DeprecationChecks.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ private DeprecationChecks() {
9696
NodeDeprecationChecks::checkSingleDataNodeWatermarkSetting,
9797
NodeDeprecationChecks::checkImplicitlyDisabledSecurityOnBasicAndTrial,
9898
NodeDeprecationChecks::checkMonitoringExporterPassword,
99+
NodeDeprecationChecks::checkAcceptDefaultPasswordSetting,
100+
NodeDeprecationChecks::checkAcceptRolesCacheMaxSizeSetting,
101+
NodeDeprecationChecks::checkRolesCacheTTLSizeSetting,
99102
NodeDeprecationChecks::checkClusterRoutingAllocationIncludeRelocationsSetting
100103
)
101104
).collect(Collectors.toList());

x-pack/plugin/deprecation/src/main/java/org/elasticsearch/xpack/deprecation/NodeDeprecationChecks.java

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.elasticsearch.common.settings.Settings;
2222
import org.elasticsearch.common.util.concurrent.EsExecutors;
2323
import org.elasticsearch.common.util.set.Sets;
24+
import org.elasticsearch.core.TimeValue;
2425
import org.elasticsearch.env.Environment;
2526
import org.elasticsearch.jdk.JavaVersion;
2627
import org.elasticsearch.license.License;
@@ -31,6 +32,7 @@
3132
import org.elasticsearch.threadpool.FixedExecutorBuilder;
3233
import org.elasticsearch.transport.RemoteClusterService;
3334
import org.elasticsearch.xpack.core.XPackSettings;
35+
import org.elasticsearch.xpack.core.security.SecurityField;
3436
import org.elasticsearch.xpack.core.security.authc.RealmConfig;
3537
import org.elasticsearch.xpack.core.security.authc.RealmSettings;
3638
import org.elasticsearch.xpack.core.security.authc.esnative.NativeRealmSettings;
@@ -455,7 +457,13 @@ static DeprecationIssue checkRemovedSetting(final Settings settings,
455457
return null;
456458
}
457459
final String removedSettingKey = removedSetting.getKey();
458-
final String value = removedSetting.get(settings).toString();
460+
Object removedSettingValue = removedSetting.get(settings);
461+
String value;
462+
if (removedSettingValue instanceof TimeValue) {
463+
value = ((TimeValue) removedSettingValue).getStringRep();
464+
} else {
465+
value = removedSettingValue.toString();
466+
}
459467
final String message =
460468
String.format(Locale.ROOT, "setting [%s] is deprecated and will be removed in the next major version", removedSettingKey);
461469
final String details =
@@ -595,4 +603,38 @@ static DeprecationIssue checkClusterRoutingAllocationIncludeRelocationsSetting(f
595603
DeprecationIssue.Level.CRITICAL
596604
);
597605
}
606+
607+
static DeprecationIssue checkAcceptDefaultPasswordSetting(final Settings settings,
608+
final PluginsAndModules pluginsAndModules,
609+
final ClusterState clusterState,
610+
final XPackLicenseState licenseState) {
611+
return checkRemovedSetting(settings,
612+
Setting.boolSetting(SecurityField.setting("authc.accept_default_password"),true, Setting.Property.Deprecated),
613+
"https://www.elastic.co/guide/en/elasticsearch/reference/master/migrating-8.0.html#breaking_80_security_changes",
614+
DeprecationIssue.Level.CRITICAL
615+
);
616+
}
617+
618+
static DeprecationIssue checkAcceptRolesCacheMaxSizeSetting(final Settings settings,
619+
final PluginsAndModules pluginsAndModules,
620+
final ClusterState clusterState,
621+
final XPackLicenseState licenseState) {
622+
return checkRemovedSetting(settings,
623+
Setting.intSetting(SecurityField.setting("authz.store.roles.index.cache.max_size"), 10000, Setting.Property.Deprecated),
624+
"https://www.elastic.co/guide/en/elasticsearch/reference/master/migrating-8.0.html#breaking_80_security_changes",
625+
DeprecationIssue.Level.CRITICAL
626+
);
627+
}
628+
629+
static DeprecationIssue checkRolesCacheTTLSizeSetting(final Settings settings,
630+
final PluginsAndModules pluginsAndModules,
631+
final ClusterState clusterState,
632+
final XPackLicenseState licenseState) {
633+
return checkRemovedSetting(settings,
634+
Setting.timeSetting(SecurityField.setting("authz.store.roles.index.cache.ttl"), TimeValue.timeValueMinutes(20),
635+
Setting.Property.Deprecated),
636+
"https://www.elastic.co/guide/en/elasticsearch/reference/master/migrating-8.0.html#breaking_80_security_changes",
637+
DeprecationIssue.Level.CRITICAL
638+
);
639+
}
598640
}

x-pack/plugin/deprecation/src/test/java/org/elasticsearch/xpack/deprecation/NodeDeprecationChecksTests.java

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
import org.elasticsearch.common.util.concurrent.EsExecutors;
2222
import org.elasticsearch.core.Set;
2323
import org.elasticsearch.env.Environment;
24+
import org.elasticsearch.jdk.JavaVersion;
2425
import org.elasticsearch.license.License;
2526
import org.elasticsearch.license.XPackLicenseState;
26-
import org.elasticsearch.jdk.JavaVersion;
2727
import org.elasticsearch.node.Node;
2828
import org.elasticsearch.script.ScriptService;
2929
import org.elasticsearch.test.ESTestCase;
@@ -863,4 +863,56 @@ public void testImplicitlyConfiguredSecurityOnGoldPlus() {
863863
final List<DeprecationIssue> issues = getDeprecationIssues(settings, pluginsAndModules, licenseState);
864864
assertThat(issues, empty());
865865
}
866+
867+
private void checkSimpleSetting(String settingKey, String settingValue, String url, DeprecationChecks.NodeDeprecationCheck<Settings,
868+
PluginsAndModules, ClusterState, XPackLicenseState, DeprecationIssue> checkFunction) {
869+
final Settings nodeSettings =
870+
Settings.builder().put(settingKey, settingValue).build();
871+
final XPackLicenseState licenseState = new XPackLicenseState(Settings.EMPTY, () -> 0);
872+
final ClusterState clusterState = ClusterState.EMPTY_STATE;
873+
final DeprecationIssue expectedIssue = new DeprecationIssue(DeprecationIssue.Level.CRITICAL,
874+
String.format(Locale.ROOT,
875+
"setting [%s] is deprecated and will be removed in the next major version",
876+
settingKey),
877+
url,
878+
String.format(Locale.ROOT,
879+
"the setting [%s] is currently set to [%s], remove this setting",
880+
settingKey,
881+
settingValue),
882+
false,null
883+
);
884+
885+
assertThat(
886+
checkFunction.apply(nodeSettings, null, clusterState, licenseState),
887+
equalTo(expectedIssue)
888+
);
889+
890+
final String expectedWarning = String.format(Locale.ROOT,
891+
"[%s] setting was deprecated in Elasticsearch and will be removed in a future release! " +
892+
"See the breaking changes documentation for the next major version.",
893+
settingKey);
894+
895+
assertWarnings(expectedWarning);
896+
}
897+
898+
public void testCheckAcceptDefaultPasswordSetting() {
899+
String settingKey = "xpack.security.authc.accept_default_password";
900+
String settingValue = String.valueOf(randomBoolean());
901+
String url = "https://www.elastic.co/guide/en/elasticsearch/reference/master/migrating-8.0.html#breaking_80_security_changes";
902+
checkSimpleSetting(settingKey, settingValue, url, NodeDeprecationChecks::checkAcceptDefaultPasswordSetting);
903+
}
904+
905+
public void testCheckAcceptRolesCacheMaxSizeSetting() {
906+
String settingKey = "xpack.security.authz.store.roles.index.cache.max_size";
907+
String settingValue = String.valueOf(randomIntBetween(1, 10000));
908+
String url = "https://www.elastic.co/guide/en/elasticsearch/reference/master/migrating-8.0.html#breaking_80_security_changes";
909+
checkSimpleSetting(settingKey, settingValue, url, NodeDeprecationChecks::checkAcceptRolesCacheMaxSizeSetting);
910+
}
911+
912+
public void testCheckRolesCacheTTLSizeSetting() {
913+
String settingKey = "xpack.security.authz.store.roles.index.cache.ttl";
914+
String settingValue = randomPositiveTimeValue();
915+
String url = "https://www.elastic.co/guide/en/elasticsearch/reference/master/migrating-8.0.html#breaking_80_security_changes";
916+
checkSimpleSetting(settingKey, settingValue, url, NodeDeprecationChecks::checkRolesCacheTTLSizeSetting);
917+
}
866918
}

0 commit comments

Comments
 (0)