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ů:
Nainstalujte operátor kontejnerů v izolovaném prostoru (sandbox) OpenShift.
Vytvořte tajný kód partnerských podů.
Vytvořte mapu konfigurace partnerských podů.
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:
Nainstalujte operátor správce.
Vytvořte trasu pro správce.
Povolte bránu funkcí Důvěrné kontejnery.
Aktualizujte mapu konfigurace partnerských podů.
Vytvořte vlastní prostředek KataConfig.
Vytvořte tajný klíč ověřování správce.
Vytvořte mapu konfigurace správce.
Nakonfigurujte správce.
Vytvořte vlastní prostředek KbsConfig.
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.
Vytvořte soubor manifestu
osc-namespace.yaml
:apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
Vytvořte obor názvů spuštěním následujícího příkazu:
$ oc apply -f osc-namespace.yaml
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
Spuštěním následujícího příkazu vytvořte skupinu operátorů.
$ oc apply -f osc-operatorgroup.yaml
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
Vytvořte předplatné spuštěním následujícího příkazu:
$ oc apply -f osc-subscription.yaml
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.
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.
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\""
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` }
Zaznamenejte výstup RBAC, který se má použít v tajném objektu.
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
.
- Zadejte hodnotu
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ů
Získejte z Azure následující hodnoty:
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\""
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.
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\""
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\""
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\""
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.
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čů.
Spuštěním následujícího příkazu vygenerujte pár klíčů SSH:
$ ssh-keygen -f ./id_rsa -N ""
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
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
Vytvořte soubor manifestu pro správce-namespace.yaml:
apiVersion: v1 kind: Namespace metadata: name: trustee-operator-system
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
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
Vytvořte skupinu Operátor spuštěním následujícího příkazu:
$ oc apply -f trustee-operatorgroup.yaml
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
Vytvořte předplatné spuštěním následujícího příkazu:
$ oc apply -f trustee-subscription.yaml
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.
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.
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.
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})
Spuštěním následujícího příkazu ověřte trasu:
$ echo $TRUSTEE_HOST
Příklad výstupu
kbs-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
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"
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ů
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\""
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.
Vytvořte mapu konfigurace spuštěním následujícího příkazu:
$ oc apply -f peer-pods-cm.yaml
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
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.
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í.
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.
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
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
Spuštěním následujícího příkazu vytvořte privátní klíč:
$ openssl genpkey -algorithm ed25519 > privateKey
Vytvořte veřejný klíč spuštěním následujícího příkazu:
$ openssl pkey -in privateKey -pubout -out publicKey
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
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
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" } }
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.
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ý.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.
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 policy
ověř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.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.
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_url
například adresu URL služby PCCS. https://localhost:8081/sgx/certification/v4/.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ů.
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-sig
KBS . - Zadejte například
pub-key
značku tajného kódu a podpisový klíč veřejné image kontejneru.
- Zadejte například typ tajného klíče
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.
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".
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.
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říkladimg-sig
vytvořili tajný kód . Pokud jste tajný kód nevytvořili, nastavtekbsSecretResources
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 zadatNodePort
,LoadBalancer
neboExternalName
.
- Volitelné: Zadejte
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.
Nastavte výchozí projekt spuštěním následujícího příkazu:
$ oc project trustee-operator-system
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
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)
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.
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í.Vytvořte pod spuštěním následujícího příkazu:
$ oc create -f verification-pod.yaml
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
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ě.