تقييد وصول الشبكة إلى موارد PaaS باستخدام نقاط نهاية خدمة الشبكة الافتراضية باستخدام Azure CLI

تمكنك نقاط تقديم خدمة الشبكة الظاهرية من تقييد الوصول إلى الشبكة إلى بعض موارد خدمة Azure إلى شبكة فرعية لشبكة ظاهرية. يمكنك أيضًا إزالة وصول الإنترنت إلى الموارد. توفر نقاط تقديم الخدمة اتصالاً مباشرًا من الشبكة الظاهرية بخدمات Azure المدعومة، مما يسمح لك باستخدام مساحة العنوان الخاصة بالشبكة الظاهرية للوصول إلى خدمات Azure. تظل دائمًا نسبة استخدام الشبكة الموجهة إلى موارد Azure من خلال نقاط نهاية الخدمة على شبكة Microsoft Azure الأساسية. في هذه المقالة، ستتعرف على كيفية:

  • إنشاء شبكة افتراضية باستخدام شبكة فرعية
  • إضافة شبكة فرعية لتمكين نقطة نهاية خدمة
  • إنشاء مورد Azure والسماح للشبكة بالوصول إليه من شبكة فرعية فقط
  • توزيع جهاز ظاهري (VM) على كل شبكة فرعية
  • تأكيد الوصول إلى مورد من شبكة فرعية
  • تأكيد رفض الوصول إلى مورد من شبكة فرعية والإنترنت

إذا لم يكن لديك اشتراك في Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.

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

  • تتطلب هذه المقالة الإصدار 2.0.28 أو إصدارًا أحدث من واجهة سطر الأوامر من Azure. إذا كنت تستخدم Azure Cloud Shell، يتم تثبيت أحدث إصدار بالفعل.

إنشاء شبكة ظاهرية

قبل إنشاء شبكة ظاهرية، يجب عليك إنشاء مجموعة موارد للشبكة الظاهرية، وجميع الموارد الأخرى التي تم إنشاؤها في هذه المقالة. أنشئ مجموعة موارد باستخدام إنشاء مجموعة az. في المثال التالي، سيتم إنشاء مجموعة موارد باسم myResourceGroup في موقع eastus.

az group create \
  --name myResourceGroup \
  --location eastus

قم بإنشاء شبكة ظاهرية بشبكة فرعية واحدة باستخدام الأمر az network vnet create.

az network vnet create \
  --name myVirtualNetwork \
  --resource-group myResourceGroup \
  --address-prefix 10.0.0.0/16 \
  --subnet-name Public \
  --subnet-prefix 10.0.0.0/24

تمكين نقطة نهاية خدمة

يمكنك تمكين نقاط تقديم الخدمة فقط للخدمات التي تدعم نقاط تقديم الخدمة. اعرض الخدمات المجهزة بنقطة تقديم الخدمة المتوفرة في موقع Azure باستخدام az network vnet list-endpoint-services. يعرض المثال التالي قائمة بالخدمات المُمكَّن لها نقطة تقديم الخدمة المتوفرة في منطقة إيستوس. ستزداد قائمة الخدمات التي يتم عرضها بمرور الوقت كلما تم تمكين المزيد من خدمات Azure لنقطة تقديم الخدمة.

az network vnet list-endpoint-services \
  --location eastus \
  --out table

قم بإنشاء شبكة فرعية إضافية في الشبكة الظاهرية باستخدام az network vnet subnet create. في هذا المثال، يتم إنشاء نقطة تقديم خدمة لـMicrosoft.Storage للشبكة الفرعية:

az network vnet subnet create \
  --vnet-name myVirtualNetwork \
  --resource-group myResourceGroup \
  --name Private \
  --address-prefix 10.0.1.0/24 \
  --service-endpoints Microsoft.Storage

تقييد وصول شبكة فرعية إلى الشبكة

إنشاء مجموعة أمان الشبكة باستخدام az network nsg create. في المثال التالي، يتم إنشاء مجموعة أمان شبكة باسم myNsgPrivate.

