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

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

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

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

Azure Cloud Shell

Azure يستضيف Azure Cloud Shell، بيئة تفاعلية يمكن استخدامها من خلال المستعرض. يمكنك استخدام Bash أو PowerShell مع Cloud Shell للعمل مع خدمات Azure. يمكنك استخدام أوامر Cloud Shell المثبتة مسبقًا لتشغيل التعليمات البرمجية في هذه المقالة دون الحاجة إلى تثبيت أي شيء على البيئة المحلية.

لبدء Azure Cloud Shell:

خيار مثال/ رابط
انقر فوق ⁧⁩جربه⁧⁩ في الزاوية العلوية اليسرى من التعليمة البرمجية أو كتلة الأمر. تحديد ⁧⁩جربه⁧⁩ لا يقوم بنسخ التعليمة البرمجية أو الأمر تلقائيًا إلى Cloud Shell. Screenshot that shows an example of Try It for Azure Cloud Shell.
انتقل إلى ⁧⁩⁧ https://shell.azure.com⁩⁧⁩، أو حدد زر ⁩تشغيل Cloud Shell لفتح Cloud Shell في المتصفح لديك. Button to launch Azure Cloud Shell.
حدد زر Cloud Shell على شريط القوائم في أعلى اليمين في مدخل Microsoft Azure. Screenshot that shows the Cloud Shell button in the Azure portal

لاستخدام Azure Cloud Shell:

  1. ابدأ تشغيل Cloud Shell.

  2. حدد الزر نسخ على كتلة التعليمات البرمجية (أو كتلة الأوامر) لنسخ التعليمات البرمجية أو الأمر.

  3. ألصق التعليمة البرمجية أو الأمر في جلسة Cloud Shell بتحديد Ctrl+Shift+Vعلى Windows وLunix، أو بتحديد Cmd+Shift+Vعلى macOS.

  4. حدد Enter لتشغيل التعليمات البرمجية أو الأمر.

إذا اخترت تثبيت PowerShell واستخدامه محليًا، فهذه المقالة تتطلب إصدار الوحدة النمطية 1.0.0 من Azure PowerShell، أو إصدارًا أحدث. بادر بتشغيل Get-Module -ListAvailable Az للعثور على الإصدار المثبت. إذا كنت بحاجة إلى الترقية، فراجع تثبيت الوحدة النمطية Azure PowerShell. عند تشغيل PowerShell محلياً، يلزم تشغيل Connect-AzAccount لإنشاء الاتصال بـ Azure.

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

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

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

أنشئ شبكة افتراضية باستخدام New-AzVirtualNetwork. في المثال التالي، يتم إنشاء شبكة ظاهرية باسم myVirtualNetwork باستخدام بادئة العنوان 10.0.0.0/16.

$virtualNetwork = New-AzVirtualNetwork `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name myVirtualNetwork `
  -AddressPrefix 10.0.0.0/16

إنشاء تكوين شبكة فرعية باستخدام New-AzVirtualNetworkSubnetConfig. ينشئ المثال التالي تكوين شبكة فرعية باسم Public:

$subnetConfigPublic = Add-AzVirtualNetworkSubnetConfig `
  -Name Public `
  -AddressPrefix 10.0.0.0/24 `
  -VirtualNetwork $virtualNetwork

قم بإنشاء الشبكة الفرعية في الشبكة الظاهرية عن طريق كتابة تكوين الشبكة الفرعية في الشبكة الظاهرية باستخدام Set-AzVirtualNetwork:

$virtualNetwork | Set-AzVirtualNetwork

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

يمكنك تمكين نقاط تقديم الخدمة فقط للخدمات التي تدعم نقاط تقديم الخدمة. قم بعرض الخدمات المُمكَّن لها نقطة تقديم الخدمة والمتوفرة في موقع Azure باستخدام Get-AzVirtualNetworkAvailableEndpointService. يعرض المثال التالي قائمة بالخدمات المُمكَّن لها نقطة تقديم الخدمة المتوفرة في منطقة إيستوس. ستزداد قائمة الخدمات التي يتم عرضها بمرور الوقت كلما تم تمكين المزيد من خدمات Azure لنقطة تقديم الخدمة.

Get-AzVirtualNetworkAvailableEndpointService -Location eastus | Select Name

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

$subnetConfigPrivate = Add-AzVirtualNetworkSubnetConfig `
  -Name Private `
  -AddressPrefix 10.0.1.0/24 `
  -VirtualNetwork $virtualNetwork `
  -ServiceEndpoint Microsoft.Storage

$virtualNetwork | Set-AzVirtualNetwork

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

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

$rule1 = New-AzNetworkSecurityRuleConfig `
  -Name Allow-Storage-All `
  -Access Allow `
  -DestinationAddressPrefix Storage `
  -DestinationPortRange * `
  -Direction Outbound `
  -Priority 100 `
  -Protocol * `
  -SourceAddressPrefix VirtualNetwork `
  -SourcePortRange *

تمنع القاعدة التالية الوصول إلى جميع عناوين IP العامة. تتجاوز القاعدة السابقة هذه القاعدة، نظراً لأولويتها العليا، والتي تسمح بالوصول إلى عناوين IP العامة لـ Azure Storage.

$rule2 = New-AzNetworkSecurityRuleConfig `
  -Name Deny-Internet-All `
  -Access Deny `
  -DestinationAddressPrefix Internet `
  -DestinationPortRange * `
  -Direction Outbound `
  -Priority 110 `
  -Protocol * `
  -SourceAddressPrefix VirtualNetwork `
  -SourcePortRange *

تسمح القاعدة التالية بحركة مرور بروتوكول سطح المكتب البعيد (RDP) الواردة إلى الشبكة الفرعية من أي مكان. كما يُسمح باتصالات سطح المكتب البعيد بالشبكة الفرعية، بحيث يمكنك تأكيد وصول الشبكة إلى أي مورد في أي خطوة لاحقة.

$rule3 = New-AzNetworkSecurityRuleConfig `
  -Name Allow-RDP-All `
  -Access Allow `
  -DestinationAddressPrefix VirtualNetwork `
  -DestinationPortRange 3389 `
  -Direction Inbound `
  -Priority 120 `
  -Protocol * `
  -SourceAddressPrefix * `
  -SourcePortRange *

إنشاء مجموعة أمان شبكة باستخدام New-AzNetworkSecurityGroup. في المثال التالي، يتم إنشاء مجموعة أمان شبكة باسم myNsgPrivate.

$nsg = New-AzNetworkSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name myNsgPrivate `
  -SecurityRules $rule1,$rule2,$rule3

قم بإقران مجموعة أمان الشبكة بالشبكة الفرعية الخاصة باستخدام Set-AzVirtualNetworkSubnetConfig ثم اكتب تكوين الشبكة الفرعية في الشبكة الظاهرية. يقوم المثال التالي بإقران مجموعة أمان شبكة myNsgPrivate بالشبكة الفرعية الخاصة:

Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $VirtualNetwork `
  -Name Private `
  -AddressPrefix 10.0.1.0/24 `
  -ServiceEndpoint Microsoft.Storage `
  -NetworkSecurityGroup $nsg

$virtualNetwork | Set-AzVirtualNetwork

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

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

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

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

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

New-AzStorageAccount `
  -Location EastUS `
  -Name $storageAcctName `
  -ResourceGroupName myResourceGroup `
  -SkuName Standard_LRS `
  -Kind StorageV2

بعد إنشاء حساب التخزين، قم باسترداد مفتاح حساب التخزين إلى متغير باستخدام Get-AzStorageAccountKey:

$storageAcctKey = (Get-AzStorageAccountKey `
  -ResourceGroupName myResourceGroup `
  -AccountName $storageAcctName).Value[0]

يتم استخدام المفتاح لإنشاء مشاركة ملف في خطوة لاحقة. أدخل $storageAcctKey واحفظ القيمة، لأنك ستحتاج أيضاً إلى إدخالها يدوياً في خطوة لاحقة عند تعيين مشاركة الملف على محرك أقراص في جهاز ظاهري.

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

قم بإنشاء سياق لحساب التخزين والمفتاح الخاص بك باستخدام New-AzStorageContext. يُلخص السياق اسم حساب التخزين ومفتاح الحساب:

$storageContext = New-AzStorageContext $storageAcctName $storageAcctKey

إنشاء مشاركة ملف باستخدام New-AzStorageShare:

$share = New-AzStorageShare my-file-share -Context $storageContext

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

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

Update-AzStorageAccountNetworkRuleSet  `
  -ResourceGroupName "myresourcegroup" `
  -Name $storageAcctName `
  -DefaultAction Deny

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

قم باسترداد الشبكة الظاهرية التي تم إنشاؤها باستخدام Get-AzVirtualNetwork، ثم استرداد كائن الشبكة الفرعية الخاصة إلى متغير باستخدام Get-AzVirtualNetworkSubnetConfig:

$privateSubnet = Get-AzVirtualNetwork `
  -ResourceGroupName "myResourceGroup" `
  -Name "myVirtualNetwork" `
  | Get-AzVirtualNetworkSubnetConfig `
  -Name "Private"

قم بالسماح بوصول الشبكة إلى حساب التخزين من الشبكة الفرعية Private باستخدام Add-AzStorageAccountNetworkRule.

Add-AzStorageAccountNetworkRule `
  -ResourceGroupName "myresourcegroup" `
  -Name $storageAcctName `
  -VirtualNetworkResourceId $privateSubnet.Id

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

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

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

قم بإنشاء جهاز ظاهري في الشبكة الفرعية العامة باستخدام New-AzVM. عند استخدام الأمر التالي، تتم مطالبتك ببيانات الاعتماد. تكوين القيم المُدخَلة كاسم المستخدم وكلمة المرور للجهاز الظاهري. ينشئ الخيار -AsJob الجهاز الظاهري في الخلفية، حتى يمكنك المتابعة إلى الخطوة التالية.

New-AzVm `
    -ResourceGroupName "myResourceGroup" `
    -Location "East US" `
    -VirtualNetworkName "myVirtualNetwork" `
    -SubnetName "Public" `
    -Name "myVmPublic" `
    -AsJob

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

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command                  
--     ----            -------------   -----         -----------     --------             -------                  
1      Long Running... AzureLongRun... Running       True            localhost            New-AzVM     

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

قم بإنشاء جهاز ظاهري في الشبكة الفرعية Private:

New-AzVm `
    -ResourceGroupName "myResourceGroup" `
    -Location "East US" `
    -VirtualNetworkName "myVirtualNetwork" `
    -SubnetName "Private" `
    -Name "myVmPrivate"

يستغرق Azure بضع دقائق لإنشاء أي جهاز ظاهري. لا تنتقل إلى الخطوة التالية حتى ينتهي Azure من إنشاء الجهاز الظاهري ويعرض الإخراج في PowerShell.

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

استخدم Get-AzPublicIpAddress لعرض عنوان IP العام الخاص بجهاز ظاهري. يعرض المثال التالي عنوان IP العام لجهاز myVmPrivate الظاهري:

Get-AzPublicIpAddress `
  -Name myVmPrivate `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

استبدل <publicIpAddress> في الأمر التالي بعنوان IP العام الذي تم إرجاعه من الأمر السابق، ثم أدخل الأمر التالي:

mstsc /v:<publicIpAddress>

يتم إنشاء ملف بروتوكول سطح المكتب البعيد (.rdp) وتنزيله إلى الكمبيوتر الخاص بك. افتح ملف rdp الذي تم تنزيله. إذا تمت المطالبة، فحدد Connect. أدخل اسم المستخدم وكلمة المرور التي حددتها عند إنشاء الجهاز الظاهري. قد تحتاج إلى تحديد More choices، ثم Use a different account، لتحديد بيانات الاعتماد التي أدخلتها عند إنشاء الجهاز الظاهري. حدد موافق. قد تتلقى تحذير مصادقة أثناء عملية تسجيل الدخول. إذا تلقيت تحذيراً، فحدد Yes أو Continueلمتابعة الاتصال.

في جهاز myVmPrivate الظاهري، قم بتعيين مشاركة ملف Azure إلى محرك الأقراص Z باستخدام PowerShell. قبل استخدام الأوامر التالية، استبدل <storage-account-key> و<storage-account-name> بالقيم التي قمت بتوفيرها أو استردادها في إنشاء حساب تخزين.

$acctKey = ConvertTo-SecureString -String "<storage-account-key>" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList "Azure\<storage-account-name>", $acctKey
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\<storage-account-name>.file.core.windows.net\my-file-share" -Credential $credential

يرجع PowerShell الإخراج مشابهًا إلى إخراج المثال التالي:

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
Z                                      FileSystem    \\vnt.file.core.windows.net\my-f...

تم تعيين مشاركة ملف Azure بنجاح إلى محرك الأقراص Z.

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

ping bing.com

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

إغلاق جلسة عمل سطح المكتب البعيد إلى الجهاز الظاهري myVmPrivate.

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

قم بالحصول على عنوان IP العام للجهاز الظاهري myVmPublic:

Get-AzPublicIpAddress `
  -Name myVmPublic `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

استبدل <publicIpAddress> في الأمر التالي بعنوان IP العام الذي تم إرجاعه من الأمر السابق، ثم أدخل الأمر التالي:

mstsc /v:<publicIpAddress>

في الجهاز الظاهري myVmPublic، حاول تعيين مشاركة ملف Azure إلى محرك الأقراص Z. وقبل استخدام الأوامر التالية، استبدل <storage-account-key> و<storage-account-name> بالقيم التي قمت بتوفيرها أو استردادها في إنشاء حساب تخزين.

$acctKey = ConvertTo-SecureString -String "<storage-account-key>" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList "Azure\<storage-account-name>", $acctKey
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\<storage-account-name>.file.core.windows.net\my-file-share" -Credential $credential

يتم رفض الوصول إلى المشاركة، وتتلقى خطأ New-PSDrive : Access is denied. تم رفض الوصول بسبب توزيع الجهاز الظاهري myVmPublic في الشبكة الفرعية Public. لا تحتوي الشبكة الفرعية العامة على نقطة تقديم خدمة مُمَكَّنة لـ Azure Storage، ويسمح حساب التخزين فقط بوصول الشبكة من الشبكة الفرعية الخاصة، وليس الشبكة الفرعية العامة.

أغلق جلسة عمل سطح المكتب البعيد إلى الجهاز الظاهري myVmPublic.

من جهاز الكمبيوتر الخاص بك، حاول عرض مشاركات الملفات في حساب التخزين باستخدام الأمر التالي:

Get-AzStorageFile `
  -ShareName my-file-share `
  -Context $storageContext

يتم رفض الوصول، وتتلقى Get-AzStorageFile : عرض الخادم البعيد خطأ: (403) محظور. رمز حالة HTTP: 403 - رسالة خطأ HTTP: هذا الطلب غير مصرح به لتنفيذ هذه العملية خطأ لأن جهاز الكمبيوتر الخاص بك ليس ضمن الشبكة الفرعية الخاصة للشبكة الظاهرية MyVirtualNetwork.

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

عند عدم الحاجة إليها، يمكنك استخدام Remove-AzResourceGroup لإزالة مجموعة الموارد وجميع الموارد ذات الصلة:

Remove-AzResourceGroup -Name myResourceGroup -Force

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

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

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