5.3. IBM Z 및 IBM LinuxONE에 기밀 컨테이너 배포
OpenShift 샌드박스 컨테이너를 배포한 후 IBM Z® 및 IBM® LinuxONE에 기밀 컨테이너를 배포할 수 있습니다.
IBM Z® 및 IBM® LinuxONE의 기밀 컨테이너는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
클러스터 요구 사항
- Confidential Compute attestation Operator를 설치하는 클러스터에 Red Hat OpenShift Container Platform 4.15 이상을 설치했습니다.
다음 단계를 수행하여 기밀 컨테이너를 배포합니다.
- Confidential Compute attestation Operator를 설치합니다.
- Trustee의 경로를 만듭니다.
- 기밀성 컨테이너 기능 게이트를 활성화합니다.
- 피어 Pod 구성 맵을 업데이트합니다.
-
KataConfigCR(사용자 정의 리소스)을 삭제합니다. - 피어 Pod 시크릿을 업데이트합니다.
-
KataConfigCR을 다시 만듭니다. - Trustee 인증 시크릿을 생성합니다.
- Trustee 구성 맵을 생성합니다.
- IBM Secure Execution (SE) 헤더를 가져옵니다.
- SE 인증서 및 키를 구성합니다.
- 영구 스토리지 구성 요소를 생성합니다.
인증 정책을 구성합니다.
- 참조 값을 생성합니다.
- 테스트된 클라이언트의 시크릿을 생성합니다.
- 리소스 액세스 정책을 생성합니다.
- SE에 대한 인증 정책을 만듭니다.
-
KbsConfigCR을 생성합니다. - 인증 프로세스를 확인합니다.
5.3.1. 기밀 컴퓨팅 인증 Operator 설치 링크 복사링크가 클립보드에 복사되었습니다!
CLI를 사용하여 IBM Z® 및 IBM® LinuxONE에 Confidential Compute attestation Operator를 설치할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc)가 설치되어 있습니다. -
cluster-admin역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
trustee-namespace.yaml매니페스트 파일을 생성합니다.apiVersion: v1 kind: Namespace metadata: name: trustee-operator-system
apiVersion: v1 kind: Namespace metadata: name: trustee-operator-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
trustee-operator-system네임스페이스를 생성합니다.oc apply -f trustee-namespace.yaml
$ oc apply -f trustee-namespace.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow trustee-operatorgroup.yaml매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 operator 그룹을 생성합니다.
oc apply -f trustee-operatorgroup.yaml
$ oc apply -f trustee-operatorgroup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow trustee-subscription.yaml매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 서브스크립션을 생성합니다.
oc apply -f trustee-subscription.yaml
$ oc apply -f trustee-subscription.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 Operator가 올바르게 설치되었는지 확인합니다.
oc get csv -n trustee-operator-system
$ oc get csv -n trustee-operator-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령을 완료하는 데 몇 분이 걸릴 수 있습니다.
다음 명령을 실행하여 프로세스를 확인합니다.
watch oc get csv -n trustee-operator-system
$ watch oc get csv -n trustee-operator-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME DISPLAY PHASE trustee-operator.v0.1.0 Trustee Operator 0.1.0 Succeeded
NAME DISPLAY PHASE trustee-operator.v0.1.0 Trustee Operator 0.1.0 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.2. Trustee를 위한 경로 생성 링크 복사링크가 클립보드에 복사되었습니다!
Trustee의 엣지 TLS 종료를 사용하여 보안 경로를 생성할 수 있습니다. 외부 수신 트래픽은 라우터 Pod에 HTTPS로 도달하고 Trustee Pod에 HTTP로 전달합니다.
사전 요구 사항
- 기밀 컨테이너 기능 게이트를 활성화했습니다.
- Confidential Compute attestation Operator를 설치했습니다.
프로세스
다음 명령을 실행하여 엣지 경로를 만듭니다.
oc create route edge --service=kbs-service --port kbs-port \ -n trustee-operator-system
$ oc create route edge --service=kbs-service --port kbs-port \ -n trustee-operator-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고참고: 현재 유효한 CA 서명 인증서가 있는 경로만 지원됩니다. 자체 서명된 인증서가 있는 경로를 사용할 수 없습니다.
다음 명령을 실행하여
TRUSTEE_HOST변수를 설정합니다.TRUSTEE_HOST=$(oc get route -n trustee-operator-system kbs-service \ -o jsonpath={.spec.host})$ TRUSTEE_HOST=$(oc get route -n trustee-operator-system kbs-service \ -o jsonpath={.spec.host})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 경로를 확인합니다.
echo $TRUSTEE_HOST
$ echo $TRUSTEE_HOSTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
kbs-service-trustee-operator-system.apps.memvjias.eastus.aroapp.io
kbs-service-trustee-operator-system.apps.memvjias.eastus.aroapp.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.3. 기밀성 컨테이너 기능 게이트 활성화 링크 복사링크가 클립보드에 복사되었습니다!
기밀 컨테이너 기능 게이트를 활성화해야 합니다.
프로세스
cc-feature-gate.yaml매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 구성 맵을 생성합니다.
oc apply -f cc-feature-gate.yaml
$ oc apply -f cc-feature-gate.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.4. 피어 Pod 구성 맵 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
기밀 컨테이너의 피어 Pod 구성 맵을 업데이트해야 합니다.
Secure Boot를 true 로 설정하여 기본적으로 활성화합니다. 기본값은 false 이며 보안 위험을 나타냅니다.
프로세스
다음 예에 따라
peer-pods-cm.yaml매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 구성 맵을 생성합니다.
oc apply -f peer-pods-cm.yaml
$ oc apply -f peer-pods-cm.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
peerpodconfig-ctrl-caa-daemon데몬 세트를 다시 시작합니다.oc set env ds/peerpodconfig-ctrl-caa-daemon \ -n openshift-sandboxed-containers-operator REBOOT="$(date)"
$ oc set env ds/peerpodconfig-ctrl-caa-daemon \ -n openshift-sandboxed-containers-operator REBOOT="$(date)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.5. KataConfig 사용자 지정 리소스 삭제 링크 복사링크가 클립보드에 복사되었습니다!
명령줄을 사용하여 KataConfig CR(사용자 정의 리소스)을 삭제할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc)가 설치되어 있습니다. -
cluster-admin역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
다음 명령을 실행하여
KataConfigCR을 삭제합니다.oc delete kataconfig example-kataconfig
$ oc delete kataconfig example-kataconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 사용자 정의 리소스가 삭제되었는지 확인합니다.
oc get kataconfig example-kataconfig
$ oc get kataconfig example-kataconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
No example-kataconfig instances exist
No example-kataconfig instances existCopy to Clipboard Copied! Toggle word wrap Toggle overflow
클라우드 공급자를 사용하여 배포된 OpenShift 샌드박스 컨테이너를 제거하는 경우 모든 Pod를 삭제해야 합니다. 나머지 Pod 리소스로 인해 클라우드 공급자의 예기치 않은 요금이 발생할 수 있습니다.
5.3.6. 피어 Pod 시크릿 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
피어 Pod 보안이 비어 있고 CCO(Cloud Credential Operator)가 설치되면 OpenShift 샌드박스 컨테이너 Operator는 CCO를 사용하여 시크릿을 검색합니다. CCO를 설치 제거한 경우 기밀 컨테이너에 대한 피어 Pod 시크릿을 수동으로 생성하거나 피어 Pod가 작동하지 않습니다.
시크릿은 Pod VM(가상 머신) 이미지 및 피어 Pod 인스턴스를 생성하기 위한 인증 정보를 저장합니다.
기본적으로 OpenShift 샌드박스 컨테이너 Operator는 클러스터를 생성하는 데 사용되는 인증 정보를 기반으로 보안을 생성합니다. 그러나 다른 인증 정보를 사용하는 보안을 수동으로 생성할 수 있습니다.
사전 요구 사항
-
REDHAT_OFFLINE_TOKEN. Red Hat API 토큰에서 RHEL 이미지를 다운로드하기 위해 이 토큰 을 생성했습니다. -
HKD_CRT. HKD(Host Key Document) 인증서를 사용하면 IBM Z®에서 보안 실행을 수행할 수 있습니다. 자세한 내용은 IBM 문서의 리소스 링크에서 호스트 키 문서 가져오기 를 참조하십시오.
프로세스
다음 예에 따라
peer-pods-secret.yaml매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 시크릿을 생성합니다.
oc apply -f peer-pods-secret.yaml
$ oc apply -f peer-pods-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.7. KataConfig 사용자 지정 리소스 다시 생성 링크 복사링크가 클립보드에 복사되었습니다!
기밀 컨테이너를 위해 KataConfig CR(사용자 정의 리소스)을 다시 생성해야 합니다.
KataConfig CR을 생성하면 작업자 노드가 자동으로 재부팅됩니다. 재부팅에는 10분에서 60분 이상 걸릴 수 있습니다. 재부팅 시간을 방해하는 요소는 다음과 같습니다.
- 더 많은 작업자 노드가 있는 대규모 OpenShift Container Platform 배포
- BIOS 및 Cryostat 유틸리티 활성화.
- SSD가 아닌 하드 디스크 드라이브에 배포합니다.
- 가상 노드가 아닌 베어 메탈과 같은 물리적 노드에 배포됩니다.
- 느린 CPU 및 네트워크입니다.
사전 요구 사항
-
cluster-admin역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
다음 예에 따라
example-kataconfig.yaml매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 선택 사항: 노드 레이블을 적용하여 특정 노드에
kata-remote를 설치한 경우 키와 값(예:cc: 'true')을 지정합니다.
다음 명령을 실행하여
KataConfigCR을 생성합니다.oc apply -f example-kataconfig.yaml
$ oc apply -f example-kataconfig.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 새로운
KataConfigCR이 생성되고 작업자 노드에kata-remote가 런타임 클래스로 설치됩니다.설치를 확인하기 전에
kata-remote설치가 완료되고 작업자 노드가 재부팅될 때까지 기다립니다.다음 명령을 실행하여 설치 진행 상황을 모니터링합니다.
watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"
$ watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"Copy to Clipboard Copied! Toggle word wrap Toggle overflow kataNodes아래의 모든 작업자의 상태가설치되고이유를 지정하지 않고InProgress조건이False이면 클러스터에kata-remote가 설치됩니다.다음 명령을 실행하여 피어 Pod 이미지를 빌드하고 libvirt 볼륨에 업로드했는지 확인합니다.
oc describe configmap peer-pods-cm -n openshift-sandboxed-containers-operator
$ oc describe configmap peer-pods-cm -n openshift-sandboxed-containers-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
UPDATEDMACHINECOUNT가MACHINECOUNT와 같은 경우UPDATEDMACHINECOUNT가 UPDATED 상태에 있는지 확인하려면kata-oc머신 구성 풀 진행 상황을 모니터링합니다.watch oc get mcp/kata-oc
$ watch oc get mcp/kata-ocCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 데몬 세트를 확인합니다.
oc get -n openshift-sandboxed-containers-operator ds/peerpodconfig-ctrl-caa-daemon
$ oc get -n openshift-sandboxed-containers-operator ds/peerpodconfig-ctrl-caa-daemonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 런타임 클래스를 확인합니다.
oc get runtimeclass
$ oc get runtimeclassCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME HANDLER AGE kata kata 152m kata-remote kata-remote 152m
NAME HANDLER AGE kata kata 152m kata-remote kata-remote 152mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.8. Trustee 인증 보안 생성 링크 복사링크가 클립보드에 복사되었습니다!
Trustee에 대한 인증 시크릿을 생성해야 합니다.
사전 요구 사항
-
OpenShift CLI(
oc)가 설치되어 있습니다. -
cluster-admin역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
다음 명령을 실행하여 개인 키를 생성합니다.
openssl genpkey -algorithm ed25519 > privateKey
$ openssl genpkey -algorithm ed25519 > privateKeyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 공개 키를 생성합니다.
openssl pkey -in privateKey -pubout -out publicKey
$ openssl pkey -in privateKey -pubout -out publicKeyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 보안을 생성합니다.
oc create secret generic kbs-auth-public-key --from-file=publicKey -n trustee-operator-system
$ oc create secret generic kbs-auth-public-key --from-file=publicKey -n trustee-operator-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 시크릿을 확인합니다.
oc get secret -n trustee-operator-system
$ oc get secret -n trustee-operator-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.9. Trustee 구성 맵 생성 링크 복사링크가 클립보드에 복사되었습니다!
Trustee 서버를 구성하려면 구성 맵을 생성해야 합니다.
사전 요구 사항
- Trustee를 위한 경로를 생성했습니다.
프로세스
kbs-config-cm.yaml매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 구성 맵을 생성합니다.
oc apply -f kbs-config-cm.yaml
$ oc apply -f kbs-config-cm.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.10. IBM Secure Execution 헤더 가져오기 링크 복사링크가 클립보드에 복사되었습니다!
IBM Secure Execution (SE) 헤더를 가져와야 합니다.
사전 요구 사항
- SE 헤더를 일시적으로 저장할 네트워크 블록 스토리지 장치가 있습니다.
프로세스
다음 명령을 실행하여 SE 헤더의 임시 폴더를 생성합니다.
mkdir -p /tmp/ibmse/hdr
$ mkdir -p /tmp/ibmse/hdrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 IBM s390 Linux 리포지토리에서
pvextract-hdr툴을 다운로드합니다.wget https://github.com/ibm-s390-linux/s390-tools/raw/v2.33.1/rust/pvattest/tools/pvextract-hdr -O /tmp/pvextract-hdr
$ wget https://github.com/ibm-s390-linux/s390-tools/raw/v2.33.1/rust/pvattest/tools/pvextract-hdr -O /tmp/pvextract-hdrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 툴을 실행 가능하게 만듭니다.
chmod +x /tmp/pvextract-hdr
$ chmod +x /tmp/pvextract-hdrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
$IMAGE_OUTPUT_DIR변수를 설정합니다.export IMAGE=$IMAGE_OUTPUT_DIR/se-podvm-commit-short-id.qcow2
$ export IMAGE=$IMAGE_OUTPUT_DIR/se-podvm-commit-short-id.qcow2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
$IMAGE변수를 설정합니다.export IMAGE=/root/rooo/se-podvm-d1fb986-dirty-s390x.qcow2
$ export IMAGE=/root/rooo/se-podvm-d1fb986-dirty-s390x.qcow2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
nbd커널 모듈을 활성화합니다.modprobe nbd
$ modprobe nbdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 SE 이미지를 NBD(네트워크 블록 장치)로 연결합니다.
qemu-nbd --connect=/dev/nbd0 $IMAGE
$ qemu-nbd --connect=/dev/nbd0 $IMAGECopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 SE 이미지의 마운트 디렉터리를 생성합니다.
mkdir -p /mnt/se-image/
$ mkdir -p /mnt/se-image/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 프로세스를 일시 중지합니다.
sleep 1
$ sleep 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 블록 장치를 나열합니다.
lsblk
$ lsblkCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 사용 가능한 NBD 파티션에 SE 이미지 디렉토리를 마운트하고 다음 명령을 실행하여 SE 헤더를 추출합니다.
mount /dev/<nbdXp1> /mnt/se-image/ /tmp/pvextract-hdr \ -o /tmp/ibmse/hdr/hdr.bin /mnt/se-image/se.img
$ mount /dev/<nbdXp1> /mnt/se-image/ /tmp/pvextract-hdr \ -o /tmp/ibmse/hdr/hdr.bin /mnt/se-image/se.imgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
SE header found at offset 0x014000 SE header written to '/tmp/ibmse/hdr/hdr.bin' (640 bytes)
SE header found at offset 0x014000 SE header written to '/tmp/ibmse/hdr/hdr.bin' (640 bytes)Copy to Clipboard Copied! Toggle word wrap Toggle overflow NBD를 사용할 수 없는 경우 다음 오류가 표시됩니다.
mount: /mnt/se-image: can't read superblock on /dev/nbd0p1
mount: /mnt/se-image: can't read superblock on /dev/nbd0p1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 SE 이미지 디렉터리를 마운트 해제합니다.
umount /mnt/se-image/
$ umount /mnt/se-image/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 네트워크 블록 스토리지 장치의 연결을 해제합니다.
qemu-nbd --disconnect /dev/nbd0
$ qemu-nbd --disconnect /dev/nbd0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.11. IBM Secure Execution 인증서 및 키 구성 링크 복사링크가 클립보드에 복사되었습니다!
작업자 노드에 대한 IBM Secure Execution (SE) 인증서 및 키를 구성해야 합니다.
사전 요구 사항
- bastion 노드의 IP 주소가 있습니다.
- 작업자 노드의 내부 IP 주소가 있습니다.
프로세스
다음 단계를 수행하여 인증 정책 필드를 가져옵니다.
다음 명령을 실행하여 OpenShift Trustee 리포지토리에서
se_parse_hdr.py스크립트를 다운로드합니다.wget https://github.com/openshift/trustee/raw/main/attestation-service/verifier/src/se/se_parse_hdr.py -O /tmp/se_parse_hdr.py
$ wget https://github.com/openshift/trustee/raw/main/attestation-service/verifier/src/se/se_parse_hdr.py -O /tmp/se_parse_hdr.pyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 SE Host Key Document (HKD) 인증서에 대한 임시 디렉토리를 만듭니다.
mkdir /tmp/ibmse/hkds/
$ mkdir /tmp/ibmse/hkds/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 HKD(Host Key Document) 인증서를 임시 디렉터리에 복사합니다.
cp ~/path/to/<hkd_cert.crt> /tmp/ibmse/hkds/<hkd_cert.crt>
$ cp ~/path/to/<hkd_cert.crt> /tmp/ibmse/hkds/<hkd_cert.crt>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고HKD 인증서는 피어 Pod 보안을 생성할 때 다운로드한 인증서와 동일해야 합니다.
se_parse_hdr.py스크립트를 실행하여 인증 정책 필드를 가져옵니다.python3 /tmp/se_parse_hdr.py /tmp/ibmse/hdr/hdr.bin /tmp/ibmse/hkds/<hkd_cert.crt>
$ python3 /tmp/se_parse_hdr.py /tmp/ibmse/hdr/hdr.bin /tmp/ibmse/hkds/<hkd_cert.crt>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SE 인증 정책 구성 맵에 이러한 값을 기록합니다.
다음 단계를 수행하여 인증서 및 CRL(인증서 취소 목록)을 가져옵니다.
다음 명령을 실행하여 인증서에 대한 임시 디렉터리를 생성합니다.
mkdir /tmp/ibmse/certs
$ mkdir /tmp/ibmse/certsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
ibm-z-host-key-signing-gen2.crt인증서를 다운로드합니다.wget https://www.ibm.com/support/resourcelink/api/content/public/ibm-z-host-key-signing-gen2.crt -O /tmp/ibmse/certs/ibm-z-host-key-signing-gen2.crt
$ wget https://www.ibm.com/support/resourcelink/api/content/public/ibm-z-host-key-signing-gen2.crt -O /tmp/ibmse/certs/ibm-z-host-key-signing-gen2.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 CryostatCert
CA.crt인증서를 다운로드합니다.wget https://www.ibm.com/support/resourcelink/api/content/public/DigiCertCA.crt -O /tmp/ibmse/certs/DigiCertCA.crt
$ wget https://www.ibm.com/support/resourcelink/api/content/public/DigiCertCA.crt -O /tmp/ibmse/certs/DigiCertCA.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 CRL의 임시 디렉터리를 생성합니다.
mkdir /tmp/ibmse/crls
$ mkdir /tmp/ibmse/crlsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 MellanoxCert
TrustedRootG4.crl파일을 다운로드합니다.wget http://crl3.digicert.com/DigiCertTrustedRootG4.crl -O /tmp/ibmse/crls/DigiCertTrustedRootG4.crl
$ wget http://crl3.digicert.com/DigiCertTrustedRootG4.crl -O /tmp/ibmse/crls/DigiCertTrustedRootG4.crlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 clevisCert
TrustedG4CodeSigningRSA4096SHA3842021CA1.crl파일을 다운로드합니다.wget http://crl3.digicert.com/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crl -O /tmp/ibmse/crls/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crl
$ wget http://crl3.digicert.com/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crl -O /tmp/ibmse/crls/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
RSA 키를 생성합니다.
다음 명령을 실행하여 RSA 키 쌍을 생성합니다.
openssl genrsa -aes256 -passout pass:<password> -out /tmp/encrypt_key-psw.pem 4096
$ openssl genrsa -aes256 -passout pass:<password> -out /tmp/encrypt_key-psw.pem 40961 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- RSA 키 암호를 지정합니다.
다음 명령을 실행하여 RSA 키에 대한 임시 디렉터리를 생성합니다.
mkdir /tmp/ibmse/rsa
$ mkdir /tmp/ibmse/rsaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
encrypt_key.pub키를 만듭니다.openssl rsa -in /tmp/encrypt_key-psw.pem -passin pass:<password> -pubout -out /tmp/ibmse/rsa/encrypt_key.pub
$ openssl rsa -in /tmp/encrypt_key-psw.pem -passin pass:<password> -pubout -out /tmp/ibmse/rsa/encrypt_key.pubCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
encrypt_key.pem키를 생성합니다.openssl rsa -in /tmp/encrypt_key-psw.pem -passin pass:<password> -out /tmp/ibmse/rsa/encrypt_key.pem
$ openssl rsa -in /tmp/encrypt_key-psw.pem -passin pass:<password> -out /tmp/ibmse/rsa/encrypt_key.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
다음 명령을 실행하여
/tmp/ibmse디렉터리의 구조를 확인합니다.tree /tmp/ibmse
$ tree /tmp/ibmseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 단계를 수행하여 이러한 파일을 OpenShift Container Platform 작업자 노드에 복사합니다.
다음 명령을 실행하여
/tmp/ibmse디렉토리에서 압축 파일을 생성합니다.tar -czf ibmse.tar.gz -C /tmp/ibmse
$ tar -czf ibmse.tar.gz -C /tmp/ibmseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
.tar.gz파일을 클러스터의 bastion 노드에 복사합니다.scp /tmp/ibmse.tar.gz root@<ocp_bastion_ip>:/tmp
$ scp /tmp/ibmse.tar.gz root@<ocp_bastion_ip>:/tmp1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- bastion 노드의 IP 주소를 지정합니다.
다음 명령을 실행하여 SSH를 통해 bastion 노드에 연결합니다.
ssh root@<ocp_bastion_ip>
$ ssh root@<ocp_bastion_ip>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
.tar.gz파일을 각 작업자 노드에 복사합니다.scp /tmp/ibmse.tar.gz core@<worker_node_ip>:/tmp
$ scp /tmp/ibmse.tar.gz core@<worker_node_ip>:/tmp1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 작업자 노드의 IP 주소를 지정합니다.
다음 명령을 실행하여 각 작업자 노드에서
.tar.gz를 추출합니다.ssh core@<worker_node_ip> 'sudo mkdir -p /opt/confidential-containers/ && sudo tar -xzf /tmp/ibmse.tar.gz -C /opt/confidential-containers/'
$ ssh core@<worker_node_ip> 'sudo mkdir -p /opt/confidential-containers/ && sudo tar -xzf /tmp/ibmse.tar.gz -C /opt/confidential-containers/'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
ibmse폴더 권한을 업데이트합니다.ssh core@<worker_node_ip> 'sudo chmod -R 755 /opt/confidential-containers/ibmse/'
$ ssh core@<worker_node_ip> 'sudo chmod -R 755 /opt/confidential-containers/ibmse/'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.12. 영구 스토리지 구성 요소 생성 링크 복사링크가 클립보드에 복사되었습니다!
ibmse 폴더를 Trustee Pod에 마운트하려면 영구 스토리지 구성 요소, PV(영구 볼륨) 및 PVC(영구 볼륨 클레임)를 생성해야 합니다.
프로세스
persistent-volume.yaml매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 영구 볼륨을 생성합니다.
oc apply -f persistent-volume.yaml
$ oc apply -f persistent-volume.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow persistent-volume-claim.yaml매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 영구 볼륨 클레임을 생성합니다.
oc apply -f persistent-volume-claim.yaml
$ oc apply -f persistent-volume-claim.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.13. 인증 정책 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 인증 정책 설정을 구성할 수 있습니다.
- 참조 값
하드웨어 플랫폼의 신뢰할 수 있는 다이제스트를 지정하여 RVPS(Reference Value Provider Service)에 대한 참조 값을 구성할 수 있습니다.
클라이언트는 실행 중인 소프트웨어, TEE(신뢰할 수 있는 실행 환경) 하드웨어 및 펌웨어에서 측정을 수집하고 클레임과 함께 Attestation Server에 견적을 제출합니다. 이러한 측정은 Trustee에 등록된 신뢰할 수 있는 다이제스트와 일치해야 합니다. 이 프로세스에서는 기밀 VM(CVM)이 예상 소프트웨어 스택을 실행 중이고 변조되지 않도록 합니다.
- 클라이언트의 시크릿
- 테스트된 클라이언트와 공유할 하나 이상의 시크릿을 생성해야 합니다.
- 리소스 액세스 정책
액세스할 리소스를 결정하려면 Trustee 정책 엔진에 대한 정책을 구성해야 합니다.
TEE 증명의 유효성을 결정하는 신뢰 정책 엔진과 인증 서비스 정책 엔진을 혼동하지 마십시오.
- 인증 정책
- IBM Secure Execution에 대한 인증 정책을 생성해야 합니다.
프로세스
rvps-configmap.yaml매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 이 값을 비워 둡니다.
다음 명령을 실행하여 RVPS 구성 맵을 생성합니다.
oc apply -f rvps-configmap.yaml
$ oc apply -f rvps-configmap.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 예에 따라 인증된 클라이언트와 공유할 하나 이상의 시크릿을 생성합니다.
oc create secret generic kbsres1 --from-literal key1=<res1val1> \ --from-literal key2=<res1val2> -n trustee-operator-system
$ oc create secret generic kbsres1 --from-literal key1=<res1val1> \ --from-literal key2=<res1val2> -n trustee-operator-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예에서
kbsres1시크릿에는 두 개의 항목(key1,key2)이 있으며, 이 항목은 Trustee 클라이언트가 검색합니다. 요구 사항에 따라 더 많은 시크릿을 추가할 수 있습니다.resourcepolicy-configmap.yaml매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 리소스 정책의 이름
policy.rego는 Trustee 구성 맵에 정의된 리소스 정책과 일치해야 합니다. - 2
- 리소스 정책은 Open Policy Agent 사양을 따릅니다. 이 예제에서는 TEE가 샘플 attester가 아닌 경우 모든 리소스를 검색할 수 있습니다.
다음 명령을 실행하여 리소스 정책 구성 맵을 생성합니다.
oc apply -f resourcepolicy-configmap.yaml
$ oc apply -f resourcepolicy-configmap.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow attestation-policy.yaml매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 인증 정책 구성 맵을 생성합니다.
oc apply -f attestation-policy.yaml
$ oc apply -f attestation-policy.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.14. KbsConfig 사용자 정의 리소스 생성 링크 복사링크가 클립보드에 복사되었습니다!
Trustee를 시작하려면 KbsConfig CR(사용자 정의 리소스)을 생성해야 합니다.
그런 다음 Trustee pod 및 pod 로그를 확인하여 구성을 확인합니다.
프로세스
kbsconfig-cr.yaml매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
KbsConfigCR을 생성합니다.oc apply -f kbsconfig-cr.yaml
$ oc apply -f kbsconfig-cr.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
다음 명령을 실행하여 기본 프로젝트를 설정합니다.
oc project trustee-operator-system
$ oc project trustee-operator-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 Pod를 확인합니다.
oc get pods -n trustee-operator-system
$ oc get pods -n trustee-operator-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME READY STATUS RESTARTS AGE trustee-deployment-8585f98449-9bbgl 1/1 Running 0 22m trustee-operator-controller-manager-5fbd44cd97-55dlh 2/2 Running 0 59m
NAME READY STATUS RESTARTS AGE trustee-deployment-8585f98449-9bbgl 1/1 Running 0 22m trustee-operator-controller-manager-5fbd44cd97-55dlh 2/2 Running 0 59mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
POD_NAME환경 변수를 설정합니다.POD_NAME=$(oc get pods -l app=kbs -o jsonpath='{.items[0].metadata.name}' -n trustee-operator-system)$ POD_NAME=$(oc get pods -l app=kbs -o jsonpath='{.items[0].metadata.name}' -n trustee-operator-system)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 Pod 로그를 확인합니다.
oc logs -n trustee-operator-system $POD_NAME
$ oc logs -n trustee-operator-system $POD_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
ibmse-pvc영구 볼륨 클레임을 Trustee Pod에 노출합니다.oc patch deployment trustee-deployment --namespace=trustee-operator-system --type=json -p='[{"op": "remove", "path": "/spec/template/spec/volumes/5/persistentVolumeClaim/readOnly"}]'$ oc patch deployment trustee-deployment --namespace=trustee-operator-system --type=json -p='[{"op": "remove", "path": "/spec/template/spec/volumes/5/persistentVolumeClaim/readOnly"}]'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
kbs-service가 노드 포트에 노출되었는지 확인합니다.oc get svc kbs-service -n trustee-operator-system
$ oc get svc kbs-service -n trustee-operator-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kbs-service NodePort 198.51.100.54 <none> 8080:31862/TCP 23h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kbs-service NodePort 198.51.100.54 <none> 8080:31862/TCP 23hCopy to Clipboard Copied! Toggle word wrap Toggle overflow kbs-serviceURL은https://<worker_node_ip>:<node_port> 입니다(예:https://172.16.0.56:31862).
5.3.15. 인증 프로세스 확인 링크 복사링크가 클립보드에 복사되었습니다!
테스트 Pod를 생성하고 시크릿을 검색하여 인증 프로세스를 확인할 수 있습니다. Pod 이미지는 Key Broker Service 및 기본 인증 흐름을 테스트하는 툴인 KBS 클라이언트를 배포합니다.
이 절차는 인증이 작동하는지 확인하는 예입니다. 메모리 덤프를 사용하여 데이터를 캡처할 수 있으므로 표준 I/O에 민감한 데이터를 작성하지 마십시오. 메모리에 기록된 데이터만 암호화됩니다.
사전 요구 사항
- Trustee 서버와 테스트 Pod가 동일한 클러스터에서 실행되지 않는 경우 경로를 생성했습니다.
프로세스
verification-pod.yaml매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 Pod를 생성합니다.
oc create -f verification-pod.yaml
$ oc create -f verification-pod.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
https.crt파일을kbs-clientPod에 복사합니다.oc cp https.crt kbs-client:/
$ oc cp https.crt kbs-client:/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 Pod 시크릿을 가져옵니다.
oc exec -it kbs-client -- kbs-client --cert-file https.crt \ --url https://kbs-service:8080 get-resource \ --path default/kbsres1/key1
$ oc exec -it kbs-client -- kbs-client --cert-file https.crt \ --url https://kbs-service:8080 get-resource \ --path default/kbsres1/key1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
res1val1
res1val1Copy to Clipboard Copied! Toggle word wrap Toggle overflow Trustee 서버는 인증에 성공한 경우에만 시크릿을 반환합니다.