Skip to content

Commit bacfeab

Browse files
authored
Merge branch 'main' into resource-type-setting
Signed-off-by: Craig Perkins <[email protected]>
2 parents 92980f6 + 4abe750 commit bacfeab

File tree

7 files changed

+61
-12
lines changed

7 files changed

+61
-12
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
1616
- [Resource Sharing] Adds API to provide dashboards support for resource access management ([#5597](https://github.com/opensearch-project/security/pull/5597))
1717
- Direct JWKS (JSON Web Key Set) support in the JWT authentication backend ([#5578](https://github.com/opensearch-project/security/pull/5578))
1818
- Adds a list setting to explicitly specify resources to be protected ([#5671](https://github.com/opensearch-project/security/pull/5671))
19-
19+
- Make configuration setting for user custom attribute serialization dynamic ([#5657](https://github.com/opensearch-project/security/pull/5657))
2020

2121
### Bug Fixes
2222

src/main/java/org/opensearch/security/OpenSearchSecurityPlugin.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2282,14 +2282,7 @@ public List<Setting<?>> getSettings() {
22822282
)
22832283
);
22842284

2285-
settings.add(
2286-
Setting.boolSetting(
2287-
ConfigConstants.USER_ATTRIBUTE_SERIALIZATION_ENABLED,
2288-
ConfigConstants.USER_ATTRIBUTE_SERIALIZATION_ENABLED_DEFAULT,
2289-
Property.NodeScope,
2290-
Property.Filtered
2291-
)
2292-
);
2285+
settings.add(SecuritySettings.USER_ATTRIBUTE_SERIALIZATION_ENABLED_SETTING);
22932286
}
22942287

22952288
return settings;
@@ -2303,7 +2296,18 @@ public List<String> getSettingsFilter() {
23032296
return settingsFilter;
23042297
}
23052298
settingsFilter.add("opendistro_security.*");
2306-
settingsFilter.add("plugins.security.*");
2299+
settingsFilter.add("plugins.security.transport_user_cache.*");
2300+
settingsFilter.add("plugins.security.nodes_dn.*");
2301+
settingsFilter.add("plugins.security.restapi.*");
2302+
settingsFilter.add("plugins.security.ssl.*");
2303+
settingsFilter.add("plugins.security.config_version.*");
2304+
settingsFilter.add("plugins.security.nodes_dn_dynamic_config_enabled.*");
2305+
settingsFilter.add("plugins.security.privileges_evaluation.*");
2306+
settingsFilter.add("plugins.security.authcz.*");
2307+
settingsFilter.add("plugins.security.password.*");
2308+
settingsFilter.add("plugins.security.unsupported.*");
2309+
settingsFilter.add("plugins.security.audit.*");
2310+
settingsFilter.add("plugins.security.compliance.*");
23072311
return settingsFilter;
23082312
}
23092313

src/main/java/org/opensearch/security/privileges/PrivilegesEvaluator.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
import org.opensearch.cluster.metadata.IndexNameExpressionResolver;
8181
import org.opensearch.cluster.metadata.Metadata;
8282
import org.opensearch.cluster.service.ClusterService;
83+
import org.opensearch.common.settings.ClusterSettings;
8384
import org.opensearch.common.settings.Settings;
8485
import org.opensearch.common.util.concurrent.ThreadContext;
8586
import org.opensearch.core.common.Strings;
@@ -105,6 +106,7 @@
105106
import org.opensearch.security.securityconf.impl.v7.TenantV7;
106107
import org.opensearch.security.support.Base64Helper;
107108
import org.opensearch.security.support.ConfigConstants;
109+
import org.opensearch.security.support.SecuritySettings;
108110
import org.opensearch.security.support.WildcardMatcher;
109111
import org.opensearch.security.user.User;
110112
import org.opensearch.tasks.Task;
@@ -153,6 +155,7 @@ public class PrivilegesEvaluator {
153155
private PrivilegesInterceptor privilegesInterceptor;
154156

155157
private final boolean checkSnapshotRestoreWritePrivileges;
158+
private boolean isUserAttributeSerializationEnabled;
156159

157160
private final ClusterInfoHolder clusterInfoHolder;
158161
private final ConfigurationRepository configurationRepository;
@@ -204,6 +207,10 @@ public PrivilegesEvaluator(
204207
ConfigConstants.SECURITY_CHECK_SNAPSHOT_RESTORE_WRITE_PRIVILEGES,
205208
ConfigConstants.SECURITY_DEFAULT_CHECK_SNAPSHOT_RESTORE_WRITE_PRIVILEGES
206209
);
210+
this.isUserAttributeSerializationEnabled = settings.getAsBoolean(
211+
USER_ATTRIBUTE_SERIALIZATION_ENABLED,
212+
USER_ATTRIBUTE_SERIALIZATION_ENABLED_DEFAULT
213+
);
207214

208215
this.clusterInfoHolder = clusterInfoHolder;
209216
this.irr = irr;
@@ -236,6 +243,8 @@ public PrivilegesEvaluator(
236243
actionPrivileges.clusterStateMetadataDependentPrivileges().updateClusterStateMetadataAsync(clusterService, threadPool);
237244
}
238245
});
246+
247+
this.registerClusterSettingsChangeListener(clusterService.getClusterSettings());
239248
}
240249
}
241250

@@ -286,8 +295,17 @@ public boolean isInitialized() {
286295
return configModel != null && dcm != null && actionPrivileges.get() != null;
287296
}
288297

298+
public void registerClusterSettingsChangeListener(final ClusterSettings clusterSettings) {
299+
clusterSettings.addSettingsUpdateConsumer(
300+
SecuritySettings.USER_ATTRIBUTE_SERIALIZATION_ENABLED_SETTING,
301+
newIsUserAttributeSerializationEnabled -> {
302+
isUserAttributeSerializationEnabled = newIsUserAttributeSerializationEnabled;
303+
}
304+
);
305+
}
306+
289307
private boolean isUserAttributeSerializationEnabled() {
290-
return this.settings.getAsBoolean(USER_ATTRIBUTE_SERIALIZATION_ENABLED, USER_ATTRIBUTE_SERIALIZATION_ENABLED_DEFAULT);
308+
return isUserAttributeSerializationEnabled;
291309
}
292310

293311
private void setUserInfoInThreadContext(PrivilegesEvaluationContext context) {

src/main/java/org/opensearch/security/ssl/OpenSearchSecuritySSLPlugin.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,18 @@ public Settings additionalSettings() {
693693
public List<String> getSettingsFilter() {
694694
List<String> settingsFilter = new ArrayList<>();
695695
settingsFilter.add("opendistro_security.*");
696-
settingsFilter.add("plugins.security.*");
696+
settingsFilter.add("plugins.security.transport_user_cache.*");
697+
settingsFilter.add("plugins.security.nodes_dn.*");
698+
settingsFilter.add("plugins.security.restapi.*");
699+
settingsFilter.add("plugins.security.ssl.*");
700+
settingsFilter.add("plugins.security.config_version.*");
701+
settingsFilter.add("plugins.security.nodes_dn_dynamic_config_enabled.*");
702+
settingsFilter.add("plugins.security.privileges_evaluation.*");
703+
settingsFilter.add("plugins.security.authcz.*");
704+
settingsFilter.add("plugins.security.password.*");
705+
settingsFilter.add("plugins.security.unsupported.*");
706+
settingsFilter.add("plugins.security.audit.*");
707+
settingsFilter.add("plugins.security.compliance.*");
697708
return settingsFilter;
698709
}
699710

src/main/java/org/opensearch/security/support/SecuritySettings.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,10 @@ public class SecuritySettings {
3636
Setting.Property.Dynamic
3737
); // Not filtered
3838

39+
public static final Setting<Boolean> USER_ATTRIBUTE_SERIALIZATION_ENABLED_SETTING = Setting.boolSetting(
40+
ConfigConstants.USER_ATTRIBUTE_SERIALIZATION_ENABLED,
41+
ConfigConstants.USER_ATTRIBUTE_SERIALIZATION_ENABLED_DEFAULT,
42+
Setting.Property.NodeScope,
43+
Setting.Property.Dynamic
44+
); // Not filtered
3945
}

src/test/java/org/opensearch/security/privileges/PrivilegesEvaluatorUnitTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
package org.opensearch.security.privileges;
1010

1111
import java.util.List;
12+
import java.util.Set;
1213
import java.util.function.Supplier;
1314

1415
import com.google.common.collect.ImmutableList;
@@ -20,6 +21,7 @@
2021
import org.opensearch.cluster.ClusterState;
2122
import org.opensearch.cluster.metadata.IndexNameExpressionResolver;
2223
import org.opensearch.cluster.service.ClusterService;
24+
import org.opensearch.common.settings.ClusterSettings;
2325
import org.opensearch.common.settings.Settings;
2426
import org.opensearch.common.util.concurrent.ThreadContext;
2527
import org.opensearch.core.xcontent.NamedXContentRegistry;
@@ -36,6 +38,7 @@
3638
import static org.hamcrest.Matchers.equalTo;
3739
import static org.opensearch.security.privileges.PrivilegesEvaluator.DNFOF_MATCHER;
3840
import static org.opensearch.security.privileges.PrivilegesEvaluator.isClusterPerm;
41+
import static org.opensearch.security.support.SecuritySettings.USER_ATTRIBUTE_SERIALIZATION_ENABLED_SETTING;
3942
import static org.junit.Assert.assertFalse;
4043
import static org.junit.Assert.assertThrows;
4144
import static org.junit.Assert.assertTrue;
@@ -160,6 +163,10 @@ public void setUp() {
160163
clusterStateSupplier = () -> clusterState;
161164
threadContext = new ThreadContext(Settings.EMPTY);
162165

166+
when(clusterService.getClusterSettings()).thenReturn(
167+
new ClusterSettings(Settings.EMPTY, Set.of(USER_ATTRIBUTE_SERIALIZATION_ENABLED_SETTING))
168+
);
169+
163170
privilegesEvaluator = new PrivilegesEvaluator(
164171
clusterService,
165172
clusterStateSupplier,

src/test/java/org/opensearch/security/privileges/RestLayerPrivilegesEvaluatorTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.opensearch.cluster.metadata.Metadata;
3030
import org.opensearch.cluster.node.DiscoveryNode;
3131
import org.opensearch.cluster.service.ClusterService;
32+
import org.opensearch.common.settings.ClusterSettings;
3233
import org.opensearch.common.settings.Settings;
3334
import org.opensearch.common.util.concurrent.ThreadContext;
3435
import org.opensearch.security.auditlog.NullAuditLog;
@@ -47,6 +48,7 @@
4748

4849
import static org.hamcrest.MatcherAssert.assertThat;
4950
import static org.hamcrest.Matchers.equalTo;
51+
import static org.opensearch.security.support.SecuritySettings.USER_ATTRIBUTE_SERIALIZATION_ENABLED_SETTING;
5052
import static org.junit.Assert.assertThrows;
5153
import static org.mockito.Mockito.mock;
5254
import static org.mockito.Mockito.when;
@@ -78,6 +80,7 @@ public void setUp() {
7880
setLoggingLevel(Level.DEBUG); // Enable debug logging scenarios for verification
7981
ClusterState clusterState = mock(ClusterState.class);
8082
when(clusterService.state()).thenReturn(clusterState);
83+
when(clusterService.getClusterSettings()).thenReturn(new ClusterSettings(Settings.EMPTY, Set.of(USER_ATTRIBUTE_SERIALIZATION_ENABLED_SETTING)));
8184
Metadata metadata = mock(Metadata.class);
8285
when(clusterState.metadata()).thenReturn(metadata);
8386
when(metadata.getIndicesLookup()).thenReturn(new TreeMap<>());

0 commit comments

Comments
 (0)