18.8. IBM Z에서 IBM Secure Execution 설정
IBM Z 하드웨어를 사용하여 RHEL 10 호스트를 실행하는 경우 VM에 대한 IBM Secure Execution 기능을 구성하여 VM(가상 머신)의 보안을 개선할 수 있습니다.
IBM Secure Execution (RM Secure Execution)는 호스트 시스템이 VM의 상태 및 메모리 콘텐츠에 액세스하지 못하도록 합니다. 결과적으로 호스트가 손상된 경우에도 게스트 운영 체제를 공격하기 위한 벡터로 사용할 수 없습니다. 또한 보안 실행을 사용하여 신뢰할 수 없는 호스트가 VM에서 중요한 정보를 얻지 못하도록 할 수 있습니다.
IBM Secure Execution를 활성화하여 IBM Z 호스트의 기존 VM을 보안 VM으로 변환할 수 있습니다.
프로덕션 환경 보안을 위해 워크로드를 더욱 안전하게 보호하는 방법을 설명하는 Secure Execution를 사용하여 워크로드를 완전히 보호하는 방법에 대한 IBM 설명서 를 참조하십시오.
18.8.1. IBM Secure Execution에 대해 수동으로 VM 구성 링크 복사링크가 클립보드에 복사되었습니다!
게스트 VM에 수동으로 로그인하고 게스트 운영 체제 내에서 구성 단계를 수행하여 IBM Secure Execution를 구성할 수 있습니다. 이 방법은 구성 프로세스를 직접 제어하고 각 설정 단계를 확인해야 하는 프로덕션 환경에 적합합니다.
프로덕션 환경 보안을 위해 워크로드를 더욱 안전하게 보호하는 방법을 설명하는 Secure Execution를 사용하여 워크로드를 완전히 보호하는 방법에 대한 IBM 설명서 를 참조하십시오.
사전 요구 사항
시스템 하드웨어는 다음 중 하나입니다.
- IBM z15 이상
- IBM LinuxONE III 이상
시스템에 대해 보안 실행 기능이 활성화되어 있습니다. 확인하려면 다음을 사용합니다.
# grep facilities /proc/cpuinfo | grep 158이 명령이 출력을 표시하는 경우 CPU는 Secure Execution와 호환됩니다.
커널에는 보안 실행 지원이 포함되어 있습니다. 확인하려면 다음을 사용합니다.
# ls /sys/firmware | grep uv명령이 출력을 생성하는 경우 커널은 Secure Execution를 지원합니다.
호스트 CPU 모델에는
압축해제 기능이 포함되어 있습니다. 확인하려면 다음을 사용합니다.# virsh domcapabilities | grep unpack <feature policy='require' name='unpack'/>명령에서 위의 출력을 생성하는 경우 CPU 호스트 모델은 보안 실행과 호환됩니다.
VM의 CPU 모드는
host-model로 설정되어 있습니다.# virsh dumpxml <vm_name> | grep "<cpu mode='host-model'/>"명령에서 출력을 생성하면 VM의 CPU 모드가 올바르게 설정됩니다.
genprotimg 패키지가 호스트에 설치되어 있어야 합니다.
# dnf install genprotimg호스트에서 직접 VM 이미지를 수정하려는 경우
guestfs-tools패키지가 호스트에 설치됩니다.# dnf install guestfs-tools- IBM Z 호스트 키 문서를 가져와서 확인했습니다. 자세한 내용은 IBM 문서의 호스트 키 문서 확인을 참조하십시오.
프로세스
prot_virt=1커널 매개 변수를 호스트의 부팅 구성에 추가합니다.# grubby --update-kernel=ALL --args="prot_virt=1"부팅 메뉴를 업데이트합니다.
# zipl
-
virsh edit를 사용하여 보호할 VM의 XML 구성을 수정합니다. <launchSecurity type="s390-pv"/>를 </devices> 줄 아래에 추가합니다. 예를 들면 다음과 같습니다.[...] </memballoon> </devices> <launchSecurity type="s390-pv"/> </domain>-
구성의 <
devices> 섹션에virtio-rng장치( <rng model="virtio">)가 포함된 경우 <rng> </rng> 블록의 모든 행을 제거합니다. 선택 사항: 보안하려는 VM에서 32GiB의 RAM 이상을 사용하는 경우 호스트의 XML 구성의 <features><
/> 행을 추가합니다.features> 섹션에 <async-teardown enabled='yes'/이렇게 하면 이러한 보안 실행 게스트의 재부팅 또는 중지 성능이 향상됩니다.
보안하려는 VM에 로그인하고 매개 변수 파일을 생성합니다. 예를 들면 다음과 같습니다.
# touch ~/secure-parameters게스트 운영 체제의
/boot/loader/entries디렉토리에서 최신 버전으로 부트 로더 항목을 식별합니다.# ls /boot/loader/entries -l [...] -rw-r--r--. 1 root root 281 Oct 9 15:51 3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf게스트 운영 체제에서 부트 로더 항목의 커널 옵션 행을 검색합니다.
# cat /boot/loader/entries/3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf | grep options options root=/dev/mapper/rhel-root rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap옵션 라인과
swiotlb=262144의 내용을 게스트 운영 체제에서 생성된 매개변수 파일에 추가합니다.# echo "root=/dev/mapper/rhel-root rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap swiotlb=262144" > ~/secure-parameters게스트 운영 체제에서 새 IBM Secure Execution 이미지를 생성합니다.
예를 들어 다음은
/boot/vmlinuz-4.18.0-240.el8.s390x이미지를 기반으로/boot/secure-image보안 이미지를 생성합니다.secure-parameters파일,/boot/initramfs-4.18.0-240.el8.s390x.img초기 RAM 디스크 파일 및HKD-8651-000201C0411C04.crt키입니다.# genprotimg -i /boot/vmlinuz-4.18.0-240.el8.s390x -r /boot/initramfs-4.18.0-240.el8.s390x.img -p ~/secure-parameters -k HKD-8651-00020089A8.crt -o /boot/secure-imagegenprotimg유틸리티를 사용하면 커널 매개 변수, 초기 RAM 디스크 및 부팅 이미지가 포함된 보안 이미지를 생성합니다.보안 이미지에서 부팅하도록 VM의 부팅 메뉴를 업데이트합니다. 또한
initrd및options로 시작하는 행은 필요하지 않으므로 제거합니다.예를 들어 RHEL 8.3 VM에서 부팅 메뉴를
/boot/loader/entries/디렉토리에서 편집할 수 있습니다.# cat /boot/loader/entries/3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf title Red Hat Enterprise Linux 8.3 version 4.18.0-240.el8.s390x linux /boot/secure-image [...]게스트 운영 체제에 부팅 가능한 디스크 이미지를 생성합니다.
# zipl -V게스트 운영 체제에서 보호되지 않은 원본 파일을 안전하게 제거하십시오. 예를 들면 다음과 같습니다.
# shred /boot/vmlinuz-4.18.0-240.el8.s390x # shred /boot/initramfs-4.18.0-240.el8.s390x.img # shred secure-parameters원래 부팅 이미지, 초기 RAM 이미지 및 커널 매개 변수 파일은 보호되지 않으며 제거되지 않은 경우 Secure Execution가 활성화된 VM은 해킹 시도 또는 민감한 데이터 검색에 취약해질 수 있습니다.
검증
호스트에서
virsh dumpxml유틸리티를 사용하여 보안 VM의 XML 구성을 확인합니다. 구성에 <launchSecurity type="s390-pv"/> 요소가 포함되어야 하며 <rng model="virtio">행이 포함되지 않아야 합니다.# virsh dumpxml vm-name [...] <cpu mode='host-model'/> <devices> <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none' io='native'> <source file='/var/lib/libvirt/images/secure-guest.qcow2'/> <target dev='vda' bus='virtio'/> </disk> <interface type='network'> <source network='default'/> <model type='virtio'/> </interface> <console type='pty'/> <memballoon model='none'/> </devices> <launchSecurity type="s390-pv"/> </domain>
18.8.2. IBM Secure Execution를 위해 호스트에서 VM 구성 링크 복사링크가 클립보드에 복사되었습니다!
VM을 부팅하지 않고도 guestfs-tools 패키지를 사용하여 호스트에서 직접 IBM Secure Execution를 구성할 수 있습니다. 그러나 이 방법은 여러 VM을 신속하게 구성하거나 설정 프로세스를 자동화해야 하는 테스트 및 개발 환경에만 적합합니다.
프로덕션 환경 보안을 위해 워크로드를 더욱 안전하게 보호하는 방법을 설명하는 Secure Execution를 사용하여 워크로드를 완전히 보호하는 방법에 대한 IBM 설명서 를 참조하십시오.
사전 요구 사항
시스템 하드웨어는 다음 중 하나입니다.
- IBM z15 이상
- IBM LinuxONE III 이상
시스템에 대해 보안 실행 기능이 활성화되어 있습니다. 확인하려면 다음을 사용합니다.
# grep facilities /proc/cpuinfo | grep 158이 명령이 출력을 표시하는 경우 CPU는 Secure Execution와 호환됩니다.
커널에는 보안 실행 지원이 포함되어 있습니다. 확인하려면 다음을 사용합니다.
# ls /sys/firmware | grep uv명령이 출력을 생성하는 경우 커널은 Secure Execution를 지원합니다.
호스트 CPU 모델에는
압축해제 기능이 포함되어 있습니다. 확인하려면 다음을 사용합니다.# virsh domcapabilities | grep unpack <feature policy='require' name='unpack'/>명령에서 위의 출력을 생성하는 경우 CPU 호스트 모델은 보안 실행과 호환됩니다.
VM의 CPU 모드는
host-model로 설정되어 있습니다.# virsh dumpxml <vm_name> | grep "<cpu mode='host-model'/>"명령에서 출력을 생성하면 VM의 CPU 모드가 올바르게 설정됩니다.
genprotimg 패키지가 호스트에 설치되어 있어야 합니다.
# dnf install genprotimg호스트에서 직접 VM 이미지를 수정하려는 경우
guestfs-tools패키지가 호스트에 설치됩니다.# dnf install guestfs-tools- IBM Z 호스트 키 문서를 가져와서 확인했습니다. 자세한 내용은 IBM 문서의 호스트 키 문서 확인을 참조하십시오.
프로세스
prot_virt=1커널 매개 변수를 호스트의 부팅 구성에 추가합니다.# grubby --update-kernel=ALL --args="prot_virt=1"부팅 메뉴를 업데이트합니다.
# zipl
-
virsh edit를 사용하여 보호할 VM의 XML 구성을 수정합니다. <launchSecurity type="s390-pv"/>를 </devices> 줄 아래에 추가합니다. 예를 들면 다음과 같습니다.[...] </memballoon> </devices> <launchSecurity type="s390-pv"/> </domain>-
구성의 <
devices> 섹션에virtio-rng장치( <rng model="virtio">)가 포함된 경우 <rng> </rng> 블록의 모든 행을 제거합니다. 선택 사항: 보안하려는 VM에서 32GiB의 RAM 이상을 사용하는 경우 호스트의 XML 구성의 <features><
/> 행을 추가합니다.features> 섹션에 <async-teardown enabled='yes'/이렇게 하면 이러한 보안 실행 게스트의 재부팅 또는 중지 성능이 향상됩니다.
호스트에서 호스트 키 문서가 포함된 스크립트를 생성하고, 보안 실행을 사용하도록 기존 VM을 구성합니다. 예를 들면 다음과 같습니다.
#!/usr/bin/bash echo "$(cat /proc/cmdline) swiotlb=262144" > parmfile cat > ./HKD.crt << EOF -----BEGIN CERTIFICATE----- 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 xLPRGYwhmXzKDg== -----END CERTIFICATE----- EOF version=$(uname -r) kernel=/boot/vmlinuz-$version initrd=/boot/initramfs-$version.img genprotimg -k ./HKD.crt -p ./parmfile -i $kernel -r $initrd -o /boot/secure-linux --no-verify cat >> /etc/zipl.conf<< EOF [secure] target=/boot image=/boot/secure-linux EOF zipl -V shutdown -h now- VM이 종료되었는지 확인합니다.
호스트에서
guestfs-tools를 사용하여 기존 VM 이미지에 스크립트를 추가하고 첫 번째 부팅 시 실행되도록 표시합니다.# virt-customize -a <vm_image_path> --selinux-relabel --firstboot <script_path>추가된 스크립트를 사용하여 이미지에서 VM을 부팅합니다.
이 스크립트는 처음 부팅할 때 실행된 다음 VM을 다시 종료합니다. 결과적으로 VM은 이제 해당 호스트 키가 있는 호스트에서 Secure Execution를 사용하여 실행되도록 구성됩니다.
검증
호스트에서
virsh dumpxml유틸리티를 사용하여 보안 VM의 XML 구성을 확인합니다. 구성에 <launchSecurity type="s390-pv"/> 요소가 포함되어야 하며 <rng model="virtio">행이 포함되지 않아야 합니다.# virsh dumpxml vm-name [...] <cpu mode='host-model'/> <devices> <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none' io='native'> <source file='/var/lib/libvirt/images/secure-guest.qcow2'/> <target dev='vda' bus='virtio'/> </disk> <interface type='network'> <source network='default'/> <model type='virtio'/> </interface> <console type='pty'/> <memballoon model='none'/> </devices> <launchSecurity type="s390-pv"/> </domain>