5.3. 在 IBM Z 和 IBM LinuxONE 上部署机密容器


在部署 OpenShift 沙盒容器后,您可以在 IBM Z® 和 IBM® LinuxONE 上部署机密容器。

重要

IBM Z® 和 IBM® LinuxONE 上的机密容器只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

集群要求

  • 您已在安装 Confidential compute attestation Operator 的集群上安装了 Red Hat OpenShift Container Platform 4.15 或更高版本。

您可以执行以下步骤来部署机密容器:

  1. 安装 Confidential compute attestation Operator。
  2. 为 Trustee 创建路由。
  3. 启用机密容器功能门。
  4. 更新对等 pod 配置映射。
  5. 删除 KataConfig 自定义资源(CR)。
  6. 更新对等 pod secret。
  7. 重新创建 KataConfig CR。
  8. 创建 Trustee 身份验证 secret。
  9. 创建 Trustee 配置映射。
  10. 获取 IBM Secure Execution (SE)标头。
  11. 配置 SE 证书和密钥。
  12. 创建持久性存储组件。
  13. 配置 attestation 策略:

    1. 创建参考值。
    2. 为 attested 客户端创建 secret。
    3. 创建资源访问策略。
  14. 为 SE 创建 attestation 策略。
  15. 创建 KbsConfig CR。
  16. 验证 attestation 进程。

5.3.1. 安装 Confidential compute attestation Operator

您可以使用 CLI 在 IBM Z® 和 IBM® LinuxONE 上安装 Confidential compute attestation Operator。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 您可以使用具有 cluster-admin 角色的用户访问集群。

流程

  1. 创建 trustee-namespace.yaml 清单文件:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: trustee-operator-system
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来创建 trustee-operator-system 命名空间:

    $ oc apply -f trustee-namespace.yaml
    Copy to Clipboard Toggle word wrap
  3. 创建 trustee-operatorgroup.yaml 清单文件:

    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: trustee-operator-group
      namespace: trustee-operator-system
    spec:
      targetNamespaces:
      - trustee-operator-system
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令来创建 operator 组:

    $ oc apply -f trustee-operatorgroup.yaml
    Copy to Clipboard Toggle word wrap
  5. 创建 trustee-subscription.yaml 清单文件:

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: trustee-operator
      namespace: trustee-operator-system
    spec:
      channel: stable
      installPlanApproval: Automatic
      name: trustee-operator
      source: redhat-operators
      sourceNamespace: openshift-marketplace
      startingCSV: trustee-operator.v0.1.0
    Copy to Clipboard Toggle word wrap
  6. 运行以下命令来创建订阅:

    $ oc apply -f trustee-subscription.yaml
    Copy to Clipboard Toggle word wrap
  7. 运行以下命令验证 Operator 是否已正确安装:

    $ oc get csv -n trustee-operator-system
    Copy to Clipboard Toggle word wrap

    此命令可能需要几分钟来完成。

  8. 运行以下命令监控进程:

    $ watch oc get csv -n trustee-operator-system
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                      DISPLAY                        PHASE
    trustee-operator.v0.1.0   Trustee Operator  0.1.0        Succeeded
    Copy to Clipboard Toggle word wrap

5.3.2. 为 Trustee 创建路由

您可以为 Trustee 使用边缘 TLS 终止创建安全路由。外部入口流量以 HTTPS 的形式到达路由器 pod,并以 HTTP 的形式传递给 Trustee pod。

先决条件

  • 您已启用了 Confidential Containers 功能门。
  • 已安装 Confidential compute attestation Operator。

