5.3. IBM Z および IBM LinuxONE への Confidential Containers のデプロイ
OpenShift sandboxed containers をデプロイした後、IBM Z® および IBM® LinuxONE に Confidential Containers をデプロイできます。
IBM Z® および IBM® LinuxONE の Confidential Containers は、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
クラスターの要件
- Confidential compute attestation Operator をインストールするクラスターに Red Hat OpenShift Container Platform 4.15 以降がインストールされている。
次の手順を実行して、Confidential Containers をデプロイします。
- Confidential compute attestation Operator をインストールします。
- Trustee のルートを作成します。
- Confidential Containers フィーチャーゲートを有効にします。
- ピア Pod config map を更新します。
-
KataConfigカスタムリソース (CR) を削除します。 - ピア Pod のシークレットを更新します。
-
KataConfigCR を再作成します。 - Trustee 認証シークレットを作成します。
- Trustee config map を作成します。
- IBM Secure Execution (SE) ヘッダーを取得します。
- SE 証明書とキーを設定します。
- 永続ストレージコンポーネントを作成します。
アテステーションポリシーを設定します。
- 参照値を作成します。
- アテスしたクライアントのシークレットを作成します。
- リソースアクセスポリシーを作成します。
- SE のアテステーションポリシーを作成します。
-
KbsConfigCR を作成します。 - アテステーションプロセスを確認します。
5.3.1. Confidential compute attestation 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-systemnamespace を作成します。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 終端を使用してセキュアなルートを作成できます。外部の Ingress トラフィックは HTTPS としてルーター Pod に到達し、HTTP として Trustee Pod に渡されます。
前提条件
- Confidential Containers フィーチャーゲートを有効にしている。
- 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. Confidential Containers フィーチャーゲートの有効化 リンクのコピーリンクがクリップボードにコピーされました!
Confidential Containers フィーチャーゲートを有効にする必要があります。
手順
cc-feature-gate.yamlマニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して config map を作成します。
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 の更新 config map リンクのコピーリンクがクリップボードにコピーされました!
Confidential Containers のピア Pod config map を更新する必要があります。
Secure Boot を true に設定して、デフォルトで有効にします。デフォルト値は false で、セキュリティーリスクが発生します。
手順
以下の例に従って
peer-pods-cm.yamlマニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して config map を作成します。
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
5.3.6. ピア Pod シークレットの更新 リンクのコピーリンクがクリップボードにコピーされました!
Confidential Containers のピア Pod シークレットを更新する必要があります。
シークレットには、Pod 仮想マシン (VM) イメージとピア Pod インスタンスを作成するための認証情報が保存されます。
デフォルトでは、OpenShift Sandboxed Containers Operator はクラスターの作成に使用される認証情報に基づいてシークレットを作成します。ただし、異なる認証情報を使用するシークレットを手動で作成することはできます。
前提条件
-
REDHAT_OFFLINE_TOKEN。Red Hat API トークン で RHEL イメージをダウンロードするためにこのトークンを生成している。 -
HKD_CRTIBM Z® でのセキュアな実行を可能にする Host Key Document (HKD) 証明書がある。詳細は、IBM ドキュメントの Obtaining a host key document from Resource Link を参照してください。
手順
次の例に従って
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 カスタムリソースの再作成 リンクのコピーリンクがクリップボードにコピーされました!
Confidential Containers の KataConfig カスタムリソース (CR) を再作成する必要があります。
KataConfig CR を作成すると、ワーカーノードが自動的に再起動します。再起動には 10 分から 60 分以上かかる場合があります。再起動時間を妨げる要因は次のとおりです。
- より多くのワーカーノードを持つ大規模な OpenShift Container Platform デプロイメント。
- BIOS および診断ユーティリティーが有効である。
- 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の下にあるすべてのワーカーのステータスがinstalledで、理由を指定せずにInProgressの条件がFalseの場合、kataはクラスターにインストールされます。次のコマンドを実行して、ピア 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 次のコマンドを実行して、
kata-ocマシン設定プールの進行状況を監視し、UPDATEDMACHINECOUNTがMACHINECOUNTと等しいときにUPDATED状態であることを確認します。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 config map の作成 リンクのコピーリンクがクリップボードにコピーされました!
Trustee サーバーを設定するには、config map を作成する必要があります。
前提条件
- Trustee のルートを作成している。
手順
kbs-config-cm.yamlマニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して config map を作成します。
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 次のコマンドを実行して、Host Key Document (HKD) 証明書を一時ディレクトリーにコピーします。
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 アテステーションポリシー config map のこれらの値を記録します。
次の手順を実行して、証明書と証明書失効リスト (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 次のコマンドを実行して、
DigiCertCA.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 次のコマンドを実行して、
DigiCertTrustedRootG4.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 次のコマンドを実行して、
DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.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. アテステーションポリシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
次のアテステーションポリシー設定を指定できます。
- 参照値
ハードウェアプラットフォームの信頼できるダイジェストを指定することにより、Reference Value Provider Service (RVPS) の参照値を設定できます。
クライアントは、実行中のソフトウェア、Trusted Execution Environment (TEE) のハードウェアとファームウェアから測定値を収集し、請求とともに見積りを Attestation Server に送信します。これらの測定値は、Trustee に登録された信頼できるダイジェストと一致する必要があります。このプロセスにより、Confidential VM (CVM) が期待どおりのソフトウェアスタックを実行し、改ざんがされていないように確認します。
- クライアントのシークレット
- アテストされたクライアントと共有するシークレットを 1 つ以上作成する必要があります。
- リソースアクセスポリシー
アクセスするリソースを決定するには、Trustee ポリシーエンジンのポリシーを設定する必要があります。
Trustee ポリシーエンジンと、TEE 証拠の有効性を決定する Attestation Service ポリシーエンジンを混同しないでください。
- アテステーションポリシー
- IBM Secure Execution のアテステーションポリシーを作成する必要があります。
手順
rvps-configmap.yamlマニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この値は空のままにします。
次のコマンドを実行して、RVPS config map を作成します。
oc apply -f rvps-configmap.yaml
$ oc apply -f rvps-configmap.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例に従って、アテストされたクライアントと共有する 1 つ以上のシークレットを作成します。
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シークレットには 2 つのエントリー (key1、key2) があり、Trustee クライアントはこれらを取得します。要件に応じてシークレットを追加できます。resourcepolicy-configmap.yamlマニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- リソースポリシーの名前
policy.regoは、Trustee config map で定義されたリソースポリシーと一致する必要があります。 - 2
- リソースポリシーは Open Policy Agent 仕様に準拠します。この例では、TEE がサンプルのアテスターでない場合にすべてのリソースを取得できます。
次のコマンドを実行して、リソースポリシーの config map を作成します。
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 以下のコマンドを実行して、アテステーションポリシー config map を作成します。
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-serviceの URL は `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 サーバーは、証明書が成功した場合にのみシークレットを返します。