Sdílet prostřednictvím


Nasazení důvěrných kontejnerů v clusteru Azure Red Hat OpenShift (ARO) (Preview)

Tento článek popisuje kroky potřebné k nasazení důvěrných kontejnerů pro cluster ARO. Tento proces zahrnuje dvě hlavní části a několik kroků:

Nejprve nasaďte kontejnery s izolovaným prostorem (sandbox) OpenShift, včetně následujících kroků:

  1. Nainstalujte operátor kontejnerů v izolovaném prostoru (sandbox) OpenShift.

  2. Vytvořte tajný kód partnerských podů.

  3. Vytvořte mapu konfigurace partnerských podů.

  4. Vytvořte tajný klíč Azure.

Po nasazení kontejnerů s izolovaným prostorem (sandbox) OpenShift nasaďte důvěrné kontejnery. To zahrnuje následující kroky:

  1. Nainstalujte operátor správce.

  2. Vytvořte trasu pro správce.

  3. Povolte bránu funkcí Důvěrné kontejnery.

  4. Aktualizujte mapu konfigurace partnerských podů.

  5. Vytvořte vlastní prostředek KataConfig.

  6. Vytvořte tajný klíč ověřování správce.

  7. Vytvořte mapu konfigurace správce.

  8. Nakonfigurujte správce.

  9. Vytvořte vlastní prostředek KbsConfig.

  10. Ověřte proces ověření identity.

Než začnete

Před zahájením procesu nasazení se ujistěte, že jsou splněny následující požadavky:

  • Existující cluster ARO (verze 4.15 nebo novější) s alespoň jedním pracovním uzlem

  • Přístup ke clusteru s cluster-admin rolí

  • Nainstalované rozhraní příkazového řádku OpenShift

Důležité

Pro každý pod v aplikaci existuje mapování 1:1 s odpovídajícím důvěrným virtuálním počítačem (CVM). To znamená, že každý nový pod vyžaduje samostatný CVM a zajišťuje izolaci mezi pody.

Část 1: Nasazení kontejnerů s izolovaným prostorem (sandbox) OpenShift

Instalace operátoru kontejnerů s izolovaným prostorem (sandbox) OpenShift

Operátor kontejnerů s izolovaným prostorem (sandbox) OpenShift je možné nainstalovat prostřednictvím rozhraní příkazového řádku nebo webové konzoly OpenShift.

  1. Vytvořte soubor manifestu osc-namespace.yaml :

    apiVersion: v1
    kind: Namespace
    metadata:
        name: openshift-sandboxed-containers-operator
    
  2. Vytvořte obor názvů spuštěním následujícího příkazu:

    $ oc apply -f osc-namespace.yaml

  3. Vytvořte soubor manifestu osc-operatorgroup.yaml :

    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: sandboxed-containers-operator-group
      namespace: openshift-sandboxed-containers-operator
    spec:
      targetNamespaces:
      - openshift-sandboxed-containers-operator
    
  4. Spuštěním následujícího příkazu vytvořte skupinu operátorů.

    $ oc apply -f osc-operatorgroup.yaml

  5. Vytvořte soubor manifestu osc-subscription.yaml :

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: sandboxed-containers-operator
      namespace: openshift-sandboxed-containers-operator
    spec:
      channel: stable
      installPlanApproval: Automatic
      name: sandboxed-containers-operator
      source: redhat-operators
      sourceNamespace: openshift-marketplace
      startingCSV: sandboxed-containers-operator.v1.7.0
    
  6. Vytvořte předplatné spuštěním následujícího příkazu:

    $ oc apply -f osc-subscription.yaml

  7. Spuštěním následujícího příkazu ověřte, že je operátor správně nainstalovaný:

    $ oc get csv -n openshift-sandboxed-containers-operator

    Poznámka:

    Provedení tohoto příkazu může trvat i několik minut.

  8. Sledujte proces spuštěním následujícího příkazu:

    $ watch oc get csv -n openshift-sandboxed-containers-operator

    Příklad výstupu

    NAME                             DISPLAY                                  VERSION    REPLACES     PHASE
    openshift-sandboxed-containers   openshift-sandboxed-containers-operator  1.7.0      1.6.0        Succeeded
    

Vytvoření tajného kódu partnerských podů

Pro kontejnery s izolovaným prostorem (sandbox) OpenShift musíte vytvořit tajný kód partnerských podů. Tajné klíče ukládají přihlašovací údaje pro vytvoření image virtuálního počítače podu a instancí partnerských podů.

Ve výchozím nastavení vytvoří operátor kontejnerů v izolovaném prostoru (sandbox) OpenShift tajný klíč na základě přihlašovacích údajů použitých k vytvoření clusteru. Můžete ale ručně vytvořit tajný klíč, který používá jiné přihlašovací údaje.

  1. Spuštěním následujícího příkazu načtěte ID předplatného Azure:

    $ AZURE_SUBSCRIPTION_ID=$(az account list --query "[?isDefault].id" \
      -o tsv) && echo "AZURE_SUBSCRIPTION_ID: \"$AZURE_SUBSCRIPTION_ID\""
    
  2. Spuštěním následujícího příkazu vygenerujte obsah řízení přístupu na základě role (RBAC):

    $ az ad sp create-for-rbac --role Contributor --scopes /subscriptions/$AZURE_SUBSCRIPTION_ID \
          --query "{ client_id: appId, client_secret: password, tenant_id: tenant }"
    

    Příklad výstupu

    {
          "client_id": `AZURE_CLIENT_ID`,
          "client_secret": `AZURE_CLIENT_SECRET`,
          "tenant_id": `AZURE_TENANT_ID`
        }
    
  3. Zaznamenejte výstup RBAC, který se má použít v tajném objektu.

  4. Podle následujícího příkladu vytvořte soubor manifestu peer-pods-secret.yaml:

    apiVersion: v1
    kind: Secret
    metadata:
      name: peer-pods-secret
      namespace: openshift-sandboxed-containers-operator
    type: Opaque
    stringData:
      AZURE_CLIENT_ID: "<azure_client_id>"
      AZURE_CLIENT_SECRET: "<azure_client_secret>"
      AZURE_TENANT_ID: "<azure_tenant_id>"
      AZURE_SUBSCRIPTION_ID: "<azure_subscription_id>"
    
    • Zadejte hodnotu AZURE_CLIENT_ID value.
    • Zadejte hodnotu AZURE_CLIENT_SECRET value.
    • Zadejte hodnotu AZURE_TENANT_ID value.
    • Zadejte hodnotu AZURE_SUBSCRIPTION_ID value.
  5. Vytvořte tajný kód spuštěním následujícího příkazu:

    $ oc apply -f peer-pods-secret.yaml

Vytvoření konfigurační mapy partnerských podů

  1. Získejte z Azure následující hodnoty:

    1. Načtení a zaznamenání skupiny prostředků Azure:

      $ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""

    2. Načtení a zaznamenání názvu virtuální sítě Azure:

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

      Tato hodnota se používá k načtení ID podsítě Azure.

    3. Načtení a zaznamenání ID podsítě Azure:

      $ 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\""
      
    4. Načtení a zaznamenání ID skupiny zabezpečení sítě Azure (NSG):

      $ AZURE_NSG_ID=$(az network nsg list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Id:id}" --output tsv) && echo "AZURE_NSG_ID: \"$AZURE_NSG_ID\""
      
    5. Načtení a zaznamenání oblasti Azure:

      $ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""

  2. Podle následujícího příkladu vytvořte soubor manifestu 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_B2als_v2"
      AZURE_INSTANCE_SIZES: "Standard_B2als_v2,Standard_D2as_v5,Standard_D4as_v5,Standard_D2ads_v5"
      AZURE_SUBNET_ID: "<azure_subnet_id>"
      AZURE_NSG_ID: "<azure_nsg_id>"
      PROXY_TIMEOUT: "5m"
      AZURE_IMAGE_ID: "<azure_image_id>"
      AZURE_REGION: "<azure_region>"
      AZURE_RESOURCE_GROUP: "<azure_resource_group>"
      DISABLECVM: "true"
    
    • AZURE_INSTANCE_SIZE je výchozí, pokud není v úloze definována velikost instance.
    • AZURE_INSTANCE_SIZES zobrazí seznam všech velikostí instancí, které můžete zadat při vytváření podu. To umožňuje definovat menší velikosti instancí pro úlohy, které potřebují méně paměti a méně procesorů nebo větších instancí pro větší úlohy.
    • AZURE_SUBNET_ID Zadejte hodnotu, kterou jste získali.
    • AZURE_NSG_ID Zadejte hodnotu, kterou jste získali.
    • AZURE_IMAGE_ID je volitelné. Ve výchozím nastavení se tato hodnota naplní při spuštění vlastního prostředku KataConfig pomocí ID image Azure na základě přihlašovacích údajů clusteru. Pokud vytvoříte vlastní image Azure, zadejte správné ID image.
    • Zadejte hodnotu, AZURE_REGION kterou jste získali.
    • Zadejte hodnotu, AZURE_RESOURCE_GROUP kterou jste získali.
  3. Vytvořte mapu konfigurace spuštěním následujícího příkazu: $ oc apply -f peer-pods-cm.yaml

