Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, bir ARO kümesi için Gizli Kapsayıcıları dağıtmak için gereken adımlar açıklanmaktadır. Bu işlem iki ana bölümden ve birden çok adımdan oluşur:
İlk olarak, aşağıdaki adımlar da dahil olmak üzere OpenShift Korumalı Kapsayıcıları dağıtın:
OpenShift Korumalı Kapsayıcılar İşleci'ni yükleyin.
Eş podlar gizli dizisini oluşturun.
Eş podlar yapılandırma eşlemesini oluşturun.
Azure gizli dizisini oluşturun.
OpenShift Korumalı Kapsayıcıları dağıtdıktan sonra Gizli Kapsayıcılar'ı dağıtın. Bu, aşağıdaki adımları içerir:
Trustee İşleci'ni yükleyin.
Güvenen için yolu oluşturun.
Gizli Kapsayıcılar özellik geçidini etkinleştirin.
Eş pod yapılandırma eşlemesini güncelleştirin.
KataConfig özel kaynağını oluşturun.
Güvenen kimlik doğrulama gizli dizisini oluşturun.
Trustee yapılandırma eşlemesini oluşturun.
Güvenen'i yapılandırın.
KbsConfig özel kaynağını oluşturun.
Kanıtlama işlemini doğrulayın.
Başlamadan önce
Dağıtım işlemine başlamadan önce aşağıdaki önkoşulların karşılandığından emin olun:
En az bir çalışan düğümüne sahip mevcut bir ARO kümesi (sürüm 4.15 veya üzeri)
Rolüyle kümeye
cluster-admin
erişim
Önemli
Bir uygulamadaki her pod için, karşılık gelen Gizli Sanal Makine (CVM) ile bire bir eşleme vardır. Bu, her yeni podun ayrı bir CVM gerektirdiği anlamına gelir ve podlar arasında yalıtım sağlar.
Bölüm 1: OpenShift korumalı kapsayıcıları dağıtma
OpenShift korumalı kapsayıcılar İşlecini yükleme
OpenShift korumalı kapsayıcılar işleci CLI veya OpenShift web konsolu aracılığıyla yüklenebilir.
Bildirim
osc-namespace.yaml
dosyası oluşturma:apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
Aşağıdaki komutu çalıştırarak ad alanını oluşturun:
$ oc apply -f osc-namespace.yaml
Bildirim
osc-operatorgroup.yaml
dosyası oluşturma:apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: sandboxed-containers-operator-group namespace: openshift-sandboxed-containers-operator spec: targetNamespaces: - openshift-sandboxed-containers-operator
Aşağıdaki komutu çalıştırarak işleç grubunu oluşturun
$ oc apply -f osc-operatorgroup.yaml
Bildirim
osc-subscription.yaml
dosyası oluşturma: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
Aşağıdaki komutu çalıştırarak aboneliği oluşturun:
$ oc apply -f osc-subscription.yaml
Aşağıdaki komutu çalıştırarak İşlecin doğru yüklendiğini doğrulayın:
$ oc get csv -n openshift-sandboxed-containers-operator
Uyarı
Bu komutun tamamlanması birkaç dakika sürebilir.
Aşağıdaki komutu çalıştırarak işlemi izleyin:
$ watch oc get csv -n openshift-sandboxed-containers-operator
Örnek Çıkış
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.7.0 1.6.0 Succeeded
Web konsolunda Operatörler → OperatorHub'a gidin.
Anahtar sözcükle filtrele alanına OpenShift korumalı kapsayıcıları yazın.
OpenShift korumalı kapsayıcılar İşleci kutucuğunu seçin ve Yükle'yi seçin.
Yükleme operatörü sayfasında, kullanılabilir Güncelleştirme Kanalı seçenekleri listesinden kararlı'yı seçin.
İşleç tarafından önerilen Ad Alanının Yüklü Ad Alanı için seçildiğini doğrulayın. Bu, İşleci zorunlu
openshift-sandboxed-containers-operator
ad alanına yükler. Bu ad alanı henüz yoksa, otomatik olarak oluşturulur.Uyarı
OpenShift korumalı kapsayıcılar işlecini openshift-sandboxed-containers-operator dışında bir ad alanına yüklemeye çalışmak yüklemenin başarısız olmasına neden olur.
Onay Stratejisi için Otomatik'in seçili olduğunu doğrulayın. Otomatik varsayılan değerdir ve yeni bir z-stream sürümü kullanılabilir olduğunda OpenShift korumalı kapsayıcıları için otomatik güncelleştirmeleri etkinleştirir.
Yükle'yi seçin.
İşleçler → Yüklü İşleçler'e gidip İşleç'in yüklü olduğunu doğrulayın.
Eş podlar gizli dizisini oluşturma
OpenShift korumalı kapsayıcıları için eş pod gizli dizisini oluşturmanız gerekir. Gizli dizi, pod sanal makinesi (VM) görüntüsünü ve eş pod örneklerini oluşturmak için kimlik bilgilerini depolar.
Varsayılan olarak, OpenShift korumalı kapsayıcılar işleci gizli diziyi kümeyi oluşturmak için kullanılan kimlik bilgilerine göre oluşturur. Ancak, farklı kimlik bilgileri kullanan bir gizli diziyi el ile oluşturabilirsiniz.
Aşağıdaki komutu çalıştırarak Azure abonelik kimliğini alın:
$ AZURE_SUBSCRIPTION_ID=$(az account list --query "[?isDefault].id" \ -o tsv) && echo "AZURE_SUBSCRIPTION_ID: \"$AZURE_SUBSCRIPTION_ID\""
Aşağıdaki komutu çalıştırarak rol tabanlı erişim denetimi (RBAC) içeriğini oluşturun:
$ az ad sp create-for-rbac --role Contributor --scopes /subscriptions/$AZURE_SUBSCRIPTION_ID \ --query "{ client_id: appId, client_secret: password, tenant_id: tenant }"
Örnek çıkış
{ "client_id": `AZURE_CLIENT_ID`, "client_secret": `AZURE_CLIENT_SECRET`, "tenant_id": `AZURE_TENANT_ID` }
Gizli dizi nesnesinde kullanılacak RBAC çıkışını kaydedin.
Aşağıdaki örne göre peer-pods-secret.yaml bildirim dosyası oluşturun:
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>"
- değerini
AZURE_CLIENT_ID value
belirtin. - değerini
AZURE_CLIENT_SECRET value
belirtin. - değerini
AZURE_TENANT_ID value
belirtin. - değerini
AZURE_SUBSCRIPTION_ID value
belirtin.
- değerini
Aşağıdaki komutu çalıştırarak gizli diziyi oluşturun:
$ oc apply -f peer-pods-secret.yaml
Eş podlar yapılandırma eşlemesini oluşturma
Azure'dan aşağıdaki değerleri alın:
Azure kaynak grubunu alın ve kaydedin:
$ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""
Azure sanal ağ adını alın ve kaydedin:
$ AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)
Bu değer, Azure alt ağ kimliğini almak için kullanılır.
Azure alt ağ kimliğini alın ve kaydedin:
$ 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\""
Azure ağ güvenlik grubu (NSG) kimliğini alın ve kaydedin:
$ AZURE_NSG_ID=$(az network nsg list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Id:id}" --output tsv) && echo "AZURE_NSG_ID: \"$AZURE_NSG_ID\""
Azure bölgesini alma ve kaydetme:
$ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""
Aşağıdaki örne göre peer-pods-cm.yaml bildirim dosyası oluşturun:
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
, iş yükünde bir örnek boyutu tanımlanmadıysa varsayılan değerdir. -
AZURE_INSTANCE_SIZES
, pod oluştururken belirtebileceğiniz tüm örnek boyutlarını listeler. Bu sayede daha az belleğe ve daha az CPU'ya veya daha büyük iş yükleri için daha büyük örnek boyutlarına ihtiyaç duyan iş yükleri için daha küçük örnek boyutları tanımlayabilirsiniz. -
AZURE_SUBNET_ID
Aldığınız değeri belirtin. -
AZURE_NSG_ID
Aldığınız değeri belirtin. -
AZURE_IMAGE_ID
isteğe bağlıdır. Varsayılan olarak, küme kimlik bilgilerinize dayalı bir Azure görüntü kimliği kullanılarak KataConfig özel kaynağını çalıştırdığınızda bu değer doldurulur. Kendi Azure görüntünüzü oluşturursanız doğru görüntü kimliğini belirtin. -
AZURE_REGION
Aldığınız değeri belirtin. -
AZURE_RESOURCE_GROUP
Aldığınız değeri belirtin.
-
Aşağıdaki komutu çalıştırarak yapılandırma eşlemesini oluşturun:
$ oc apply -f peer-pods-cm.yaml
Azure gizli dizisini oluşturma
Azure'ın sanal makine oluşturmak için kullandığı bir SSH anahtar gizli dizisi oluşturmanız gerekir.
Aşağıdaki komutu çalıştırarak bir SSH anahtar çifti oluşturun:
$ ssh-keygen -f ./id_rsa -N ""
Aşağıdaki komutu çalıştırarak gizli dizi nesnesini oluşturun:
$ oc create secret generic ssh-key-secret \ -n openshift-sandboxed-containers-operator \ --from-file=id_rsa.pub=./id_rsa.pub
Oluşturduğunuz SSH anahtarlarını silin:
$ shred --remove id_rsa.pub id_rsa
Bölüm 2: Gizli Kapsayıcıları Dağıtma
Trustee İşlecini Yükleme
trustee-namespace.yaml bildirim dosyası oluşturun:
apiVersion: v1 kind: Namespace metadata: name: trustee-operator-system
Aşağıdaki komutu çalıştırarak trustee-operator-system ad alanını oluşturun:
$ oc apply -f trustee-namespace.yaml
trustee-operatorgroup.yaml bildirim dosyası oluşturun:
apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: trustee-operator-group namespace: trustee-operator-system spec: targetNamespaces: - trustee-operator-system
Aşağıdaki komutu çalıştırarak İşleç grubunu oluşturun:
$ oc apply -f trustee-operatorgroup.yaml
trustee-subscription.yaml bildirim dosyası oluşturun:
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
Aşağıdaki komutu çalıştırarak aboneliği oluşturun:
$ oc apply -f trustee-subscription.yaml
Aşağıdaki komutu çalıştırarak İşlecin doğru yüklendiğini doğrulayın:
$ oc get csv -n trustee-operator-system
Bu komutun tamamlanması birkaç dakika sürebilir.
Aşağıdaki komutu çalıştırarak işlemi izleyin:
$ watch oc get csv -n trustee-operator-system
Örnek çıkış
NAME DISPLAY PHASE trustee-operator.v0.1.0 Trustee Operator 0.1.0 Succeeded
Güvenen için yol oluşturma
Güvenen için uç TLS sonlandırması ile güvenli bir yol oluşturun. Dış giriş trafiği yönlendirici podlarına HTTPS olarak ulaşır ve Trustee podlarına HTTP olarak geçer.
Aşağıdaki komutu çalıştırarak bir kenar yolu oluşturun:
$ oc create route edge --service=kbs-service --port kbs-port \ -n trustee-operator-system
Uyarı
Şu anda yalnızca ca imzalı geçerli sertifikaya sahip bir yol desteklenmektedir. Otomatik olarak imzalanan sertifikayla yol kullanamazsınız.
Aşağıdaki komutu çalıştırarak TRUSTEE_HOST değişkenini ayarlayın:
$ TRUSTEE_HOST=$(oc get route -n trustee-operator-system kbs-service \ -o jsonpath={.spec.host})
Aşağıdaki komutu çalıştırarak yolu doğrulayın:
$ echo $TRUSTEE_HOST
Örnek çıkış
kbs-service-trustee-operator-system.apps.memvjias.eastus.aroapp.io
Eş pod yapılandırma eşlemesi için bu değeri kaydedin.
Gizli Kapsayıcılar özellik geçidini etkinleştirme
Bildirim
cc-feature-gate.yaml
dosyası oluşturma:apiVersion: v1 kind: ConfigMap metadata: name: osc-feature-gates namespace: openshift-sandboxed-containers-operator data: confidential: "true"
Aşağıdaki komutu çalıştırarak yapılandırma eşlemesini oluşturun:
$ oc apply -f cc-feature-gate.yaml
Eş podlar yapılandırma eşlemesini güncelleştirme
Azure örneğinizden aşağıdaki değerleri alın:
I Azure kaynak grubunu alın ve kaydedin:
$ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""
ıı. Azure sanal ağ adını alın ve kaydedin:
$ AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)
Bu değer, Azure alt ağ kimliğini almak için kullanılır.
ııı. Azure alt ağ kimliğini alın ve kaydedin:
$ 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\""
ıv. Azure ağ güvenlik grubu (NSG) kimliğini alın ve kaydedin:
$ 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. Azure bölgesini alma ve kaydetme:
$ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""
Aşağıdaki örne göre bir
peer-pods-cm.yaml
bildirim dosyası oluşturun: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
, iş yükünde bir örnek boyutu tanımlanmadıysa varsayılan değerdir. TDX için "Standard_EC4eds_v5" belirtin. -
AZURE_INSTANCE_SIZES
, pod oluştururken belirtebileceğiniz tüm örnek boyutlarını listeler. Bu sayede daha az belleğe ve daha az CPU'ya veya daha büyük iş yükleri için daha büyük örnek boyutlarına ihtiyaç duyan iş yükleri için daha küçük örnek boyutları tanımlayabilirsiniz. TDX için "Standard_EC4eds_v5, Standard_EC8eds_v5, Standard_EC16eds_v5" belirtin. -
AZURE_SUBNET_ID
Aldığınız değeri belirtin. -
AZURE_NSG_ID
Aldığınız değeri belirtin. -
AZURE_IMAGE_ID
(İsteğe bağlı): Varsayılan olarak, küme kimlik bilgilerinize dayalı bir Azure görüntü kimliği kullanılarak KataConfig özel kaynağını çalıştırdığınızda bu değer doldurulur. Kendi Azure görüntünüzü oluşturursanız doğru görüntü kimliğini belirtin. -
AZURE_REGION
Aldığınız değeri belirtin. -
AZURE_RESOURCE_GROUP
Aldığınız değeri belirtin. -
AA_KBC_PARAMS
Trustee yolunun ana bilgisayar adını belirtir.
-
Aşağıdaki komutu çalıştırarak yapılandırma eşlemesini oluşturun:
$ oc apply -f peer-pods-cm.yaml
peerpodconfig-ctrl-caa-daemon
Aşağıdaki komutu çalıştırarak daemon kümesini yeniden başlatın:$ oc set env ds/peerpodconfig-ctrl-caa-daemon \ -n openshift-sandboxed-containers-operator REBOOT="$(date)"
KataConfig özel kaynağını oluşturma
Aşağıdaki örne göre bir
example-kataconfig.yaml
bildirim dosyası oluşturun:apiVersion: kataconfiguration.openshift.io/v1 kind: KataConfig metadata: name: example-kataconfig spec: enablePeerPods: true logLevel: info # kataConfigPoolSelector: # matchLabels: # <label_key>: '<label_value>'
İsteğe bağlı: Belirli düğümlere kata-remote yüklemek için düğüm etiketleri uyguladıysanız anahtarı ve değeri belirtin; örneğin, cc: 'true'.
Aşağıdaki komutu çalıştırarak KataConfig özel kaynağını oluşturun:
$ oc apply -f example-kataconfig.yaml
Yeni KataConfig özel kaynağı oluşturulur ve kata-remote'u çalışan düğümlerine çalışma zamanı sınıfı olarak yükler.
Uyarı
Yüklemeyi doğrulamadan önce kata-uzaktan yüklemenin tamamlanmasını ve çalışan düğümlerinin yeniden başlatılmasını bekleyin.
Aşağıdaki komutu çalıştırarak yükleme ilerleme durumunu izleyin:
$ watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"
KataNodes altındaki tüm çalışanların durumu yüklüyse ve InProgress koşulu bir neden belirtmeden False olduğunda, kata-remote kümeye yüklenir.
Aşağıdaki komutu çalıştırarak ayarlanan daemon değerini doğrulayın:
$ oc get -n openshift-sandboxed-containers-operator ds/peerpodconfig-ctrl-caa-daemon
Aşağıdaki komutu çalıştırarak çalışma zamanı sınıflarını doğrulayın:
$ oc get runtimeclass
Örnek çıkış
NAME HANDLER AGE kata-remote kata-remote 152m
Güvenen kimlik doğrulaması gizli dizisini oluşturma
Aşağıdaki komutu çalıştırarak özel anahtar oluşturun:
$ openssl genpkey -algorithm ed25519 > privateKey
Aşağıdaki komutu çalıştırarak ortak anahtar oluşturun:
$ openssl pkey -in privateKey -pubout -out publicKey
Aşağıdaki komutu çalıştırarak gizli dizi oluşturun:
$ oc create secret generic kbs-auth-public-key --from-file=publicKey -n trustee-operator-system
Aşağıdaki komutu çalıştırarak gizli diziyi doğrulayın:
$ oc get secret -n trustee-operator-system
Trustee yapılandırma eşlemesini oluşturma
Bildirim
kbs-config-cm.yaml
dosyası oluşturma: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" } }
Aşağıdaki komutu çalıştırarak yapılandırma eşlemesini oluşturun:
$ oc apply -f kbs-config-cm.yaml
Güveni Yapılandırma
Aşağıdaki Trustee ayarlarını yapılandırın:
Başvuru değerlerini yapılandırma
Donanım platformunuzun güvenilen özetlerini belirterek Başvuru Değeri Sağlayıcısı Hizmeti (RVPS) için başvuru değerlerini yapılandırabilirsiniz.
İstemci, çalışan yazılımdan, Güvenilen Yürütme Ortamı (TEE) donanımından ve üretici yazılımından ölçümler toplar ve Kanıtlama Sunucusuna talepleri içeren bir teklif gönderir. Bu ölçümler, Güvenen'e kayıtlı güvenilir özetlerle eşleşmelidir. Bu işlem, gizli VM'nin (CVM) beklenen yazılım yığınını çalıştırmasını ve üzerinde oynanmamasını sağlar.
Bildirim
rvps-configmap.yaml
dosyası oluşturma:apiVersion: v1 kind: ConfigMap metadata: name: rvps-reference-values namespace: trustee-operator-system data: reference-values.json: | [ ]
gerekirse
reference-values.json
donanım platformunuzun güvenilen özetlerini belirtin. Aksi takdirde boş bırakın.Aşağıdaki komutu çalıştırarak RVPS yapılandırma eşlemesini oluşturun:
$ oc apply -f rvps-configmap.yaml
Kendi kanıtlama ilkenizi oluşturma
Kendi kanıtlama ilkenizi oluşturarak varsayılan kanıtlama ilkesinin üzerine yazabilirsiniz.
Aşağıdaki örne göre bir attestation-policy.yaml bildirim dosyası oluşturun:
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] }
package policy
için kanıtlama ilkesi, Açık İlke Aracısı belirtimini izler. Bu örnekte kanıtlama ilkesi, kanıtlama raporunda sağlanan talepleri RVPS veritabanında kayıtlı başvuru değerleriyle karşılaştırır. Kanıtlama işlemi yalnızca tüm değerler eşleşiyorsa başarılı olur.Aşağıdaki komutu çalıştırarak kanıtlama ilkesi yapılandırma eşlemesini oluşturun:
$ oc apply -f attestation-policy.yaml
TDX için Sertifika Önbelleğe Alma Hizmeti Sağlama
TEE'niz Intel Trust Etki Alanı Uzantıları (TDX) ise, Sağlama Sertifikası Önbelleğe Alma Hizmeti'ni (PCCS) yapılandırmanız gerekir. PCCS, Sağlama Sertifika Anahtarı (PCK) sertifikalarını alır ve bunları yerel bir veritabanında önbelleğe alır.
Tdx-config.yaml bildirim dosyası oluşturun:
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>" }
için
pccs_url
PCCS URL'sini belirtin, örneğin, https://localhost:8081/sgx/certification/v4/.Aşağıdaki komutu çalıştırarak TDX yapılandırma eşlemesini oluşturun:
$ oc apply -f tdx-config.yaml
Kapsayıcı görüntüsü imza doğrulaması için gizli dizi oluşturma
Kapsayıcı görüntüsü imza doğrulamasını kullanıyorsanız, genel kapsayıcı görüntüsü imzalama anahtarını içeren bir gizli dizi oluşturmanız gerekir. Trustee İşleci gizli diziyi kullanarak imzayı doğrular ve ortamınızda yalnızca güvenilen ve kimliği doğrulanmış kapsayıcı görüntülerinin dağıtılmasını sağlar.
Aşağıdaki komutu çalıştırarak kapsayıcı görüntüsü imzası doğrulaması için bir gizli dizi oluşturun:
$ oc apply secret generic <type> \ --from-file=<tag>=./<public_key_file> \ -n trustee-operator-system
- KBS gizli dizi türünü belirtin, örneğin,
img-sig
. - Gizli dizi etiketini (örneğin,
pub-key
) ve ortak kapsayıcı görüntüsü imzalama anahtarını belirtin.
- KBS gizli dizi türünü belirtin, örneğin,
<type>
Değeri kaydedin. KbsConfig özel kaynağını oluştururken spec.kbsSecretResources anahtarına bu değeri eklemeniz gerekir.
Kapsayıcı görüntüsü imzası doğrulama ilkesini oluşturma
İmza doğrulaması her zaman etkin olduğundan kapsayıcı görüntüsü imza doğrulama ilkesini oluşturmanız gerekir.
Önemli
Bu ilke eksikse podlar başlatılmaz. Kapsayıcı görüntüsü imza doğrulamasını kullanmıyorsanız, ilkeyi imza doğrulaması olmadan oluşturursunuz.
Aşağıdaki örneklere göre bir security-policy-config.json dosyası oluşturun:
İmza doğrulaması olmadan:
{ "default": [ { "type": "insecureAcceptAnything" }], "transports": {} }
İmza doğrulama ile:
{ "default": [ { "type": "insecureAcceptAnything" ], "transports": { "<transport>": { "<registry>/<image>": [ { "type": "sigstoreSigned", "keyPath": "kbs:///default/<type>/<tag>" } ] } } }
- Aktarım için görüntü deposunu belirtin; örneğin, "docker".
- Kapsayıcı kayıt defterini ve görüntüsünü belirtin, örneğin, "quay.io/my-image".
- Oluşturduğunuz kapsayıcı görüntüsü imzası doğrulama gizli dizisinin türünü ve etiketini belirtin; örneğin, "img-sig/pub-key".
Aşağıdaki komutu çalıştırarak güvenlik ilkesini oluşturun:
$ oc apply secret generic security-policy \ --from-file=osc=./<security-policy-config.json> \ -n trustee-operator-system
Gizli dizi türünü, güvenlik ilkesini veya anahtarı değiştirmeyin.
Güvenlik ilkesi gizli dizisi KbsConfig özel kaynağının anahtarında
spec.kbsSecretResources
belirtilir.
KbsConfig özel kaynağını oluşturma
Trustee'yi başlatmak için KbsConfig özel kaynağını oluşturmanız gerekir.
Bildirim
kbsconfig-cr.yaml
dosyası oluşturma: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>
- İsteğe bağlı: Gizli diziyi
type
oluşturduysanız, örneğinimg-sig
kapsayıcı görüntüsü imzası doğrulama gizli dizisinin değerini belirtin. Gizli diziyi oluşturmadıysanız değerini olarakkbsSecretResources
ayarlayın["kbsres1", "security-policy"]
. - Intel Güveni Etki Alanı Uzantıları için açıklamayı
tdxConfigSpec.kbsTdxConfigMapName: tdx-config
kaldırma. -
kbsAttestationPolicyConfigMapName: attestation-policy
Özelleştirilmiş bir kanıtlama ilkesi oluşturursanız açıklamayı kaldırın. -
kbsServiceType: <service_type>
Uygulamaları küme dış trafiğinde kullanıma açmak için varsayılan ClusterIP hizmeti dışında bir hizmet türü oluşturursanız açıklamayı kaldırın. ,NodePort
veyaLoadBalancer
belirtebilirsinizExternalName
.
- İsteğe bağlı: Gizli diziyi
Aşağıdaki komutu çalıştırarak KbsConfig özel kaynağını oluşturun:
$ oc apply -f kbsconfig-cr.yaml
Trustee yapılandırmasını doğrulama
Trustee podlarını ve günlüklerini denetleyerek Trustee yapılandırmasını doğrulayın.
Aşağıdaki komutu çalıştırarak varsayılan projeyi ayarlayın:
$ oc project trustee-operator-system
Aşağıdaki komutu çalıştırarak podları denetleyin:
$ oc get pods -n trustee-operator-system
Örnek çıkış
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
Aşağıdaki komutu çalıştırarak POD_NAME ortam değişkenini ayarlayın:
$ POD_NAME=$(oc get pods -l app=kbs -o jsonpath='{.items[0].metadata.name}' -n trustee-operator-system)
Aşağıdaki komutu çalıştırarak pod günlüklerini denetleyin:
$ oc logs -n trustee-operator-system $POD_NAME
Örnek çıkış
[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
Kanıtlama işlemini doğrulama
Bir test podu oluşturup gizli dizisini alarak kanıtlama işlemini doğrulayabilirsiniz.
Önemli: Bu yordam, kanıtlamanın çalıştığını doğrulamaya yönelik bir örnektir. Veriler bir bellek dökümü kullanılarak yakalanabildiğinden, hassas verileri standart G/Ç'ye yazmayın. Yalnızca belleğe yazılan veriler şifrelenir.
Varsayılan olarak, pod VM görüntüsüne katıştırılmış aracı tarafı ilkesi, Gizli Kapsayıcılar podunun exec ve günlük API'lerini devre dışı bırakır. Bu ilke, hassas verilerin standart G/Ç'ye yazılmamasını sağlar.
Bir test senaryosunda pod'a bir ilke ek açıklaması ekleyerek çalışma zamanında kısıtlamayı geçersiz kılabilirsiniz. Teknoloji Önizlemesi için çalışma zamanı ilkesi ek açıklamaları uzaktan kanıtlama tarafından doğrulanmamıştır.
Verification-pod.yaml bildirim dosyası oluşturun:
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
Pod metada
annotations
, hassas verilerin standart G/Ç'ye yazılmasını engelleyen ilkeyi geçersiz kılar.Aşağıdaki komutu çalıştırarak pod oluşturun:
$ oc create -f verification-pod.yaml
Aşağıdaki komutu çalıştırarak ocp-cc-pod podunun Bash kabuğuna bağlanın:
$ oc exec -it ocp-cc-pod -- bash
Aşağıdaki komutu çalıştırarak pod gizli dizisini getirin:
$ curl http://127.0.0.1:8006/cdh/resource/default/kbsres1/key1
Örnek çıkış
res1val1
Trustee sunucusu gizli diziyi yalnızca kanıtlama başarılı olursa döndürür.