البرنامج التعليمي: إعداد توزيع لحاوية سرية على مثيلات حاوية Azure

في Azure Container Instances، يمكنك استخدام حاويات سرية على النظام الأساسي بلا خادم لتشغيل تطبيقات الحاوية في بيئة تنفيذ موثوق بها تستند إلى الأجهزة ومصدق عليها (TEE). يمكن أن تساعد هذه الإمكانية في حماية البيانات قيد الاستخدام وتوفر تشفيرا في الذاكرة عبر الترحيل المتداخل الآمن.

في هذا البرنامج التعليمي، تتعلم كيفية:

  • إنشاء قالب Azure Resource Manager (قالب ARM) لمجموعة حاويات سرية.
  • إنشاء نهج إنفاذ الحوسبة السرية (CCE).
  • نشر مجموعة الحاويات السرية إلى Azure.

المتطلبات الأساسية

لإكمال هذا البرنامج التعليمي، يجب أن تفي بالمتطلبات التالية:

  • Azure CLI: يجب أن يكون لديك الإصدار 2.44.1 من Azure CLI أو أحدث مثبتا على الكمبيوتر المحلي. للعثور على الإصدار الخاص بك، قم بتشغيل az --version. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.

  • ملحق Confcom Azure CLI: يجب أن يكون لديك إصدار ملحق Azure CLI confcom 0.30+ مثبتا لإنشاء نهج إنفاذ الحوسبة السرية.

    az extension add -n confcom
    
  • Docker: تحتاج إلى تثبيت Docker محليا. يوفر Docker حزما تقوم بتكوين بيئة Docker على macOS وWindows وLinux.

    يفترض هذا البرنامج التعليمي فهما أساسيا لمفاهيم Docker الأساسية مثل الحاويات وصور الحاوية والأوامر الأساسية docker . للحصول على تمهيد حول Docker وأساسيات الحاوية، راجع نظرة عامة على Docker.

هام

نظرا لأن Azure Cloud Shell لا يتضمن Docker daemon، يجب عليك تثبيت كل من Azure CLI وDocker Engine على الكمبيوتر المحلي لإكمال هذا البرنامج التعليمي. لا يمكنك استخدام Azure Cloud Shell لهذا البرنامج التعليمي.

إنشاء قالب ARM لمجموعة حاويات مثيلات الحاوية

في هذا البرنامج التعليمي، يمكنك نشر تطبيق مرحبًا بالعالم الذي ينشئ تقرير إثبات الأجهزة. تبدأ بإنشاء قالب ARM مع مورد مجموعة حاويات لتعريف خصائص هذا التطبيق. ثم يمكنك استخدام قالب ARM هذا مع أدوات Confcom Azure CLI لإنشاء نهج CCE للمصادقة.

يستخدم هذا البرنامج التعليمي قالب ARM هذا كمثال. لعرض التعليمات البرمجية المصدر لهذا التطبيق، راجع Azure Container Instances Confidential مرحبًا بالعالم.

يضيف قالب المثال خاصيتين إلى تعريف مورد Container Instances لجعل مجموعة الحاوية سرية:

  • sku: يمكنك من الاختيار بين عمليات نشر مجموعة الحاويات السرية والقياسية. إذا لم تقم بإضافة هذه الخاصية إلى المورد، ستكون مجموعة الحاوية توزيعا قياسيا.
  • confidentialComputeProperties: يمكنك من تمرير نهج CCE مخصص لإثبات مجموعة الحاويات الخاصة بك. إذا لم تقم بإضافة هذا الكائن إلى المورد، فلن يتم التحقق من صحة مكونات البرنامج التي تعمل داخل مجموعة الحاوية.

إشعار

المعلمة ccePolicy ضمن confidentialComputeProperties فارغة. ستقوم بتعبئته بعد إنشاء النهج لاحقا في البرنامج التعليمي.

استخدم محرر النص المفضل لديك لحفظ قالب ARM هذا على جهازك المحلي ك template.json.

{
    "$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]"
      }
    }
  }

إنشاء نهج CCE مخصص

باستخدام قالب ARM الذي قمت بصياغته وملحق Confcom Azure CLI، يمكنك إنشاء نهج CCE مخصص. يتم استخدام سياسة CCE للمصادقة. تأخذ الأداة قالب ARM كمدخل لإنشاء النهج. يفرض النهج صور الحاوية المحددة ومتغيرات البيئة والتركيبات والأوامر، والتي يمكن التحقق من صحتها بعد ذلك عند بدء تشغيل مجموعة الحاوية. لمزيد من المعلومات حول ملحق Confcom Azure CLI، راجع الوثائق على GitHub.

  1. لإنشاء نهج CCE، قم بتشغيل الأمر التالي باستخدام قالب ARM كمدخل:

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

    عند انتهاء هذا الأمر، يجب أن تظهر سلسلة Base64 التي تم إنشاؤها كإخراج بالتنسيق التالي. هذه السلسلة هي نهج CCE الذي تقوم بنسخه ولصقه في قالب ARM كقيمة للخاصية ccePolicy .

    cGFja2FnZSBwb2xpY3kKCmFwaV9zdm4gOj0gIjAuOS4wIgoKaW1wb3J0IGZ1dHVyZS5rZXl3b3Jkcy5ldmVyeQppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCgpmcmFnbWVudHMgOj0gWwpdCgpjb250YWluZXJzIDo9IFsKICAgIHsKICAgICAgICAiY29tbWFuZCI6IFsiL3BhdXNlIl0sCiAgICAgICAgImVudl9ydWxlcyI6IFt7InBhdHRlcm4iOiAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLCAic3RyYXRlZ3kiOiAic3RyaW5nIiwgInJlcXVpcmVkIjogdHJ1ZX0seyJwYXR0ZXJuIjogIlRFUk09eHRlcm0iLCAic3RyYXRlZ3kiOiAic3RyaW5nIiwgInJlcXVpcmVkIjogZmFsc2V9XSwKICAgICAgICAibGF5ZXJzIjogWyIxNmI1MTQwNTdhMDZhZDY2NWY5MmMwMjg2M2FjYTA3NGZkNTk3NmM3NTVkMjZiZmYxNjM2NTI5OTE2OWU4NDE1Il0sCiAgICAgICAgIm1vdW50cyI6IFtdLAogICAgICAgICJleGVjX3Byb2Nlc3NlcyI6IFtdLAogICAgICAgICJzaWduYWxzIjogW10sCiAgICAgICAgImFsbG93X2VsZXZhdGVkIjogZmFsc2UsCiAgICAgICAgIndvcmtpbmdfZGlyIjogIi8iCiAgICB9LApdCmFsbG93X3Byb3BlcnRpZXNfYWNjZXNzIDo9IHRydWUKYWxsb3dfZHVtcF9zdGFja3MgOj0gdHJ1ZQphbGxvd19ydW50aW1lX2xvZ2dpbmcgOj0gdHJ1ZQphbGxvd19lbnZpcm9ubWVudF92YXJpYWJsZV9kcm9wcGluZyA6PSB0cnVlCmFsbG93X3VuZW5jcnlwdGVkX3NjcmF0Y2ggOj0gdHJ1ZQoKCm1vdW50X2RldmljZSA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQp1bm1vdW50X2RldmljZSA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQptb3VudF9vdmVybGF5IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnVubW91bnRfb3ZlcmxheSA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpjcmVhdGVfY29udGFpbmVyIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmV4ZWNfaW5fY29udGFpbmVyIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmV4ZWNfZXh0ZXJuYWwgOj0geyAiYWxsb3dlZCIgOiB0cnVlIH0Kc2h1dGRvd25fY29udGFpbmVyIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnNpZ25hbF9jb250YWluZXJfcHJvY2VzcyA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpwbGFuOV9tb3VudCA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpwbGFuOV91bm1vdW50IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmdldF9wcm9wZXJ0aWVzIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmR1bXBfc3RhY2tzIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnJ1bnRpbWVfbG9nZ2luZyA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpsb2FkX2ZyYWdtZW50IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnNjcmF0Y2hfbW91bnQgOj0geyAiYWxsb3dlZCIgOiB0cnVlIH0Kc2NyYXRjaF91bm1vdW50IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnJlYXNvbiA6PSB7ImVycm9ycyI6IGRhdGEuZnJhbWV3b3JrLmVycm9yc30K
    
  2. احفظ التغييرات على نسختك المحلية من قالب ARM.

نشر القالب

في الخطوات التالية، يمكنك استخدام مدخل Microsoft Azure لنشر القالب. يمكنك أيضا استخدام Azure PowerShell أو Azure CLI أو واجهة برمجة تطبيقات REST. للتعرف على أساليب النشر الأخرى، راجع نشر القوالب.

  1. حدد الزر Deploy to Azure لتسجيل الدخول إلى Azure وبدء نشر Container Instances.

    Button to deploy the Resource Manager template to Azure.

  2. حدد Build your own template in the editor.

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

    القالب JSON الذي يظهر فارغ في الغالب.

  3. حدد تحميل الملف وتحميل template.json، الذي قمت بتعديله عن طريق إضافة نهج CCE في الخطوات السابقة.

    Screenshot of the button for loading a file.

  4. حدد حفظ.

  5. حدد القيم التالية أو إدخالها:

    • الاشتراك: تحديد اشتراك Azure.
    • Resource group حددCreate new، وأدخل اسماً فريداً لمجموعة الموارد، ثم حدّد OK.
    • الاسم: اقبل الاسم الذي تم إنشاؤه للمثيل، أو أدخل اسما.
    • الموقع: حدد موقعا لمجموعة الموارد. اختر منطقة يتم فيها دعم الحاويات السرية. مثال: شمال أوروبا.
    • الصورة: اقبل اسم الصورة الافتراضي. تعرض صورة Linux النموذجية هذه إثباتا للأجهزة.

    اقبل القيم الافتراضية للخصائص المتبقية، ثم حدد Review + create.

    Screenshot of details for a custom ARM template deployment.

  6. راجع الشروط والأحكام. إذا وافقت، حدد "I agree to the terms and conditions stated above".

  7. انتظر حتى يظهر إعلام Deployment succeeded . يؤكد أنك قمت بإنشاء المثيل بنجاح.

    Screenshot of a portal notification for successful deployment.

مراجعة الموارد الموزعة

في الخطوات التالية، يمكنك استخدام مدخل Azure لمراجعة خصائص مثيل الحاوية. يمكنك أيضا استخدام أداة مثل Azure CLI.

  1. في المدخل، ابحث عن Container Instances، ثم حدد مثيل الحاوية الذي قمت بإنشائه.

  2. في صفحة نظرة عامة ، لاحظ حالة المثيل وعنوان IP الخاص به.

    Screenshot of the overview page for a container group instance.

  3. عندما تكون حالة المثيل قيد التشغيل، انتقل إلى عنوان IP في المستعرض.

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

    يؤكد وجود تقرير التصديق أسفل شعار Azure Container Instances أن الحاوية قيد التشغيل على الأجهزة التي تدعم TEE.

    إذا قمت بالنشر إلى أجهزة لا تدعم TEE (على سبيل المثال، عن طريق اختيار منطقة لا تتوفر فيها Container Instances Confidential)، فلن يظهر أي تقرير إثبات.

الآن بعد أن قمت بنشر مجموعة حاويات سرية على مثيلات الحاوية، يمكنك معرفة المزيد حول كيفية فرض النهج: