Skip to content

Commit fe06a2b

Browse files
committed
genpolicy: Introduce UpdateInterfaceRequest rules in genpolicy-settings
Introduce rules for UpdateInterfaceRequest and genpolicy tests for them. Signed-off-by: Cameron Baird <[email protected]>
1 parent 1a57b28 commit fe06a2b

File tree

6 files changed

+155
-2
lines changed

6 files changed

+155
-2
lines changed

src/tools/genpolicy/genpolicy-settings.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,24 @@
324324
],
325325
"allow_env_regex_map": {}
326326
},
327+
"UpdateInterfaceRequest": {
328+
"interface": {
329+
"device": "eth0",
330+
"name": "eth0",
331+
"IPAddresses": [
332+
{
333+
"family": 0,
334+
"address": "10.244.0.14",
335+
"mask": "24"
336+
},
337+
{
338+
"family": 1,
339+
"address": "fe80::6474:9fff:fe6a:9601",
340+
"mask": "64"
341+
}
342+
]
343+
}
344+
},
327345
"CopyFileRequest": [
328346
"$(sfprefix)"
329347
],

src/tools/genpolicy/rules.rego

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ default StopTracingRequest := false
3838
default TtyWinResizeRequest := true
3939
default UpdateContainerRequest := false
4040
default UpdateEphemeralMountsRequest := false
41-
default UpdateInterfaceRequest := true
41+
default UpdateInterfaceRequest := false
4242
default UpdateRoutesRequest := true
4343
default WaitProcessRequest := true
4444
default WriteStreamRequest := false
@@ -1633,6 +1633,33 @@ ExecProcessRequest {
16331633
print("ExecProcessRequest 3: true")
16341634
}
16351635

1636+
UpdateInterfaceRequest {
1637+
print("UpdateInterfaceRequest 1: input =", input)
1638+
1639+
i_interface := input.interface
1640+
p_interface := policy_data.request_defaults.UpdateInterfaceRequest.interface
1641+
1642+
print("UpdateInterfaceRequest 1: p_interface.device =", p_interface.device)
1643+
print("UpdateInterfaceRequest 1: i_interface.device =", i_interface.device)
1644+
1645+
i_interface.device == p_interface.device
1646+
1647+
print("UpdateInterfaceRequest 1: p_interface.name =", p_interface.name)
1648+
print("UpdateInterfaceRequest 1: i_interface.name =", i_interface.name)
1649+
1650+
i_interface.name == p_interface.name
1651+
1652+
print("UpdateInterfaceRequest 1 device check passed")
1653+
1654+
print("UpdateInterfaceRequest 1: p_interface.IPAddresses =", p_interface.IPAddresses)
1655+
every ip in i_interface.IPAddresses {
1656+
print("UpdateInterfaceRequest 1: i_interface.IPAddresses[x] =", ip)
1657+
ip in p_interface.IPAddresses
1658+
}
1659+
1660+
print("UpdateInterfaceRequest 1: true")
1661+
}
1662+
16361663
CloseStdinRequest {
16371664
policy_data.request_defaults.CloseStdinRequest == true
16381665
}

src/tools/genpolicy/src/policy.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,39 @@ pub struct ExecProcessRequestDefaults {
327327
regex: Vec<String>,
328328
}
329329