Vytvoření tajného kódu Azure

Musíte vytvořit tajný klíč SSH, který Azure používá k vytváření virtuálních počítačů.

  1. Spuštěním následujícího příkazu vygenerujte pár klíčů SSH:

    $ ssh-keygen -f ./id_rsa -N ""

  2. Vytvořte tajný objekt spuštěním následujícího příkazu:

    $ oc create secret generic ssh-key-secret \
          -n openshift-sandboxed-containers-operator \
          --from-file=id_rsa.pub=./id_rsa.pub
    
  3. Odstraňte klíče SSH, které jste vytvořili:

    $ shred --remove id_rsa.pub id_rsa

Část 2: Nasazení důvěrných kontejnerů

Instalace operátoru správce

  1. Vytvořte soubor manifestu pro správce-namespace.yaml:

    apiVersion: v1
    kind: Namespace
    metadata:
    name: trustee-operator-system
    
  2. Spuštěním následujícího příkazu vytvořte obor názvů správce-operator-system:

    $ oc apply -f trustee-namespace.yaml

  3. Vytvořte soubor manifestu pro správce-operatorgroup.yaml:

    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: trustee-operator-group
      namespace: trustee-operator-system
    spec:
      targetNamespaces:
      - trustee-operator-system
    
  4. Vytvořte skupinu Operátor spuštěním následujícího příkazu:

    $ oc apply -f trustee-operatorgroup.yaml

  5. Vytvořte soubor manifestu pro správce-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
    
  6. Vytvořte předplatné spuštěním následujícího příkazu:

    $ oc apply -f trustee-subscription.yaml

  7. Spuštěním následujícího příkazu ověřte, že je operátor správně nainstalovaný:

    $ oc get csv -n trustee-operator-system

    Provedení tohoto příkazu může trvat i několik minut.

  8. Sledujte proces spuštěním následujícího příkazu:

    $ watch oc get csv -n trustee-operator-system

    Příklad výstupu

    NAME                          DISPLAY                        PHASE
    trustee-operator.v0.1.0       Trustee Operator  0.1.0        Succeeded
    

Vytvoření trasy pro správce

Vytvořte zabezpečenou trasu s ukončením hraničního protokolu TLS pro správce. Externí příchozí provoz dosáhne podů směrovače jako HTTPS a předává se do podů správců jako HTTP.

  1. Spuštěním následujícího příkazu vytvořte hraniční trasu:

    $ oc create route edge --service=kbs-service --port kbs-port \
      -n trustee-operator-system
    

    Poznámka:

    V současné době se podporuje pouze trasa s platným certifikátem podepsaným certifikační autoritou. Trasu s certifikátem podepsaným svým držitelem nemůžete použít.

  2. Nastavte proměnnou TRUSTEE_HOST spuštěním následujícího příkazu:

    $ TRUSTEE_HOST=$(oc get route -n trustee-operator-system kbs-service \
      -o jsonpath={.spec.host})
    
  3. Spuštěním následujícího příkazu ověřte trasu:

    $ echo $TRUSTEE_HOST

    Příklad výstupukbs-service-trustee-operator-system.apps.memvjias.eastus.aroapp.io

    Tuto hodnotu zaznamenejte pro mapu konfigurace partnerských podů.

Povolení brány funkcí Důvěrné kontejnery

  1. Vytvoření souboru manifestu cc-feature-gate.yaml :

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: osc-feature-gates
      namespace: openshift-sandboxed-containers-operator
    data:
      confidential: "true"
    
  2. Vytvořte mapu konfigurace spuštěním následujícího příkazu:

    $ oc apply -f cc-feature-gate.yaml

Aktualizace konfigurační mapy partnerských podů

  1. Získejte z vaší instance Azure následující hodnoty:

    i. Načtení a zaznamenání skupiny prostředků Azure:

    $ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""

    ii. Načtení a zaznamenání názvu virtuální sítě Azure:

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

    Tato hodnota se používá k načtení ID podsítě Azure.

    iii. Načtení a zaznamenání ID podsítě Azure:

    $ 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\""

    iv. Načtení a zaznamenání ID skupiny zabezpečení sítě Azure (NSG):

    $ AZURE_NSG_ID=$(az network nsg list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Id:id}" --output tsv) && echo "AZURE_NSG_ID: \"$AZURE_NSG_ID\""

    v. Načtení a zaznamenání oblasti Azure:

    $ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""

  2. Vytvořte soubor manifestu peer-pods-cm.yaml podle následujícího příkladu:

    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"
      AZURE_INSTANCE_SIZES: "Standard_DC2as_v5,Standard_DC4as_v5,Standard_DC8as_v5"
      AZURE_SUBNET_ID: "<azure_subnet_id>"
      AZURE_NSG_ID: "<azure_nsg_id>"
      PROXY_TIMEOUT: "5m"
      AZURE_IMAGE_ID: "<azure_image_id>"
      AZURE_REGION: "<azure_region>"
      AZURE_RESOURCE_GROUP: "<azure_resource_group>"
      DISABLECVM: "false"
      AA_KBC_PARAMS: "cc_kbc::https://${TRUSTEE_HOST}"
    
    • AZURE_INSTANCE_SIZE je výchozí, pokud není v úloze definována velikost instance. Pro TDX zadejte "Standard_EC4eds_v5".
    • AZURE_INSTANCE_SIZES zobrazí seznam všech velikostí instancí, které můžete zadat při vytváření podu. To umožňuje definovat menší velikosti instancí pro úlohy, které potřebují méně paměti a méně procesorů nebo větších instancí pro větší úlohy. Pro TDX zadejte "Standard_EC4eds_v5, Standard_EC8eds_v5, Standard_EC16eds_v5".
    • AZURE_SUBNET_ID Zadejte hodnotu, kterou jste získali.
    • AZURE_NSG_ID Zadejte hodnotu, kterou jste získali.
    • AZURE_IMAGE_ID (Volitelné): Ve výchozím nastavení se tato hodnota naplní při spuštění vlastního prostředku KataConfig pomocí ID image Azure na základě přihlašovacích údajů clusteru. Pokud vytvoříte vlastní image Azure, zadejte správné ID image.
    • Zadejte hodnotu, AZURE_REGION kterou jste získali.
    • Zadejte hodnotu, AZURE_RESOURCE_GROUP kterou jste získali.
    • AA_KBC_PARAMS určuje název hostitele trasy správce.
  3. Vytvořte mapu konfigurace spuštěním následujícího příkazu:

    $ oc apply -f peer-pods-cm.yaml

  4. peerpodconfig-ctrl-caa-daemon Spuštěním následujícího příkazu restartujte proces démona:

    $ oc set env ds/peerpodconfig-ctrl-caa-daemon \
      -n openshift-sandboxed-containers-operator REBOOT="$(date)"
    

