4.4. 在 Azure 上部署机密容器


在部署 OpenShift 沙盒容器后,您可以在 Microsoft Azure Cloud Computing Services 上部署机密容器。

重要

Azure 上的机密容器只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(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. 重新创建 KataConfig CR。
  7. 创建 Trustee 身份验证 secret。
  8. 创建 Trustee 配置映射。
  9. 配置 attestation 策略:

    1. 创建参考值。
    2. 为 attested 客户端创建 secret。
    3. 创建资源访问策略。
    4. 可选:创建一个 attestation 策略来覆盖默认策略。
    5. 如果您的 TEE 是 Intel Trust Domain Extensions,请配置置备证书缓存服务。
  10. 创建 KbsConfig CR。
  11. 验证 attestation 进程。

4.4.1. 安装 Confidential compute attestation Operator

您可以使用 CLI 在 Azure 上安装 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

4.4.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

    为对等 pod 配置映射记录这个值。

4.4.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

4.4.4. 更新对等 pod 配置映射

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

注意

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

流程

  1. 从 Azure 实例获取以下值:

    1. 检索并记录 Azure 资源组:

      $ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""
      Copy to Clipboard Toggle word wrap
    2. 检索并记录 Azure VNet 名称:

      $ AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)
      Copy to Clipboard Toggle word wrap

      这个值用于检索 Azure 子网 ID。

    3. 检索并记录 Azure 子网 ID:

      $ AZURE_SUBNET_ID=$(az network vnet subnet list --resource-group ${AZURE_RESOURCE_GROUP} --vnet-name $AZURE_VNET_NAME --query "[].{Id:id} | [? contains(Id, 'worker')]" --output tsv) && echo "AZURE_SUBNET_ID: \"$AZURE_SUBNET_ID\""
      Copy to Clipboard Toggle word wrap
    4. 检索并记录 Azure 网络安全组(NSG) ID:

      $ AZURE_NSG_ID=$(az network nsg list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Id:id}" --output tsv) && echo "AZURE_NSG_ID: \"$AZURE_NSG_ID\""
      Copy to Clipboard Toggle word wrap
    5. 检索并记录 Azure 区域:

      $ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""
      Copy to Clipboard Toggle word wrap
  2. 根据以下示例创建 peer-pods-cm.yaml 清单文件:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: peer-pods-cm
      namespace: openshift-sandboxed-containers-operator
    data:
      CLOUD_PROVIDER: "azure"
      VXLAN_PORT: "9000"
      AZURE_INSTANCE_SIZE: "Standard_DC2as_v5" 
    1
    
      AZURE_INSTANCE_SIZES: "Standard_DC2as_v5, Standard_DC4as_v5, Standard_DC8as_v5" 
    2
    
      AZURE_SUBNET_ID: "<azure_subnet_id>" 
    3
    
      AZURE_NSG_ID: "<azure_nsg_id>" 
    4
    
      PROXY_TIMEOUT: "5m"
      AZURE_IMAGE_ID: "<azure_image_id>" 
    5
    
      AZURE_REGION: "<azure_region>" 
    6
    
      AZURE_RESOURCE_GROUP: "<azure_resource_group>" 
    7
    
      DISABLECVM: "false"
      AA_KBC_PARAMS: "cc_kbc::https://${TRUSTEE_HOST}" 
    8
    
      ENABLE_SECURE_BOOT: "true" 
    9
    Copy to Clipboard Toggle word wrap
    1
    如果工作负载中没有定义实例大小,"Standard_DC2as_v5" 值是默认值。确保实例类型支持可信环境。默认的 "Standard_DC2as_v5" 值用于 AMD SEV-SNP。如果您的 TEE 是 Intel TDX,请指定 Standard_EC4eds_v5
    2
    列出创建 pod 时可以指定的所有实例大小。这可让您为大型工作负载需要较少的内存和更小的实例大小的工作负载定义较小的实例大小。对于 Intel TDX,指定 "Standard_EC4eds_v5、Standard_EC8eds_v5、Standard_EC16eds_v5 "。
    3
    指定您检索的 AZURE_SUBNET_ID 值。
    4
    指定您检索的 AZURE_NSG_ID 值。
    5
    可选:默认情况下,这个值会在运行 KataConfig CR 时填充,使用基于集群凭证的 Azure 镜像 ID。如果创建自己的 Azure 镜像,请指定正确的镜像 ID。
    6
    指定您检索到的 AZURE_REGION 值。
    7
    指定您检索的 AZURE_RESOURCE_GROUP 值。
    8
    指定 Trustee 路由的主机名。
    9
    指定 true 以启用安全引导。
  3. 运行以下命令来创建配置映射:

    $ oc apply -f peer-pods-cm.yaml
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令重启 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

4.4.5. 删除 KataConfig 自定义资源

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

删除 KataConfig CR 会从集群中移除运行时及其相关资源。

重要

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

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

先决条件

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

流程

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

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

    OpenShift 沙盒容器 Operator 会删除最初为在集群中启用运行时创建的所有资源。

    重要

    当您删除 KataConfig CR 时,CLI 会停止响应,直到所有 worker 节点重启为止。在执行验证前,您必须等待删除过程完成。

  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 资源都可能会导致云供应商出现意外几率。

4.4.6. 重新创建 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. 运行以下命令验证守护进程集:

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

    $ 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

4.4.7. 创建信任身份验证 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

4.4.8. 创建信任配置映射

您必须创建配置映射来配置 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

