Настройка стандартной конечной точки службы с помощью Azure PowerShell

В этой статье вы проведете вас как настроить стандартную конечную точку сервиса с помощью Azure PowerShell. Вы создаёте публичный IP-адрес как сетевой идентификатор, связываете его с сервисными конечными точками в подсети, настраиваете периметр сетевой безопасности и проверяете связность.

Important

Стандартная сервисная конечная точка сейчас находится в публичном предварительном просмотре. Предварительная версия предоставляется без соглашения об уровне обслуживания и не рекомендуется для использования в рабочей среде. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Для получения дополнительной информации см. Дополнительные условия использования для предварительных версий Microsoft Azure.

Необходимые условия

  • Учетная запись Azure с активной подпиской. Если у вас нет учетной записи, создайте бесплатную учетную запись.

  • Роль участника сети или выше в подписке. В частности, вам нужно разрешение Microsoft.Network/publicIPAddresses/joinServiceEndpointNetworkIdentifier/action . Для получения дополнительной информации см. требования к ролевому управлению доступом для периметра сетевой безопасности.

  • Функция AllowServiceEndpointNetworkIdentifier должна быть зарегистрирована в вашей подписке. Используйте следующие команды для регистрации функции:

    $featureParams = @{
        FeatureName       = "AllowServiceEndpointNetworkIdentifier"
        ProviderNamespace = "Microsoft.Network"
    }
    Register-AzProviderFeature @featureParams
    

    Проверьте состояние регистрации:

    $featureParams = @{
        FeatureName       = "AllowServiceEndpointNetworkIdentifier"
        ProviderNamespace = "Microsoft.Network"
    }
    Get-AzProviderFeature @featureParams | Select-Object -Property RegistrationState
    

    Дождитесь, пока штат покажет «Зарегистрирован», затем обновите регистрацию провайдера ресурсов:

    Register-AzResourceProvider -ProviderNamespace "Microsoft.Network"
    
  • Локальная установка Azure PowerShell или Azure Cloud Shell. Дополнительные сведения см. в статье Установка Azure PowerShell.

Вход в Azure

Подключитесь к своей учетной записи Azure.

Connect-AzAccount

Создайте группу ресурсов

Создайте группу ресурсов с помощью New-AzResourceGroup.

$rgParams = @{
    Name     = 'test-rg'
    Location = 'EastUS2'
}
New-AzResourceGroup @rgParams

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

Создайте виртуальную сеть и подсеть с помощью New-AzVirtualNetwork и New-AzVirtualNetworkSubnetConfig.

$subnetParams = @{
    Name          = 'subnet-1'
    AddressPrefix = '10.0.0.0/24'
}
$subnet = New-AzVirtualNetworkSubnetConfig @subnetParams

$vnetParams = @{
    ResourceGroupName = 'test-rg'
    Location          = 'EastUS2'
    Name              = 'vnet-1'
    AddressPrefix     = '10.0.0.0/16'
    Subnet            = $subnet
}
New-AzVirtualNetwork @vnetParams

Создание шлюза NAT.

Создайте шлюз NAT и свяжите его с подсетью 1 для обеспечения исходящего интернет-соединения для виртуальной машины.

  1. Используйте New-AzPublicIpAddress для создания общедоступного IP-адреса для этого шлюза NAT.

    $natPipParams = @{
        ResourceGroupName = 'test-rg'
        Name              = 'public-ip-nat'
        Location          = 'EastUS2'
        AllocationMethod  = 'Static'
        Sku               = 'Standard'
    }
    $natPip = New-AzPublicIpAddress @natPipParams
    
  2. Создайте шлюз NAT с помощью New-AzNatGateway.

    $natParams = @{
        ResourceGroupName    = 'test-rg'
        Name                 = 'nat-gateway'
        Location             = 'EastUS2'
        IdleTimeoutInMinutes = 4
        Sku                  = 'Standard'
        PublicIpAddress      = $natPip
    }
    $natGateway = New-AzNatGateway @natParams
    
  3. Ассоциируйте шлюз NAT с подсетью 1 , обновив конфигурацию подсети.

    $vnet = Get-AzVirtualNetwork -ResourceGroupName 'test-rg' -Name 'vnet-1'
    
    $subnetUpdateParams = @{
        Name           = 'subnet-1'
        VirtualNetwork = $vnet
        AddressPrefix  = '10.0.0.0/24'
        NatGateway     = $natGateway
    }
    Set-AzVirtualNetworkSubnetConfig @subnetUpdateParams
    
    $vnet | Set-AzVirtualNetwork
    

