Öğretici: Azure Container Instances'ta gizli bir kapsayıcı için dağıtım hazırlama

Azure Container Instances'ta, kapsayıcı uygulamalarını donanım tabanlı ve güvenilir bir güvenilir yürütme ortamında (TEE) çalıştırmak için sunucusuz platformdaki gizli kapsayıcıları kullanabilirsiniz. Bu özellik kullanımdaki verilerin korunmasına yardımcı olabilir ve Güvenli İç İçe Disk Belleği aracılığıyla bellek içi şifreleme sağlar.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Gizli kapsayıcı grubu için bir Azure Resource Manager şablonu (ARM şablonu) oluşturun.
  • Gizli bilgi işlem uygulama (CCE) ilkesi oluşturun.
  • Gizli kapsayıcı grubunu Azure'a dağıtın.

Önkoşullar

Bu öğreticiyi tamamlamak için aşağıdaki gereksinimleri karşılamanız gerekir:

  • Azure CLI: Yerel bilgisayarınızda Azure CLI sürüm 2.44.1 veya üzeri yüklü olmalıdır. Sürümünüzü bulmak için komutunu çalıştırın az --version. Yükleme veya yükseltme yapmanız gerekirse bkz. Azure CLI'yı yükleme.

  • Azure CLI confcom uzantısı: Gizli bilgi işlem uygulama ilkeleri oluşturmak için Azure CLI confcom uzantısı sürüm 0.30+ yüklü olmalıdır.

    az extension add -n confcom
    
  • Docker: Docker'ın yerel olarak yüklenmesi gerekir. Docker, macOS, Windows ve Linux üzerinde Docker ortamını yapılandıran paketler sağlar.

    Bu öğreticide kapsayıcılar, kapsayıcı görüntüleri ve temel komutlar gibi temel Docker kavramları hakkında temel docker bilgiler yer alır. Docker ve kapsayıcı temel bilgileri ile ilgili giriş yapmak için Docker’a genel bakış bölümüne bakın.

Önemli

Azure Cloud Shell Docker daemon'ını içermediğinden, bu öğreticiyi tamamlamak için yerel bilgisayarınıza hem Azure CLI hem de Docker Altyapısı'nı yüklemeniz gerekir. Bu öğretici için Azure Cloud Shell'i kullanamazsınız.

Kapsayıcı Örnekleri kapsayıcı grubu için ARM şablonu oluşturma

Bu öğreticide, donanım kanıtlama raporu oluşturan bir Merhaba Dünya uygulaması dağıtacaksınız. Bu uygulamanın özelliklerini tanımlamak için kapsayıcı grubu kaynağıyla bir ARM şablonu oluşturarak başlarsınız. Ardından bu ARM şablonunu Azure CLI confcom araçlarıyla kullanarak kanıtlama için bir CCE ilkesi oluşturursunuz.

Bu öğreticide örnek olarak bu ARM şablonu kullanılmaktadır. Bu uygulamanın kaynak kodunu görüntülemek için bkz. Azure Container Instances Gizli Merhaba Dünya.

Örnek şablon, kapsayıcı grubunu gizli hale getirmek için Kapsayıcı Örnekleri kaynak tanımına iki özellik ekler:

  • sku: Gizli ve standart kapsayıcı grubu dağıtımları arasında seçim yapmaya olanak tanır. Bu özelliği kaynağa eklemezseniz kapsayıcı grubu standart bir dağıtım olacaktır.
  • confidentialComputeProperties: Kapsayıcı grubunuzun kanıtlaması için özel bir CCE ilkesi geçirmenizi sağlar. Bu nesneyi kaynağa eklemezseniz, kapsayıcı grubu içinde çalışan yazılım bileşenleri doğrulanmaz.

Not

altındaki ccePolicyconfidentialComputeProperties parametresi boş. İlkeyi öğreticinin ilerleyen bölümlerinde oluşturduktan sonra doldurursunuz.

