Мониторинг подключений "точка — сеть" для Виртуальной глобальной сети

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

Подготовка к работе

Действия в этой статье относятся к виртуальной глобальной сети с одним центром и VPN-шлюзом пользователя. Чтобы создать эти ресурсы, выполните действия, описанные в этой статье: Создание виртуальной глобальной сети, центра и шлюза.

Архитектура решения книги

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

  • AzureDiagnostics — эти журналы принимаются после включения отладки P2S в параметрах отладки Azure Monitor и следующих журналов: GatewayDiagnosticLog, IKEDiagnosticLog, P2SDiagnosticLog, AllMetrics. Некоторые журналы включают много данных и требуют много ресурсов Log Analytics, особенно IKEDiagnostics.

  • Get-AzP2sVpnGatewayDetailedConnectionHealth — это команда PowerShell (выполняющаяся в приложении-функции) для получения сведений об активном сеансе. Эта команда поддерживает только хранение данных в учетной записи хранения на основе ключа SAS.

На следующем рисунке показаны связанные компоненты в предлагаемом решении:

Снимок экрана: архитектура книги.

Служба VPN выполняется на VPN-шлюзе P2S Виртуальной глобальной сети Azure. Она имеет связанные метрики и параметры отладки, которые можно считать из книги Azure. Чтобы получить дополнительные сведения, которые может предоставить команда PowerShell, мы решили выполнить эту команду в приложении функции Azure. В приложении функции мы сохраним выходные данные в учетной записи хранения Azure.

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

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

  1. На портале в строке Поиск ресурсов введите Учетные записи хранения.

  2. Выберите пункт Учетные записи хранения в результатах. На странице "Учетные записи хранения" выберите + Создать, чтобы открыть страницу Создание учетной записи хранения.

  3. На странице Создание глобальной сети на вкладке Основные сведения заполните поля. Замените примеры значений на соответствующие для вашей среды.

    Снимок экрана: раздел

    • Подписка — выберите подписку, которую вы хотите использовать.
    • Группа ресурсов — создайте новую группу ресурсов или используйте имеющуюся.
    • Имя учетной записи хранения — введите имя для учетной записи хранения.
    • Регион — выберите регион для учетной записи хранения.
    • Производительность — уровень "Стандартный" или "Премиум". Стандартный подходит для наших целей мониторинга.
    • Избыточность — выберите "Локально избыточное хранилище", "Геоизбыточное хранилище", "Хранилище, избыточное между зонами" или "Хранилище, геоизбыточное между зонами".

    Заполнив эти поля, внизу страницы выберите Далее: Дополнительно>.

  4. На странице Дополнительно заполните следующие поля.

    Снимок экрана: раздел

    • Требование безопасной передачи для операций REST API — выберите Включено.
    • Включить общий доступ к BLOB-объектам — выберите Отключено.
    • Включить доступ к ключам учетной записи хранения — выберите Включено.
    • По умолчанию использовать авторизацию Azure Active Directory на портале Azure — выберите Включено.
    • Минимальная версия TLS — выберите версия 1.2.
  5. Выберите Проверить и создать внизу, чтобы запустить проверку.

  6. После прохождения проверки выберите Создать, чтобы создать учетную запись хранения.

Создание контейнера

  1. После завершения развертывания перейдите к ресурсу.

  2. На панели слева выберите Контейнеры в разделе Хранилище данных.

    Снимок экрана: начальная страница контейнера.

  3. Выберите + Контейнер, чтобы создать контейнер.

  4. Введите имя контейнера и выберите Создать.

