8.16. Trustee の値、ポリシー、およびシークレットの設定
Trustee には次の値、ポリシー、およびシークレットを設定できます。
- 参照値プロバイダーサービスの参照値。
- IBM Secure Execution のアテステーションポリシー。
- Trustee クライアントのカスタムキーのシークレット。
- コンテナーイメージの署名検証用のシークレット。
- コンテナーイメージの署名検証ポリシー。このポリシーは必須です。コンテナーイメージの署名検証を使用しない場合は、署名を検証しないポリシーを作成する必要があります。
- リソースアクセスポリシー
8.16.1. 参照値の設定
ハードウェアプラットフォームの信頼できるダイジェストを指定することにより、Reference Value Provider Service (RVPS) の参照値を設定できます。
クライアントは、実行中のソフトウェア、Trusted Execution Environment (TEE) のハードウェアとファームウェアから測定値を収集し、請求とともに見積りを Attestation Server に送信します。これらの測定値は、Trustee に登録された信頼できるダイジェストと一致する必要があります。このプロセスにより、Confidential VM (CVM) が期待どおりのソフトウェアスタックを実行し、改ざんがされていないように確認します。
手順
rvps-configmap.yaml
マニフェストファイルを作成します。apiVersion: v1 kind: ConfigMap metadata: name: rvps-reference-values namespace: trustee-operator-system data: reference-values.json: | [ ]
apiVersion: v1 kind: ConfigMap metadata: name: rvps-reference-values namespace: trustee-operator-system data: reference-values.json: | [
1 ]
Copy to Clipboard Copied! - 1
- この値は空のままにします。
次のコマンドを実行して、RVPS config map を作成します。
oc apply -f rvps-configmap.yaml
$ oc apply -f rvps-configmap.yaml
Copy to Clipboard Copied!
8.16.2. IBM Secure Execution のアテステーションポリシーの作成
IBM Secure Execution のアテステーションポリシーを作成する必要があります。
手順
attestation-policy.yaml
マニフェストファイルを作成します。apiVersion: v1 kind: ConfigMap metadata: name: attestation-policy namespace: trustee-operator-system data: default.rego: | package policy import rego.v1 default allow = false converted_version := sprintf("%v", [input["se.version"]]) allow if { input["se.attestation_phkh"] == "<se.attestation_phkh>" input["se.image_phkh"] == "<se.image_phkh>" input["se.tag"] == "<se.tag>" converted_version == "256" }
apiVersion: v1 kind: ConfigMap metadata: name: attestation-policy namespace: trustee-operator-system data: default.rego: | package policy import rego.v1 default allow = false converted_version := sprintf("%v", [input["se.version"]]) allow if { input["se.attestation_phkh"] == "<se.attestation_phkh>" input["se.image_phkh"] == "<se.image_phkh>" input["se.tag"] == "<se.tag>" converted_version == "256" }
Copy to Clipboard Copied! - default.rego
- ポリシー名は変更しないでください。
- <se.attestation_phkh>
-
これを、
se_parse_hdr.py
スクリプトを実行して取得した設定アテステーションポリシーフィールドに置き換えます。
以下のコマンドを実行して、アテステーションポリシー config map を作成します。
oc apply -f attestation-policy.yaml
$ oc apply -f attestation-policy.yaml
Copy to Clipboard Copied!
8.16.3. クライアント用のカスタムキーを使用したシークレットの作成
Trustee クライアント用の 1 つ以上のカスタムキーを含むシークレットを作成できます。
この例では、kbsres1
シークレットには 2 つのエントリー (key1
、key2
) があり、クライアントはそれらを取得します。同じ形式を使用して、要件に応じて追加のシークレットを追加できます。
前提条件
- 1 つ以上のカスタムキーが作成されている。
手順
次の例に従って、カスタムキーのシークレットを作成します。
oc apply secret generic kbsres1 \ --from-literal key1=<custom_key1> \ --from-literal key2=<custom_key2> \ -n trustee-operator-system
$ oc apply secret generic kbsres1 \ --from-literal key1=<custom_key1> \
1 --from-literal key2=<custom_key2> \ -n trustee-operator-system
Copy to Clipboard Copied! - 1
- カスタムキーを指定します。
kbsres1
シークレットは、KbsConfig
カスタムリソースのspec.kbsSecretResources
キーで指定されます。
8.16.4. コンテナーイメージの署名検証用のシークレット作成
コンテナーイメージの署名検証を使用する場合は、公開コンテナーイメージ署名鍵を含むシークレットを作成する必要があります。
Confidential compute attestation Operator はシークレットを使用して署名を検証し、信頼され、認証されたコンテナーイメージのみが環境にデプロイされるようにします。
Red Hat Trusted Artifact Signer またはその他のツールを使用して、コンテナーイメージに署名できます。
手順
次のコマンドを実行して、コンテナーイメージの署名検証用のシークレットを作成します。
oc apply secret generic <type> \ --from-file=<tag>=./<public_key_file> \ -n trustee-operator-system
$ oc apply secret generic <type> \
1 --from-file=<tag>=./<public_key_file> \
2 -n trustee-operator-system
Copy to Clipboard Copied! -
<type>
の値を記録します。KbsConfig
カスタムリソースを作成するときに、この値をspec.kbsSecretResources
キーに追加する必要があります。
8.16.5. コンテナーイメージ署名検証ポリシーの作成
署名検証は常に有効になっているため、コンテナーイメージ署名検証ポリシーを作成します。このポリシーがない場合、Pod は起動しません。
コンテナーイメージの署名検証を使用していない場合は、署名検証なしでポリシーを作成します。
詳細は、containers-policy.json 5 を参照してください。
手順
次の例に従って、
security-policy-config.json
ファイルを作成します。署名検証なし:
{ "default": [ { "type": "insecureAcceptAnything" }], "transports": {} }
{ "default": [ { "type": "insecureAcceptAnything" }], "transports": {} }
Copy to Clipboard Copied! 署名検証あり:
{ "default": [ ], "transports": { "docker": { "<container_registry_url>/<username>/busybox:latest": [ { "type": "sigstoreSigned", "keyPath": "kbs:///default/img-sig/pub-key" } ] } } }
{ "default": [ ], "transports": { "docker": { "<container_registry_url>/<username>/busybox:latest":
1 [ { "type": "sigstoreSigned", "keyPath": "kbs:///default/img-sig/pub-key"
2 } ] } } }
Copy to Clipboard Copied!
次のコマンドを実行してセキュリティーポリシーを作成します。
oc apply secret generic security-policy \ --from-file=osc=./<security-policy-config.json> \ -n trustee-operator-system
$ oc apply secret generic security-policy \ --from-file=osc=./<security-policy-config.json> \ -n trustee-operator-system
Copy to Clipboard Copied! シークレットタイプ
security-policy
またはosc
のキーを変更しないでください。security-policy
シークレットは、KbsConfig
カスタムリソースのspec.kbsSecretResources
キーで指定されます。
8.16.6. リソースアクセスポリシーの作成
Trustee ポリシーエンジンのリソースアクセスポリシーを設定します。このポリシーは、Trustee がアクセスできるリソースを決定します。
Trustee ポリシーエンジンは、TEE 証拠の有効性を決定するアテステーション Service ポリシーエンジンとは異なります。
手順
resourcepolicy-configmap.yaml
マニフェストファイルを作成します。apiVersion: v1 kind: ConfigMap metadata: name: resource-policy namespace: trustee-operator-system data: policy.rego: package policy default allow = true allow { input["tee"] == "se" }
apiVersion: v1 kind: ConfigMap metadata: name: resource-policy namespace: trustee-operator-system data: policy.rego: package policy default allow = true allow { input["tee"] == "se" }
Copy to Clipboard Copied! - policy.rego
-
リソースポリシーの名前
policy.rego
は、Trustee config map で定義されたリソースポリシーと一致する必要があります。 - パッケージポリシー
- リソースポリシーは Open Policy Agent 仕様に準拠します。
次のコマンドを実行して、リソースポリシーの config map を作成します。
oc apply -f resourcepolicy-configmap.yaml
$ oc apply -f resourcepolicy-configmap.yaml
Copy to Clipboard Copied!