Skip to content

Commit 869cd6c

Browse files
authored
Add FIPS 140 mode to XPack Usage API (#47278)
This change adds support for the FIPS 140 mode feature to be retrieved via the XPack Usage API.
1 parent 67ec986 commit 869cd6c

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/SecurityFeatureSetUsage.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public class SecurityFeatureSetUsage extends XPackFeatureSet.Usage {
2727
private static final String AUDIT_XFIELD = "audit";
2828
private static final String IP_FILTER_XFIELD = "ipfilter";
2929
private static final String ANONYMOUS_XFIELD = "anonymous";
30+
private static final String FIPS_140_XFIELD = "fips_140";
3031

3132
private Map<String, Object> realmsUsage;
3233
private Map<String, Object> rolesStoreUsage;
@@ -37,6 +38,7 @@ public class SecurityFeatureSetUsage extends XPackFeatureSet.Usage {
3738
private Map<String, Object> ipFilterUsage;
3839
private Map<String, Object> anonymousUsage;
3940
private Map<String, Object> roleMappingStoreUsage;
41+
private Map<String, Object> fips140Usage;
4042

4143
public SecurityFeatureSetUsage(StreamInput in) throws IOException {
4244
super(in);
@@ -51,13 +53,17 @@ public SecurityFeatureSetUsage(StreamInput in) throws IOException {
5153
ipFilterUsage = in.readMap();
5254
anonymousUsage = in.readMap();
5355
roleMappingStoreUsage = in.readMap();
56+
if (in.getVersion().onOrAfter(Version.V_7_5_0)) {
57+
fips140Usage = in.readMap();
58+
}
5459
}
5560

5661
public SecurityFeatureSetUsage(boolean available, boolean enabled, Map<String, Object> realmsUsage,
5762
Map<String, Object> rolesStoreUsage, Map<String, Object> roleMappingStoreUsage,
5863
Map<String, Object> sslUsage, Map<String, Object> auditUsage,
5964
Map<String, Object> ipFilterUsage, Map<String, Object> anonymousUsage,
60-
Map<String, Object> tokenServiceUsage, Map<String, Object> apiKeyServiceUsage) {
65+
Map<String, Object> tokenServiceUsage, Map<String, Object> apiKeyServiceUsage,
66+
Map<String, Object> fips140Usage) {
6167
super(XPackField.SECURITY, available, enabled);
6268
this.realmsUsage = realmsUsage;
6369
this.rolesStoreUsage = rolesStoreUsage;
@@ -68,6 +74,7 @@ public SecurityFeatureSetUsage(boolean available, boolean enabled, Map<String, O
6874
this.auditUsage = auditUsage;
6975
this.ipFilterUsage = ipFilterUsage;
7076
this.anonymousUsage = anonymousUsage;
77+
this.fips140Usage = fips140Usage;
7178
}
7279

7380
@Override
@@ -84,6 +91,9 @@ public void writeTo(StreamOutput out) throws IOException {
8491
out.writeMap(ipFilterUsage);
8592
out.writeMap(anonymousUsage);
8693
out.writeMap(roleMappingStoreUsage);
94+
if (out.getVersion().onOrAfter(Version.V_7_5_0)) {
95+
out.writeMap(fips140Usage);
96+
}
8797
}
8898

8999
@Override
@@ -99,6 +109,7 @@ protected void innerXContent(XContentBuilder builder, Params params) throws IOEx
99109
builder.field(AUDIT_XFIELD, auditUsage);
100110
builder.field(IP_FILTER_XFIELD, ipFilterUsage);
101111
builder.field(ANONYMOUS_XFIELD, anonymousUsage);
112+
builder.field(FIPS_140_XFIELD, fips140Usage);
102113
} else if (sslUsage.isEmpty() == false) {
103114
// A trial (or basic) license can have SSL without security.
104115
// This is because security defaults to disabled on that license, but that dynamic-default does not disable SSL.

x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/SecurityUsageTransportAction.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939

4040
import static java.util.Collections.singletonMap;
4141
import static org.elasticsearch.xpack.core.XPackSettings.API_KEY_SERVICE_ENABLED_SETTING;
42+
import static org.elasticsearch.xpack.core.XPackSettings.FIPS_MODE_ENABLED;
4243
import static org.elasticsearch.xpack.core.XPackSettings.HTTP_SSL_ENABLED;
4344
import static org.elasticsearch.xpack.core.XPackSettings.TOKEN_SERVICE_ENABLED_SETTING;
4445
import static org.elasticsearch.xpack.core.XPackSettings.TRANSPORT_SSL_ENABLED;
@@ -77,6 +78,7 @@ protected void masterOperation(Task task, XPackUsageRequest request, ClusterStat
7778
Map<String, Object> auditUsage = auditUsage(settings);
7879
Map<String, Object> ipFilterUsage = ipFilterUsage(ipFilter);
7980
Map<String, Object> anonymousUsage = singletonMap("enabled", AnonymousUser.isAnonymousEnabled(settings));
81+
Map<String, Object> fips140Usage = fips140Usage(settings);
8082

8183
final AtomicReference<Map<String, Object>> rolesUsageRef = new AtomicReference<>();
8284
final AtomicReference<Map<String, Object>> roleMappingUsageRef = new AtomicReference<>();
@@ -87,7 +89,7 @@ protected void masterOperation(Task task, XPackUsageRequest request, ClusterStat
8789
boolean enabled = enabledInSettings && licenseState.isSecurityDisabledByLicenseDefaults() == false;
8890
var usage = new SecurityFeatureSetUsage(licenseState.isSecurityAvailable(), enabled,
8991
realmsUsageRef.get(), rolesUsageRef.get(), roleMappingUsageRef.get(), sslUsage, auditUsage,
90-
ipFilterUsage, anonymousUsage, tokenServiceUsage, apiKeyServiceUsage);
92+
ipFilterUsage, anonymousUsage, tokenServiceUsage, apiKeyServiceUsage, fips140Usage);
9193
listener.onResponse(new XPackUsageFeatureResponse(usage));
9294
}
9395
};
@@ -168,4 +170,8 @@ static Map<String, Object> ipFilterUsage(@Nullable IPFilter ipFilter) {
168170
}
169171
return ipFilter.usageStats();
170172
}
173+
174+
static Map<String, Object> fips140Usage(Settings settings) {
175+
return singletonMap("enabled", FIPS_MODE_ENABLED.get(settings));
176+
}
171177
}

x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/SecurityInfoTransportActionTests.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,11 @@ public void testUsage() throws Exception {
152152
settings.put(AnonymousUser.ROLES_SETTING.getKey(), "foo");
153153
}
154154

155+
final boolean fips140Enabled = randomBoolean();
156+
if (fips140Enabled) {
157+
settings.put("xpack.security.fips_mode.enabled", true);
158+
}
159+
155160
var usageAction = newUsageAction(settings.build());
156161
PlainActionFuture<XPackUsageFeatureResponse> future = new PlainActionFuture<>();
157162
usageAction.masterOperation(null, null, null, future);
@@ -217,6 +222,9 @@ public void testUsage() throws Exception {
217222

218223
// anonymous
219224
assertThat(source.getValue("anonymous.enabled"), is(anonymousEnabled));
225+
226+
// FIPS 140
227+
assertThat(source.getValue("fips_140.enabled"), is(fips140Enabled));
220228
} else {
221229
assertThat(source.getValue("realms"), is(nullValue()));
222230
assertThat(source.getValue("ssl"), is(nullValue()));

0 commit comments

Comments
 (0)