Создание BLOB-объекта и его отправка в контейнер

  1. На компьютере откройте приложение текстового редактора, например Блокнот.

    Снимок экрана: открытие Блокнота.

  2. Оставьте текстовый файл пустым и выберите Файл- > Сохранить как.

  3. Сохраните пустой текстовый файл с выбранным именем и расширением JSON.

    Снимок экрана: сохранение JSON-файла.

  4. Вернитесь к разделу Контейнеры на портале.

    Снимок экрана: раздел контейнера после создания контейнера.

  5. Выберите вторую строку, которая соответствует созданному контейнеру (не $logs).

  6. Если отображается красное предупреждение с сообщением У вас нет разрешения..., выберите Переключиться на ключ доступа в качестве метода аутентификации (сразу под красным предупреждением).

  7. Щелкните Отправить.

    Снимок экрана: конкретный контейнер, созданный пользователем.

  8. Выберите файл, соответствующий пустому файлу JSON на компьютере, и выберите Отправить.

  9. После отправки файла выберите файл JSON и перейдите на вкладку Создание SAS.

    Снимок экрана: поле

  10. В разделе Метод подписывания выберите Ключ учетной записи.

  11. В разделе Разрешения предоставьте ключу следующие разрешения: чтение, добавление, создание и запись.

  12. Выберите дату и время окончания срока действия для ключа.

  13. Выберите Создать маркер SAS и URL-адрес.

  14. Скопируйте маркер SAS BLOB-объекта и подписанный URL-адрес BLOB-объекта в безопасное расположение.

Создание приложения-функции Azure

  1. На портале в строке Поиск ресурсов введите Приложение-функция.

  2. Выберите Приложение-функция в результатах. На странице "Приложение-функция" выберите + Создать, чтобы открыть страницу Создание приложения-функции.

  3. На странице Создание глобальной сети на вкладке Основные сведения заполните поля. Замените примеры значений на соответствующие для вашей среды.

    Снимок экрана: вкладка

    • Подписка — выберите подписку, которую вы хотите использовать.
    • Группа ресурсов — создайте новую группу ресурсов или используйте имеющуюся.
    • Имя приложения-функции — выберите имя приложения-функции.
    • Опубликовать — выберите Код.
    • Стек среды выполнения — выберите PowerShell Core
    • Версия— выберите 7.0 (или предпочтительную версию).
    • Регион — выберите предпочтительный регион.
  4. Оставшиеся вкладки изменять не обязательно, поэтому вы можете выбрать Проверить и создать и Создать после прохождения проверки.

  5. Перейдите к ресурсу приложения-функции.

  6. Выберите пункт Удостоверение в разделе Параметры в панели слева. Для Состояния установите положение Вкл. для варианта Назначается системой и выберите Сохранить.

    Снимок экрана: вкладка удостоверений приложения-функции.

  7. Выберите Конфигурация в разделе Параметры на панели слева.

  8. Выберите + Создать параметр приложения. Снимок экрана: вкладка добавления параметра приложения.

  9. Создайте следующие 7 записей, введя Имя и Значение и нажимая OK после каждого значения.

    Имя Значение
    "resourcegroup" ваша группа ресурсов
    "sasuri" @Microsoft.KeyVault(SecretUri=https://\<keyvaultname>.vault.azure.net/secrets/sasuri/\<version>)
    --> обновите соответствующим образом после создания хранилища ключей в следующем разделе.
    "subscription" идентификатор вашей подписки
    "tenantname" идентификатор вашего арендатора
    "vpngw" Это имя имеет вид <guid>-eastus-ps2-gw. Его можно получить из параметров VPN пользователя центра виртуальной глобальной сети.
  10. Щелкните Сохранить.

  11. Выберите Функции в панели слева и выберите + Создать.

  12. Заполните поля.

    Снимок экрана: страница при создании функции.

    • Среда разработки: разработка на портале.
    • Шаблон: триггер таймера.
    • Новая функция: выберите имя функции.
    • Расписание: введите выражение Cron в формате "{секунда} {минута} {час} {день} {месяц} {день недели}", чтобы задать расписание.
  13. Выберите Код и тестирование в панели слева и введите следующий код в файл run.ps1. Щелкните Сохранить.

    # Input bindings are passed in via param block.
    param($Timer)
    
    # Get the current universal time in the default string format.
    $currentUTCtime = (Get-Date).ToUniversalTime()
    
    # The 'IsPastDue' property is "true" when the current function invocation is later than scheduled.
    if($Timer.IsPastDue){
    Write-Host "PowerShell timer is running late!"
    }
    
    ## Write an information log with current time.
    Write-Host "PowerShell timer trigger function ran! TIME:$currentUTCtime"
    
    $tenantname = $env:appsetting_tenantname
    $subscription = $env:appsetting_subscription
    $resourceGroup = $env:appsetting_resourcegroup
    $vpngw = $env:appsetting_vpngw
    $sasuri = $env:appsetting_sasuri
    
    Write-Host "Connecting to Managed Identity..."
    connect-azaccount -tenant $tenantname -identity -subscription $subscription
    
    Write-Host "Executing File Update..."
    Get-AzP2sVpnGatewayDetailedConnectionHealth -name $vpngw -ResourceGroupName $resourceGroup -OutputBlobSasUrl $sasuri
    
    Write-Host "Function Execution Completed!"
    
  14. Вернитесь на страницу Приложение-функция и выберите Редактор службы приложений в панели слева в разделе Средства разработки. Затем выберите Перейти -->.

  15. Перейдите к файлу requirements.psd1 и раскомментируйте строку, начинающуюся на "Az"..., как показано ниже.

    Снимок экрана: файл требований для приложения-функции.

  16. Чтобы команда get-AzP2sVpnGatewayDetailedConnectionHealth была выполнено успешно, вам нужны соответствующие права на данные. Перейдите к группе ресурсов и выберите "Управление доступом (IAM)" в панели слева. Это соответствует управлению удостоверениями и доступом. Назначьте FunctionApp доступ на чтение для группы ресурсов.

Создание хранилища Azure Key Vault

  1. На портале в строке Поиск ресурсов введите Хранилища ключей.

  2. Выберите + Создать из результатов, чтобы открыть страницу Создание хранилища ключей.

  3. На вкладке Основы заполните нужные поля. Замените примеры значений на соответствующие для вашей среды.

    Снимок экрана: раздел

    • Подписка. Выберите подписку, которую вы хотите использовать.
    • Группа ресурсов. Создайте новую группу ресурсов или используйте имеющуюся.
    • Имя учетной записи хранения — введите имя для хранилища ключей.
    • Регион — выберите регион для учетной записи хранения.
    • Ценовая категория — "Стандартный" или "Премиум". Стандартный подходит для наших целей мониторинга.
  4. Выберите Далее: Политика доступа >.

  5. В разделе Модель разрешений выберите Политика доступа к хранилищу.

  6. Не включайте параметры в разделе Доступ к ресурсам.

  7. В разделе Политики доступавыберите + Создать.

    Снимок экрана: первый экран создания политики доступа.

  8. Нажмите кнопку Далее, чтобы открыть вкладку Субъект. Введите имя приложения функции и выберите его.

  9. Дважды нажмите кнопку Далее, чтобы перейти на четвертую вкладку Просмотр и создание и выберите Создать внизу.

  10. Теперь в разделе Политики доступа должна отобразиться только что созданная политика доступа. Изменять значения по умолчанию на вкладке Сеть не обязательно, поэтому выберите в нижнем левом углу Проверить и создать.

  11. Перейдите к пункту Секреты в разделе Объекты на левой панели ресурса хранилища ключей. Выберите + Создать или импортировать и добавьте секрет, как показано ниже:

    • Имя: sasuri.
    • Значение: <SASURI>.
    • Включено: да.
  12. Вернитесь на вкладку Конфигурация приложения-функции и измените следующую запись. Используется значение из поля Идентификатор секрета, которое отображается после щелчка на секрете:

    • Имя: "sasuri".
    • Значение: @Microsoft.KeyVault(SecretUri=https://\<keyvaultname>.vault.azure.net/secrets/sasuri/\<version>)

Создание книги Azure

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

  1. Перейдите к ресурсу Виртуальной глобальной сети и выберите Аналитика в разделе Монитор на панели слева. Выберите Книги и нажмите кнопку + Создать. Снимок экрана: первый шаг в создании книги Azure.

  2. Добавьте следующий запрос в книгу. Замените "SASURI" на свой URI SAS.

     let P2Svpnconnections = (externaldata (resource:string, UserNameVpnConnectionHealths: dynamic) [
         @"SASURI"
     ] with(format="multijson"));
    
     P2Svpnconnections
     | mv-expand UserNameVpnConnectionHealths
     | extend Username = parse_json(UserNameVpnConnectionHealths).UserName
     | extend VpnConnectionHealths = parse_json(parse_json(UserNameVpnConnectionHealths).VpnConnectionHealths)
     | mv-expand VpnConnectionHealths
     | extend VpnConnectionId = parse_json(VpnConnectionHealths).VpnConnectionId, VpnConnectionDuration = parse_json(VpnConnectionHealths).VpnConnectionDuration, VpnConnectionTime = parse_json(VpnConnectionHealths).VpnConnectionTime, PublicIpAddress = parse_json(VpnConnectionHealths).PublicIpAddress, PrivateIpAddress = parse_json(VpnConnectionHealths).PrivateIpAddress, MaxBandwidth = parse_json(VpnConnectionHealths).MaxBandwidth, EgressPacketsTransferred = parse_json(VpnConnectionHealths).EgressPacketsTransferred, EgressBytesTransferred = parse_json(VpnConnectionHealths).EgressBytesTransferred, IngressPacketsTransferred = parse_json(VpnConnectionHealths).IngressPacketsTransferred, IngressBytesTransferred = parse_json(VpnConnectionHealths).IngressBytesTransferred, MaxPacketsPerSecond = parse_json(VpnConnectionHealths).MaxPacketsPerSecond
     | extend PubIp = tostring(split(PublicIpAddress, ":").[0])
     | project Username, VpnConnectionId, VpnConnectionDuration, VpnConnectionTime, PubIp, PublicIpAddress, PrivateIpAddress, MaxBandwidth, EgressPacketsTransferred, EgressBytesTransferred, IngressPacketsTransferred, IngressBytesTransferred, MaxPacketsPerSecond;
    
    
  3. Чтобы просмотреть результаты, выберите синюю кнопку Запустить запрос, чтобы просмотреть результаты.

  4. Если вы видите следующую ошибку, вернитесь к файлу (vpnstatfile.json) в BLOB-объекте контейнера хранилища и повторно создайте подписанный URL-адрес. Затем вставьте обновленный подписанный URL-адрес в запрос.

    Снимок экрана: ошибка при выполнении запроса в книге.

  5. Сохраните книгу, чтобы вернуться к ней позже.

  6. Для следующих метрик необходимо включить ведение журнала диагностики. Для этого добавьте параметры диагностики на портале Azure. Заполните обязательные поля для подписки и группы ресурсов. Для типа ресурса введите "microsoft.network/p2svpngateways". Добавьте параметр диагностики (или измените текущий параметр диагностики) для шлюза подключения типа "точка — сеть", который вы хотите отслеживать.

    Снимок экрана: первая страница параметров диагностики в Azure Monitor.

  7. Включите allLogs и allMetrics и выберите отправку в "Рабочую область Log Analytics" в качестве назначения. Некоторые журналы могут включать множество данных и требовать много ресурсов (например, IKEDiagnosticLog). Поэтому включите только определенные журналы, которые вы хотите просматривать, а не включайте параметр allLogs.

    Снимок экрана: вторая страница параметров диагностики в Azure Monitor.

Примеры запросов

В следующем разделе приведены примеры запросов.

Успешные подключения пользователей P2S с помощью IP-адреса

Снимок экрана: запрос для успешных подключений типа

Успешная аутентификация EAP

Снимок экрана: запрос метрик проверки подлинности EAP.

Сведения о пользователе VPN-подключения "точка — сеть"

Снимок экрана: запрос сведений о пользователе VPN типа

Успешные VPN-подключения "точка — сеть" на пользователя

Снимок экрана: запрос для успешных подключений VPN типа

VPN-подключения "точка — сеть"

Снимок экрана: запрос vpn-подключений типа

Успешные VPN-подключения "точка — сеть"

Снимок экрана: запрос для успешных VPN-подключений типа

Сбойные VPN-подключения "точка — сеть"

Снимок экрана: запрос для неудачных VPN-подключений типа

Число VPN-подключений по P2SDiagnosticLog

Снимок экрана: запрос для количества VPN-подключений.

IKEDiagnosticLog

Снимок экрана: запрос для IKEDiagnosticLog.

Дополнительные диагностические сведения по IKE

Снимок экрана: запрос сведений о диагностике IKE.

Статистика по VPN-подключениям "точка — сеть"

Снимок экрана: запрос статистики VPN типа

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

Дополнительные сведения о часто задаваемых вопросах см. на странице вопросов и ответов по Виртуальной глобальной сети.