流程

  1. 运行以下命令来创建边缘路由:

    $ oc create route edge --service=kbs-service --port kbs-port \
      -n trustee-operator-system
    Copy to Clipboard Toggle word wrap
    注意

    注: 目前,只支持带有有效 CA 签名证书的路由。您不能使用带有自签名证书的路由。

  2. 运行以下命令设置 TRUSTEE_HOST 变量:

    $ TRUSTEE_HOST=$(oc get route -n trustee-operator-system kbs-service \
      -o jsonpath={.spec.host})
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令验证路由:

    $ echo $TRUSTEE_HOST
    Copy to Clipboard Toggle word wrap

    输出示例

    kbs-service-trustee-operator-system.apps.memvjias.eastus.aroapp.io
    Copy to Clipboard Toggle word wrap

5.3.3. 启用机密容器功能门

您必须启用 Confidential Containers 功能门。

流程

  1. 创建 cc-feature-gate.yaml 清单文件:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: osc-feature-gates
      namespace: openshift-sandboxed-containers-operator
    data:
      confidential: "true"
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来创建配置映射:

    $ oc apply -f cc-feature-gate.yaml
    Copy to Clipboard Toggle word wrap

5.3.4. 更新对等 pod 配置映射

您必须为机密容器更新对等 pod 配置映射。

注意

将安全引导设置为 true 以默认启用。默认值为 false,这代表存在安全风险。

流程

  1. 根据以下示例创建 peer-pods-cm.yaml 清单文件:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: peer-pods-cm
      namespace: openshift-sandboxed-containers-operator
    data:
      CLOUD_PROVIDER: "libvirt"
      DISABLECVM: "false"
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来创建配置映射:

    $ oc apply -f peer-pods-cm.yaml
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令重启 peerpodconfig-ctrl-caa-daemon 守护进程集:

    $ oc set env ds/peerpodconfig-ctrl-caa-daemon \
      -n openshift-sandboxed-containers-operator REBOOT="$(date)"
    Copy to Clipboard Toggle word wrap

5.3.5. 删除 KataConfig 自定义资源

您可以使用命令行删除 KataConfig 自定义资源(CR)。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 您可以使用具有 cluster-admin 角色的用户访问集群。

流程

  1. 运行以下命令来删除 KataConfig CR:

    $ oc delete kataconfig example-kataconfig
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令验证自定义资源是否已删除:

    $ oc get kataconfig example-kataconfig
    Copy to Clipboard Toggle word wrap

    输出示例

    No example-kataconfig instances exist
    Copy to Clipboard Toggle word wrap

重要

卸载使用云供应商部署的 OpenShift 沙盒容器时,您必须删除所有 pod。任何剩余的 pod 资源都可能会导致云供应商出现意外几率。

5.3.6. 更新对等 pod secret

当对等 pod secret 为空并安装 Cloud Credential Operator (CCO)时,OpenShift 沙盒容器 Operator 会使用 CCO 检索 secret。如果卸载了 CCO,您必须手动为 Confidential Containers 创建对等 pod secret,否则对等 pod 将无法操作。

secret 存储用于创建 pod 虚拟机(VM)镜像和对等 pod 实例的凭证。

默认情况下,OpenShift 沙盒容器 Operator 根据用于创建集群的凭证创建 secret。但是,您可以手动创建使用不同的凭证的 secret。

先决条件

流程

  1. 根据以下示例创建 peer-pods-secret.yaml 清单文件:

    apiVersion: v1
    kind: Secret
    metadata:
      name: peer-pods-secret
      namespace: openshift-sandboxed-containers-operator
    type: Opaque
    stringData:
      REDHAT_OFFLINE_TOKEN: "<rh_offline_token>" 
    1
    
      HKD_CRT: "<hkd_crt_value>" 
    2
    Copy to Clipboard Toggle word wrap
    1
    指定 Operator 构建的镜像所需的红帽离线令牌。
    2
    指定 HKD 证书值,为 Operator 构建的镜像启用 IBM Secure Execution。
  2. 运行以下命令来创建 secret:

    $ oc apply -f peer-pods-secret.yaml
    Copy to Clipboard Toggle word wrap

5.3.7. 重新创建 KataConfig 自定义资源

您必须为机密容器重新创建 KataConfig 自定义资源(CR)。

重要

创建 KataConfig CR 会自动重启 worker 节点。重启可能需要 10 到 60 分钟。妨碍重启时间的因素如下:

  • 带有更多 worker 节点的大型 OpenShift Container Platform 部署。
  • 激活 BIOS 和 Diagnostics 实用程序。
  • 在硬盘而不是 SSD 上部署。
  • 在物理节点上部署,如裸机,而不是在虚拟节点上部署。
  • CPU 和网络较慢。

先决条件

  • 您可以使用具有 cluster-admin 角色的用户访问集群。

流程

  1. 根据以下示例创建 example-kataconfig.yaml 清单文件:

    apiVersion: kataconfiguration.openshift.io/v1
    kind: KataConfig
    metadata:
      name: example-kataconfig
    spec:
      enablePeerPods: true
      logLevel: info
    #  kataConfigPoolSelector:
    #    matchLabels:
    #      <label_key>: '<label_value>' 
    1
    Copy to Clipboard Toggle word wrap
    1
    可选:如果您应用了节点标签在特定节点上安装 kata-remote,请指定键和值,例如 cc: 'true'
  2. 运行以下命令来创建 KataConfig CR:

    $ oc apply -f example-kataconfig.yaml
    Copy to Clipboard Toggle word wrap

    新的 KataConfig CR 被创建,并在 worker 节点上作为运行时类安装 kata-remote

    在验证安装前,等待 kata-remote 安装完成,以及 worker 节点重新引导。

  3. 运行以下命令监控安装进度:

    $ watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"
    Copy to Clipboard Toggle word wrap

    安装 kataNodes 下所有 worker 的状态并且条件 InProgressFalse 时,而不指定原因,则会在集群中安装 kata-remote

  4. 运行以下命令,验证您是否已构建对等 pod 镜像并将其上传到 libvirt 卷中:

    $ oc describe configmap peer-pods-cm -n openshift-sandboxed-containers-operator
    Copy to Clipboard Toggle word wrap

    输出示例

    Name: peer-pods-cm
    Namespace: openshift-sandboxed-containers-operator
    Labels: <none>
    Annotations: <none>
    
    Data
    ====
    CLOUD_PROVIDER: libvirt
    DISABLECVM: false 
    1
    
    LIBVIRT_IMAGE_ID: fa-pp-vol 
    2
    
    
    BinaryData
    ====
    Events: <none>
    Copy to Clipboard Toggle word wrap

    1
    在 IBM Secure Execution 中为 Operator 构建的镜像启用机密虚拟机。
    2
    如果您构建了对等 pod 镜像并将其上传到 libvirt 卷,则包含一个值。
  5. 运行以下命令,监控 kata-oc 机器配置池进度,以确保它处于 UPDATED 状态,当 UPDATED MACHINECOUNT 等于 MACHINECOUNT 时:

    $ watch oc get mcp/kata-oc
    Copy to Clipboard Toggle word wrap
  6. 运行以下命令验证守护进程集:

    $ oc get -n openshift-sandboxed-containers-operator ds/peerpodconfig-ctrl-caa-daemon
    Copy to Clipboard Toggle word wrap
  7. 运行以下命令验证运行时类:

    $ oc get runtimeclass
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME             HANDLER          AGE
    kata             kata             152m
    kata-remote      kata-remote      152m
    Copy to Clipboard Toggle word wrap

5.3.8. 创建信任身份验证 secret

您必须为 Trustee 创建身份验证 secret。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 您可以使用具有 cluster-admin 角色的用户访问集群。

流程

  1. 运行以下命令来创建私钥:

    $ openssl genpkey -algorithm ed25519 > privateKey
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来创建公钥:

    $ openssl pkey -in privateKey -pubout -out publicKey
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令来创建 secret:

    $ oc create secret generic kbs-auth-public-key --from-file=publicKey -n trustee-operator-system
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令验证 secret:

    $ oc get secret -n trustee-operator-system
    Copy to Clipboard Toggle word wrap

5.3.9. 创建信任配置映射

您必须创建配置映射来配置 Trustee 服务器。

先决条件

  • 您已为 Trustee 创建了路由。

流程

  1. 创建 kbs-config-cm.yaml 清单文件:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: kbs-config-cm
      namespace: trustee-operator-system
    data:
      kbs-config.json: |
        {
          "insecure_http" : true,
          "sockets": ["0.0.0.0:8080"],
          "auth_public_key": "/etc/auth-secret/publicKey",
          "attestation_token_config": {
            "attestation_token_type": "CoCo"
          },
          "repository_config": {
            "type": "LocalFs",
            "dir_path": "/opt/confidential-containers/kbs/repository"
          },
          "as_config": {
            "work_dir": "/opt/confidential-containers/attestation-service",
            "policy_engine": "opa",
            "attestation_token_broker": "Simple",
              "attestation_token_config": {
              "duration_min": 5
              },
            "rvps_config": {
              "store_type": "LocalJson",
              "store_config": {
                "file_path": "/opt/confidential-containers/rvps/reference-values/reference-values.json"
              }
             }
          },
          "policy_engine_config": {
            "policy_path": "/opt/confidential-containers/opa/policy.rego"
          }
        }
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来创建配置映射:

    $ oc apply -f kbs-config-cm.yaml
    Copy to Clipboard Toggle word wrap

5.3.10. 获取 IBM Secure Execution 标头

您必须获取 IBM Secure Execution (SE)标头。

先决条件

  • 您有一个网络块存储设备,用于临时存储 SE 标头。

流程

  1. 运行以下命令,为 SE 标头创建一个临时文件夹:

    $ mkdir -p /tmp/ibmse/hdr
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,从 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
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令使工具可执行:

    $ chmod +x /tmp/pvextract-hdr
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令设置 $IMAGE_OUTPUT_DIR 变量:

    $ export IMAGE=$IMAGE_OUTPUT_DIR/se-podvm-commit-short-id.qcow2
    Copy to Clipboard Toggle word wrap
  5. 运行以下命令来设置 $IMAGE 变量:

    $ export IMAGE=/root/rooo/se-podvm-d1fb986-dirty-s390x.qcow2
    Copy to Clipboard Toggle word wrap
  6. 运行以下命令来启用 nbd 内核模块:

    $ modprobe nbd
    Copy to Clipboard Toggle word wrap
  7. 运行以下命令,将 SE 镜像连接到网络块设备(NBD):

    $ qemu-nbd --connect=/dev/nbd0 $IMAGE
    Copy to Clipboard Toggle word wrap
  8. 运行以下命令,为 SE 镜像创建挂载目录:

    $ mkdir -p /mnt/se-image/
    Copy to Clipboard Toggle word wrap
  9. 运行以下命令来暂停进程:

    $ sleep 1
    Copy to Clipboard Toggle word wrap
  10. 运行以下命令列出块设备:

    $ lsblk
    Copy to Clipboard Toggle word wrap

    输出示例

    nbd0                                           43:0    0  100G  0 disk
    ├─nbd0p1                                       43:1    0  255M  0 part
    ├─nbd0p2                                       43:2    0    6G  0 part
    │ └─luks-e23e15fa-9c2a-45a5-9275-aae9d8e709c3 253:2    0    6G  0 crypt
    └─nbd0p3                                       43:3    0 12.4G  0 part
    nbd1                                           43:32   0   20G  0 disk
    ├─nbd1p1                                       43:33   0  255M  0 part
    ├─nbd1p2                                       43:34   0    6G  0 part
    │ └─luks-5a540f7c-c0cb-419b-95e0-487670d91525 253:3    0    6G  0 crypt
    └─nbd1p3                                       43:35   0 86.9G  0 part
    nbd2                                           43:64   0    0B  0 disk
    nbd3                                           43:96   0    0B  0 disk
    nbd4                                           43:128  0    0B  0 disk
    nbd5                                           43:160  0    0B  0 disk
    nbd6                                           43:192  0    0B  0 disk
    nbd7                                           43:224  0    0B  0 disk
    nbd8                                           43:256  0    0B  0 disk
    nbd9                                           43:288  0    0B  0 disk
    nbd10                                          43:320  0    0B  0 disk
    Copy to Clipboard Toggle word wrap

  11. 在可用的 NBD 分区上挂载 SE 镜像目录,并运行以下命令来提取 SE 标头:

    $ mount /dev/<nbdXp1> /mnt/se-image/ /tmp/pvextract-hdr \
      -o /tmp/ibmse/hdr/hdr.bin /mnt/se-image/se.img
    Copy to Clipboard Toggle word wrap

    输出示例

    SE header found at offset 0x014000
    SE header written to '/tmp/ibmse/hdr/hdr.bin' (640 bytes)
    Copy to Clipboard Toggle word wrap

    如果 NBD 不可用,则会显示以下错误:

    mount: /mnt/se-image: can't read superblock on /dev/nbd0p1
    Copy to Clipboard Toggle word wrap
  12. 运行以下命令卸载 SE 镜像目录:

    $ umount /mnt/se-image/
    Copy to Clipboard Toggle word wrap
  13. 运行以下命令断开网络块存储设备:

    $ qemu-nbd --disconnect /dev/nbd0
    Copy to Clipboard Toggle word wrap

5.3.11. 配置 IBM 安全执行证书和密钥

您必须为 worker 节点配置 IBM Secure Execution (SE)证书和密钥。

先决条件

  • 有堡垒节点的 IP 地址。
  • 您有 worker 节点的内部 IP 地址。

流程

  1. 通过执行以下步骤来获取 attestation 策略字段:

    1. 运行以下命令,从 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
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令,为 SE Host Key Document (HKD)证书创建一个临时目录:

      $ mkdir /tmp/ibmse/hkds/
      Copy to Clipboard Toggle word wrap
    3. 运行以下命令,将主机密钥文档(HKD)证书复制到临时目录中:

      $ cp ~/path/to/<hkd_cert.crt> /tmp/ibmse/hkds/<hkd_cert.crt>
      Copy to Clipboard Toggle word wrap
      注意

      HKD 证书必须与您在创建对等 pod secret 时下载的证书相同。

    4. 运行 se_parse_hdr.py 脚本来获取 attestation 策略字段:

      $ python3 /tmp/se_parse_hdr.py /tmp/ibmse/hdr/hdr.bin /tmp/ibmse/hkds/<hkd_cert.crt>
      Copy to Clipboard Toggle word wrap

      输出示例

      ...
        ================================================
        se.image_phkh: xxx
        se.version: 256
        se.tag: xxx
        se.attestation_phkh: xxx
      Copy to Clipboard Toggle word wrap

      为 SE attestation 策略配置映射记录这些值。

  2. 通过执行以下步骤来获取证书和证书撤销列表(CRL):

    1. 运行以下命令,为证书创建一个临时目录:

      $ mkdir /tmp/ibmse/certs
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令,下载 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 Toggle word wrap
    3. 运行以下命令下载 DigiCertCA.crt 证书:

      $ wget https://www.ibm.com/support/resourcelink/api/content/public/DigiCertCA.crt -O /tmp/ibmse/certs/DigiCertCA.crt
      Copy to Clipboard Toggle word wrap
    4. 运行以下命令,为 CRL 创建临时目录:

      $ mkdir /tmp/ibmse/crls
      Copy to Clipboard Toggle word wrap
    5. 运行以下命令下载 DigiCertTrustedRootG4.crl 文件:

      $ wget http://crl3.digicert.com/DigiCertTrustedRootG4.crl -O /tmp/ibmse/crls/DigiCertTrustedRootG4.crl
      Copy to Clipboard Toggle word wrap
    6. 运行以下命令下载 DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crl 文件:

      $ wget http://crl3.digicert.com/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crl -O /tmp/ibmse/crls/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crl
      Copy to Clipboard Toggle word wrap
  3. 生成 RSA 密钥:

    1. 运行以下命令来生成 RSA 密钥对:

      $ openssl genrsa -aes256 -passout pass:<password> -out /tmp/encrypt_key-psw.pem 4096 
      1
      Copy to Clipboard Toggle word wrap
      1
      指定 RSA 密钥密码。
    2. 运行以下命令,为 RSA 密钥创建一个临时目录:

      $ mkdir /tmp/ibmse/rsa
      Copy to Clipboard Toggle word wrap
    3. 运行以下命令来创建 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 Toggle word wrap
    4. 运行以下命令来创建 encrypt_key.pem 密钥:

      $ openssl rsa -in /tmp/encrypt_key-psw.pem -passin pass:<password> -out /tmp/ibmse/rsa/encrypt_key.pem
      Copy to Clipboard Toggle word wrap
  4. 运行以下命令,验证 /tmp/ibmse 目录的结构:

    $ tree /tmp/ibmse
    Copy to Clipboard Toggle word wrap

    输出示例

    /tmp/ibmse
    ├── 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
    Copy to Clipboard Toggle word wrap

  5. 通过执行以下步骤将这些文件复制到 OpenShift Container Platform worker 节点:

    1. 运行以下命令,从 /tmp/ibmse 目录创建一个压缩文件:

      $ tar -czf ibmse.tar.gz -C /tmp/ibmse
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令,将 .tar.gz 文件复制到集群中的堡垒节点:

      $ scp /tmp/ibmse.tar.gz root@<ocp_bastion_ip>:/tmp 
      1
      Copy to Clipboard Toggle word wrap
      1
      指定堡垒节点的 IP 地址。
    3. 运行以下命令,通过 SSH 连接到 bastion 节点:

      $ ssh root@<ocp_bastion_ip>
      Copy to Clipboard Toggle word wrap
    4. 运行以下命令,将 .tar.gz 文件复制到每个 worker 节点:

      $ scp /tmp/ibmse.tar.gz core@<worker_node_ip>:/tmp 
      1
      Copy to Clipboard Toggle word wrap
      1
      指定 worker 节点的 IP 地址。
    5. 运行以下命令,提取每个 worker 节点上的 .tar.gz

      $ 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 Toggle word wrap
    6. 运行以下命令更新 ibmse 文件夹权限:

      $ ssh core@<worker_node_ip> 'sudo chmod -R 755 /opt/confidential-containers/ibmse/'
      Copy to Clipboard Toggle word wrap

