1+ # NOTE: PodVMs run in separate VMs outside the cluster network, so they cannot
2+ # resolve cluster-internal service DNS (*.svc.cluster.local ). Therefore, we must
3+ # use the external KBS route even for same-cluster deployments.
4+ # For multi-cluster deployments, this also points to the trusted cluster's KBS.
5+
6+ algorithm = " sha256"
7+ version = " 0.1.0"
8+
9+ [data]
10+ " aa.toml" = '''
11+ [token_configs]
12+ [token_configs.coco_as ]
13+ url = " https://kbs.{{ hub_domain }}"
14+
15+ [token_configs.kbs ]
16+ url = " https://kbs.{{ hub_domain }}"
17+ cert = " " " {{ trustee_cert }}" " "
18+ '''
19+
20+ " cdh.toml" = '''
21+ socket = 'unix:///run/confidential-containers/cdh.sock '
22+ credentials = []
23+
24+ [kbc]
25+ name = " cc_kbc"
26+ url = " https://kbs.{{ hub_domain }}"
27+ kbs_cert = " " " {{ trustee_cert }}" " "
28+
29+ [image]
30+ # Container image signature verification policy
31+ # Options: insecure, reject, signed (configured via coco.imageSecurityPolicy in values)
32+ image_security_policy_uri = " kbs:///default/security-policy/{{ image_security_policy }}"
33+ '''
34+
35+ " policy.rego" = '''
36+ package agent_policy
37+
38+ import future.keywords.in
39+ import future.keywords.if
40+ import future.keywords.every
41+
42+ default AddARPNeighborsRequest := true
43+ default AddSwapRequest := true
44+ default CloseStdinRequest := true
45+ default CopyFileRequest := true
46+ default CreateContainerRequest := true
47+ default CreateSandboxRequest := true
48+ default DestroySandboxRequest := true
49+ default GetMetricsRequest := true
50+ default GetOOMEventRequest := true
51+ default GuestDetailsRequest := true
52+ default ListInterfacesRequest := true
53+ default ListRoutesRequest := true
54+ default MemHotplugByProbeRequest := true
55+ default OnlineCPUMemRequest := true
56+ default PauseContainerRequest := true
57+ default PullImageRequest := true
58+ default ReadStreamRequest := true
59+ default RemoveContainerRequest := true
60+ default RemoveStaleVirtiofsShareMountsRequest := true
61+ default ReseedRandomDevRequest := true
62+ default ResumeContainerRequest := true
63+ default SetGuestDateTimeRequest := true
64+ default SignalProcessRequest := true
65+ default StartContainerRequest := true
66+ default StartTracingRequest := true
67+ default StatsContainerRequest := true
68+ default StopTracingRequest := true
69+ default TtyWinResizeRequest := true
70+ default UpdateContainerRequest := true
71+ default UpdateEphemeralMountsRequest := true
72+ default UpdateInterfaceRequest := true
73+ default UpdateRoutesRequest := true
74+ default WaitProcessRequest := true
75+ # FIXME: ExecProcessRequest and WriteStreamRequest are temporarily restricted
76+ # with a whitelist. This needs proper hardening before production use.
77+ default ExecProcessRequest := false
78+ default SetPolicyRequest := true
79+ default WriteStreamRequest := false
80+
81+ ExecProcessRequest if {
82+ input_command = concat(" " , input.process.Args )
83+ some allowed_command in policy_data.allowed_commands
84+ input_command == allowed_command
85+ }
86+
87+ policy_data := {
88+ " allowed_commands" : [
89+ " curl http://127.0.0.1:8006/cdh/resource/default/attestation-status/status" ,
90+ " curl http://127.0.0.1:8006/cdh/resource/default/attestation-status/random"
91+ ]
92+ }
93+ '''
0 commit comments