8.14. IBM Secure Execution 인증서 및 키 구성
작업자 노드에 대한 IBM Secure Execution (SE) 인증서 및 키를 구성해야 합니다.
사전 요구 사항
- bastion 노드의 IP 주소가 있습니다.
- 작업자 노드의 내부 IP 주소가 있습니다.
프로세스
다음 단계를 수행하여 KBS(Key Broker Service) 인증서 및 키를 생성합니다.
다음 예에 따라
kbs.conf구성 파일을 생성합니다.[req] default_bits = 2048 default_keyfile = localhost.key distinguished_name = req_distinguished_name req_extensions = req_ext x509_extensions = v3_ca [req_distinguished_name] countryName = Country Name (2-letter code) countryName_default = <country_name> stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = <state_name> localityName = Locality Name (eg, city) localityName_default = <locality_name> organizationName = Organization Name (eg, company) organizationName_default = Red Hat organizationalUnitName = organizationalunit organizationalUnitName_default = Development commonName = Common Name (e.g. server FQDN or YOUR name) commonName_default = kbs-service commonName_max = 64 [req_ext] subjectAltName = @alt_names [v3_ca] subjectAltName = @alt_names [alt_names] IP.1 = <trustee_ip> DNS.1 = localhost DNS.2 = 127.0.0.1다음 명령을 실행하여 KBS 키 및 자체 서명 인증서를 생성합니다.
openssl req -x509 -nodes -days 365 \ -newkey rsa:2048 \ -keyout kbs.key \ -out kbs.crt \ -config kbs.conf \ -passin pass:다음 명령을 실행하여 KBS 키를
ibmse디렉터리에 복사합니다.$ cp kbs.key /tmp/ibmse/kbs.key다음 명령을 실행하여 KBS 인증서를
ibmse디렉터리에 복사합니다.$ cp kbs.crt /tmp/ibmse/kbs.crt
다음 단계를 수행하여 인증 정책 필드를 가져옵니다.
다음 명령을 실행하여
GetRvps.sh스크립트를 다운로드할 디렉터리를 만듭니다.$ mkdir -p Rvps-Extraction/다음 명령을 실행하여 스크립트를 다운로드합니다.
$ wget https://github.com/openshift/sandboxed-containers-operator/raw/devel/scripts/rvps-extraction/GetRvps.sh -O $PWD/GetRvps.sh다음 명령을 실행하여 하위 디렉터리를 생성합니다.
$ mkdir -p Rvps-Extraction/static-files다음 명령을 실행하여
static-files디렉터리로 이동합니다.$ cd Rvps-Extraction/static-files다음 명령을 실행하여
pvextract-hdr툴을 다운로드합니다.$ wget https://github.com/openshift/sandboxed-containers-operator/raw/devel/scripts/rvps-extraction/static-files/pvextract-hdr -O $PWD/pvextract-hdr다음 명령을 실행하여 툴을 실행 가능하게 만듭니다.
$ chmod +x pvextract-hdr다음 명령을 실행하여
se_parse_hdr.py스크립트를 다운로드합니다.$ wget https://github.com/openshift/sandboxed-containers-operator/raw/devel/scripts/rvps-extraction/static-files/se_parse_hdr.py -O $PWD/se_parse_hdr.py다음 명령을 실행하여 HKD(Host Key Document) 인증서를
static-files디렉터리에 복사합니다.$ cp ~/path/to/<hkd_cert.crt> .static-files디렉터리에는 다음 파일이 포함되어 있습니다.-
HKD.crt -
pvextract-hdr -
se_parse_hdr.py
-
다음 명령을 실행하여
Rvps-Extraction디렉터리로 이동합니다.$ cd ..다음 명령을 실행하여
GetRvps.sh스크립트를 실행 가능하게 만듭니다.$ chmod +x GetRvps.sh스크립트를 실행합니다.
$ ./GetRvps.sh출력 예
***Installing necessary packages for RVPS values extraction *** Updating Subscription Management repositories. Last metadata expiration check: 0:37:12 ago on Mon Nov 18 09:20:29 2024. Package python3-3.9.19-8.el9_5.1.s390x is already installed. Package python3-cryptography-36.0.1-4.el9.s390x is already installed. Package kmod-28-10.el9.s390x is already installed. Dependencies resolved. Nothing to do. Complete! ***Installation Finished *** 1) Generate the RVPS From Local Image from User pc 2) Generate RVPS from Volume 3) Quit Please enter your choice:2를 입력하여 볼륨에서 참조 값 공급자 서비스를 생성합니다.Please enter your choice: 2libvirt 풀 이름에
fa-pp를 입력합니다.Enter the Libvirt Pool Name: fa-pplibvirt 게이트웨이 URI를 입력합니다.
Enter the Libvirt URI Name: <libvirt-uri>1 - 1
- 피어 Pod 시크릿 을 생성하는 데 사용한
LIBVIRT_URI값을 지정합니다.
libvirt 볼륨 이름에
fa-pp-vol을 입력합니다.Enter the Libvirt Volume Name: fa-pp-vol출력 예
Downloading from PODVM Volume... mount: /mnt/myvm: special device /dev/nbd3p1 does not exist. Error: Failed to mount the image. Retrying... Mounting on second attempt passed /dev/nbd3 disconnected SE header found at offset 0x014000 SE header written to '/root/Rvps-Extraction/output-files/hdr.bin' (640 bytes) se.tag: 42f3fe61e8a7e859cab3bb033fd11c61 se.image_phkh: 92d0aff6eb86719b6b1ea0cb98d2c99ff2ec693df3efff2158f54112f6961508 provenance = ewogICAgInNlLmF0dGVzdGF0aW9uX3Boa2giOiBbCiAgICAgICAgIjkyZDBhZmY2ZWI4NjcxOWI2YjFlYTBjYjk4ZDJjOTlmZjJlYzY5M2RmM2VmZmYyMTU4ZjU0MTEyZjY5NjE1MDgiCiAgICBdLAogICAgInNlLnRhZyI6IFsKICAgICAgICAiNDJmM2ZlNjFlOGE3ZTg1OWNhYjNiYjAzM2ZkMTFjNjEiCiAgICBdLAogICAgInNlLmltYWdlX3Boa2giOiBbCiAgICAgICAgIjkyZDBhZmY2ZWI4NjcxOWI2YjFlYTBjYjk4ZDJjOTlmZjJlYzY5M2RmM2VmZmYyMTU4ZjU0MTEyZjY5NjE1MDgiCiAgICBdLAogICAgInNlLnVzZXJfZGF0YSI6IFsKICAgICAgICAiMDAiCiAgICBdLAogICAgInNlLnZlcnNpb24iOiBbCiAgICAgICAgIjI1NiIKICAgIF0KfQo= -rw-r--r--. 1 root root 640 Dec 16 10:57 /root/Rvps-Extraction/output-files/hdr.bin -rw-r--r--. 1 root root 446 Dec 16 10:57 /root/Rvps-Extraction/output-files/ibmse-policy.rego -rw-r--r--. 1 root root 561 Dec 16 10:57 /root/Rvps-Extraction/output-files/se-message
다음 단계를 수행하여 인증서 및 CRL(인증서 취소 목록)을 가져옵니다.
다음 명령을 실행하여 인증서에 대한 임시 디렉터리를 생성합니다.
$ mkdir /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.crt다음 명령을 실행하여 CryostatCert
CA.crt인증서를 다운로드합니다.$ wget https://www.ibm.com/support/resourcelink/api/content/public/DigiCertCA.crt -O /tmp/ibmse/certs/DigiCertCA.crt다음 명령을 실행하여 CRL의 임시 디렉터리를 생성합니다.
$ mkdir /tmp/ibmse/crls다음 명령을 실행하여
ibm-z-host-key-gen2.crl파일을 다운로드합니다.$ wget https://www.ibm.com/support/resourcelink/api/content/public/ibm-z-host-key-gen2.crl -O /tmp/ibmse/crls/ibm-z-host-key-gen2.crl다음 명령을 실행하여 MellanoxCert
TrustedRootG4.crl파일을 다운로드합니다.$ wget http://crl3.digicert.com/DigiCertTrustedRootG4.crl -O /tmp/ibmse/crls/DigiCertTrustedRootG4.crl다음 명령을 실행하여 clevisCert
TrustedG4CodeSigningRSA4096SHA3842021CA1.crl파일을 다운로드합니다.$ wget http://crl3.digicert.com/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crl -O /tmp/ibmse/crls/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crl다음 명령을 실행하여
hdr.bin파일의 임시 디렉토리를 만듭니다.$ mkdir -p /tmp/ibmse/hdr/다음 명령을 실행하여
hdr.bin파일을hdr디렉토리에 복사합니다.$ cp /root/Rvps-Extraction/output-files/hdr.bin /tmp/ibmse/hdr/다음 명령을 실행하여 HKD(Host Key Document) 인증서에 대한 임시 디렉토리를 만듭니다.
$ mkdir -p /tmp/ibmse/hkds다음 명령을 실행하여 HKD 인증서를
hkds디렉토리에 복사합니다.$ cp ~/path/to/<hkd_cert.crt> /tmp/ibmse/hkds/
RSA 키를 생성합니다.
다음 명령을 실행하여 RSA 키 쌍을 생성합니다.
$ openssl genrsa -aes256 -passout pass:<password> -out /tmp/encrypt_key-psw.pem 40961 - 1
- RSA 키 암호를 지정합니다.
다음 명령을 실행하여 RSA 키에 대한 임시 디렉터리를 생성합니다.
$ mkdir -p /tmp/ibmse/rsa다음 명령을 실행하여
encrypt_key.pub키를 만듭니다.$ openssl rsa -in /tmp/encrypt_key-psw.pem -passin pass:<password> -pubout -out /tmp/ibmse/rsa/encrypt_key.pub다음 명령을 실행하여
encrypt_key.pem키를 생성합니다.$ openssl rsa -in /tmp/encrypt_key-psw.pem -passin pass:<password> -out /tmp/ibmse/rsa/encrypt_key.pem
다음 명령을 실행하여
/tmp/ibmse디렉터리의 구조를 확인합니다.$ tree /tmp/ibmse출력 예
/tmp/ibmse ├──kbs.key ├──kbs.crt | ├── certs │ ├── ibm-z-host-key-signing-gen2.crt | └── DigiCertCA.crt ├── crls │ └── ibm-z-host-key-gen2.crl │ └── DigiCertTrustedRootG4.crl │ └── DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crl ├── hdr │ └── hdr.bin ├── hkds │ └── <hkd_cert.crt> └── rsa ├── encrypt_key.pem └── encrypt_key.pub다음 단계를 수행하여 이러한 파일을 OpenShift Container Platform 작업자 노드에 복사합니다.
다음 명령을 실행하여
/tmp/ibmse디렉토리에서 압축 파일을 생성합니다.$ tar -czf ibmse.tar.gz -C /tmp/ ibmse다음 명령을 실행하여
.tar.gz파일을 클러스터의 bastion 노드에 복사합니다.$ scp /tmp/ibmse.tar.gz root@<ocp_bastion_ip>:/tmp1 - 1
- bastion 노드의 IP 주소를 지정합니다.
다음 명령을 실행하여 SSH를 통해 bastion 노드에 연결합니다.
$ ssh root@<ocp_bastion_ip>다음 명령을 실행하여
.tar.gz파일을 각 작업자 노드에 복사합니다.$ scp /tmp/ibmse.tar.gz core@<worker_node_ip>:/tmp1 - 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/'다음 명령을 실행하여
ibmse폴더 권한을 업데이트합니다.$ ssh core@<worker_node_ip> 'sudo chmod -R 755 /opt/confidential-containers/ibmse/'
다음 단계를 수행하여 KBS 키 및 인증서를 사용하여 클러스터에 보안을 생성합니다.
다음 예에 따라
kbs-https-certificate.yaml매니페스트 파일을 생성합니다.apiVersion: v1 kind: Secret metadata: name: kbs-https-certificate namespace: trustee-operator-system data: https.crt: $(cat /tmp/ibmse/kbs.crt | base64 -w 0)다음 명령을 실행하여 KBS 인증서로 보안을 생성합니다.
$ oc apply -f kbs-https-certificate.yaml다음 예에 따라
kbs-https-key.yaml매니페스트 파일을 생성합니다.apiVersion: v1 kind: Secret metadata: name: kbs-https-key namespace: trustee-operator-system data: https.key: $(cat /tmp/ibmse/kbs.key | base64 -w 0)다음 명령을 실행하여 KBS 키로 보안을 생성합니다.
$ oc apply -f kbs-https-key.yaml