استخدم طبقة النقل الآمنة لتأمين خدمة ويب من خلال Azure التعلم الآلي
توضح لك هذه المقالة كيفية تأمين خدمة ويب يتم نشرها من خلال Azure التعلم الآلي.
يمكنك استخدام HTTPS لتقييد الوصول إلى خدمات الويب وتأمين البيانات التي يرسلها العملاء. يساعد HTTPS على تأمين الاتصالات بين العميل وخدمة الويب عن طريق تشفير الاتصالات بين الاثنين. يستخدم التشفير أمان طبقة النقل (TLS). لا يزال يشار إلى TLS في بعض الأحيان باسم طبقة المقابس الآمنة (SSL) ، والتي كانت سلف TLS.
تلميح
تستخدم Azure التعلم الآلي SDK المصطلح "SSL" للخصائص المرتبطة بالاتصالات الآمنة. هذا لا يعني أن خدمة الويب الخاصة بك لا تستخدم طبقة النقل الآمنة (TLS). SSL هو مجرد مصطلح معترف به بشكل أكثر شيوعا.
وعلى وجه التحديد، تدعم خدمات الويب التي يتم نشرها من خلال Azure التعلم الآلي إصدار TLS 1.2 ل AKS وACI. بالنسبة لعمليات نشر ACI، إذا كنت تستخدم إصدار TLS الأقدم، فإننا نوصي بإعادة النشر للحصول على أحدث إصدار من TLS.
TLS الإصدار 1.3 ل Azure التعلم الآلي - استدلال AKS غير مدعوم.
يعتمد كل من TLS و SSL على الشهادات الرقمية ، والتي تساعد في التشفير والتحقق من الهوية. لمزيد من المعلومات حول كيفية عمل الشهادات الرقمية، راجع موضوع ويكيبيديا البنية التحتية للمفتاح العام.
تحذير
إذا كنت لا تستخدم HTTPS لخدمة الويب الخاصة بك، فقد تكون البيانات التي يتم إرسالها من الخدمة وإليها مرئية للآخرين على الإنترنت.
يمكن HTTPS أيضا العميل من التحقق من صحة الخادم الذي يتصل به. تحمي هذه الميزة العملاء من هجمات الرجل في الوسط .
هذه هي العملية العامة لتأمين خدمة الويب:
احصل على اسم نطاق.
احصل على شهادة رقمية.
نشر خدمة الويب أو تحديثها مع تمكين طبقة النقل الآمنة (TLS).
قم بتحديث DNS للإشارة إلى خدمة الويب.
هام
إذا كنت تقوم بالنشر في Azure Kubernetes Service (AKS)، فيمكنك شراء الشهادة الخاصة بك أو استخدام شهادة توفرها Microsoft. إذا كنت تستخدم شهادة من Microsoft، فلن تحتاج إلى الحصول على اسم مجال أو شهادة TLS/SSL. لمزيد من المعلومات، راجع القسم تمكين طبقة النقل الآمنة ونشرها من هذه المقالة.
هناك اختلافات طفيفة عند تأمين s عبر أهداف النشر.
الحصول على اسم نطاق
إذا كنت لا تملك اسم نطاق بالفعل، فقم بشراء اسم من مسجل أسماء النطاقات. تختلف العملية والسعر بين المسجلين. يوفر المسجل أدوات لإدارة اسم المجال. يمكنك استخدام هذه الأدوات لتعيين اسم مجال مؤهل بالكامل (FQDN) (مثل www.contoso.com) إلى عنوان IP الذي يستضيف خدمة الويب الخاصة بك.
الحصول على شهادة TLS/SSL
هناك العديد من الطرق للحصول على شهادة TLS / SSL (شهادة رقمية). الأكثر شيوعا هو شراء واحد من مرجع مصدق (CA). بغض النظر عن المكان الذي تحصل فيه على الشهادة، تحتاج إلى الملفات التالية:
- شهادة. يجب أن تحتوي الشهادة على سلسلة الشهادات الكاملة، ويجب أن تكون "PEM-encoded".
- مفتاح. يجب أن يكون المفتاح مشفرا أيضا PEM.
عند طلب شهادة، يجب عليك توفير FQDN للعنوان الذي تخطط لاستخدامه لخدمة الويب (على سبيل المثال، www.contoso.com). تتم مقارنة العنوان المختوم في الشهادة والعنوان الذي يستخدمه العملاء للتحقق من هوية خدمة الويب. إذا لم تتطابق هذه العناوين، فسيتلقى العميل رسالة خطأ.
تلميح
إذا تعذر على المرجع المصدق توفير الشهادة والمفتاح كملفات مشفرة بواسطة PEM، فيمكنك استخدام أداة مساعدة مثل OpenSSL لتغيير التنسيق.
تحذير
استخدم الشهادات الموقعة ذاتيا للتطوير فقط. لا تستخدمها في بيئات الإنتاج. يمكن أن تتسبب الشهادات الموقعة ذاتيا في حدوث مشكلات في تطبيقات العميل. لمزيد من المعلومات، راجع الوثائق الخاصة بمكتبات الشبكة التي يستخدمها تطبيق العميل.
تمكين طبقة النقل الآمنة والنشر
لنشر AKS، يمكنك تمكين إنهاء TLS عند إنشاء مجموعة AKS أو إرفاقها في مساحة عمل AML. في وقت نشر نموذج AKS، يمكنك تعطيل إنهاء TLS باستخدام كائن تكوين النشر، وإلا فإن جميع عمليات نشر نموذج AKS افتراضيا سيتم تمكين إنهاء TLS في وقت إنشاء مجموعة AKS أو إرفاقها.
لنشر ACI، يمكنك تمكين إنهاء TLS في وقت نشر النموذج باستخدام كائن تكوين النشر.
Deploy on Azure Kubernetes Service
ملاحظة
تنطبق المعلومات الواردة في هذا القسم أيضا عند نشر خدمة ويب آمنة للمصمم. إذا لم تكن معتادا على استخدام Python SDK، فراجع ما هي حزمة تطوير البرامج Azure التعلم الآلي ل Python؟.
عند إنشاء مجموعة AKS أو إرفاقها في مساحة عمل AML، يمكنك تمكين إنهاء TLS باستخدام كائنات تكوين AksCompute.provisioning_configuration() و AksCompute.attach_configuration(). ترجع كلتا الطريقتين كائن تكوين يحتوي على طريقة enable_ssl، ويمكنك استخدام enable_ssl الطريقة لتمكين TLS.
يمكنك تمكين طبقة النقل الآمنة (TLS) إما باستخدام شهادة Microsoft أو شهادة مخصصة تم شراؤها من CA.
عند استخدام شهادة من Microsoft، يجب عليك استخدام المعلمة leaf_domain_label . تقوم هذه المعلمة بإنشاء اسم DNS للخدمة. على سبيل المثال، تقوم قيمة "contoso" بإنشاء اسم مجال من "contososix-random-characters<>.< azureregion.cloudapp.azure.com>", حيث <azureregion> هي المنطقة التي تحتوي على الخدمة. اختياريا، يمكنك استخدام المعلمة overwrite_existing_domain للكتابة فوق leaf_domain_label الموجودة. يوضح المثال التالي كيفية إنشاء تكوين يمكن TLS باستخدام شهادة Microsoft:
from azureml.core.compute import AksCompute # Config used to create a new AKS cluster and enable TLS provisioning_config = AksCompute.provisioning_configuration() # Leaf domain label generates a name using the formula # "<leaf-domain-label>######.<azure-region>.cloudapp.azure.com" # where "######" is a random series of characters provisioning_config.enable_ssl(leaf_domain_label = "contoso") # Config used to attach an existing AKS cluster to your workspace and enable TLS attach_config = AksCompute.attach_configuration(resource_group = resource_group, cluster_name = cluster_name) # Leaf domain label generates a name using the formula # "<leaf-domain-label>######.<azure-region>.cloudapp.azure.com" # where "######" is a random series of characters attach_config.enable_ssl(leaf_domain_label = "contoso")هام
عند استخدام شهادة من Microsoft، لن تحتاج إلى شراء الشهادة أو اسم المجال الخاص بك.
عند استخدام شهادة مخصصة قمت بشرائها، فإنك تستخدم معلمات ssl_cert_pem_filessl_key_pem_filessl_cname . يوضح المثال التالي كيفية استخدام ملفات.pem لإنشاء تكوين يستخدم شهادة TLS/SSL التي اشتريتها:
from azureml.core.compute import AksCompute # Config used to create a new AKS cluster and enable TLS provisioning_config = AksCompute.provisioning_configuration() provisioning_config.enable_ssl(ssl_cert_pem_file="cert.pem", ssl_key_pem_file="key.pem", ssl_cname="www.contoso.com") # Config used to attach an existing AKS cluster to your workspace and enable SSL attach_config = AksCompute.attach_configuration(resource_group = resource_group, cluster_name = cluster_name) attach_config.enable_ssl(ssl_cert_pem_file="cert.pem", ssl_key_pem_file="key.pem", ssl_cname="www.contoso.com")
لمزيد من المعلومات حول enable_ssl، راجع AksProvisioningConfiguration.enable_ssl () و AksAttachConfiguration.enable_ssl().
ماذا يُقصد بـ Azure Container Instances؟
عند النشر إلى مثيلات حاوية Azure، فإنك توفر قيما للمعلمات المتعلقة بطبقة النقل الآمنة (TLS)، كما يظهر مقتطف التعليمات البرمجية التالي:
from azureml.core.webservice import AciWebservice
aci_config = AciWebservice.deploy_configuration(
ssl_enabled=True, ssl_cert_pem_file="cert.pem", ssl_key_pem_file="key.pem", ssl_cname="www.contoso.com")
لمزيد من المعلومات، راجع AciWebservice.deploy_configuration().
تحديث DNS الخاص بك
لنشر AKS باستخدام شهادة مخصصة أو نشر ACI، يجب عليك تحديث سجل DNS للإشارة إلى عنوان IP الخاص بنقطة نهاية التسجيل.
هام
عند استخدام شهادة من Microsoft لنشر AKS، لا تحتاج إلى تحديث قيمة DNS للمجموعة يدويا. يجب تعيين القيمة تلقائيا.
يمكنك اتباع الخطوات التالية لتحديث سجل DNS لاسم مجالك المخصص:
احصل على عنوان IP لنقطة النهاية من تسجيل نقطة النهاية URI ، والذي عادة ما يكون بتنسيق
http://104.214.29.152:80/api/v1/service/<service-name>/score. في هذا المثال، عنوان IP هو 104.214.29.152.استخدم الأدوات من جهة تسجيل اسم المجال لتحديث سجل DNS لاسم المجال الخاص بك. يقوم السجل بتعيين FQDN (على سبيل المثال، www.contoso.com) إلى عنوان IP. يجب أن يشير السجل إلى عنوان IP لنقطة نهاية التسجيل.
تلميح
لا تتحمل Microsoft مسؤولية تحديث DNS لاسم DNS المخصص أو الشهادة. يجب عليك تحديثه مع مسجل اسم المجال الخاص بك.
بعد تحديث سجل DNS، يمكنك التحقق من صحة دقة DNS باستخدام الأمر nslookup اسم المجال المخصص . إذا تم تحديث سجل DNS بشكل صحيح، فسيشير اسم المجال المخصص إلى عنوان IP لنقطة نهاية التسجيل.
قد يكون هناك تأخير لمدة دقائق أو ساعات قبل أن يتمكن العملاء من حل اسم المجال، اعتمادا على المسجل و"وقت العيش" (TTL) الذي تم تكوينه لاسم المجال.
لمزيد من المعلومات حول دقة DNS باستخدام Azure التعلم الآلي، راجع كيفية استخدام مساحة العمل مع خادم DNS مخصص.
تحديث شهادة TLS/SSL
تنتهي صلاحية شهادات TLS/SSL ويجب تجديدها. عادة ما يحدث هذا كل عام. استخدم المعلومات الواردة في الأقسام التالية لتحديث الشهادة وتجديدها للطرز التي تم نشرها في Azure Kubernetes Service:
تحديث شهادة تم إنشاؤها بواسطة Microsoft
إذا تم إنشاء الشهادة في الأصل بواسطة Microsoft (عند استخدام leaf_domain_label لإنشاء الخدمة)، فسيتم تجديدها تلقائيا عند الحاجة. إذا كنت ترغب في تجديده يدويا، استخدم أحد الأمثلة التالية لتحديث الشهادة:
هام
- إذا كانت الشهادة الموجودة لا تزال صالحة، فاستخدم
renew=True(SDK) أو--ssl-renew(CLI) لإجبار التكوين على تجديدها. على سبيل المثال، إذا كانت الشهادة الموجودة لا تزال صالحة لمدة 10 أيام ولا تستخدمهاrenew=True، فقد لا يتم تجديد الشهادة. - عند نشر الخدمة في الأصل ،
leaf_domain_labelيتم استخدام لإنشاء اسم DNS باستخدام النمط<leaf-domain-label>######.<azure-region>.cloudapp.azure.com. للحفاظ على الاسم الحالي (بما في ذلك 6 أرقام التي تم إنشاؤها في الأصل)، استخدم القيمة الأصليةleaf_domain_label. لا تقم بتضمين 6 أرقام التي تم إنشاؤها.
استخدام SDK
from azureml.core.compute import AksCompute
from azureml.core.compute.aks import AksUpdateConfiguration
from azureml.core.compute.aks import SslConfiguration
# Get the existing cluster
aks_target = AksCompute(ws, clustername)
# Update the existing certificate by referencing the leaf domain label
ssl_configuration = SslConfiguration(leaf_domain_label="myaks", overwrite_existing_domain=True, renew=True)
update_config = AksUpdateConfiguration(ssl_configuration)
aks_target.update(update_config)
استخدام CLI
APPLY TO: Azure CLI ml extension
ع1
v2 (معاينة)
az ml computetarget update aks -g "myresourcegroup" -w "myresourceworkspace" -n "myaks" --ssl-leaf-domain-label "myaks" --ssl-overwrite-domain True --ssl-renew
لمزيد من المعلومات، راجع المستندات المرجعية التالية:
تحديث شهادة مخصصة
إذا تم إنشاء الشهادة في الأصل بواسطة مرجع مصدق، فاتبع الخطوات التالية:
استخدم الوثائق التي يوفرها المرجع المصدق لتجديد الشهادة. تقوم هذه العملية بإنشاء ملفات شهادات جديدة.
استخدم إما SDK أو CLI لتحديث الخدمة بالشهادة الجديدة:
استخدام SDK
from azureml.core.compute import AksCompute from azureml.core.compute.aks import AksUpdateConfiguration from azureml.core.compute.aks import SslConfiguration # Read the certificate file def get_content(file_name): with open(file_name, 'r') as f: return f.read() # Get the existing cluster aks_target = AksCompute(ws, clustername) # Update cluster with custom certificate ssl_configuration = SslConfiguration(cname="myaks", cert=get_content('cert.pem'), key=get_content('key.pem')) update_config = AksUpdateConfiguration(ssl_configuration) aks_target.update(update_config)استخدام CLI
APPLY TO: Azure CLI ml extension
ع1
v2 (معاينة)az ml computetarget update aks -g "myresourcegroup" -w "myresourceworkspace" -n "myaks" --ssl-cname "myaks"--ssl-cert-file "cert.pem" --ssl-key-file "key.pem"
لمزيد من المعلومات، راجع المستندات المرجعية التالية:
تعطيل طبقة النقل الآمنة (TLS)
لتعطيل طبقة النقل الآمنة لنموذج تم نشره في خدمة Azure Kubernetes، قم بإنشاء ملف SslConfiguration مع status="Disabled"، ثم قم بإجراء تحديث:
from azureml.core.compute import AksCompute
from azureml.core.compute.aks import AksUpdateConfiguration
from azureml.core.compute.aks import SslConfiguration
# Get the existing cluster
aks_target = AksCompute(ws, clustername)
# Disable TLS
ssl_configuration = SslConfiguration(status="Disabled")
update_config = AksUpdateConfiguration(ssl_configuration)
aks_target.update(update_config)
الخطوات التالية
ستتعرف على كيفية: