3.6. IBM Secure Execution 証明書とキーの設定
ワーカーノードの IBM Secure Execution (SE) 証明書とキーを設定する必要があります。
前提条件
- bastion ノードの IP アドレスがある。
- ワーカーノードの内部 IP アドレスがある。
手順
- Key Broker Service (KBS) 証明書とキーを生成します。
- アテステーションポリシーフィールドを取得します。
- 証明書と証明書失効リスト (CRL) をダウンロードします。
- RSA キーを生成します。
- ファイルを確認して OpenShift Container Platform ワーカーノードにコピーします。
- KBS キーと証明書を使用してクラスター内にシークレットを作成します。
3.6.1. Key Broker Service 証明書とキーの生成 リンクのコピーリンクがクリップボードにコピーされました!
Key Broker Service (KBS) 証明書とキーを生成する必要があります。
手順
次の例に従って
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 = <worker_node_ip> DNS.1 = localhost DNS.2 = 127.0.0.1<worker_node_ip>次のコマンドを実行して、ワーカーノードの IP アドレスを取得します。
$ oc get node $(oc get pod -n trustee-operator-system -o jsonpath='{.items[0].spec.nodeName}') -o jsonpath='{.status.addresses[?(@.type=="InternalIP")].address}'
次のコマンドを実行して、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
3.6.2. アテステーションポリシーフィールドの取得 リンクのコピーリンクがクリップボードにコピーされました!
Reference Value Provider Service (RVPS) を使用して、アテステーションポリシーフィールドを取得する必要があります。
手順
次のコマンドを実行して、
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次のコマンドを実行して、Host Key Document (HKD) 証明書を
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次のコマンドを実行して、アテステーションポリシーフィールドの値を取得します。
$ cat /root/Rvps-Extraction/output-files/se-sample出力例
{ "se.attestation_phkh": [ "50a59219c5034f23f69a81893b77f80190dab0ab4781d10b6631d6ed23ef38e4" ], "se.tag": [ "ded333bce2d721547ee2b59b1b96e7e5" ], "se.image_phkh": [ "50a59219c5034f23f69a81893b77f80190dab0ab4781d10b6631d6ed23ef38e4" ], "se.user_data": [ "00" ], "se.version": [ "256" ] }
3.6.3. 証明書と証明書失効リストのダウンロード リンクのコピーリンクがクリップボードにコピーされました!
IBM 証明書と証明書失効リスト (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次のコマンドを実行して、
DigiCertCA.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次のコマンドを実行して、
DigiCertTrustedRootG4.crlファイルをダウンロードします。$ wget http://crl3.digicert.com/DigiCertTrustedRootG4.crl -O /tmp/ibmse/crls/DigiCertTrustedRootG4.crl次のコマンドを実行して、
DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.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/次のコマンドを実行して、Host Key Document (HKD) 証明書用の一時ディレクトリーを作成します。
$ mkdir -p /tmp/ibmse/hkds次のコマンドを実行して、HKD 証明書を
hkdsディレクトリーにコピーします。$ cp ~/path/to/<hkd_cert.crt> /tmp/ibmse/hkds/
3.6.4. RSA キーの生成 リンクのコピーリンクがクリップボードにコピーされました!
暗号化用の RSA キーペアを生成する必要があります。
手順
次のコマンドを実行して RSA のキーペアを生成します。
$ openssl genrsa -aes256 -passout pass:<password> -out /tmp/encrypt_key-psw.pem 40961 次のコマンドを実行して、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
3.6.5. ワーカーノードへのファイルの検証とコピー リンクのコピーリンクがクリップボードにコピーされました!
/tmp/ibmse フォルダー構造を確認し、ファイルを OpenShift Container Platform ワーカーノードにコピーする必要があります。
手順
次のコマンドを実行して、
/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以下のコマンドを実行して、
/tmp/ibmseディレクトリーから圧縮ファイルを作成します。$ tar -czf ibmse.tar.gz -C /tmp/ibmse次のコマンドを実行して、
.tar.gzファイルをクラスターの bastion ノードにコピーします。$ scp /tmp/ibmse.tar.gz root@<ocp_bastion_ip>:/tmp1 次のコマンドを実行して、SSH 経由で bastion ノードに接続します。
$ ssh root@<ocp_bastion_ip>次のコマンドを実行して、
.tar.gzファイルを各ワーカーノードにコピーします。$ scp /tmp/ibmse.tar.gz core@<worker_node_ip>:/tmp1 次のコマンドを実行して、各ワーカーノードで
.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/'
3.6.6. Key Broker Service のシークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
Key Broker Service (KBS) キーと証明書を使用して、クラスター内にシークレットを作成する必要があります。
手順
次のコマンドを実行して、
kbs.crtファイルを Base64 でエンコードされた文字列に変換します。$ cat /tmp/ibmse/kbs.crt | base64 -w 0-
kbs-https-certificate.yamlマニフェストの文字列を記録します。 次の例に従って、
kbs-https-certificate.yamlマニフェストファイルを作成します。apiVersion: v1 kind: Secret metadata: name: kbs-https-certificate namespace: trustee-operator-system data: https.crt: <kbs_crt_value><kbs_crt_value>-
kbs.crtファイルから作成した Base64 でエンコードされた文字列を指定します。
次のコマンドを実行して、KBS 証明書を含むシークレットを作成します。
$ oc create -f kbs-https-certificate.yaml次のコマンドを実行して、
kbs.keyファイルを Base64 でエンコードされた文字列に変換します。$ cat /tmp/ibmse/kbs.key | base64 -w 0-
kbs-https-key.yamlマニフェストの文字列を記録します。 次の例に従って、
kbs-https-key.yamlマニフェストファイルを作成します。apiVersion: v1 kind: Secret metadata: name: kbs-https-key namespace: trustee-operator-system data: https.key: <kbs_key_value><kbs_key_value>-
kbs.keyファイルから作成した Base64 でエンコードされた文字列を指定します。
次のコマンドを実行して、KBS キーを使用してシークレットを作成します。
$ oc create -f kbs-https-key.yaml