Vytvoření vlastního prostředku KataConfig

  1. Vytvořte soubor manifestu example-kataconfig.yaml podle následujícího příkladu:

    apiVersion: kataconfiguration.openshift.io/v1
        kind: KataConfig
        metadata:
          name: example-kataconfig
        spec:
          enablePeerPods: true
          logLevel: info
        #  kataConfigPoolSelector:
        #    matchLabels:
        #      <label_key>: '<label_value>'
    

    Volitelné: Pokud jste použili popisky uzlů k instalaci kata-remote na konkrétní uzly, zadejte klíč a hodnotu, například cc: true.

  2. Spuštěním následujícího příkazu vytvořte vlastní prostředek KataConfig:

    $ oc apply -f example-kataconfig.yaml

    Nový vlastní prostředek KataConfig se vytvoří a nainstaluje kata-remote jako třídu modulu runtime na pracovní uzly.

    Poznámka:

    Před ověřením instalace počkejte, než se dokončí vzdálená instalace kata a pracovní uzly se restartují.

  3. Průběh instalace můžete monitorovat spuštěním následujícího příkazu:

    $ watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"

    Pokud je nainstalován stav všech pracovních procesů v rámci kataNodes a podmínka InProgress je Nepravda bez zadání důvodu, kata-remote se nainstaluje do clusteru.

  4. Spuštěním následujícího příkazu ověřte sadu démona:

    $ oc get -n openshift-sandboxed-containers-operator ds/peerpodconfig-ctrl-caa-daemon

  5. Spuštěním následujícího příkazu ověřte třídy modulu runtime:

    $ oc get runtimeclass

    Příklad výstupu

    NAME             HANDLER         AGE
    kata-remote      kata-remote     152m
    

Vytvoření tajného klíče pro ověření správce

  1. Spuštěním následujícího příkazu vytvořte privátní klíč:

    $ openssl genpkey -algorithm ed25519 > privateKey

  2. Vytvořte veřejný klíč spuštěním následujícího příkazu:

    $ openssl pkey -in privateKey -pubout -out publicKey

  3. Vytvořte tajný kód spuštěním následujícího příkazu:

    $ oc create secret generic kbs-auth-public-key --from-file=publicKey -n trustee-operator-system

  4. Ověřte tajný kód spuštěním následujícího příkazu:

    $ oc get secret -n trustee-operator-system

Vytvoření mapy konfigurace správce

  1. Vytvoření souboru manifestu 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"
          }
        }
    
  2. Vytvořte mapu konfigurace spuštěním následujícího příkazu:

    $ oc apply -f kbs-config-cm.yaml

Konfigurace správce

Nakonfigurujte následující nastavení správce:

Konfigurace referenčních hodnot

Referenční hodnoty pro službu RVPS (Reference Value Provider Service) můžete nakonfigurovat zadáním důvěryhodných hodnot hash hardwarové platformy.

Klient shromažďuje měření ze spuštěného softwaru, hardwaru a firmwaru důvěryhodného spouštěcího prostředí (TEE) a odešle nabídku s deklaracemi identity na server ověření identity. Tato měření musí odpovídat důvěryhodným hodnotám hash registrovaným správcem. Tento proces zajišťuje, že důvěrný virtuální počítač běží na očekávaném softwarovém zásobníku a že s tím nedošlo k manipulaci.

  1. Vytvořte soubor manifestu rvps-configmap.yaml :

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: rvps-reference-values
      namespace: trustee-operator-system
    data:
      reference-values.json: |
        [ 
        ]
    

    Pro reference-values.json zadání důvěryhodných algoritmů hash pro hardwarovou platformu v případě potřeby. Jinak ho nechte prázdný.

  2. Vytvořte mapu konfigurace RVPS spuštěním následujícího příkazu:

    $ oc apply -f rvps-configmap.yaml

Vytvoření vlastních zásad ověření identity

Výchozí zásady ověření identity můžete přepsat vytvořením vlastních zásad ověření identity.

  1. Podle následujícího příkladu vytvořte soubor manifestu attestation-policy.yaml:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: attestation-policy
      namespace: trustee-operator-system
    data:
      default.rego: |
         package policy
         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]
         }
    

    Pro zásadu package policyověření identity se řídí specifikací agenta Open Policy Agent. V tomto příkladu zásada ověření identity porovnává deklarace identity uvedené v sestavě ověření identity s referenčními hodnotami registrovanými v databázi RVPS. Proces ověření identity je úspěšný pouze v případě, že se shodují všechny hodnoty.

  2. Spuštěním následujícího příkazu vytvořte mapu konfigurace zásad ověření identity:

    $ oc apply -f attestation-policy.yaml

Zřizování služby ukládání certifikátů do mezipaměti pro TDX

Pokud máte TEE intel trust Domain Extensions (TDX), musíte nakonfigurovat službu PCCS (Provisioning Certificate Cache Service). Služba PCCS načte certifikáty PCK (Provisioning Certification Key) a ukládá je do mezipaměti v místní databázi.

  1. Vytvořte soubor manifestu 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>"
          }
    

    Zadejte pccs_urlnapříklad adresu URL služby PCCS. https://localhost:8081/sgx/certification/v4/.

  2. Spuštěním následujícího příkazu vytvořte mapu konfigurace TDX:

    $ oc apply -f tdx-config.yaml

Vytvoření tajného kódu pro ověření podpisu image kontejneru

Pokud používáte ověření podpisu image kontejneru, musíte vytvořit tajný klíč obsahující podpis image veřejného kontejneru. Operátor správce používá tajný kód k ověření podpisu a zajišťuje, aby se ve vašem prostředí nasadily jenom důvěryhodné a ověřené image kontejnerů.

  1. Spuštěním následujícího příkazu vytvořte tajný kód pro ověření podpisu image kontejneru:

    $ oc apply secret generic <type> \
        --from-file=<tag>=./<public_key_file> \
        -n trustee-operator-system
    
    • Zadejte například typ tajného klíče img-sigKBS .
    • Zadejte například pub-keyznačku tajného kódu a podpisový klíč veřejné image kontejneru.
  2. Poznamenejte si <type> hodnotu. Tuto hodnotu musíte přidat do klíče spec.kbsSecretResources při vytváření vlastního prostředku KbsConfig.

Vytvoření zásady ověření podpisu image kontejneru

Musíte vytvořit zásadu ověření podpisu image kontejneru, protože ověření podpisu je vždy povoleno.

Důležité

Pokud tato zásada chybí, pody se nespustí. Pokud nepoužíváte ověření podpisu image kontejneru, vytvoříte zásadu bez ověření podpisu.

  1. Vytvořte soubor security-policy-config.json podle následujících příkladů:

    Bez ověření podpisu:

    {
            "default": [
            {
            "type": "insecureAcceptAnything"
            }],
            "transports": {}
        }
    

    Ověření podpisu:

    {
            "default": [
            {
            "type": "insecureAcceptAnything"
            ],
            "transports": {
            "<transport>": {
            "<registry>/<image>":
            [
            {
            "type": "sigstoreSigned",
            "keyPath": "kbs:///default/<type>/<tag>"
            }
            ]
            }
            }
        }
    
    • Zadejte úložiště image pro přenos, například docker.
    • Zadejte registr kontejneru a image, například "quay.io/my-image".
    • Zadejte typ a značku ověřovacího tajného klíče podpisu image kontejneru, který jste vytvořili, například "img-sig/pub-key".
  2. Vytvořte zásadu zabezpečení spuštěním následujícího příkazu:

    $ oc apply secret generic security-policy \
        --from-file=osc=./<security-policy-config.json> \
        -n trustee-operator-system
    

    Neměňte typ tajného klíče, zásady zabezpečení ani klíč, osc.

    Tajný klíč zásad zabezpečení je zadaný v spec.kbsSecretResources klíči vlastního prostředku KbsConfig.

Vytvoření vlastního prostředku KbsConfig

Abyste mohli spustit správce, musíte vytvořit vlastní prostředek KbsConfig.

  1. Vytvoření souboru manifestu 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", "security-policy", "<type>"]
      kbsResourcePolicyConfigMapName: resource-policy
        # tdxConfigSpec:
        #   kbsTdxConfigMapName: tdx-config
        #   kbsAttestationPolicyConfigMapName: attestation-policy
        #   kbsServiceType: <service_type>
    
    • Volitelné: Zadejte type hodnotu ověřovacího tajného klíče podpisu image kontejneru, pokud jste například img-sigvytvořili tajný kód . Pokud jste tajný kód nevytvořili, nastavte kbsSecretResources hodnotu na ["kbsres1", "security-policy"]hodnotu .
    • Zrušte komentář tdxConfigSpec.kbsTdxConfigMapName: tdx-config pro rozšíření domény Intel Trust.
    • Pokud vytvoříte přizpůsobenou zásadu ověření identity, zrušte komentář kbsAttestationPolicyConfigMapName: attestation-policy .
    • Odkomentujte kbsServiceType: <service_type> , pokud vytvoříte jiný typ služby, než je výchozí služba ClusterIP, aby se zpřístupnily aplikace v rámci externího provozu clusteru. Můžete zadat NodePort, LoadBalancernebo ExternalName.
  2. Vytvořte vlastní prostředek KbsConfig spuštěním následujícího příkazu:

    $ oc apply -f kbsconfig-cr.yaml

Ověření konfigurace správce

Ověřte konfiguraci správce kontrolou podů a protokolů správce.

  1. Nastavte výchozí projekt spuštěním následujícího příkazu:

    $ oc project trustee-operator-system

  2. Spuštěním následujícího příkazu zkontrolujte pody:

    $ oc get pods -n trustee-operator-system

    Příklad výstupu

    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
    
  3. Nastavte POD_NAME proměnnou prostředí spuštěním následujícího příkazu:

    $ POD_NAME=$(oc get pods -l app=kbs -o jsonpath='{.items[0].metadata.name}' -n trustee-operator-system)

  4. Spuštěním následujícího příkazu zkontrolujte protokoly podů:

    $ oc logs -n trustee-operator-system $POD_NAME

    Příklad výstupu

    [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
    

Ověření procesu ověření identity

Proces ověření identity můžete ověřit tak, že vytvoříte testovací pod a načítáte jeho tajný kód.

Důležité: Tento postup je příkladem ověření, že ověření identity funguje. Nezapisujte citlivá data do standardních vstupně-výstupních operací, protože data je možné zachytit pomocí výpisu paměti. Šifrují se jenom data zapsaná do paměti.

Ve výchozím nastavení zásady na straně agenta vložené do image virtuálního počítače podů zakazují rozhraní API exec a protokolu pro pod Důvěrné kontejnery. Tato zásada zajišťuje, aby citlivá data nebyla zapsána do standardních vstupně-výstupních operací.

V testovacím scénáři můžete omezení za běhu přepsat přidáním poznámky k zásadám do podu. V případě technologie Preview nejsou poznámky k zásadám modulu runtime ověřeny vzdáleným ověřením identity.

  1. Vytvořte soubor manifestu verification-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: ocp-cc-pod
      labels:
        app: ocp-cc-pod
      annotations:
        io.katacontainers.config.agent.policy: cGFja2FnZSBhZ2VudF9wb2xpY3kKCmRlZmF1bHQgQWRkQVJQTmVpZ2hib3JzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgQWRkU3dhcFJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IENsb3NlU3RkaW5SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBDb3B5RmlsZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IENyZWF0ZVNhbmRib3hSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBEZXN0cm95U2FuZGJveFJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IEV4ZWNQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgR2V0TWV0cmljc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IEdldE9PTUV2ZW50UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgR3Vlc3REZXRhaWxzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgTGlzdEludGVyZmFjZXNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBMaXN0Um91dGVzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgTWVtSG90cGx1Z0J5UHJvYmVSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQYXVzZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFB1bGxJbWFnZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlYWRTdHJlYW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZW1vdmVDb250YWluZXJSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZW1vdmVTdGFsZVZpcnRpb2ZzU2hhcmVNb3VudHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZXNlZWRSYW5kb21EZXZSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZXN1bWVDb250YWluZXJSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTZXRHdWVzdERhdGVUaW1lUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgU2V0UG9saWN5UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgU2lnbmFsUHJvY2Vzc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXJ0Q29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgU3RhcnRUcmFjaW5nUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgU3RhdHNDb250YWluZXJSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdG9wVHJhY2luZ1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFR0eVdpblJlc2l6ZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZUVwaGVtZXJhbE1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IHRydWUK
    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
    

    Metada annotations podu přepíše zásadu, která brání zápisu citlivých dat do standardních vstupně-výstupních operací.

  2. Vytvořte pod spuštěním následujícího příkazu:

    $ oc create -f verification-pod.yaml

  3. Spuštěním následujícího příkazu se připojte k prostředí Bash podu ocp-cc-pod:

    $ oc exec -it ocp-cc-pod -- bash

  4. Načtěte tajný kód podu spuštěním následujícího příkazu:

    $ curl http://127.0.0.1:8006/cdh/resource/default/kbsres1/key1

    Příklad výstupu
    res1val1

    Server správce vrátí tajný kód pouze v případě, že ověření identity proběhne úspěšně.