5.3.12. 创建持久性存储组件

您必须创建持久性存储组件、持久性卷(PV)和持久性卷声明(PVC),以便将 ibmse 文件夹挂载到 Trustee pod。

流程

  1. 创建 persistent-volume.yaml 清单文件:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: ibmse-pv
      namespace: trustee-operator-system
    spec:
      capacity:
        storage: 100Mi
      accessModes:
        - ReadOnlyMany
      storageClassName: ""
      local:
        path: /opt/confidential-containers/ibmse
      nodeAffinity:
        required:
          nodeSelectorTerms:
            - matchExpressions:
                - key: node-role.kubernetes.io/worker
                  operator: Exists
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来创建持久性卷:

    $ oc apply -f persistent-volume.yaml
    Copy to Clipboard Toggle word wrap
  3. 创建 persistent-volume-claim.yaml 清单文件:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ibmse-pvc
      namespace: trustee-operator-system
    spec:
      accessModes:
        - ReadOnlyMany
      storageClassName: ""
      resources:
        requests:
          storage: 100Mi
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令来创建持久性卷声明:

    $ oc apply -f persistent-volume-claim.yaml
    Copy to Clipboard Toggle word wrap

5.3.13. 配置 attestation 策略

您可以配置以下 attestation 策略设置:

参考值

您可以通过指定硬件平台的可信摘要来配置参考值。

