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 のシークレットを更新します。
-
KataConfig
CR を再作成します。 - Trustee 認証シークレットを作成します。
- Trustee config map を作成します。
- IBM Secure Execution (SE) ヘッダーを取得します。
- SE 証明書とキーを設定します。
- 永続ストレージコンポーネントを作成します。
アテステーションポリシーを設定します。
- 参照値を作成します。
- アテスしたクライアントのシークレットを作成します。
- リソースアクセスポリシーを作成します。
- SE のアテステーションポリシーを作成します。
-
KbsConfig
CR を作成します。 - アテステーションプロセスを確認します。
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-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
trustee-operator-system
namespace を作成します。oc apply -f trustee-namespace.yaml
$ oc apply -f trustee-namespace.yaml
Copy 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.yaml
Copy 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.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Operator が正常にインストールされていることを確認します。
oc get csv -n trustee-operator-system
$ oc get csv -n trustee-operator-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドが完了するまでに数分かかる場合があります。
次のコマンドを実行してプロセスを監視します。
watch oc get csv -n trustee-operator-system
$ watch oc get csv -n trustee-operator-system
Copy 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 Succeeded
Copy 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-system
Copy 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_HOST
Copy 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.io
Copy 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.yaml
Copy 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.yaml
Copy 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
ロールを持つユーザーとしてクラスターにアクセスできる。
手順
次のコマンドを実行して、
KataConfig
CR を削除します。oc delete kataconfig example-kataconfig
$ oc delete kataconfig example-kataconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、カスタムリソースが削除されたことを確認します。
oc get kataconfig example-kataconfig
$ oc get kataconfig example-kataconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
No example-kataconfig instances exist
No example-kataconfig instances exist
Copy 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_CRT
IBM 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.yaml
Copy 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')
。
次のコマンドを実行して、
KataConfig
CR を作成します。oc apply -f example-kataconfig.yaml
$ oc apply -f example-kataconfig.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい
KataConfig
CR が作成され、ワーカーノードに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-operator
Copy 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-oc
Copy 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-daemon
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してランタイムクラスを確認します。
oc get runtimeclass
$ oc get runtimeclass
Copy 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 152m
Copy 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 > privateKey
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、公開鍵を作成します。
openssl pkey -in privateKey -pubout -out publicKey
$ openssl pkey -in privateKey -pubout -out publicKey
Copy 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-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してシークレットを確認します。
oc get secret -n trustee-operator-system
$ oc get secret -n trustee-operator-system
Copy 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.yaml
Copy 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/hdr
Copy 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-hdr
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ツールを実行可能にします。
chmod +x /tmp/pvextract-hdr
$ chmod +x /tmp/pvextract-hdr
Copy 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.qcow2
Copy 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.qcow2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
nbd
カーネルモジュールを有効にします。modprobe nbd
$ modprobe nbd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、SE イメージをネットワークブロックデバイス (NBD) として接続します。
qemu-nbd --connect=/dev/nbd0 $IMAGE
$ qemu-nbd --connect=/dev/nbd0 $IMAGE
Copy 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 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ブロックデバイスをリスト表示します。
lsblk
$ lsblk
Copy 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.img
Copy 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/nbd0p1
Copy 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/nbd0
Copy 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.py
Copy 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/certs
Copy 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.crt
Copy 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.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、CRL の一時ディレクトリーを作成します。
mkdir /tmp/ibmse/crls
$ mkdir /tmp/ibmse/crls
Copy 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.crl
Copy 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.crl
Copy 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 4096
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- RSA 鍵のパスワードを指定します。
次のコマンドを実行して、RSA 鍵の一時ディレクトリーを作成します。
mkdir /tmp/ibmse/rsa
$ mkdir /tmp/ibmse/rsa
Copy 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.pub
Copy 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.pem
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、
/tmp/ibmse
ディレクトリーの構造を確認します。tree /tmp/ibmse
$ tree /tmp/ibmse
Copy 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/ibmse
Copy 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>:/tmp
1 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>:/tmp
1 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.yaml
Copy 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.yaml
Copy 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.yaml
Copy 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-system
Copy 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.yaml
Copy 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.yaml
Copy 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 以下のコマンドを実行して
KbsConfig
CR を作成します。oc apply -f kbsconfig-cr.yaml
$ oc apply -f kbsconfig-cr.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを実行して、デフォルトのプロジェクトを設定します。
oc project trustee-operator-system
$ oc project trustee-operator-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して Pod を確認します。
oc get pods -n trustee-operator-system
$ oc get pods -n trustee-operator-system
Copy 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 59m
Copy 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_NAME
Copy 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-system
Copy 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 23h
Copy 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.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
https.crt
ファイルをkbs-client
Pod にコピーします。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/key1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
res1val1
res1val1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Trustee サーバーは、証明書が成功した場合にのみシークレットを返します。