Развертывание Бастиона Azure

Бастион Azure использует браузер для подключения к виртуальным машинам в виртуальной сети через безопасную оболочку (SSH) или протокол удаленного рабочего стола (RDP) с помощью частных IP-адресов. Виртуальные машины не нуждаются в общедоступных IP-адресах, клиентском программном обеспечении или специальной конфигурации. Дополнительные сведения о Бастионе Azure см. в статье Бастион Azure.

Замечание

Почасовая оплата начисляется с момента развертывания Bastion независимо от объема исходящего трафика. Дополнительные сведения см. в разделе Pricing и SKUs. Если вы развертываете Бастион в рамках руководства или теста, рекомендуется удалить этот ресурс после завершения работы с ним.

  1. Добавьте AzureBastionSubnet в виртуальную сеть.

    $vnet = Get-AzVirtualNetwork -ResourceGroupName 'test-rg' -Name 'vnet-1'
    
        $subnetParams = @{
        Name           = 'AzureBastionSubnet'
        VirtualNetwork = $vnet
        AddressPrefix  = '10.0.1.0/26'
    }
    Add-AzVirtualNetworkSubnetConfig @subnetParams
    
    $vnet | Set-AzVirtualNetwork
    
  2. Создайте публичный IP-адрес для хоста Bastion с помощью команды New-AzPublicIpAddress.

    $bastionPipParams = @{
        ResourceGroupName = 'test-rg'
        Name              = 'public-ip-bastion'
        Location          = 'EastUS2'
        AllocationMethod  = 'Static'
        Sku               = 'Standard'
    }
    $bastionPip = New-AzPublicIpAddress @bastionPipParams
    
  3. Создайте хост Бастион Azure с помощью New-AzBastion.

    $bastionParams = @{
        ResourceGroupName = 'test-rg'
        Name              = 'bastion'
        PublicIpAddress   = $bastionPip
        VirtualNetworkId  = (Get-AzVirtualNetwork -ResourceGroupName 'test-rg' -Name 'vnet-1').Id
        Sku               = 'Basic'
    }
    New-AzBastion @bastionParams
    

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

Создайте виртуальную машину с именем vm-1 в виртуальной сети. Виртуальная машина используется для проверки подключения после настройки.

Создание виртуальной машины с помощью New-AzVM. Сгенерируйте локально пару ключей SSH с помощью ssh-keygen и добавьте открытый ключ в конфигурацию виртуальной машины.

## Get credentials for virtual machine ##
$cred = Get-Credential

## Generate an SSH key pair locally ##
$sshKeyPath = Join-Path $HOME '.ssh/id_rsa_vm-1'
ssh-keygen -t rsa -b 4096 -f $sshKeyPath -N '""' -q
$sshPublicKey = Get-Content "$sshKeyPath.pub"

## Create network interface for virtual machine ##
$nic = @{
    Name = "nic-1"
    ResourceGroupName = 'test-rg'
    Location = 'eastus2'
    Subnet = $vnet.Subnets[0]
}
$nicVM = New-AzNetworkInterface @nic

## Create a virtual machine configuration ##
$vmsz = @{
    VMName = 'vm-1'
    VMSize = 'Standard_DS1_v2'  
}
$vmos = @{
    ComputerName = 'vm-1'
    Credential = $cred
    DisablePasswordAuthentication = $true
}
$vmimage = @{
    PublisherName = 'Canonical'
    Offer = '0001-com-ubuntu-server-jammy'
    Skus = '22_04-lts-gen2'
    Version = 'latest'     
}
$vmConfig = New-AzVMConfig @vmsz |
    Set-AzVMOperatingSystem @vmos -Linux |
    Set-AzVMSourceImage @vmimage |
    Add-AzVMNetworkInterface -Id $nicVM.Id
$vmConfig = Add-AzVMSshPublicKey -VM $vmConfig -KeyData $sshPublicKey -Path '/home/azureuser/.ssh/authorized_keys'

## Create the virtual machine ##
$vm = @{
    ResourceGroupName = 'test-rg'
    Location = 'eastus2'
    VM = $vmConfig
}
New-AzVM @vm

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

Замечание

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

Замечание

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

IP-адрес исходящего доступа по умолчанию отключен при возникновении одного из следующих событий:

  • Общедоступный IP-адрес назначается виртуальной машине.
  • Виртуальная машина размещается в серверном пуле стандартной подсистемы балансировки нагрузки с правилами исходящего трафика или без нее.
  • Ресурс Azure NAT Gateway присвоен подсети виртуальной машины.

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

