Skip to content

Commit 043279a

Browse files
authored
Fix custom policy in plugins in FIPS 140 (#52046)
Our FIPS 140 testing depends on setting the appropriate java policy in order to configure the JVM in FIPS mode. Some tests ( discovery-ec2 and ccr qa ) also needed to set a custom policy file to grant a specific permission, which overwrote the FIPS related policy and tests would fail. This change ensures that when a custom policy needs to be set in these tests, the permissions that are necessary for FIPS are also set. Resolves: #51685, #52034
1 parent dda9850 commit 043279a

File tree

3 files changed

+70
-16
lines changed

3 files changed

+70
-16
lines changed

plugins/discovery-ec2/build.gradle

+35-7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import org.elasticsearch.gradle.info.BuildParams
2+
13
/*
24
* Licensed to Elasticsearch under one or more contributor
35
* license agreements. See the NOTICE file distributed with
@@ -56,12 +58,34 @@ task writeTestJavaPolicy {
5658
throw new GradleException("failed to create temporary directory [${tmp}]")
5759
}
5860
final File javaPolicy = file("${tmp}/java.policy")
59-
javaPolicy.write(
60-
[
61-
"grant {",
62-
" permission java.util.PropertyPermission \"com.amazonaws.sdk.ec2MetadataServiceEndpointOverride\", \"write\";",
63-
"};"
64-
].join("\n"))
61+
if (BuildParams.inFipsJvm) {
62+
javaPolicy.write(
63+
[
64+
"grant {",
65+
"permission java.security.SecurityPermission \"putProviderProperty.BCFIPS\";",
66+
"permission java.security.SecurityPermission \"putProviderProperty.BCJSSE\";",
67+
"permission java.lang.RuntimePermission \"getProtectionDomain\";",
68+
"permission java.util.PropertyPermission \"java.runtime.name\", \"read\";",
69+
"permission org.bouncycastle.crypto.CryptoServicesPermission \"tlsAlgorithmsEnabled\";",
70+
"permission java.lang.RuntimePermission \"accessClassInPackage.sun.security.internal.spec\";",
71+
"permission java.lang.RuntimePermission \"accessDeclaredMembers\";",
72+
"permission java.util.PropertyPermission \"intellij.debug.agent\", \"read\";",
73+
"permission java.util.PropertyPermission \"intellij.debug.agent\", \"write\";",
74+
"permission org.bouncycastle.crypto.CryptoServicesPermission \"exportSecretKey\";",
75+
"permission org.bouncycastle.crypto.CryptoServicesPermission \"exportPrivateKey\";",
76+
"permission java.io.FilePermission \"\${javax.net.ssl.trustStore}\", \"read\";",
77+
" permission java.util.PropertyPermission \"com.amazonaws.sdk.ec2MetadataServiceEndpointOverride\", \"write\";",
78+
"};"
79+
].join("\n")
80+
)
81+
} else {
82+
javaPolicy.write(
83+
[
84+
"grant {",
85+
" permission java.util.PropertyPermission \"com.amazonaws.sdk.ec2MetadataServiceEndpointOverride\", \"write\";",
86+
"};"
87+
].join("\n"))
88+
}
6589
}
6690
}
6791

@@ -72,7 +96,11 @@ test {
7296

7397
// this is needed to manipulate com.amazonaws.sdk.ec2MetadataServiceEndpointOverride system property
7498
// it is better rather disable security manager at all with `systemProperty 'tests.security.manager', 'false'`
75-
systemProperty 'java.security.policy', "file://${buildDir}/tmp/java.policy"
99+
if (BuildParams.inFipsJvm){
100+
systemProperty 'java.security.policy', "=file://${buildDir}/tmp/java.policy"
101+
} else {
102+
systemProperty 'java.security.policy', "file://${buildDir}/tmp/java.policy"
103+
}
76104
}
77105

78106
check {

plugins/discovery-ec2/src/test/java/org/elasticsearch/discovery/ec2/EC2RetriesTests.java

-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ public void tearDown() throws Exception {
101101
}
102102

103103
public void testEC2DiscoveryRetriesOnRateLimiting() throws IOException {
104-
assumeFalse("https://github.com/elastic/elasticsearch/issues/51685", inFipsJvm());
105104
final String accessKey = "ec2_access";
106105
final List<String> hosts = List.of("127.0.0.1:9000");
107106
final Map<String, Integer> failedRequests = new ConcurrentHashMap<>();

x-pack/plugin/ccr/qa/downgrade-to-basic-license/build.gradle

+35-8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import org.elasticsearch.gradle.info.BuildParams
12
import org.elasticsearch.gradle.test.RestIntegTestTask
23

34
apply plugin: 'elasticsearch.testclusters'
@@ -26,21 +27,47 @@ task writeJavaPolicy {
2627
if (policyFile.parentFile.exists() == false && policyFile.parentFile.mkdirs() == false) {
2728
throw new GradleException("failed to create temporary directory [${tmp}]")
2829
}
29-
policyFile.write(
30-
[
31-
"grant {",
32-
" permission java.io.FilePermission \"${-> testClusters."follow-cluster".getFirstNode().getServerLog()}\", \"read\";",
33-
"};"
34-
].join("\n")
35-
)
30+
if (BuildParams.inFipsJvm) {
31+
policyFile.write(
32+
[
33+
"grant {",
34+
"permission java.security.SecurityPermission \"putProviderProperty.BCFIPS\";",
35+
"permission java.security.SecurityPermission \"putProviderProperty.BCJSSE\";",
36+
"permission java.lang.RuntimePermission \"getProtectionDomain\";",
37+
"permission java.util.PropertyPermission \"java.runtime.name\", \"read\";",
38+
"permission org.bouncycastle.crypto.CryptoServicesPermission \"tlsAlgorithmsEnabled\";",
39+
"permission java.lang.RuntimePermission \"accessClassInPackage.sun.security.internal.spec\";",
40+
"permission java.lang.RuntimePermission \"accessDeclaredMembers\";",
41+
"permission java.util.PropertyPermission \"intellij.debug.agent\", \"read\";",
42+
"permission java.util.PropertyPermission \"intellij.debug.agent\", \"write\";",
43+
"permission org.bouncycastle.crypto.CryptoServicesPermission \"exportSecretKey\";",
44+
"permission org.bouncycastle.crypto.CryptoServicesPermission \"exportPrivateKey\";",
45+
"permission java.io.FilePermission \"\${javax.net.ssl.trustStore}\", \"read\";",
46+
"permission java.io.FilePermission \"${-> testClusters."follow-cluster".getFirstNode().getServerLog()}\", \"read\";",
47+
"};"
48+
].join("\n")
49+
)
50+
} else {
51+
policyFile.write(
52+
[
53+
"grant {",
54+
" permission java.io.FilePermission \"${-> testClusters."follow-cluster".getFirstNode().getServerLog()}\", \"read\";",
55+
"};"
56+
].join("\n")
57+
)
58+
}
3659
}
3760
}
3861

3962
task "follow-cluster"(type: RestIntegTestTask) {
4063
dependsOn 'writeJavaPolicy', "leader-cluster"
4164
runner {
4265
useCluster testClusters."leader-cluster"
43-
systemProperty 'java.security.policy', "file://${policyFile}"
66+
if (BuildParams.inFipsJvm){
67+
systemProperty 'java.security.policy', "=file://${policyFile}"
68+
} else {
69+
systemProperty 'java.security.policy', "file://${policyFile}"
70+
}
4471
systemProperty 'tests.target_cluster', 'follow'
4572
nonInputProperties.systemProperty 'tests.leader_host', "${-> testClusters."leader-cluster".getAllHttpSocketURI().get(0)}"
4673
nonInputProperties.systemProperty 'log', "${-> testClusters."follow-cluster".getFirstNode().getServerLog()}"

0 commit comments

Comments
 (0)