Skip to content

Commit 823585b

Browse files
authored
Merge pull request #1294 from snir911/pp-initdata
Set INITDATA for non-confidential peer pods
2 parents caa2510 + f98cd44 commit 823585b

File tree

3 files changed

+74
-5
lines changed

3 files changed

+74
-5
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# This initdata file was created by the osc-operator
2+
algorithm = "sha384"
3+
version = "0.1.0"
4+
5+
[data]
6+
"aa.toml" = '''
7+
'''
8+
9+
"policy.rego" = '''
10+
package agent_policy
11+
12+
default AddARPNeighborsRequest := true
13+
default AddSwapRequest := true
14+
default CloseStdinRequest := true
15+
default CopyFileRequest := true
16+
default CreateContainerRequest := true
17+
default CreateSandboxRequest := true
18+
default DestroySandboxRequest := true
19+
default ExecProcessRequest := true
20+
default GetMetricsRequest := true
21+
default GetOOMEventRequest := true
22+
default GuestDetailsRequest := true
23+
default ListInterfacesRequest := true
24+
default ListRoutesRequest := true
25+
default MemHotplugByProbeRequest := true
26+
default OnlineCPUMemRequest := true
27+
default PauseContainerRequest := true
28+
default PullImageRequest := true
29+
default ReadStreamRequest := true
30+
default RemoveContainerRequest := true
31+
default RemoveStaleVirtiofsShareMountsRequest := true
32+
default ReseedRandomDevRequest := true
33+
default ResumeContainerRequest := true
34+
default SetGuestDateTimeRequest := true
35+
default SetPolicyRequest := true
36+
default SignalProcessRequest := true
37+
default StartContainerRequest := true
38+
default StartTracingRequest := true
39+
default StatsContainerRequest := true
40+
default StopTracingRequest := true
41+
default TtyWinResizeRequest := true
42+
default UpdateContainerRequest := true
43+
default UpdateEphemeralMountsRequest := true
44+
default UpdateInterfaceRequest := true
45+
default UpdateRoutesRequest := true
46+
default WaitProcessRequest := true
47+
default WriteStreamRequest := true
48+
'''

controllers/confidential_handler.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ const (
2828
// Extended resources for TEE
2929
intelTDXExtendedResource = "tdx.intel.com/keys"
3030
amdSNPExtendedResource = "sev-snp.amd.com/esids"
31+
32+
// INITDATA value for non-confidential peer pods, this is required in order
33+
// to override the default restrictive CoCo agent policy
34+
// created from sourced plaintxt: cat config/peerpods/default-non-cc-initdata.toml | gzip | base64 -w0
35+
defaultNonCCInitdata = "H4sIAAAAAAAAA42UwW7bMAyG734KwT3ktKDDehgG9NAl2VZgWQw7bQ7DMDAWYxOVRU+i03pPP7lGhx0muwddyE8U+ZPUhdrX5BVZEg0C6kQG1SN4VToEQa2OvZIaFfvyDbfoQNglYCp2JHWjrlXqa3j3/ipNzug8sR1Ml8u3y8s0Sb4PIX8kKcBSuDFp8C0Wi2Q4SdqyobJfOqz4xdFC+QAVqnCs/ByBJNF4gs6IutH6Js++IVX1kZ3P8VeHXtSHayWuw3+x4hHamHtl2GMhmmyU4Lb/FGSI+p+VWbEVIItuGivA6iM/xaB1MDruZ6jNE5aZ4xJ9tOrPKFsUR+UUsdttN+cgbRQZrGsMdZlomK/k5dYKuhOEfKaonDuJE1tsvrC0pqs+9qG2Y1TunTVB5lV2F27EmAw6P9+RrDPmtgnDFQNyBF1I6Fv0oRwbPs+/NGKFgMF7ckJ88kUNDrfcWYlKkqNH1HmYBW7WeJ7AumY+hwJl7GeYwj010aIDlz1vWhSgyoKZmb9Qq5P5nAZq76AkW00w4l8RiduZQHvpD8OWe/odLf6u1a/Z5RHbtDU24Qs0020c4b87Mo1NL8kBSGaEP4SPGP8/tMOX+geD8J3Z4AUAAA=="
3136
)
3237

