Бөлісу құралы:


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

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

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

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

Необходимые компоненты

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

  • Для работы с этой статьей требуется Azure CLI версии 2.0.28 или более поздней. Если вы используете Azure Cloud Shell, последняя версия уже установлена.

Создание виртуальной сети

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

Чтобы привязать подсеть Private к этой группе безопасности сети, выполните команду az network vnet subnet update. В следующем примере подсеть Private привязывается к группе безопасности сети 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.

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.

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.

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

Создайте учетную запись хранения Azure с помощью команды 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

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

По умолчанию учетные записи хранения принимают сетевые подключения клиентов в любой сети. Чтобы ограничить доступ выбранными сетями, измените действие по умолчанию на Запретить, выполнив команду az storage account update. После запрещения сетевого доступа учетная запись хранения будет недоступна из любой сети.

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

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

Разрешите сетевой доступ к учетной записи хранения из подсети Private, выполнив команду az storage account network-rule add.

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

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

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

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

Создайте виртуальную машину в подсети 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 из полученных выходных данных. На следующем шаге этот адрес потребуется для доступа к виртуальной машине из Интернета.

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

Подключитесь к виртуальной машине myVmPrivate по протоколу SSH. Замените <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

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

Закройте сеанс SSH с виртуальной машиной myVmPrivate.

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

Создайте сеанс SSH с виртуальной машиной myVmPublic при помощи приведенной ниже команды. Замените <publicIpAddress> общедоступным IP-адресом виртуальной машины myVmPublic.

ssh <publicIpAddress>

Создайте каталог для точки подключения.

sudo mkdir /mnt/MyAzureFileShare

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

Закройте сеанс SSH с виртуальной машиной myVmPublic.

Используя свой компьютер, попытайтесь просмотреть файловые ресурсы в учетной записи хранения, выполнив команду az storage share list. Замените <account-name> и <account-key> именем и ключом учетной записи хранения, полученными при создании учетной записи хранения.

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

Будет отказано в доступе, и появится сообщение об ошибке This request is not authorized to perform this operation (Данный запрос не авторизован для выполнения этой операции), так как ваш компьютер не находится в подсети Private виртуальной сети MyVirtualNetwork.

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

Вы можете удалить ненужную группу ресурсов и все содержащиеся в ней ресурсы, выполнив команду az group delete.

az group delete --name myResourceGroup --yes

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

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

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