330+
/// IP address struct schema for genpolicy-settings.json.
331+
#[derive(Clone, Debug, Serialize, Deserialize)]
332+
pub struct IPAddress {
333+
/// IP family; 0 for ipv4 or 1 for ipv6
334+
family: u8,
335+
336+
/// IP address
337+
address: String,
338+
339+
/// IP mask
340+
mask: String,
341+
}
342+
343+
/// Interface struct schema for genpolicy-settings.json.
344+
#[derive(Clone, Debug, Serialize, Deserialize)]
345+
pub struct Interface {
346+
/// Network device
347+
device: String,
348+
349+
/// Device name
350+
name: String,
351+
352+
/// List of valid IP addresses
353+
IPAddresses: Vec<IPAddress>,
354+
}
355+
356+
/// UpdateInterfaceRequest settings from genpolicy-settings.json.
357+
#[derive(Clone, Debug, Serialize, Deserialize)]
358+
pub struct UpdateInterfaceRequestDefaults {
359+
/// Example interface configuration
360+
interface: Interface,
361+
}
362+
330363
/// Settings specific to each kata agent endpoint, loaded from
331364
/// genpolicy-settings.json.
332365
#[derive(Clone, Debug, Serialize, Deserialize)]
@@ -340,6 +373,9 @@ pub struct RequestDefaults {
340373
/// Commands allowed to be executed by the Host in all Guest containers.
341374
pub ExecProcessRequest: ExecProcessRequestDefaults,
342375

376+
/// Interfaces allowed to be updated to in all Guest sandboxes.
377+
pub UpdateInterfaceRequest: UpdateInterfaceRequestDefaults,
378+
343379
/// Allow the Host to close stdin for a container. Typically used with WriteStreamRequest.
344380
pub CloseStdinRequest: bool,
345381

src/tools/genpolicy/tests/main.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use std::path;
99
use std::process::Command;
1010
use std::str;
1111

12-
use protocols::agent::CreateSandboxRequest;
12+
use protocols::agent::{CreateSandboxRequest, UpdateInterfaceRequest};
1313
use serde::de::DeserializeOwned;
1414
use serde::{Deserialize, Serialize};
1515

@@ -102,3 +102,8 @@ where
102102
fn test_create_sandbox() {
103103
runtests::<CreateSandboxRequest>("createsandbox");
104104
}
105+
106+
#[test]
107+
fn test_update_interface() {
108+
runtests::<UpdateInterfaceRequest>("updateinterface");
109+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: dummy
5+
spec:
6+
runtimeClassName: kata-cc-isolation
7+
containers:
8+
- name: dummy
9+
image: registry.k8s.io/pause:3.6@sha256:3d380ca8864549e74af4b29c10f9cb0956236dfb01c40ca076fb6c37253234db
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
[
2+
{
3+
"description": "standard eth0 interface",
4+
"allowed": true,
5+
"request": {
6+
"interface": {
7+
"device": "eth0",
8+
"name": "eth0",
9+
"IPAddresses": [
10+
{"family":0, "address":"10.244.0.14", "mask":"24"},
11+
{"family":1, "address":"fe80::6474:9fff:fe6a:9601", "mask":"64"}
12+
],
13+
"mtu": 1500,
14+
"hwAddr": "66:74:9f:6a:96:01",
15+
"pciPath": "",
16+
"type_": "",
17+
"raw_flags": 0
18+
}
19+
}
20+
},
21+
{
22+
"description": "loopback interface",
23+
"allowed": false,
24+
"request": {
25+
"interface": {
26+
"device": "lo",
27+
"name": "lo",
28+
"IPAddresses": [
29+
{"family":0, "address":"10.244.0.14", "mask":"24"},
30+
{"family":1, "address":"fe80::6474:9fff:fe6a:9601", "mask":"64"}
31+
],
32+
"mtu": 1500,
33+
"hwAddr": "66:74:9f:6a:96:01",
34+
"pciPath": "",
35+
"type_": "",
36+
"raw_flags": 0
37+
}
38+
}
39+
},
40+
{
41+
"description": "bad ip",
42+
"allowed": false,
43+
"request": {
44+
"interface": {
45+
"device": "eth0",
46+
"name": "eth0",
47+
"IPAddresses": [
48+
{"family":0, "address":"127.0.0.1", "mask":"24"}
49+
],
50+
"mtu": 1500,
51+
"hwAddr": "66:74:9f:6a:96:01",
52+
"pciPath": "",
53+
"type_": "",
54+
"raw_flags": 0
55+
}
56+
}
57+
}
58+
]

0 commit comments

Comments
 (0)