3338
// When the feature is enabled, handleFeatureConfidential configures confidential computing support.
@@ -73,13 +78,13 @@ func (r *KataConfigOpenShiftReconciler) handleConfidentialPeerPods(state Feature
7378

7479
// Patch ImageConfigMap.
7580
imageConfigMapData := map[string]string{"CONFIDENTIAL_COMPUTE_ENABLED": "yes"}
76-
if err := updateConfigMap(r.Client, r.Log, ig.getImageConfigMapName(), OperatorNamespace, imageConfigMapData); err != nil {
81+
if err := updateConfigMap(r.Client, r.Log, ig.getImageConfigMapName(), OperatorNamespace, imageConfigMapData, nil); err != nil {
7782
return err
7883
}
7984
} else {
8085
// Patch ImageConfigMap.
8186
imageConfigMapData := map[string]string{"CONFIDENTIAL_COMPUTE_ENABLED": "no"}
82-
if err := updateConfigMap(r.Client, r.Log, ig.getImageConfigMapName(), OperatorNamespace, imageConfigMapData); err != nil {
87+
if err := updateConfigMap(r.Client, r.Log, ig.getImageConfigMapName(), OperatorNamespace, imageConfigMapData, nil); err != nil {
8388
if k8serrors.IsNotFound(err) {
8489
// Nothing to do, feature is disabled and configMap doesn't exist.
8590
} else {
@@ -92,12 +97,19 @@ func (r *KataConfigOpenShiftReconciler) handleConfidentialPeerPods(state Feature
9297

9398
// Patch peer pods configMap, if it exists.
9499
var peerpodsCMData map[string]string
100+
var keysToRemove map[string]string
95101
if state == Enabled {
96102
peerpodsCMData = map[string]string{"DISABLECVM": "false"}
103+
// Remove INITDATA if it matches the default value
104+
keysToRemove = map[string]string{"INITDATA": defaultNonCCInitdata}
97105
} else {
98-
peerpodsCMData = map[string]string{"DISABLECVM": "true"}
106+
peerpodsCMData = map[string]string{
107+
"DISABLECVM": "true",
108+
"INITDATA": defaultNonCCInitdata,
109+
}
110+
keysToRemove = nil
99111
}
100-
if err := updateConfigMap(r.Client, r.Log, peerpodsCMName, OperatorNamespace, peerpodsCMData); err != nil {
112+
if err := updateConfigMap(r.Client, r.Log, peerpodsCMName, OperatorNamespace, peerpodsCMData, keysToRemove); err != nil {
101113
if k8serrors.IsNotFound(err) {
102114
// When feature is Enabled: ConfigMap doesn't exist yet, will try again at the next reconcile run.
103115
// Else: Nothing to do, feature is disabled and configMap doesn't exist.

controllers/utils.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ func getClusterID(c client.Client) (string, error) {
201201
return string(clusterVersion.Spec.ClusterID[:8]), nil
202202
}
203203

204-
func updateConfigMap(client client.Client, logger logr.Logger, cmName string, namespace string, newData map[string]string) error {
204+
func updateConfigMap(client client.Client, logger logr.Logger, cmName string, namespace string, newData map[string]string, keysToRemove map[string]string) error {
205205
// Get current configMap.
206206
configMap := &corev1.ConfigMap{}
207207
if err := client.Get(context.TODO(), types.NamespacedName{
@@ -224,6 +224,15 @@ func updateConfigMap(client client.Client, logger logr.Logger, cmName string, na
224224
}
225225
}
226226

227+
// Remove keys that match the values in keysToRemove map
228+
for key, valueToMatch := range keysToRemove {
229+
if currentValue, exists := configMap.Data[key]; exists && currentValue == valueToMatch {
230+
logger.Info("updateConfigMap - removing key", "namespace", namespace, "name", cmName, "key", key)
231+
delete(configMap.Data, key)
232+
update = true
233+
}
234+
}
235+
227236
if update {
228237
// Update the configMap on Kubernetes.
229238
return client.Update(context.TODO(), configMap)

0 commit comments

Comments
 (0)