az network nsg create \
  --resource-group myResourceGroup \
  --name myNsgPrivate

قم بإقران مجموعة أمان الشبكة مع الشبكة الفرعية الخاصة باستخدام az network vnet subnet update. يقوم المثال التالي بإقران مجموعة أمان شبكة myNsgPrivate بالشبكة الفرعية الخاصة:

az network vnet subnet update \
  --vnet-name myVirtualNetwork \
  --name Private \
  --resource-group myResourceGroup \
  --network-security-group myNsgPrivate

أنشئ قواعد أمان باستخدام az network nsg rule create. تسمح القاعدة التالية بالوصول الصادر إلى عناوين IP العامة المعينة لخدمة Azure Storage:

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsgPrivate \
  --name Allow-Storage-All \
  --access Allow \
  --protocol "*" \
  --direction Outbound \
  --priority 100 \
  --source-address-prefix "VirtualNetwork" \
  --source-port-range "*" \
  --destination-address-prefix "Storage" \
  --destination-port-range "*"

تحتوي كل مجموعة أمان شبكة على العديد من قواعد الأمان الافتراضية. تمنع القاعدة التالية قاعدة أمان افتراضية تسمح بالوصول الصادر إلى كل عناوين IP العامة. يرفض الخيار destination-address-prefix "Internet" الوصول الصادر إلى كل عناوين IP العامة. تتجاوز القاعدة السابقة هذه القاعدة، نظراً لأولويتها العليا، والتي تسمح بالوصول إلى عناوين IP العامة لـ Azure Storage.

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsgPrivate \
  --name Deny-Internet-All \
  --access Deny \
  --protocol "*" \
  --direction Outbound \
  --priority 110 \
  --source-address-prefix "VirtualNetwork" \
  --source-port-range "*" \
  --destination-address-prefix "Internet" \
  --destination-port-range "*"

تسمح القاعدة التالية بنسبة استخدام الشبكة SSH الواردة إلى الشبكة الفرعية من أي مكان. تتجاوز القاعدة قاعدة أمان افتراضية تمنع جميع زيارات الشبكة الواردة من الإنترنت. يتم السماح لـSSH بالوصول إلى الشبكة الفرعية بحيث يمكن اختبار الاتصال في خطوة لاحقة.

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsgPrivate \
  --name Allow-SSH-All \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 120 \
  --source-address-prefix "*" \
  --source-port-range "*" \
  --destination-address-prefix "VirtualNetwork" \
  --destination-port-range "22"

تقييد وصول الشبكة إلى مورد

تختلف الخطوات الضرورية لتقييد الوصول إلى الشبكة إلى الموارد التي تم إنشاؤها من خلال خدمات Azure الممكنة لنقاط تقديم الخدمة عبر الخدمات. راجع الوثائق الخاصة بالخدمات الفردية للحصول على خطوات محددة لكل خدمة. يتضمن الجزء المتبقي من هذه المقالة خطوات لتقييد الوصول إلى الشبكة لحساب Azure Storage، كمثال.

إنشاء حساب تخزين

قم بإنشاء حساب Azure Sorage باستخدام az storage account create. استبدل <replace-with-your-unique-storage-account-name> باسم فريد عبر جميع مواقع Azure بعدد احرف يتراوح بين 3-24 حرفاً في الطول، باستخدام الأرقام والأحرف الصغيرة فقط.

storageAcctName="<replace-with-your-unique-storage-account-name>"

az storage account create \
  --name $storageAcctName \
  --resource-group myResourceGroup \
  --sku Standard_LRS \
  --kind StorageV2

بعد إنشاء حساب التخزين، استرد سلسلة الاتصال لحساب التخزين إلى متغير باستخدام az storage account show-connection-string. يتم استخدام سلسلة الاتصال لإنشاء مشاركة ملف في خطوة لاحقة.

saConnectionString=$(az storage account show-connection-string \
  --name $storageAcctName \
  --resource-group myResourceGroup \
  --query 'connectionString' \
  --out tsv)

اعرض محتويات المتغير ولاحظ قيمة AccountKey التي تم إرجاعها في النتيجة؛ لأنه يتم استخدامها في خطوة لاحقة.

echo $saConnectionString

إنشاء مشاركة ملف في حساب التخزين

قم بإنشاء مشاركة ملف في حساب التخزين باستخدام az storage share create. في خطوة لاحقة، يتم إدخال مشاركة الملفات هذه لتأكيد وصول الشبكة إليها.

az storage share create \
  --name my-file-share \
  --quota 2048 \
  --connection-string $saConnectionString > /dev/null

رفض كل عمليات وصول الشبكة إلى حساب تخزين

بشكل افتراضي، تقبل حسابات التخزين اتصالات الشبكة من العملاء في أي شبكة. لتقييد الوصول إلى الشبكات المحددة، قم بتغيير الإجراء الافتراضي إلى Deny باستخدام az storage account update. بمجرد رفض وصول الشبكة، لن يمكن الوصول إلى حساب التخزين من أي شبكة.

az storage account update \
  --name $storageAcctName \
  --resource-group myResourceGroup \
  --default-action Deny

تمكين وصول الشبكة من شبكة فرعية

قم بالسماح بوصول الشبكة إلى حساب التخزين من الشبكة الفرعية الخاصة باستخدام az storage account network-rule add.

az storage account network-rule add \
  --resource-group myResourceGroup \
  --account-name $storageAcctName \
  --vnet-name myVirtualNetwork \
  --subnet Private

أنشئ الأجهزة الظاهرية

لاختبار الوصول إلى شبكة اتصال إلى حساب تخزين، بادر بتوزيع جهاز ظاهري إلى كل شبكة فرعية.

أنشئ الجهاز الظاهري الأول

قم بإنشاء VM في الشبكة الفرعية Public باستخدام الأمر az vm create. وإذا لم تكن مفاتيح SSH موجودة بالفعل في موقع المفتاح الافتراضي، ينشئها الأمر. لاستخدام مجموعة محددة من المفاتيح، استخدم الخيار --ssh-key-value.

az vm create \
  --resource-group myResourceGroup \
  --name myVmPublic \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet Public \
  --generate-ssh-keys

ويستغرق إنشاء جهاز ظاهري بضع دقائق. بعد إنشاء الجهاز الظاهري، يعرض Azure CLI معلومات مشابهة للمثال التالي:

{
  "fqdns": "",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVmPublic",
  "location": "eastus",
  "macAddress": "00-0D-3A-23-9A-49",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "13.90.242.231",
  "resourceGroup": "myResourceGroup"
}

لاحظ publicIpAddress في الناتج الذي تم إرجاعه. يُستخدم هذا العنوان للوصول إلى الجهاز الظاهري من الإنترنت في خطوة لاحقة.

إنشاء الجهاز الظاهري الثاني

az vm create \
  --resource-group myResourceGroup \
  --name myVmPrivate \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet Private \
  --generate-ssh-keys

ويستغرق إنشاء جهاز ظاهري بضع دقائق. بعد الإنشاء، لاحظ publicIpAddress في النتيجة التي تم إرجاعها. يُستخدم هذا العنوان للوصول إلى الجهاز الظاهري من الإنترنت في خطوة لاحقة.

تأكيد حق الوصول إلى حساب التخزين

SSH في جهاز myVmPrivate الظاهري. استبدل <publicIpAddress> بعنوان IP العام لجهازك الظاهري myVmPrivate.

ssh <publicIpAddress>

إنشاء مجلد لنقطة تركيب:

sudo mkdir /mnt/MyAzureFileShare

قم بإدخال مشاركة ملف Azure في الدليل الذي أنشأته. قبل تشغيل الأمر التالي، استبدل <storage-account-name> باسم الحساب واستبدل <storage-account-key> بالمفتاح الذي استرددته في إنشاء حساب تخزين.

sudo mount --types cifs //<storage-account-name>.file.core.windows.net/my-file-share /mnt/MyAzureFileShare --options vers=3.0,username=<storage-account-name>,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino

تتلقى المطالبة user@myVmPrivate:~$. تم إدخال مشاركة ملف Azure بنجاح إلى /mnt/MyAzureFileShare.

تأكد من أن الجهاز الظاهري ليس لديه اتصال صادر بأي عناوين IP عامة أخرى:

ping bing.com -c 4

لا تتلقى أي ردود لأن مجموعة أمان الشبكة المقترنة بالشبكة الفرعية الخاصة لا تسمح بالوصول الصادر إلى عناوين IP العامة بخلاف العناوين المعينة لخدمة Azure Storage.

إنهاء جلسة SSH إلى جهاز myVmPrivate الظاهري.

تأكد من رفض الوصول إلى حساب التخزين

استخدم الأمر التالي لإنشاء جلسة SSH باستخدام الجهاز الظاهري myVmPublic. استبدل <publicIpAddress> بعنوان IP العام لجهازك الظاهري myVmPublic:

ssh <publicIpAddress>

إنشاء دليل لنقطة تركيب:

sudo mkdir /mnt/MyAzureFileShare

حاول إدخال مشاركة ملف Azure في الدليل الذي أنشأته. تفترض هذه المقالة أنك وزعت أحدث إصدار من Ubuntu. إذا كنت تستخدم إصدارات سابقة من Ubuntu، فراجع الإدخال على Linux للحصول على إرشادات إضافية عن إدخال مشاركات الملفات. قبل تشغيل الأمر التالي، استبدل <storage-account-name> باسم الحساب واستبدل <storage-account-key> بالمفتاح الذي استرددته في إنشاء حساب تخزين:

sudo mount --types cifs //storage-account-name>.file.core.windows.net/my-file-share /mnt/MyAzureFileShare --options vers=3.0,username=<storage-account-name>,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino

يتم رفض الوصول، وتتلقى خطأ mount error(13): Permission denied، لأنه يتم توزيع جهاز myVmPublic الظاهري داخل الشبكة الفرعية العامة. لا تحتوي الشبكة الفرعية العامة على نقطة تقديم خدمة مُمَكَّنة لـ Azure Storage، ويسمح حساب التخزين فقط بوصول الشبكة من الشبكة الفرعية الخاصة، وليس الشبكة الفرعية العامة.

قم بإنهاء جلسة SSH إلى جهاز myVmPublic الظاهري.

من جهاز الكمبيوتر الخاص بك، حاول أن تعرض المشاركات في حساب التخزين الخاص بك باستخدام az storage share list. استبدل <account-name> و<account-key> باسم حساب التخزين ومفتاحه من إنشاء حساب تخزين:

az storage share list \
  --account-name <account-name> \
  --account-key <account-key>

تم رفض الوصول وتتلقى الخطأ هذا الطلب غير مصرح به لتنفيذ هذه العملية، لأن جهاز الكمبيوتر الخاص بك ليس في الشبكة الفرعية الخاصة للشبكة الظاهرية MyVirtualNetwork.

تنظيف الموارد

عندما لم تعد هناك حاجة، استخدم حذف المجموعة من الألف إلى الياء لإزالة مجموعة الموارد وجميع الموارد التي تحتوي عليها.

az group delete --name myResourceGroup --yes

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

في هذه المقالة، قمت بتمكين نقطة تقديم خدمة لشبكة فرعية خاصة بشبكة ظاهرية. لقد تعلمت أنه يمكن تمكين نقاط تقديم الخدمة للموارد التي تم نشرها باستخدام خدمات Azure المتعددة. لقد قمت بإنشاء حساب Azure Storage وتقييد وصول الشبكة إلى حساب التخزين للموارد الموجودة ضمن شبكة فرعية لشبكة ظاهرية فقط. لمعرفة المزيد حول نقاط نهاية الخدمة، راجع Service endpoints overview وManage subnets.

إذا كانت لديك شبكات ظاهرية متعددة في حسابك، فقد ترغب في توصيل شبكتين ظاهريتين معاً حتى تتمكن الموارد الموجودة في كل شبكة ظاهرية من الاتصال مع بعضها. لمعرفة كيفية القيام بذلك، راجع توصيل الشبكات الظاهرية.