@@ -150,18 +150,22 @@ delete_pods() {
150150 local encrypted_pod_name=$( esudo kubectl get pod -o wide | grep encrypted-image-tests | awk ' {print $1;}' || true)
151151 local unencrypted_pod_name=$( esudo kubectl get pod -o wide | grep unencrypted-image-tests | awk ' {print $1;}' || true)
152152 local encrypted_pod_name_es=$( esudo kubectl get pod -o wide | grep encrypted-image-tests-es | awk ' {print $1;}' || true)
153+ local signed_pod_name=$( esudo kubectl get pod -o wide | grep signed-image-tests | awk ' {print $1;}' || true)
153154
154- # Delete both encrypted and unencrypted pods
155+ # Delete encrypted, unencrypted, and signed pods
155156 esudo kubectl delete -f \
156157 " ${TEST_DIR} /unencrypted-image-tests.yaml" 2> /dev/null || true
157158 esudo kubectl delete -f \
158159 " ${TEST_DIR} /encrypted-image-tests.yaml" 2> /dev/null || true
159160 esudo kubectl delete -f \
160161 " ${TEST_DIR} /encrypted-image-tests-es.yaml" 2> /dev/null || true
161-
162+ esudo kubectl delete -f \
163+ " ${TEST_DIR} /signed-image-tests.yaml" 2> /dev/null || true
164+
162165 [ -z " ${encrypted_pod_name} " ] || (kubernetes_wait_for_pod_delete_state " ${encrypted_pod_name} " || true)
163166 [ -z " ${unencrypted_pod_name} " ] || (kubernetes_wait_for_pod_delete_state " ${unencrypted_pod_name} " || true)
164167 [ -z " ${encrypted_pod_name_es} " ] || (kubernetes_wait_for_pod_delete_state " ${encrypted_pod_name_es} " || true)
168+ [ -z " ${signed_pod_name} " ] || (kubernetes_wait_for_pod_delete_state " ${signed_pod_name} " || true)
165169}
166170
167171run_kbs () {
@@ -177,6 +181,12 @@ run_kbs() {
177181
178182 pushd simple-kbs
179183 git checkout -b " branch_${simple_kbs_tag} " " ${simple_kbs_tag} "
184+
185+ # copy resources
186+ cp ${TESTS_REPO_DIR} /integration/kubernetes/confidential/fixtures/policy.json resources/
187+ cp ${TESTS_REPO_DIR} /integration/kubernetes/confidential/fixtures/cosign.pub resources/
188+ cp ${TESTS_REPO_DIR} /integration/kubernetes/confidential/fixtures/cosignWrong.pub resources/
189+
180190 esudo docker-compose build
181191
182192 esudo docker-compose up -d
@@ -315,6 +325,7 @@ setup_file() {
315325
316326 generate_service_yaml " unencrypted-image-tests" " ${IMAGE_REPO} :unencrypted"
317327 generate_service_yaml " encrypted-image-tests" " ${IMAGE_REPO} :encrypted"
328+ generate_service_yaml " signed-image-tests" " quay.io/kata-containers/confidential-containers:cosign-signed"
318329
319330 # SEV-ES policy is 7:
320331 # - NODBG (1): Debugging of the guest is disallowed when set
@@ -336,13 +347,30 @@ setup() {
336347 DELETE FROM secrets WHERE id = 10;
337348 DELETE FROM keysets WHERE id = 10;
338349 DELETE FROM policy WHERE id = 10;
350+ DELETE FROM resources WHERE id = 10;
351+ EOF
352+ }
353+
354+ setup_cosign_signatures_files () {
355+ local key_file=" ${1: cosign.pub} "
356+
357+ mysql -u${KBS_DB_USER} -p${KBS_DB_PW} -h ${KBS_DB_HOST} -D ${KBS_DB} << EOF
358+ INSERT INTO secrets VALUES (10, 'key_id1', '${ENCRYPTION_KEY} ', 10);
359+ INSERT INTO keysets VALUES (10, 'KEYSET-1', '["key_id1"]', 10);
360+ # see https://github.com/confidential-containers/simple-kbs/blob/8507253e9060fb081fd1eac7bf2841ebf02c0847/db/db-mysql.sql#L140
361+ # INSERT INTO resources VALUES (10, 0, resource_type, resource_path, 10);
362+ INSERT INTO resources SET resource_type="Policy", resource_path="policy.json";
363+ INSERT INTO resources SET resource_type="Cosign Key", resource_path="${key_file} ";
339364EOF
340365}
341366
342367@test " $test_tag Test SEV unencrypted container launch success" {
343368 # Turn off pre-attestation. It is not necessary for an unencrypted image.
344369 esudo sed -i ' s/guest_pre_attestation = true/guest_pre_attestation = false/g' ${SEV_CONFIG}
345370
371+ # Turn off signature verification
372+ esudo sed -i ' s/agent.enable_signature_verification=true/agent.enable_signature_verification=false/g' ${SEV_CONFIG}
373+
346374 # Start the service/deployment/pod
347375 esudo kubectl apply -f " ${TEST_DIR} /unencrypted-image-tests.yaml"
348376
514542 fi
515543}
516544
545+ @test " $test_tag Test signed image with no required measurement" {
546+ # Add resource files to
547+ setup_cosign_signatures_files
548+
549+ # change kernel command line for signature validation
550+ esudo sed -i ' s/agent.enable_signature_verification=false/agent.enable_signature_verification=true/g' ${SEV_CONFIG}
551+
552+ # Start the service/deployment/pod
553+ esudo kubectl apply -f " ${TEST_DIR} /signed-image-tests.yaml"
554+
555+ # Retrieve pod name, wait for it to come up, retrieve pod ip
556+ pod_name=$( esudo kubectl get pod -o wide | grep signed-image-tests | awk ' {print $1;}' )
557+ kubernetes_wait_for_pod_ready_state " $pod_name " 20
558+ pod_ip=$( esudo kubectl get pod -o wide | grep signed-image-tests | awk ' {print $6;}' )
559+
560+ print_service_info
561+ }
562+
563+ @test " $test_tag Test signed image with no required measurement, but wrong key (failure)" {
564+ # Add resource files to
565+ setup_cosign_signatures_files " cosignWrong.pub"
566+
567+ # change kernel command line for signature validation
568+ esudo sed -i ' s/agent.enable_signature_verification=false/agent.enable_signature_verification=true/g' ${SEV_CONFIG}
569+
570+ # Start the service/deployment/pod
571+ esudo kubectl apply -f " ${TEST_DIR} /signed-image-tests.yaml"
572+
573+ # Retrieve pod name, wait for it to come up, retrieve pod ip
574+ pod_name=$( esudo kubectl get pod -o wide | grep signed-image-tests | awk ' {print $1;}' )
575+ kubernetes_wait_for_pod_ready_state " $pod_name " 20
576+ pod_ip=$( esudo kubectl get pod -o wide | grep signed-image-tests | awk ' {print $6;}' )
577+
578+ print_service_info
579+ }
580+
581+ @test " $test_tag Test signed image with required measurement" {
582+ # Generate firmware measurement
583+ local append=$( cat ${TEST_DIR} /guest-kernel-append)
584+ echo " Kernel Append: ${append} "
585+ measurement=$( generate_firmware_measurement_with_append " ${append} " )
586+ echo " Firmware Measurement: ${measurement} "
587+
588+ # Add resource files to
589+ setup_cosign_signatures_files
590+
591+ # Add key to KBS with policy measurement
592+ add_key_to_kbs_db ${measurement}
593+
594+ # change kernel command line for signature validation
595+ esudo sed -i ' s/agent.enable_signature_verification=false/agent.enable_signature_verification=true/g' ${SEV_CONFIG}
596+
597+ # Start the service/deployment/pod
598+ esudo kubectl apply -f " ${TEST_DIR} /signed-image-tests.yaml"
599+
600+ # Retrieve pod name, wait for it to come up, retrieve pod ip
601+ pod_name=$( esudo kubectl get pod -o wide | grep signed-image-tests | awk ' {print $1;}' )
602+ kubernetes_wait_for_pod_ready_state " $pod_name " 20
603+ pod_ip=$( esudo kubectl get pod -o wide | grep signed-image-tests | awk ' {print $6;}' )
604+
605+ print_service_info
606+ }
607+
608+ @test " $test_tag Test signed image with INVALID measurement" {
609+ # Generate firmware measurement
610+ local append=" INVALID-INPUT"
611+ measurement=$( generate_firmware_measurement_with_append ${append} )
612+ echo " Firmware Measurement: ${measurement} "
613+
614+ # Add resource files to
615+ setup_cosign_signatures_files
517616
617+ # Add key to KBS with policy measurement
618+ add_key_to_kbs_db ${measurement}
619+
620+ # change kernel command line for signature validation
621+ esudo sed -i ' s/agent.enable_signature_verification=false/agent.enable_signature_verification=true/g' ${SEV_CONFIG}
622+
623+ # Make sure pre-attestation is enabled.
624+ esudo sed -i ' s/guest_pre_attestation = false/guest_pre_attestation = true/g' ${SEV_CONFIG}
625+
626+ # Start the service/deployment/pod
627+ esudo kubectl apply -f " ${TEST_DIR} /signed-image-tests.yaml"
628+
629+ # Retrieve pod name, wait for it to come up, retrieve pod ip
630+ pod_name=$( esudo kubectl get pod -o wide | grep signed-image-tests | awk ' {print $1;}' )
631+ kubernetes_wait_for_pod_ready_state " $pod_name " 20
632+ pod_ip=$( esudo kubectl get pod -o wide | grep signed-image-tests | awk ' {print $6;}' )
633+
634+ print_service_info
635+ }
518636
519637teardown_file () {
520638 echo " ###############################################################################"
0 commit comments