客户端从正在运行的软件、受信任的执行环境(TEE)硬件和固件中收集测量,并将声明中的引用提交到 Attestation Server。这些测量必须与注册到 Trustee 的可信摘要匹配。此过程可确保机密虚拟机(CVM)正在运行预期的软件堆栈,并且未被篡改。

客户端的 secret
您必须创建一个或多个 secret 与 attested 客户端共享。
资源访问策略

您必须为 Trustee 策略引擎配置策略,以确定要访问哪些资源。

不要将 Trustee 策略引擎与 Attestation Service 策略引擎混淆,这决定了 TEE 证据的有效性。

attestation 策略
您必须为 IBM Secure Execution 创建 attestation 策略。

流程

  1. 创建 rvps-configmap.yaml 清单文件:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: rvps-reference-values
      namespace: trustee-operator-system
    data:
      reference-values.json: |
        [ 
    1
    
        ]
    Copy to Clipboard Toggle word wrap
    1
    该值留空。
  2. 运行以下命令来创建 RVPS 配置映射:

    $ oc apply -f rvps-configmap.yaml
    Copy to Clipboard Toggle word wrap
  3. 根据以下示例,创建一个或多个 secret 与 attested 客户端共享:

    $ oc create secret generic kbsres1 --from-literal key1=<res1val1> \
      --from-literal key2=<res1val2> -n trustee-operator-system
    Copy to Clipboard Toggle word wrap

    在本例中,kbsres1 机密有两个条目(key 1、key2),信任ee 客户端会检索。您可以根据要求添加更多 secret。

  4. 创建 resourcepolicy-configmap.yaml 清单文件:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: resource-policy
      namespace: trustee-operator-system
    data:
      policy.rego: | 
    1
    
        package policy 
    2
    
        path := split(data["resource-path"], "/")
        default allow = false
        allow {
          count(path) == 3
          input["tee"] == "se"
        }
    Copy to Clipboard Toggle word wrap
    1
    资源策略 policy.rego 的名称必须与 Trustee 配置映射中定义的资源策略匹配。
    2
    资源策略遵循 Open Policy Agent 规格。当 TEE 不是 tester 的示例时,此示例允许检索所有资源。
  5. 运行以下命令来创建资源策略配置映射:

    $ oc apply -f resourcepolicy-configmap.yaml
    Copy to Clipboard Toggle word wrap
  6. 创建 attestation-policy.yaml 清单文件:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: attestation-policy
      namespace: trustee-operator-system
    data:
      default.rego: | 
    1
    
        package policy
        import rego.v1
        default allow = false
        converted_version := sprintf("%v", [input["se.version"]])
        allow if {
            input["se.attestation_phkh"] == "<se.attestation_phkh>" 
    2
    
            input["se.image_phkh"] == "<se.image_phkh>"
            input["se.tag"] == "<se.tag>"
            converted_version == "256"
        }
    Copy to Clipboard Toggle word wrap
    1
    不要修改策略名称。
    2
    运行 se_parse_hdr.py 脚本,指定您获取的 attestation 策略字段。
  7. 运行以下命令来创建 attestation 策略配置映射:

    $ oc apply -f attestation-policy.yaml
    Copy to Clipboard Toggle word wrap

5.3.14. 创建 KbsConfig 自定义资源

您必须创建 KbsConfig 自定义资源(CR)来启动 Trustee。

然后,您可以检查 Trustee pod 和 pod 日志以验证配置。

