4.4. Azure에 기밀 컨테이너 배포


OpenShift 샌드박스 컨테이너를 배포한 후 Microsoft Azure 클라우드 컴퓨팅 서비스에 기밀 컨테이너를 배포할 수 있습니다.

중요

Azure의 기밀 컨테이너는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

클러스터 요구 사항

  • 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 인증 시크릿을 생성합니다.
  8. Trustee 구성 맵을 생성합니다.
  9. 인증 정책을 구성합니다.

    1. 참조 값을 생성합니다.
    2. 테스트된 클라이언트의 시크릿을 생성합니다.
    3. 리소스 액세스 정책을 생성합니다.
    4. 선택 사항: 기본 정책을 재정의하는 인증 정책을 생성합니다.
    5. TEE가 Intel Trust Domain Extensions인 경우 Provisioning Certificate Caching Service를 구성합니다.
  10. KbsConfig CR을 생성합니다.
  11. 인증 프로세스를 확인합니다.

4.4.1. 기밀 컴퓨팅 인증 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 종료를 사용하여 보안 경로를 생성할 수 있습니다. 외부 수신 트래픽은 라우터 Pod에 HTTPS로 도달하고 Trustee Pod에 HTTP로 전달합니다.

사전 요구 사항

  • 기밀 컨테이너 기능 게이트를 활성화했습니다.
  • 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. 기밀성 컨테이너 기능 게이트 활성화

기밀 컨테이너 기능 게이트를 활성화해야 합니다.

프로세스

  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 구성 맵을 업데이트해야 합니다.

참고

Secure Boot를 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 NSS(Network Security Group) 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를 생성할 때 지정할 수 있는 모든 인스턴스 크기를 나열합니다. 이를 통해 더 적은 메모리와 더 적은 CPU 또는 대규모 워크로드의 인스턴스 크기가 필요한 워크로드에 대해 더 작은 인스턴스 크기를 정의할 수 있습니다. Intel TDX의 경우 "Standard_EC4eds_v5, Standard_EC8eds_v5, Standard_EC16eds_v5" 를 지정합니다.
    3
    검색한 AZURE_SUBNET_ID 값을 지정합니다.
    4
    검색한 AZURE_NSG_ID 값을 지정합니다.
    5
    선택 사항: 기본적으로 클러스터 인증 정보를 기반으로 Azure 이미지 ID를 사용하여 KataConfig CR을 실행할 때 이 값이 채워집니다. 자체 Azure 이미지를 생성하는 경우 올바른 이미지 ID를 지정합니다.
    6
    검색한 AZURE_REGION 값을 지정합니다.
    7
    검색한 AZURE_RESOURCE_GROUP 값을 지정합니다.
    8
    Trustee 경로의 호스트 이름을 지정합니다.
    9
    기본적으로 Secure Boot를 활성화하려면 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을 삭제하면 작업자 노드가 자동으로 재부팅됩니다. 재부팅에는 10분에서 60분 이상 걸릴 수 있습니다. 재부팅 시간을 방해하는 요소는 다음과 같습니다.

  • 더 많은 작업자 노드가 있는 대규모 OpenShift Container Platform 배포
  • BIOS 및 Cryostat 유틸리티 활성화.
  • 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가 응답하지 않습니다. 확인을 수행하기 전에 삭제 프로세스가 완료될 때까지 기다려야 합니다.

  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을 생성하면 작업자 노드가 자동으로 재부팅됩니다. 재부팅에는 10분에서 60분 이상 걸릴 수 있습니다. 재부팅 시간을 방해하는 요소는 다음과 같습니다.

  • 더 많은 작업자 노드가 있는 대규모 OpenShift Container Platform 배포
  • BIOS 및 Cryostat 유틸리티 활성화.
  • 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이 생성되고 작업자 노드에 kata-remote 가 런타임 클래스로 설치됩니다.

    설치를 확인하기 전에 kata-remote 설치가 완료되고 작업자 노드가 재부팅될 때까지 기다립니다.

  3. 다음 명령을 실행하여 설치 진행 상황을 모니터링합니다.

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

    kataNodes 아래의 모든 작업자의 상태가 설치되고 이유를 지정하지 않고 InProgress 조건이 False 이면 클러스터에 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. Trustee 인증 보안 생성

Trustee에 대한 인증 시크릿을 생성해야 합니다.

사전 요구 사항

  • 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. 다음 명령을 실행하여 보안을 생성합니다.

    $ oc create secret generic kbs-auth-public-key --from-file=publicKey -n trustee-operator-system
    Copy to Clipboard Toggle word wrap
  4. 다음 명령을 실행하여 시크릿을 확인합니다.

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

4.4.8. Trustee 구성 맵 생성

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. 인증 정책 구성

다음 인증 정책 설정을 구성할 수 있습니다.

참조 값

하드웨어 플랫폼의 신뢰할 수 있는 다이제스트를 지정하여 RVPS(Reference Value Provider Service)에 대한 참조 값을 구성할 수 있습니다.

클라이언트는 실행 중인 소프트웨어, TEE(신뢰할 수 있는 실행 환경) 하드웨어 및 펌웨어에서 측정을 수집하고 클레임과 함께 Attestation Server에 견적을 제출합니다. 이러한 측정은 Trustee에 등록된 신뢰할 수 있는 다이제스트와 일치해야 합니다. 이 프로세스에서는 기밀 VM(CVM)이 예상 소프트웨어 스택을 실행 중이고 변조되지 않도록 합니다.

클라이언트의 시크릿
테스트된 클라이언트와 공유할 하나 이상의 시크릿을 생성해야 합니다.
리소스 액세스 정책

액세스할 리소스를 결정하려면 Trustee 정책 엔진에 대한 정책을 구성해야 합니다.

TEE 증명의 유효성을 결정하는 신뢰 정책 엔진과 인증 서비스 정책 엔진을 혼동하지 마십시오.

인증 정책
선택 사항: 자체 인증 정책을 생성하여 기본 인증 정책을 덮어쓸 수 있습니다.
TDX용 인증서 캐싱 서비스 프로비저닝

TEE가 TDX(Intel Trust Domain Extensions)인 경우 프로비저닝 인증서 캐싱 서비스(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. 다음 예에 따라 인증된 클라이언트와 공유할 하나 이상의 시크릿을 생성합니다.

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

    이 예에서 kbsres1 시크릿에는 두 개의 항목(key1,key2)이 있으며, 이 항목은 Trustee 클라이언트가 검색합니다. 요구 사항에 따라 더 많은 시크릿을 추가할 수 있습니다.

  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가 샘플 attester가 아닌 경우 모든 리소스를 검색할 수 있습니다.
  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
    인증 정책은 Open Policy Agent 사양을 따릅니다. 이 예에서 attestation 정책은 테스트 보고서에 제공된 클레임을 RVPS 데이터베이스에 등록된 참조 값과 비교합니다. 인증 프로세스는 모든 값이 일치하는 경우에만 성공합니다.
  7. 다음 명령을 실행하여 인증 정책 구성 맵을 생성합니다.

    $ 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 사용자 정의 리소스 생성

Trustee를 시작하려면 KbsConfig CR(사용자 정의 리소스)을 생성해야 합니다.

그런 다음 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를 생성하고 시크릿을 검색하여 인증 프로세스를 확인할 수 있습니다.

중요

이 절차는 인증이 작동하는지 확인하는 예입니다. 메모리 덤프를 사용하여 데이터를 캡처할 수 있으므로 표준 I/O에 민감한 데이터를 작성하지 마십시오. 메모리에 기록된 데이터만 암호화됩니다.

기본적으로 Pod VM 이미지에 포함된 에이전트 측 정책은 기밀 컨테이너 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 쉘에 연결합니다.

    $ oc exec -it ocp-cc-pod -- bash
    Copy to Clipboard Toggle word wrap
  4. 다음 명령을 실행하여 Pod 시크릿을 가져옵니다.

    $ 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

    Trustee 서버는 인증에 성공한 경우에만 시크릿을 반환합니다.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat