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

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

  • Создание виртуальной сети и подсети.
  • Включение конечной точки службы для службы хранилища 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 Private \
  --subnet-prefix 10.0.0.0/24

Включение конечной точки службы

В этом примере в подсети Private создается конечная точка службы для службы Microsoft.Storage.

az network vnet subnet create \
  --vnet-name myVirtualNetwork \
  --resource-group myResourceGroup \
  --name Private \
  --address-prefix 10.0.0.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.

storageAcctName1="allowedstorageacc"

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

storageAcctName2="notallowedstorageacc"

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

После создания учетных записей хранения извлеките их строку подключения в переменную, выполнив команду az storage account show-connection-string. Строка подключения используется для создания файлового ресурса на более позднем этапе.

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

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

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

echo $saConnectionString1

echo $saConnectionString2

Создание файлового ресурса в учетной записи хранения

Создайте файловый ресурс в учетной записи хранения командой az storage share create. Позже этот файловый ресурс будет подключен для подтверждения сетевого доступа к нему.

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

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

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

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

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

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

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

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

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

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

Применение политики для разрешения доступа к допустимой учетной записи хранения

Политики конечной точки службы Azure доступны только в службе хранилища Azure. Поэтому в этом примере установки мы включим конечную точку службы для Microsoft.Storage в этой подсети.

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

Создание политики конечной точки службы

az network service-endpoint policy create \
  --resource-group myResourceGroup \
  --name mysepolicy \
  --location eastus

Сохраните URI ресурса для разрешенной учетной записи хранения в переменной. Перед выполнением приведенной ниже команды замените <your-subscription-id> фактическим значением идентификатора подписки.

$serviceResourceId="/subscriptions/<your-subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/allowedstorageacc"

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

az network service-endpoint policy-definition create \
  --resource-group myResourceGroup \
  --policy-name mysepolicy \
  --name mypolicydefinition \
  --service "Microsoft.Storage" \
  --service-resources $serviceResourceId

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

az network vnet subnet update \
  --vnet-name myVirtualNetwork \
  --resource-group myResourceGroup \
  --name Private \
  --service-endpoints Microsoft.Storage \
  --service-endpoint-policy mysepolicy

Проверка ограничения доступа для учетных записей хранения Azure

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

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

Создайте виртуальную машину в подсети Private с помощью команды az vm create. Также команда создает ключи SSH, если они не существуют в расположении ключей по умолчанию. Чтобы использовать определенный набор ключей, используйте параметр --ssh-key-value.

az vm create \
  --resource-group myResourceGroup \
  --name myVmPrivate \
  --image <SKU linux image> \
  --vnet-name myVirtualNetwork \
  --subnet Private \
  --generate-ssh-keys

Создание виртуальной машины занимает несколько минут. После создания запишите значение publicIpAddress из полученных выходных данных. На следующем шаге этот адрес потребуется для доступа к виртуальной машине из Интернета.

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

Подключитесь к виртуальной машине myVmPrivate по протоколу SSH. Замените <publicIpAddress> общедоступным IP-адресом виртуальной машины myVmPrivate.

ssh <publicIpAddress>

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

sudo mkdir /mnt/MyAzureFileShare1

Подключите файловый ресурс Azure к созданному каталогу. Перед выполнением приведенной ниже команды замените <storage-account-key> значением AccountKey из $saConnectionString1.

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

Отобразится строка запроса user@myVmPrivate:~$. Файловый ресурс Azure успешно подключен к папке /mnt/MyAzureFileShare.

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

В той же виртуальной машине myVmPrivate создайте каталог для точки подключения:

sudo mkdir /mnt/MyAzureFileShare2

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

Перед выполнением приведенной ниже команды замените <storage-account-key> значением AccountKey из $saConnectionString2.

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

Доступ будет запрещен, и отобразится сообщение об ошибке mount error(13): Permission denied, так как эта учетная запись хранения не входит в список разрешений политики конечной точки службы, применяемой к подсети.

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

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

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

az group delete --name myResourceGroup --yes

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

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