4.4.9. 配置 attestation 策略

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

参考值

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

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

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

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

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

attestation 策略
可选:您可以通过创建自己的 attestation 策略来覆盖默认的 attestation 策略。
为 TDX 置备证书缓存服务

如果您的 TEE 是 Intel Trust Domain Extensions (TDX),您必须配置置备证书缓存服务(PCCS)。PCCS 检索置备认证密钥(PCK)证书,并将其缓存在本地数据库中。

重要

不要使用公共 Intel PCCS 服务。在内部或公共云中使用本地缓存服务。

流程

  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
    
        default allow = false
        allow {
          input["tee"] != "sample"
        }
    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: |
         package policy 
    1
    
         import future.keywords.every
    
         default allow = false
    
         allow {
            every k, v in input {
                judge_field(k, v)
            }
         }
    
         judge_field(input_key, input_value) {
            has_key(data.reference, input_key)
            reference_value := data.reference[input_key]
            match_value(reference_value, input_value)
         }
    
         judge_field(input_key, input_value) {
            not has_key(data.reference, input_key)
         }
    
         match_value(reference_value, input_value) {
            not is_array(reference_value)
            input_value == reference_value
         }
    
         match_value(reference_value, input_value) {
            is_array(reference_value)
            array_include(reference_value, input_value)
         }
    
         array_include(reference_value_array, input_value) {
            reference_value_array == []
         }
    
         array_include(reference_value_array, input_value) {
            reference_value_array != []
            some i
            reference_value_array[i] == input_value
         }
    
         has_key(m, k) {
            _ = m[k]
         }
    Copy to Clipboard Toggle word wrap
    1
    attestation 策略遵循 Open Policy Agent 规格。在本例中,attestation 策略将 attestation 报告中提供的声明与 RVPS 数据库中注册的引用值进行比较。只有所有值都匹配时才会成功 attestation 进程。
  7. 运行以下命令来创建 attestation 策略配置映射:

    $ oc apply -f attestation-policy.yaml
    Copy to Clipboard Toggle word wrap
  8. 如果您的 TEE 是 Intel TDX,请创建一个 tdx-config.yaml 清单文件:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: tdx-config
      namespace: trustee-operator-system
    data:
      sgx_default_qcnl.conf: | \
          {
            "collateral_service": "https://api.trustedservices.intel.com/sgx/certification/v4/",
            "pccs_url": "<pccs_url>" 
    1
    
          }
    Copy to Clipboard Toggle word wrap
    1
    指定 PCCS URL,例如 https://localhost:8081/sgx/certification/v4/
  9. 运行以下命令来创建 TDX 配置映射:

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

4.4.10. 创建 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
    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

4.4.11. 验证测试过程

您可以通过创建测试 pod 并检索其机密来验证 attestation 过程。

重要

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

默认情况下,嵌入在 pod VM 镜像中的代理侧策略禁用 Confidential Containers pod 的 exec 和日志 API。此策略可确保敏感数据不会写入标准 I/O。

在测试场景中,您可以通过向 pod 添加策略注解来覆盖运行时的限制。对于技术预览,远程测试不会验证运行时策略注解。

先决条件

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

流程

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

    apiVersion: v1
    kind: Pod
    metadata:
      name: ocp-cc-pod
      labels:
        app: ocp-cc-pod
      annotations:
        io.katacontainers.config.agent.policy: cGFja2FnZSBhZ2VudF9wb2xpY3kKCmRlZmF1bHQgQWRkQVJQTmVpZ2hib3JzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgQWRkU3dhcFJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IENsb3NlU3RkaW5SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBDb3B5RmlsZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IENyZWF0ZVNhbmRib3hSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBEZXN0cm95U2FuZGJveFJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IEV4ZWNQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgR2V0TWV0cmljc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IEdldE9PTUV2ZW50UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgR3Vlc3REZXRhaWxzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgTGlzdEludGVyZmFjZXNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBMaXN0Um91dGVzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgTWVtSG90cGx1Z0J5UHJvYmVSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQYXVzZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFB1bGxJbWFnZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlYWRTdHJlYW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZW1vdmVDb250YWluZXJSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZW1vdmVTdGFsZVZpcnRpb2ZzU2hhcmVNb3VudHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZXNlZWRSYW5kb21EZXZSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZXN1bWVDb250YWluZXJSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTZXRHdWVzdERhdGVUaW1lUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgU2V0UG9saWN5UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgU2lnbmFsUHJvY2Vzc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXJ0Q29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgU3RhcnRUcmFjaW5nUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgU3RhdHNDb250YWluZXJSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdG9wVHJhY2luZ1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFR0eVdpblJlc2l6ZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZUVwaGVtZXJhbE1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IHRydWUK 
    1
    
    spec:
      runtimeClassName: kata-remote
      containers:
        - name: skr-openshift
          image: registry.access.redhat.com/ubi9/ubi:9.3
          command:
            - sleep
            - "36000"
          securityContext:
            privileged: false
            seccompProfile:
              type: RuntimeDefault
    Copy to Clipboard Toggle word wrap
    1
    此 pod 注解会覆盖阻止敏感数据写入标准 I/O 的策略。
  2. 运行以下命令来创建 pod:

    $ oc create -f verification-pod.yaml
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,连接到 ocp-cc-pod 的 Bash shell:

    $ oc exec -it ocp-cc-pod -- bash
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令来获取 pod secret:

    $ curl http://127.0.0.1:8006/cdh/resource/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