Aracılığıyla paylaş


Azure Red Hat OpenShift (ARO) kümesinde Gizli Kapsayıcıları dağıtma (Önizleme)

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:

  1. OpenShift Korumalı Kapsayıcılar İşleci'ni yükleyin.

  2. Eş podlar gizli dizisini oluşturun.

  3. Eş podlar yapılandırma eşlemesini oluşturun.

  4. 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:

  1. Trustee İşleci'ni yükleyin.

  2. Güvenen için yolu oluşturun.

  3. Gizli Kapsayıcılar özellik geçidini etkinleştirin.

  4. Eş pod yapılandırma eşlemesini güncelleştirin.

  5. KataConfig özel kaynağını oluşturun.

  6. Güvenen kimlik doğrulama gizli dizisini oluşturun.

  7. Trustee yapılandırma eşlemesini oluşturun.

  8. Güvenen'i yapılandırın.

  9. KbsConfig özel kaynağını oluşturun.

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

  • OpenShift CLI yüklü

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

  1. Bildirim osc-namespace.yaml dosyası oluşturma:

    apiVersion: v1
    kind: Namespace
    metadata:
        name: openshift-sandboxed-containers-operator
    
  2. Aşağıdaki komutu çalıştırarak ad alanını oluşturun:

    $ oc apply -f osc-namespace.yaml

  3. 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
    
  4. Aşağıdaki komutu çalıştırarak işleç grubunu oluşturun

    $ oc apply -f osc-operatorgroup.yaml

  5. 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
    
  6. Aşağıdaki komutu çalıştırarak aboneliği oluşturun:

    $ oc apply -f osc-subscription.yaml

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

  8. 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
    
  1. Web konsolunda Operatörler → OperatorHub'a gidin.

  2. Anahtar sözcükle filtrele alanına OpenShift korumalı kapsayıcıları yazın.

  3. OpenShift korumalı kapsayıcılar İşleci kutucuğunu seçin ve Yükle'yi seçin.

  4. Yükleme operatörü sayfasında, kullanılabilir Güncelleştirme Kanalı seçenekleri listesinden kararlı'yı seçin.

  5. İş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.

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

  7. Yükle'yi seçin.

  8. İş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.

  1. 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\""
    
  2. 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`
        }
    
  3. Gizli dizi nesnesinde kullanılacak RBAC çıkışını kaydedin.

  4. 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 valuebelirtin.
    • değerini AZURE_CLIENT_SECRET valuebelirtin.
    • değerini AZURE_TENANT_ID valuebelirtin.
    • değerini AZURE_SUBSCRIPTION_ID valuebelirtin.
  5. 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

  1. Azure'dan aşağıdaki değerleri alın:

    1. 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\""

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

    3. 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\""
      
    4. 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\""
      
    5. 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\""

  2. 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.
  3. 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.

  1. Aşağıdaki komutu çalıştırarak bir SSH anahtar çifti oluşturun:

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

  2. 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
    
  3. 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

  1. trustee-namespace.yaml bildirim dosyası oluşturun:

    apiVersion: v1
    kind: Namespace
    metadata:
    name: trustee-operator-system
    
  2. Aşağıdaki komutu çalıştırarak trustee-operator-system ad alanını oluşturun:

    $ oc apply -f trustee-namespace.yaml

  3. 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
    
  4. Aşağıdaki komutu çalıştırarak İşleç grubunu oluşturun:

    $ oc apply -f trustee-operatorgroup.yaml

  5. 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
    
  6. Aşağıdaki komutu çalıştırarak aboneliği oluşturun:

    $ oc apply -f trustee-subscription.yaml

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

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

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

  2. 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})
    
  3. 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

  1. 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"
    
  2. 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

  1. 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\""

  2. 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.
  3. Aşağıdaki komutu çalıştırarak yapılandırma eşlemesini oluşturun:

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

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

  1. 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'.

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

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

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

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

  1. Aşağıdaki komutu çalıştırarak özel anahtar oluşturun:

    $ openssl genpkey -algorithm ed25519 > privateKey

  2. Aşağıdaki komutu çalıştırarak ortak anahtar oluşturun:

    $ openssl pkey -in privateKey -pubout -out publicKey

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

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

  1. 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"
          }
        }
    
  2. 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.

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

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

  1. 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 policyiç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.

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

  1. 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_urlPCCS URL'sini belirtin, örneğin, https://localhost:8081/sgx/certification/v4/.

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

  1. 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.
  2. <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.

  1. 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".
  2. 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.

  1. 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ğin img-sigkapsayıcı görüntüsü imzası doğrulama gizli dizisinin değerini belirtin. Gizli diziyi oluşturmadıysanız değerini olarak kbsSecretResourcesayarlayı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. , NodePortveya LoadBalancerbelirtebilirsinizExternalName.
  2. 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.

  1. Aşağıdaki komutu çalıştırarak varsayılan projeyi ayarlayın:

    $ oc project trustee-operator-system

  2. 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
    
  3. 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)

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

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

  2. Aşağıdaki komutu çalıştırarak pod oluşturun:

    $ oc create -f verification-pod.yaml

  3. Aşağıdaki komutu çalıştırarak ocp-cc-pod podunun Bash kabuğuna bağlanın:

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

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