Bu ARM şablonunu yerel makinenize template.json olarak kaydetmek için tercih ettiğiniz metin düzenleyicisini kullanın.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "name": {
        "type": "string",
        "defaultValue": "helloworld",
        "metadata": {
          "description": "Name for the container group"
        }
      },
      "location": {
        "type": "string",
        "defaultValue": "North Europe",
        "metadata": {
          "description": "Location for all resources."
        }
      },
      "image": {
        "type": "string",
        "defaultValue": "mcr.microsoft.com/aci/aci-confidential-helloworld:v1",
        "metadata": {
          "description": "Container image to deploy. Should be of the form repoName/imagename:tag for images stored in public Docker Hub, or a fully qualified URI for other registries. Images from private registries require additional registry credentials."
        }
      },
      "port": {
        "type": "int",
        "defaultValue": 80,
        "metadata": {
          "description": "Port to open on the container and the public IP address."
        }
      },
      "cpuCores": {
        "type": "int",
        "defaultValue": 1,
        "metadata": {
          "description": "The number of CPU cores to allocate to the container."
        }
      },
      "memoryInGb": {
        "type": "int",
        "defaultValue": 1,
        "metadata": {
          "description": "The amount of memory to allocate to the container in gigabytes."
        }
      },
      "restartPolicy": {
        "type": "string",
        "defaultValue": "Never",
        "allowedValues": [
          "Always",
          "Never",
          "OnFailure"
        ],
        "metadata": {
          "description": "The behavior of Azure runtime if container has stopped."
        }
      }
    },
    "resources": [
      {
        "type": "Microsoft.ContainerInstance/containerGroups",
        "apiVersion": "2023-05-01",
        "name": "[parameters('name')]",
        "location": "[parameters('location')]",
        "properties": {
          "confidentialComputeProperties": {
            "ccePolicy": ""
          },
          "containers": [
            {
              "name": "[parameters('name')]",
              "properties": {
                "image": "[parameters('image')]",
                "ports": [
                  {
                    "port": "[parameters('port')]",
                    "protocol": "TCP"
                  }
                ],
                "resources": {
                  "requests": {
                    "cpu": "[parameters('cpuCores')]",
                    "memoryInGB": "[parameters('memoryInGb')]"
                  }
                }
              }
            }
          ],
          "sku": "Confidential",
          "osType": "Linux",
          "restartPolicy": "[parameters('restartPolicy')]",
          "ipAddress": {
            "type": "Public",
            "ports": [
              {
                "port": "[parameters('port')]",
                "protocol": "TCP"
              }
            ]
          }
        }
      }
    ],
    "outputs": {
      "containerIPv4Address": {
        "type": "string",
        "value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups', parameters('name'))).ipAddress.ip]"
      }
    }
  }

Özel CCE ilkesi oluşturma

Oluşturduğunuz ARM şablonu ve Azure CLI confcom uzantısı ile özel bir CCE ilkesi oluşturabilirsiniz. CCE ilkesi kanıtlama için kullanılır. Araç, arm şablonunu ilkeyi oluşturmak için giriş olarak alır. İlke, kapsayıcı grubu başlatıldığında doğrulanabilen belirli kapsayıcı görüntülerini, ortam değişkenlerini, bağlamaları ve komutları zorlar. Azure CLI confcom uzantısı hakkında daha fazla bilgi için GitHub belgelerine bakın.

  1. CCE ilkesini oluşturmak için, giriş olarak ARM şablonunu kullanarak aşağıdaki komutu çalıştırın:

    az confcom acipolicygen -a .\template.json --print-policy
    

    Bu komut tamamlandığında, çıkış olarak oluşturulan bir Base64 dizesi aşağıdaki biçimde görünmelidir. Bu dize, özelliğin değeri olarak ARM şablonunuz içine kopyalayıp yapıştırdığınız CCE ilkesidir ccePolicy .

    cGFja2FnZSBwb2xpY3kKCmFwaV9zdm4gOj0gIjAuOS4wIgoKaW1wb3J0IGZ1dHVyZS5rZXl3b3Jkcy5ldmVyeQppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCgpmcmFnbWVudHMgOj0gWwpdCgpjb250YWluZXJzIDo9IFsKICAgIHsKICAgICAgICAiY29tbWFuZCI6IFsiL3BhdXNlIl0sCiAgICAgICAgImVudl9ydWxlcyI6IFt7InBhdHRlcm4iOiAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLCAic3RyYXRlZ3kiOiAic3RyaW5nIiwgInJlcXVpcmVkIjogdHJ1ZX0seyJwYXR0ZXJuIjogIlRFUk09eHRlcm0iLCAic3RyYXRlZ3kiOiAic3RyaW5nIiwgInJlcXVpcmVkIjogZmFsc2V9XSwKICAgICAgICAibGF5ZXJzIjogWyIxNmI1MTQwNTdhMDZhZDY2NWY5MmMwMjg2M2FjYTA3NGZkNTk3NmM3NTVkMjZiZmYxNjM2NTI5OTE2OWU4NDE1Il0sCiAgICAgICAgIm1vdW50cyI6IFtdLAogICAgICAgICJleGVjX3Byb2Nlc3NlcyI6IFtdLAogICAgICAgICJzaWduYWxzIjogW10sCiAgICAgICAgImFsbG93X2VsZXZhdGVkIjogZmFsc2UsCiAgICAgICAgIndvcmtpbmdfZGlyIjogIi8iCiAgICB9LApdCmFsbG93X3Byb3BlcnRpZXNfYWNjZXNzIDo9IHRydWUKYWxsb3dfZHVtcF9zdGFja3MgOj0gdHJ1ZQphbGxvd19ydW50aW1lX2xvZ2dpbmcgOj0gdHJ1ZQphbGxvd19lbnZpcm9ubWVudF92YXJpYWJsZV9kcm9wcGluZyA6PSB0cnVlCmFsbG93X3VuZW5jcnlwdGVkX3NjcmF0Y2ggOj0gdHJ1ZQoKCm1vdW50X2RldmljZSA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQp1bm1vdW50X2RldmljZSA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQptb3VudF9vdmVybGF5IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnVubW91bnRfb3ZlcmxheSA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpjcmVhdGVfY29udGFpbmVyIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmV4ZWNfaW5fY29udGFpbmVyIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmV4ZWNfZXh0ZXJuYWwgOj0geyAiYWxsb3dlZCIgOiB0cnVlIH0Kc2h1dGRvd25fY29udGFpbmVyIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnNpZ25hbF9jb250YWluZXJfcHJvY2VzcyA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpwbGFuOV9tb3VudCA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpwbGFuOV91bm1vdW50IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmdldF9wcm9wZXJ0aWVzIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmR1bXBfc3RhY2tzIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnJ1bnRpbWVfbG9nZ2luZyA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpsb2FkX2ZyYWdtZW50IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnNjcmF0Y2hfbW91bnQgOj0geyAiYWxsb3dlZCIgOiB0cnVlIH0Kc2NyYXRjaF91bm1vdW50IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnJlYXNvbiA6PSB7ImVycm9ycyI6IGRhdGEuZnJhbWV3b3JrLmVycm9yc30K
    
  2. Değişiklikleri ARM şablonunun yerel kopyasına kaydedin.

Şablonu dağıtma

Aşağıdaki adımlarda, şablonu dağıtmak için Azure portalını kullanırsınız. Azure PowerShell, Azure CLI veya REST API'yi de kullanabilirsiniz. Diğer dağıtım yöntemleri hakkında bilgi edinmek için bkz . Şablonları dağıtma.

  1. Azure'da oturum açmak ve Kapsayıcı Örnekleri dağıtımına başlamak için Azure'a Dağıt düğmesini seçin.

    Button to deploy the Resource Manager template to Azure.

  2. Düzenleyicide kendi şablonunuzu oluşturun'u seçin.

    Screenshot of the button for building your own template in the editor.

    Görüntülenen JSON şablonu çoğunlukla boş.

  3. Dosya yükle'yi seçin ve önceki adımlarda CCE ilkesini ekleyerek değiştirdiğiniz template.json karşıya yükleyin.

    Screenshot of the button for loading a file.

  4. Kaydet'i seçin.

  5. Aşağıdaki değerleri seçin veya girin:

    • Abonelik: Bir Azure aboneliği seçin.
    • Kaynak grubu: Yeni oluştur'u seçin, kaynak grubu için benzersiz bir ad girin ve tamam'ı seçin.
    • Ad: Örnek için oluşturulan adı kabul edin veya bir ad girin.
    • Konum: Kaynak grubu için bir konum seçin. Gizli kapsayıcıların desteklendiği bir bölge seçin. Örnek: Kuzey Avrupa.
    • Resim: Varsayılan görüntü adını kabul edin. Bu örnek Linux görüntüsü bir donanım kanıtlaması görüntüler.

    Kalan özellikler için varsayılan değerleri kabul edin ve gözden geçir + oluştur'u seçin.

    Screenshot of details for a custom ARM template deployment.

  6. Hüküm ve koşulları gözden geçirin. Kabul ediyorsanız, yukarıda belirtilen hüküm ve koşulları kabul ediyorum'ı seçin.

  7. Dağıtım başarılı bildirimi görünene kadar bekleyin. Örneği başarıyla oluşturduğunuzu onaylar.

    Screenshot of a portal notification for successful deployment.

Dağıtılan kaynakları gözden geçirme

Aşağıdaki adımlarda Azure portalını kullanarak kapsayıcı örneğinin özelliklerini gözden geçireceksiniz. Azure CLI gibi bir araç da kullanabilirsiniz.

  1. Portalda Kapsayıcı Örnekleri'ni arayın ve oluşturduğunuz kapsayıcı örneğini seçin.

  2. Genel Bakış sayfasında, örneğin durumunu ve IP adresini not edin.

    Screenshot of the overview page for a container group instance.

  3. Örneğin durumu Çalışıyor olduğunda, tarayıcınızda IP adresine gidin.

    Screenshot of a browser view of an app deployed via Azure Container Instances.

    Azure Container Instances logosunun altındaki kanıtlama raporunun varlığı, kapsayıcının TEE'yi destekleyen donanımlarda çalıştığını doğrular.

    TEE'yi desteklemeyen bir donanıma dağıtım yaparsanız (örneğin, Kapsayıcı Örnekleri Gizli'nin kullanılamadığı bir bölge seçerek), kanıtlama raporu görüntülenmez.

Kapsayıcı Örnekleri'ne gizli bir kapsayıcı grubu dağıttığınız için ilkelerin nasıl uygulandığı hakkında daha fazla bilgi edinebilirsiniz: