نشر نظام مجموعة AKS مع حاويات سرية ونهج افتراضي

في هذه المقالة، يمكنك استخدام Azure CLI لنشر نظام مجموعة Azure Kubernetes Service (AKS) وتكوين الحاويات السرية (معاينة) باستخدام نهج أمان افتراضي. ثم نشر تطبيق كحاوية سرية. لمعرفة المزيد، اقرأ نظرة عامة على حاويات AKS السرية.

بشكل عام، يتضمن بدء استخدام حاويات AKS السرية الخطوات التالية.

  • نشر أو ترقية نظام مجموعة AKS باستخدام Azure CLI
  • إضافة تعليق توضيحي إلى بيان pod YAML الخاص بك لوضع علامة على الكبسولة على أنها قيد التشغيل كحاوية سرية
  • إضافة نهج أمان إلى بيان pod YAML
  • تمكين فرض نهج الأمان
  • نشر تطبيقك في الحوسبة السرية

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

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

  • aks-preview إصدار ملحق Azure CLI 0.5.169 أو أحدث.

  • confcom ملحق Confidential Container Azure CLI 0.3.3 أو أحدث. confcomمطلوب لإنشاء نهج أمان.

  • تسجيل الميزة Preview في اشتراك Azure الخاص بك.

  • يدعم AKS الحاويات السرية (معاينة) على الإصدار 1.25.0 والإصدارات الأحدث.

  • هوية حمل العمل وبيانات اعتماد هوية موحدة. تمكن بيانات اعتماد هوية حمل العمل تطبيقات Kubernetes من الوصول إلى موارد Azure بأمان باستخدام معرف Microsoft Entra استنادا إلى حسابات الخدمة ذات التعليقات التوضيحية. إذا لم تكن على دراية هوية حمل عمل Microsoft Entra، فراجع نظرة عامة على هوية حمل عمل Microsoft Entra وراجع كيفية عمل هوية حمل العمل مع AKS.

  • توفر الهوية التي تستخدمها لإنشاء نظام مجموعتك الحد الأدنى المناسب من الأذونات. لمزيد من المعلومات حول الوصول والهوية ل AKS، راجع خيارات الوصول والهوية لخدمة Azure Kubernetes (AKS).

  • لإدارة مجموعة Kubernetes، استخدم عميل سطر أوامر Kubernetes kubectl. يأتي Azure Cloud Shell مع kubectl. يمكنك تثبيت kubectl محليا باستخدام الأمر az aks install-cli .

  • توفر الحاويات السرية على AKS حاوية مصدر مفتوح جانبية للمصادقة وإصدار المفتاح الآمن. يتكامل sidecar مع خدمة إدارة المفاتيح (KMS)، مثل Azure Key Vault، لتحرير مفتاح لمجموعة الحاوية بعد اكتمال التحقق من الصحة. يعد نشر Azure Key Vault Managed HSM (وحدة أمان الأجهزة) اختياريا ولكن يوصى به لدعم التكامل والإثبات على مستوى الحاوية. راجع توفير وحدة HSM مدارة وتنشيطها لنشر HSM المدار.

تثبيت ملحق aks-preview Azure CLI

هام

تتوفر ميزات معاينة AKS على أساس الخدمة الذاتية والاشتراك. يتم توفير المعاينات "كما هي" و"كما هي متوفرة"، ويتم استبعادها من اتفاقيات مستوى الخدمة والضمان المحدود. تتم تغطية معاينات AKS جزئيًا بواسطة دعم العملاء على أساس بذل أفضل الجهود. على هذا النحو، هذه الميزات ليست مخصصة للاستخدام الإنتاجي. لمزيد من المعلومات، يُرجي الاطلاع على مقالات الدعم الآتية:

لتثبيت ملحق aks-preview، قم بتشغيل الأمر التالي:

az extension add --name aks-preview

قم بتشغيل الأمر التالي للتحديث إلى أحدث إصدار من الملحق الذي تم إصداره:

az extension update --name aks-preview

تثبيت ملحق confcom Azure CLI

لتثبيت ملحق confcom، قم بتشغيل الأمر التالي:

az extension add --name confcom

قم بتشغيل الأمر التالي للتحديث إلى أحدث إصدار من الملحق الذي تم إصداره:

az extension update --name confcom

تسجيل علامة ميزة KataCcIsolationPreview

قم بتسجيلKataCcIsolationPreviewميزة الإشارة باستخدامتسجيل ميزة az كما هو موضح في المثال التالي:

az feature register --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"

يستغرق الأمر بضع دقائق حتى تظهر الحالة مُسجل. تحقق من حالة التسجيل باستخدام الأمر az feature show :

az feature show --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"

عندما تعكس الحالة Registered، قم بتحديث تسجيل موفر موارد Microsoft.ContainerService باستخدام الأمر az provider register:

az provider register --namespace "Microsoft.ContainerService"

نشر نظام مجموعة جديد

  1. إنشاء نظام مجموعة AKS باستخدام الأمر az aks create وتحديد المعلمات التالية:

    • --os-sku: AzureLinux. يدعم Azure Linux os-sku فقط هذه الميزة في إصدار المعاينة هذا.
    • --node-vm-size: أي حجم Azure VM هو الجيل 2 VM ويدعم أعمال الظاهرية المتداخلة. على سبيل المثال، Standard_DC8as_cc_v5 VMs.
    • --enable-workload-identity: تمكين إنشاء هوية حمل عمل Microsoft Entra تمكين pods لاستخدام هوية Kubernetes.
    • --enable-oidc-issuer: تمكين مصدر OpenID Connect (OIDC). يسمح لمعرف Microsoft Entra أو النظام الأساسي الآخر لإدارة الوصول وهوية موفر السحابة بالقدرة على اكتشاف مفاتيح التوقيع العامة لخادم API.

    يحدث المثال التالي نظام المجموعة المسمى myAKSCluster وينشئ تجمع عقدة نظام واحد في myResourceGroup:

    az aks create --resource-group myResourceGroup --name myAKSCluster --kubernetes-version <1.25.0 and above> --os-sku AzureLinux --node-vm-size Standard_DC4as_cc_v5 --node-count 1 --enable-oidc-issuer --enable-workload-identity --generate-ssh-keys
    

    بعد بضع دقائق، الأمر إكمال وإرجاع معلومات منسقة JSON حول الكتلة. يحتوي نظام المجموعة التي تم إنشاؤها في الخطوة السابقة على تجمع عقدة واحدة. في الخطوة التالية، نضيف تجمع عقدة ثان إلى نظام المجموعة.

  2. عندما تكون المجموعة جاهزة، احصل على بيانات اعتماد نظام المجموعة باستخدام الأمر az aks get-credentials .

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. أضف تجمع عقدة مستخدم إلى myAKSCluster مع عقدتين في nodepool2 في myResourceGroup باستخدام الأمر az aks nodepool add . حدد المعلمات التالية:

    • --وقت تشغيل حمل العمل: حدد KataCcIsolation لتمكين ميزة الحاويات السرية في تجمع العقدة. مع هذه المعلمة، يجب أن تفي هذه المعلمات الأخرى بالمتطلبات التالية. وإلا، يفشل الأمر ويبلغ عن مشكلة في المعلمة (المعلمات) المقابلة.
    • --os-sku: AzureLinux. يدعم Azure Linux os-sku فقط هذه الميزة في إصدار المعاينة هذا.
    • --node-vm-size: أي حجم Azure VM هو الجيل 2 VM ويدعم أعمال الظاهرية المتداخلة. على سبيل المثال، Standard_DC8as_cc_v5 VMs.
    az aks nodepool add --resource-group myResourceGroup --name nodepool2 --cluster-name myAKSCluster --node-count 2 --os-sku AzureLinux --node-vm-size Standard_DC4as_cc_v5 --workload-runtime KataCcIsolation
    

بعد بضع دقائق، الأمر إكمال وإرجاع معلومات منسقة JSON حول الكتلة.

التوزيع إلى نظام مجموعة موجود

لاستخدام هذه الميزة مع نظام مجموعة AKS موجود، يجب استيفاء المتطلبات التالية:

  • اتبع الخطوات لتسجيل علامة ميزة KataCcIsolationPreview .
  • تحقق من تشغيل نظام المجموعة للإصدار 1.25.0 من Kubernetes والإصدارات الأحدث.
  • تمكين هوية حمل العمل على نظام المجموعة إذا لم تكن بالفعل.

استخدم الأمر التالي لتمكين الحاويات السرية (معاينة) عن طريق إنشاء تجمع عقدة لمضيفه.

  1. أضف تجمع عقدة إلى نظام مجموعة AKS باستخدام الأمر az aks nodepool add . حدد المعلمات التالية:

    • --resource-group: أدخل اسم مجموعة موارد موجودة لإنشاء نظام مجموعة AKS فيها.
    • --cluster-name: أدخل اسما فريدا لمجموعة AKS، مثل myAKSCluster.
    • --name: أدخل اسما فريدا لتجمع عقدة المجموعات، مثل nodepool2.
    • --workload-runtime: حدد KataCcIsolation لتمكين الميزة في تجمع العقدة. جنبا إلى جنب مع المعلمة --workload-runtime ، يجب أن تفي هذه المعلمات الأخرى بالمتطلبات التالية. وإلا، يفشل الأمر ويبلغ عن مشكلة في المعلمة (المعلمات) المقابلة.
    • --os-sku: AzureLinux. يدعم Azure Linux os-sku فقط هذه الميزة في إصدار المعاينة هذا.
    • --node-vm-size: أي حجم Azure VM هو الجيل 2 VM ويدعم أعمال الظاهرية المتداخلة. على سبيل المثال، Standard_DC8as_cc_v5 VMs.

    يضيف المثال التالي تجمع عقدة مستخدم إلى myAKSCluster مع عقدتين في nodepool2 في myResourceGroup:

    az aks nodepool add --resource-group myResourceGroup --name nodepool2 –-cluster-name myAKSCluster --node-count 2 --os-sku AzureLinux --node-vm-size Standard_DC4as_cc_v5 --workload-runtime KataCcIsolation
    

    بعد بضع دقائق، الأمر إكمال وإرجاع معلومات منسقة JSON حول الكتلة.

  2. قم بتشغيل الأمر az aks update لتمكين الحاويات السرية (معاينة) على نظام المجموعة.

    az aks update --name myAKSCluster --resource-group myResourceGroup
    

    بعد بضع دقائق، الأمر إكمال وإرجاع معلومات منسقة JSON حول الكتلة.

  3. عندما تكون المجموعة جاهزة، احصل على بيانات اعتماد نظام المجموعة باستخدام الأمر az aks get-credentials .

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

تكوين الحاوية

قبل تكوين الوصول إلى Azure Key Vault والسر، ونشر تطبيق كحاوية سرية، تحتاج إلى إكمال تكوين هوية حمل العمل.

لتكوين هوية حمل العمل، قم بتنفيذ الخطوات التالية الموضحة في مقالة نشر هوية حمل العمل وتكوينها:

  • استرداد عنوان URL لمصدر OIDC
  • إنشاء هوية مدارة
  • إنشاء حساب خدمة Kubernetes
  • إنشاء بيانات اعتماد هوية موحدة

هام

تحتاج إلى تعيين متغيرات البيئة من قسم تصدير المتغيرات البيئية في مقالة نشر هوية حمل العمل وتكوينها لمتابعة إكمال هذا البرنامج التعليمي. تذكر تعيين المتغير SERVICE_ACCOUNT_NAMESPACE إلى kafka، وتنفيذ الأمر kubectl create namespace kafka قبل تكوين هوية حمل العمل.

نشر تطبيق موثوق به باستخدام kata-cc وحاوية التصديق

تقوم الخطوات التالية بتكوين التشفير الشامل لرسائل Kafka باستخدام مفاتيح التشفير التي تديرها وحدات أمان الأجهزة المدارة من Azure (mHSM). يتم إصدار المفتاح فقط عندما يعمل مستهلك Kafka داخل حاوية سرية مع حاوية تزويد سرية لمصادقة Azure تم إدخالها في الحاوية.

يستند هذا التكوين إلى المكونات الأربعة التالية:

  • نظام مجموعة Kafka: نظام مجموعة Kafka بسيط تم نشره في مساحة اسم Kafka على نظام المجموعة.
  • منتج Kafka: منتج Kafka يعمل كجراب Vanilla Kubernetes يرسل رسائل مشفرة مكونة من قبل المستخدم باستخدام مفتاح عام إلى موضوع Kafka.
  • Kafka Consumer: حاوية مستهلك Kafka تعمل مع وقت تشغيل kata-cc، ومجهزة بحاوية إصدار مفتاح آمن لاسترداد المفتاح الخاص لفك تشفير رسائل Kafka وعرض الرسائل إلى واجهة مستخدم الويب.

بالنسبة لإصدار المعاينة هذا، نوصي لأغراض الاختبار والتقييم إما بإنشاء أو استخدام مورد طبقة Azure Key Vault Premium الحالي لدعم تخزين المفاتيح في وحدة أمان الأجهزة (HSM). لا نوصي باستخدام مخزن مفاتيح الإنتاج الخاص بك. إذا لم يكن لديك Azure Key Vault، فشاهد إنشاء مخزن مفاتيح باستخدام Azure CLI.

  1. امنح الهوية المدارة التي أنشأتها سابقا، وحسابك، حق الوصول إلى مخزن المفاتيح. تعيين كلا الهويتين مسؤول تشفير Key Vault وأدوار Key Vault Crypto User Azure RBAC.

    إشعار

    • الهوية المدارة هي القيمة التي تعينها للمتغير USER_ASSIGNED_IDENTITY_NAME .

    • لإضافة تعيينات الأدوار، يجب أن يكون لديك Microsoft.Authorization/roleAssignments/write أذونات و Microsoft.Authorization/roleAssignments/delete ، مثل مسؤول الوصول إلى بيانات Key Vault أو مسؤول وصول المستخدم أو المالك.

    • يجب استخدام Key Vault Premium SKU لدعم المفاتيح المحمية ب HSM.

    قم بتشغيل الأمر التالي لتعيين النطاق:

    AKV_SCOPE=$(az keyvault show --name <AZURE_AKV_RESOURCE_NAME> --query id --output tsv)
    

    قم بتشغيل الأمر التالي لتعيين دور Key Vault Crypto Officer .

    az role assignment create --role "Key Vault Crypto Officer" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPE
    

    قم بتشغيل الأمر التالي لتعيين دور مستخدم Key Vault Crypto.

    az role assignment create --role "Key Vault Crypto User" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPE
    
  2. تثبيت نظام مجموعة Kafka في مساحة اسم kafka عن طريق تشغيل الأمر التالي:

    kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka
    
  3. قم بتشغيل الأمر التالي لتطبيق ملف CR لنظام kafka المجموعة.

    kubectl apply -f https://strimzi.io/examples/latest/kafka/kafka-persistent-single.yaml -n kafka
    
  4. قم بإعداد مفتاح تشفير/فك تشفير RSA باستخدام البرنامج النصي bash لحمل العمل من GitHub. احفظ الملف باسم setup-key.sh.

  5. MAA_ENDPOINT قم بتعيين متغير البيئة باستخدام FQDN ل Attest URI عن طريق تشغيل الأمر التالي.

    export MAA_ENDPOINT="$(az attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-)"
    

    تحقق مما إذا كان FQDN ل Attest URI بالتنسيق الصحيح (يجب ألا يتضمن MAA_ENDPOINT البادئة "https://"):

    echo $MAA_ENDPOINT
    

    إشعار

    لإعداد Microsoft Azure Attestation، راجع التشغيل السريع: إعداد Azure Attestation باستخدام Azure CLI.

  6. انسخ بيان YAML التالي واحفظه ك consumer.yaml.

    apiVersion: v1
    kind: Pod
    metadata:
      name: kafka-golang-consumer
      namespace: kafka
      labels:
        azure.workload.identity/use: "true"
        app.kubernetes.io/name: kafka-golang-consumer
    spec:
      serviceAccountName: workload-identity-sa
      runtimeClassName: kata-cc-isolation
      containers:
        - image: "mcr.microsoft.com/aci/skr:2.7"
          imagePullPolicy: Always
          name: skr
          env:
            - name: SkrSideCarArgs
              value: ewogICAgImNlcnRjYWNoZSI6IHsKCQkiZW5kcG9pbnRfdHlwZSI6ICJMb2NhbFRISU0iLAoJCSJlbmRwb2ludCI6ICIxNjkuMjU0LjE2OS4yNTQvbWV0YWRhdGEvVEhJTS9hbWQvY2VydGlmaWNhdGlvbiIKCX0gIAp9
          command:
            - /bin/skr
          volumeMounts:
            - mountPath: /opt/confidential-containers/share/kata-containers/reference-info-base64
              name: endor-loc
        - image: "mcr.microsoft.com/acc/samples/kafka/consumer:1.0"
          imagePullPolicy: Always
          name: kafka-golang-consumer
          env:
            - name: SkrClientKID
              value: kafka-encryption-demo
            - name: SkrClientMAAEndpoint
              value: sharedeus2.eus2.test.attest.azure.net
            - name: SkrClientAKVEndpoint
              value: "myKeyVault.vault.azure.net"
            - name: TOPIC
              value: kafka-demo-topic
          command:
            - /consume
          ports:
            - containerPort: 3333
              name: kafka-consumer
          resources:
            limits:
              memory: 1Gi
              cpu: 200m
      volumes:
        - name: endor-loc
          hostPath:
            path: /opt/confidential-containers/share/kata-containers/reference-info-base64
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: consumer
      namespace: kafka
    spec:
      type: LoadBalancer
      selector:
        app.kubernetes.io/name: kafka-golang-consumer
      ports:
        - protocol: TCP
          port: 80
          targetPort: kafka-consumer
    

    إشعار

    قم بتحديث قيمة متغير SkrClientAKVEndpoint بيئة pod لمطابقة عنوان URL الخاص ب Azure Key Vault، باستثناء قيمة https://البروتوكول . قيمة العنصر النائب للقيمة الحالية هي myKeyVault.vault.azure.net. قم بتحديث قيمة متغير SkrClientMAAEndpoint بيئة الجراب بقيمة MAA_ENDPOINT. يمكنك العثور على قيمة MAA_ENDPOINT عن طريق تشغيل الأمر echo $MAA_ENDPOINT أو الأمر az attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-.

  7. إنشاء نهج الأمان لبيان YAML لمستهلك Kafka والحصول على تجزئة نهج الأمان المخزنة WORKLOAD_MEASUREMENT في المتغير عن طريق تشغيل الأمر التالي:

    export WORKLOAD_MEASUREMENT=$(az confcom katapolicygen -y consumer.yaml --print-policy | base64 -d | sha256sum | cut -d' ' -f1)
    
  8. لإنشاء زوج مفاتيح غير متماثل RSA (مفاتيح عامة وخاصة)، قم بتشغيل setup-key.sh البرنامج النصي باستخدام الأمر التالي. <Azure Key Vault URL> يجب أن تكون القيمة<your-unique-keyvault-name>.vault.azure.net

    export MANAGED_IDENTITY=${USER_ASSIGNED_CLIENT_ID}
    bash setup-key.sh "kafka-encryption-demo" <Azure Key Vault URL>
    

    إشعار

    • متغير MANAGED_IDENTITY envionment مطلوب من قبل البرنامج النصي setup-key.shbash .

    • سيتم حفظ المفتاح العام كما kafka-encryption-demo-pub.pem بعد تنفيذ البرنامج النصي bash.

    هام

    إذا تلقيت الخطأ ForbiddenByRbac، فقد تحتاج إلى الانتظار لمدة تصل إلى 24 ساعة حيث تحتفظ خدمات الواجهة الخلفية للهويات المدارة بذاكرة تخزين مؤقت لكل URI للمورد لمدة تصل إلى 24 ساعة. راجع أيضا: استكشاف أخطاء Azure RBAC وإصلاحها.

  9. للتحقق من تحميل المفاتيح بنجاح إلى مخزن المفاتيح، قم بتشغيل الأوامر التالية:

    az account set --subscription <Subscription ID>
    az keyvault key list --vault-name <KeyVault Name> -o table
    
  10. انسخ بيان YAML التالي واحفظه ك producer.yaml.

    apiVersion: v1
    kind: Pod
    metadata:
      name: kafka-producer
      namespace: kafka
    spec:
      containers:
        - image: "mcr.microsoft.com/acc/samples/kafka/producer:1.0"
          name: kafka-producer
          command:
            - /produce
          env:
            - name: TOPIC
              value: kafka-demo-topic
            - name: MSG
              value: "Azure Confidential Computing"
            - name: PUBKEY
              value: |-
                -----BEGIN PUBLIC KEY-----
                MIIBojAN***AE=
                -----END PUBLIC KEY-----
          resources:
            limits:
              memory: 1Gi
              cpu: 200m
    

    إشعار

    قم بتحديث القيمة التي تبدأ ب -----BEGIN PUBLIC KEY----- وتنتهي بسلاسل -----END PUBLIC KEY----- بالمحتوى الذي تم إنشاء المحتوى منه kafka-encryption-demo-pub.pem في الخطوة السابقة.

  11. consumer انشر بياني YAML و producer باستخدام الملفات التي حفظتها سابقا.

    kubectl apply -f consumer.yaml
    
    kubectl apply -f producer.yaml
    
  12. احصل على عنوان IP لخدمة الويب باستخدام الأمر التالي:

    kubectl get svc consumer -n kafka
    
  13. انسخ عنوان IP الخارجي لخدمة المستهلك والصقه في المستعرض ولاحظ الرسالة التي تم فك تشفيرها.

    يشبه المثال التالي إخراج الأمر :

    Welcome to Confidential Containers on AKS!
    Encrypted Kafka Message:
    Msg 1: Azure Confidential Computing
    
  14. يجب عليك أيضا محاولة تشغيل المستهلك كجراب Kubernetes عادي عن طريق إزالة المواصفات skr container و kata-cc runtime class . نظرا لأنك لا تقوم بتشغيل المستهلك مع فئة وقت تشغيل kata-cc، فإنك لم تعد بحاجة إلى النهج.

  15. قم بإزالة النهج بأكمله ولاحظ الرسائل مرة أخرى في المستعرض بعد إعادة نشر حمل العمل. تظهر الرسائل كنص مشفر مشفر base64 لأنه لا يمكن استرداد مفتاح التشفير الخاص. لا يمكن استرداد المفتاح لأن المستهلك لم يعد يعمل في بيئة سرية، وهو skr container مفقود، مما يمنع فك تشفير الرسائل.

التنظيف

عند الانتهاء من تقييم هذه الميزة، لتجنب رسوم Azure، قم بتنظيف الموارد غير الضرورية. إذا قمت بنشر مجموعة جديدة كجزء من التقييم أو الاختبار، يمكنك حذف نظام المجموعة باستخدام الأمر az aks delete .

az aks delete --resource-group myResourceGroup --name myAKSCluster

إذا قمت بتمكين الحاويات السرية (معاينة) على مجموعة موجودة، يمكنك إزالة pod(s) باستخدام الأمر kubectl delete pod .

kubectl delete pod pod-name

الخطوات التالية

  • تعرف على المزيد حول مضيفي Azure Dedicated للعقد مع نظام مجموعة AKS لاستخدام عزل الأجهزة والتحكم في أحداث صيانة النظام الأساسي ل Azure.