Для получения дополнительной информации о исходящих подключениях в Azure смотрите раздел Стандартный исходящий доступ в Azure и Использование преобразования сетевых адресов источника (SNAT) для исходящих подключений.

Установка инструментов на виртуальную машину

Установить cifs-utils и Azure CLI на виртуальную машину, запустив shell-скрипт с Invoke-AzVMRunCommand.

Сохраните следующий скрипт в локальный файл с названием install-tools.sh:

#!/bin/bash
sudo apt-get update
sudo apt-get install -y cifs-utils
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

Затем запустите скрипт на виртуальной машине:

$runParams = @{
    ResourceGroupName = 'test-rg'
    VMName            = 'vm-1'
    CommandId         = 'RunShellScript'
    ScriptPath        = './install-tools.sh'
}
Invoke-AzVMRunCommand @runParams

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

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

  1. Создайте учетную запись хранения с помощью New-AzStorageAccount. Замените <storage-account-name> на глобально уникальное имя.

    $storageParams = @{
        ResourceGroupName = 'test-rg'
        Name              = '<storage-account-name>'
        Location          = 'EastUS2'
        SkuName           = 'Standard_LRS'
        Kind              = 'StorageV2'
    }
    $storageAccount = New-AzStorageAccount @storageParams
    
  2. Создайте общий файловый ресурс с помощью New-AzRmStorageShare.

    $shareParams = @{
        ResourceGroupName  = 'test-rg'
        StorageAccountName = '<storage-account-name>'
        Name               = 'fileshare-1'
    }
    New-AzRmStorageShare @shareParams
    

Создание публичного IP-префикса

Создайте публичный IP-префикс и публичный IP-адрес для использования в качестве сетевого идентификатора.

  1. Создайте публичный IP-префикс с New-AzPublicIpPrefix.

    $prefixParams = @{
        ResourceGroupName = 'test-rg'
        Name              = 'public-ip-prefix'
        Location          = 'EastUS2'
        PrefixLength      = 31
        Sku               = 'Standard'
    }
    $ipPrefix = New-AzPublicIpPrefix @prefixParams
    
  2. Создайте публичный IP-адрес с префиксом New-AzPublicIpAddress.

    $pipParams = @{
        ResourceGroupName = 'test-rg'
        Name              = 'public-ip-1'
        Location          = 'EastUS2'
        AllocationMethod  = 'Static'
        Sku               = 'Standard'
        PublicIpPrefix    = $ipPrefix
    }
    $publicIp = New-AzPublicIpAddress @pipParams
    

Настройка сервисных конечных точек с сетевым идентификатором

Этот шаг является ключевой конфигурацией для стандартной точки сервиса. Вы связываете публичный IP-адрес как сетевой идентификатор с сервисными конечными точками в подсети.

Идентификатор сети — это публичный IP-адрес, который вы присваиваете своей конечной точке сервиса. Публичный IP не используется для принятия решений по маршрутизации сети. Когда вы создаёте публичный IP-адрес внутри вашей подписки, он автоматически назначается из выделенного IP-пула вашего сервиса. Сервисы внутри сетевого периметра используют этот публичный IP-адрес для распознавания трафика конечных точек сервиса и настройки соответствующих правил доступа.

Обновите конфигурацию подсети, чтобы добавить конечную точку службы, используя публичный IP-адрес в качестве идентификатора сети, с помощью командлета Set-AzVirtualNetworkSubnetConfig.

$vnet = Get-AzVirtualNetwork -ResourceGroupName 'test-rg' -Name 'vnet-1'

$networkIdentifier = New-Object Microsoft.Azure.Commands.Network.Models.PSResourceId -Property @{
    Id = $publicIp.Id
}

$subnetUpdateParams = @{
    Name              = 'subnet-1'
    VirtualNetwork    = $vnet
    AddressPrefix     = '10.0.0.0/24'
    ServiceEndpoint   = @('Microsoft.Storage')
    NetworkIdentifier = $networkIdentifier
}
Set-AzVirtualNetworkSubnetConfig @subnetUpdateParams

$vnet | Set-AzVirtualNetwork

Замечание

Один и тот же публичный IP-адрес может быть назначен всем подсетям региона в рамках подписки. Идентификатор сети поддерживается во всех подписках во время публичного предварительного просмотра.

Создание периметра безопасности сети

Создайте сетевой периметр безопасности и свяжите с ним ваши PaaS-ресурсы.

  1. Создайте сетевой периметр безопасности с помощью New-AzNetworkSecurityPerimeter.

    $nspParams = @{
        ResourceGroupName = 'test-rg'
        Name              = 'nsp-1'
        Location          = 'EastUS2'
    }
    New-AzNetworkSecurityPerimeter @nspParams
    
  2. Создайте профиль в периметре сетевой безопасности с помощью New-AzNetworkSecurityPerimeterProfile.

    $profileParams = @{
        ResourceGroupName        = 'test-rg'
        SecurityPerimeterName    = 'nsp-1'
        Name                     = 'profile-1'
    }
    New-AzNetworkSecurityPerimeterProfile @profileParams
    
  3. Свяжите свою учётную запись хранения с периметром сетевой безопасности с помощью New-AzNetworkSecurityPerimeterAssociation. Замените <subscription-id> и <storage-account-name> собственными значениями.

    $assocParams = @{
        ResourceGroupName        = 'test-rg'
        SecurityPerimeterName    = 'nsp-1'
        AssociationName          = 'assoc-storage'
        AccessMode               = 'Learning'
        ProfileId                = "/subscriptions/<subscription-id>/resourceGroups/test-rg/providers/Microsoft.Network/networkSecurityPerimeters/nsp-1/profiles/profile-1"
        PrivateLinkResourceId    = "/subscriptions/<subscription-id>/resourceGroups/test-rg/providers/Microsoft.Storage/storageAccounts/<storage-account-name>"
    }
    New-AzNetworkSecurityPerimeterAssociation @assocParams
    

Создайте правило входного доступа по периметру сети безопасности

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

Создайте правило входящего доступа с помощью New-AzNetworkSecurityPerimeterAccessRule. Замените <public-ip-prefix-range> на диапазон адресов вашего публичного IP-префикса.

$ruleParams = @{
    ResourceGroupName     = 'test-rg'
    SecurityPerimeterName = 'nsp-1'
    ProfileName           = 'profile-1'
    Name                  = 'allow-se-standard'
    Direction             = 'Inbound'
    AddressPrefix         = '<public-ip-prefix-range>'
}
New-AzNetworkSecurityPerimeterAccessRule @ruleParams

Замечание

Чтобы найти диапазон адресов вашего публичного IP-префикса, запустите (Get-AzPublicIpPrefix -ResourceGroupName 'test-rg' -Name 'public-ip-prefix').IpPrefix.

Проверка подключения

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

Подключитесь к виртуальной машине

  1. На портале Azure найдите и выберите Виртуальные машины.

  2. Выберите vm-1.

  3. Выберите Подключить, затем выберите Подключить через Bastion.

  4. На странице Бастиона введите следующую информацию:

    Setting Value
    Тип проверки подлинности Выберите закрытый ключ SSH из локального файла.
    Имя пользователя Введите azureuser.
    Локальный файл Выберите файл vm-1-key.pem , который вы скачали при создании виртуальной машины.
  5. Нажмите Подключиться.

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

  1. В сеансе SSH на vm-1 выполните вход в Azure CLI:

    az login
    
  2. Подключите общий файловый ресурс Azure, чтобы проверить подключение к учётной записи хранения через конечную точку службы. Замените <storage-account-name> именем учетной записи хранения:

    sudo mkdir -p /mnt/fileshare-1
    STORAGE_KEY=$(az storage account keys list \
        --resource-group test-rg \
        --account-name <storage-account-name> \
        --query "[0].value" -o tsv)
    
    sudo mount -t cifs //<storage-account-name>.file.core.windows.net/fileshare-1 /mnt/fileshare-1 \
        -o username=<storage-account-name>,password=$STORAGE_KEY,serverino,nosharesock,actimeo=30,mfsymlinks
    
  3. Проверьте, что файловый обмен успешно монтируется:

    df -h /mnt/fileshare-1
    
  4. Чтобы убедиться, что правило входящего доступа работает, проверьте логи диагностики периметра сетевой безопасности. Для получения дополнительной информации о логах диагностики по периметру безопасности сети см . раздел Диагностический лог для периметра сетевой безопасности.

Очистите ресурсы

Когда вам больше не нужны ресурсы, созданные в этой статье, удалите группу ресурсов:

Remove-AzResourceGroup -Name 'test-rg' -Force

Дальнейшие действия