流程

  1. 创建 kbsconfig-cr.yaml 清单文件:

    apiVersion: confidentialcontainers.org/v1alpha1
    kind: KbsConfig
    metadata:
      labels:
        app.kubernetes.io/name: kbsconfig
        app.kubernetes.io/instance: kbsconfig
        app.kubernetes.io/part-of: trustee-operator
        app.kubernetes.io/managed-by: kustomize
        app.kubernetes.io/created-by: trustee-operator
      name: kbsconfig
      namespace: trustee-operator-system
    spec:
      kbsConfigMapName: kbs-config-cm
      kbsAuthSecretName: kbs-auth-public-key
      kbsDeploymentType: AllInOneDeployment
      kbsRvpsRefValuesConfigMapName: rvps-reference-values
      kbsSecretResources: ["kbsres1"]
      kbsResourcePolicyConfigMapName: resource-policy
      kbsAttestationPolicyConfigMapName: attestation-policy
      kbsServiceType: NodePort
      ibmSEConfigSpec:
        certStorePvc: ibmse-pvc
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来创建 KbsConfig CR:

    $ oc apply -f kbsconfig-cr.yaml
    Copy to Clipboard Toggle word wrap

验证

  1. 运行以下命令来设置默认项目:

    $ oc project trustee-operator-system
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令检查 pod:

    $ oc get pods -n trustee-operator-system
    Copy to Clipboard Toggle word wrap

    输出示例

    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 Toggle word wrap

  3. 运行以下命令设置 POD_NAME 环境变量:

    $ POD_NAME=$(oc get pods -l app=kbs -o jsonpath='{.items[0].metadata.name}' -n trustee-operator-system)
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令检查 pod 日志:

    $ oc logs -n trustee-operator-system $POD_NAME
    Copy to Clipboard Toggle word wrap

    输出示例

    [2024-05-30T13:44:24Z INFO  kbs] Using config file /etc/kbs-config/kbs-config.json
    [2024-05-30T13:44:24Z WARN  attestation_service::rvps] No RVPS address provided and will launch a built-in rvps
    [2024-05-30T13:44:24Z INFO  attestation_service::token::simple] No Token Signer key in config file, create an ephemeral key and without CA pubkey cert
    [2024-05-30T13:44:24Z INFO  api_server] Starting HTTPS server at [0.0.0.0:8080]
    [2024-05-30T13:44:24Z INFO  actix_server::builder] starting 12 workers
    [2024-05-30T13:44:24Z INFO  actix_server::server] Tokio runtime found; starting in existing Tokio runtime
    Copy to Clipboard Toggle word wrap

  5. 运行以下命令,将 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"}]'
    Copy to Clipboard Toggle word wrap
  6. 运行以下命令,验证 kbs-service 是否在节点端口上公开:

    $ oc get svc kbs-service -n trustee-operator-system
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME          TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    kbs-service   NodePort   198.51.100.54   <none>        8080:31862/TCP   23h
    Copy to Clipboard Toggle word wrap

    kbs-service URL 是 https://<worker_node_ip>:<node_port >,例如 https://172.16.0.56:31862

5.3.15. 验证测试过程

您可以通过创建测试 pod 并检索其机密来验证 attestation 过程。pod 镜像部署 KBS 客户端,它是一个测试 Key Broker 服务和基本测试流程的工具。

重要

此流程是验证 attestation 是否正常工作的示例。不要将敏感数据写入标准 I/O,因为可使用内存转储捕获数据。只有写入内存的数据才会被加密。

先决条件

  • 如果 Trustee 服务器和测试 pod 没有在同一集群中运行,则已创建了路由。

流程

  1. 创建 verification-pod.yaml 清单文件:

    apiVersion: v1
    kind: Pod
    metadata:
      name: kbs-client
    spec:
      containers:
      - name: kbs-client
        image: quay.io/confidential-containers/kbs-client:latest
        imagePullPolicy: IfNotPresent
        command:
          - sleep
          - "360000"
        env:
          - name: RUST_LOG
            value:  none
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来创建 pod:

    $ oc create -f verification-pod.yaml
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,将 https.crt 文件复制到 kbs-client pod 中:

    $ oc cp https.crt kbs-client:/
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令来获取 pod secret:

    $ 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 Toggle word wrap

    输出示例

    res1val1
    Copy to Clipboard Toggle word wrap

    只有当 attestation 成功时才会返回 secret。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat