Поделиться через


Ограничение сетевого доступа к ресурсам PaaS посредством конечных точек служб для виртуальной сети с помощью PowerShell

Конечные точки служб для виртуальной сети позволяют ограничить сетевой доступ к некоторым ресурсам службы Azure определенной подсетью виртуальной сети. Можно также запретить доступ к ресурсам через Интернет. Конечные точки службы предоставляют прямое подключение из виртуальной сети к поддерживаемым службам Azure. Это позволяет использовать закрытый диапазон адресов виртуальной сети для доступа к службам Azure. Трафик, поступающий к ресурсам Azure через конечные точки службы, всегда остается в магистральной сети Microsoft Azure. Вы узнаете, как выполнять следующие задачи:

  • Создание виртуальной сети с одной подсетью.
  • Добавление подсети и включение конечной точки службы.
  • Создание ресурса Azure и разрешение сетевого доступа к нему только из подсети.
  • Развертывание виртуальной машины в каждой подсети.
  • Подтверждение прав доступа к ресурсу из подсети.
  • Подтверждение запрета доступа к ресурсу из подсети и Интернета.

Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

Azure Cloud Shell

В Azure есть Azure Cloud Shell, интерактивная оболочка среды, с которой можно работать в браузере. Для работы со службами Azure можно использовать Bash или PowerShell с Cloud Shell. Для запуска кода из этой статьи можно использовать предварительно установленные команды Cloud Shell. Ничего дополнительного в локальной среде устанавливать не нужно.

Начало работы с Azure Cloud Shell

Вариант Пример и ссылка
Нажмите кнопку Попробовать в правом верхнем углу блока кода или команд. При нажатии кнопки Попробовать код или команда не копируется в Cloud Shell автоматически. Снимок экрана: пример открытия Azure Cloud Shell с помощью кнопки
Чтобы открыть Cloud Shell в браузере, перейдите по адресу https://shell.azure.com или нажмите кнопку Запуск Cloud Shell. Кнопка запуска Azure Cloud Shell.
Нажмите кнопку Cloud Shell в строке меню в правом верхнем углу окна портала Azure. Снимок экрана: кнопка

Чтобы использовать Azure Cloud Shell, выполните следующие действия:

  1. Запустите Cloud Shell.

  2. Нажмите кнопку Копировать в блоке кода (или блоке команд), чтобы скопировать код или команду.

  3. Вставьте код или команду в окно сеанса Cloud Shell, нажав клавиши CTRL+SHIFT+V в Windows и Linux или CMD+SHIFT+V в macOS.

  4. Нажмите клавишу ВВОД, чтобы запустить код или команду.

Чтобы установить и использовать PowerShell локально для работы с этой статьей, вам понадобится модуль Azure PowerShell 1.0.0 или более поздней версии. Выполните командлет 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. В следующем примере возвращается список служб с поддержкой конечных точек службы, доступных в регионе eastus. Список возвращаемых служб со временем будет увеличиваться, так как поддержка конечных точек службы будет реализовываться во все большем числе служб 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.

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

Следующее правило запрещает доступ ко всем общедоступным IP-адресам. Предыдущее правило переопределяет это правило ввиду более высокого приоритета. Оно предоставляет доступ к общедоступным IP-адресам службы хранилища Azure.

$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

Привяжите группу безопасности сети к подсети Private с помощью командлета Set-AzVirtualNetworkSubnetConfig, а затем запишите конфигурацию подсети в виртуальную сеть. В следующем примере подсеть Private привязывается к группе безопасности сети myNsgPrivate.

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

$virtualNetwork | Set-AzVirtualNetwork

Ограничение сетевого доступа к ресурсу

Действия, необходимые для ограничения сетевого доступа к ресурсам, созданным с помощью служб Azure, использующих конечные точки службы, отличаются в зависимости службы. Ознакомьтесь с документацией по отдельным службам, чтобы получить точные инструкции для них. В оставшейся части этой статьи в качестве примера приведены инструкции по ограничению сетевого доступа для учетной записи хранения Azure.

Создание учетной записи хранилища

Чтобы создать учетную запись хранения 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

Запрет любого сетевого доступа к учетной записи хранения

По умолчанию учетные записи хранения принимают сетевые подключения клиентов в любой сети. Чтобы разрешить доступ только из определенных сетей, укажите действие по умолчанию Запретить, выполнив командлет Update-AzStorageAccountNetworkRuleSet. После запрещения сетевого доступа учетная запись хранения будет недоступна из любой сети.

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

Включение сетевого доступа из подсети

Извлеките созданную виртуальную сеть, выполнив командлет Get-AzVirtualNetwork, а затем передайте объект подсети Private в переменную с помощью командлета 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

Создание виртуальных машин

Чтобы проверить сетевой доступ к учетной записи хранения, разверните виртуальную машину в каждой подсети.

Создание первой виртуальной машины

Создайте виртуальную машину в подсети Public с помощью командлета 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.

Подтверждение прав доступа к учетной записи хранения

Чтобы получить общедоступный IP-адрес виртуальной машины, выполните командлет Get-AzPublicIpAddress. Приведенный ниже пример возвращает общедоступный IP-адрес виртуальной машины myVmPrivate:

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

Замените <publicIpAddress> в следующей команде общедоступным IP-адресом, возвращенным предыдущей командой, а затем введите следующую команду:

mstsc /v:<publicIpAddress>

Будет создан и скачан на ваш компьютер файл протокола удаленного рабочего стола (RDP-файл). Откройте этот RDP-файл. При появлении запроса выберите Подключиться. Введите имя пользователя и пароль, указанные при создании виртуальной машины. Возможно, потребуется выбрать More choices (Дополнительные варианты), а затем Use a different account (Использовать другую учетную запись), чтобы указать учетные данные, введенные при создании виртуальной машины. Нажмите ОК. При входе в систему может появиться предупреждение о сертификате. Если вы получили предупреждение, выберите Да или Продолжить.

На виртуальной машине myVmPrivate с помощью PowerShell подключите файловый ресурс 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

PowerShell вернет выходные данные, как в следующем примере.

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

Файловый ресурс Azure успешно подключен как диск Z.

Убедитесь, что виртуальная машина запрещает любые исходящие подключения с любых других общедоступных IP-адресов.

ping bing.com

Ответы не отобразятся, так как группа безопасности сети, связанная с подсетью Private, не разрешает исходящий доступ к общедоступным IP-адресам, отличным от адреса, назначенного службе хранилища Azure.

Закройте сеанс удаленного рабочего стола с виртуальной машиной 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. Для подсети Public не включена конечная точка службы для службы хранилища Azure, и учетная запись хранения предназначена только для сетевого доступа из подсети Private, а не Public.

Закройте сеанс удаленного рабочего стола с виртуальной машиной myVmPublic.

Используя свой компьютер, попытайтесь просмотреть файловые ресурсы в учетной записи хранения, выполнив следующую команду.

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

Доступ будет запрещен и вы получите сообщение Get-AzStorageFile : The remote server returned an error: (403) Forbidden. HTTP Status Code: 403 - HTTP Error Message: This request is not authorized to perform this operation (Get-AzureStorageFile: удаленный сервер вернул ошибку: (403) запрещено. Код состояния HTTP: 403. Сообщение об ошибке HTTP: этот запрос не авторизован для выполнения этой операции), поскольку этот компьютер не входит в подсеть Private виртуальной сети MyVirtualNetwork.

Очистка ресурсов

Вы можете удалить ненужную группу ресурсов и все содержащиеся в ней ресурсы с помощью командлета Remove-AzResourceGroup:

Remove-AzResourceGroup -Name myResourceGroup -Force

Следующие шаги

В рамках этой статьи вы включили конечную точку службы для подсети виртуальной сети. Вы узнали, что конечные точки службы можно включать для ресурсов, развернутых несколькими службами Azure. Вы создали учетную запись хранения Azure и ограничили сетевой доступ к учетной записи хранения ресурсами одной подсети в виртуальной сети. См. дополнительные сведения о конечных точках службы и управляемых подсетях.

Если в вашей учетной записи имеется несколько виртуальных сетей, можно соединить две виртуальные сети, чтобы ресурсы в каждой из них могли взаимодействовать друг с другом. Дополнительные сведения см. в статье о подключении к виртуальным сетям.