Мониторинг подключений "точка — сеть" для Виртуальной глобальной сети
В этом разделе описывается, как создать книгу 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
На портале в строке Поиск ресурсов введите Учетные записи хранения.
Выберите пункт Учетные записи хранения в результатах. На странице "Учетные записи хранения" выберите + Создать, чтобы открыть страницу Создание учетной записи хранения.
На странице Создание глобальной сети на вкладке Основные сведения заполните поля. Замените примеры значений на соответствующие для вашей среды.
- Подписка — выберите подписку, которую вы хотите использовать.
- Группа ресурсов — создайте новую группу ресурсов или используйте имеющуюся.
- Имя учетной записи хранения — введите имя для учетной записи хранения.
- Регион — выберите регион для учетной записи хранения.
- Производительность — уровень "Стандартный" или "Премиум". Стандартный подходит для наших целей мониторинга.
- Избыточность — выберите "Локально избыточное хранилище", "Геоизбыточное хранилище", "Хранилище, избыточное между зонами" или "Хранилище, геоизбыточное между зонами".
Заполнив эти поля, внизу страницы выберите Далее: Дополнительно>.
На странице Дополнительно заполните следующие поля.
- Требование безопасной передачи для операций REST API — выберите Включено.
- Включить общий доступ к BLOB-объектам — выберите Отключено.
- Включить доступ к ключам учетной записи хранения — выберите Включено.
- По умолчанию использовать авторизацию Azure Active Directory на портале Azure — выберите Включено.
- Минимальная версия TLS — выберите версия 1.2.
Выберите Проверить и создать внизу, чтобы запустить проверку.
После прохождения проверки выберите Создать, чтобы создать учетную запись хранения.
Создание контейнера
После завершения развертывания перейдите к ресурсу.
На панели слева выберите Контейнеры в разделе Хранилище данных.
Выберите + Контейнер, чтобы создать контейнер.
Введите имя контейнера и выберите Создать.
Создание BLOB-объекта и его отправка в контейнер
На компьютере откройте приложение текстового редактора, например Блокнот.
Оставьте текстовый файл пустым и выберите Файл- > Сохранить как.
Сохраните пустой текстовый файл с выбранным именем и расширением JSON.
Вернитесь к разделу Контейнеры на портале.
Выберите вторую строку, которая соответствует созданному контейнеру (не $logs).
Если отображается красное предупреждение с сообщением У вас нет разрешения..., выберите Переключиться на ключ доступа в качестве метода аутентификации (сразу под красным предупреждением).
Щелкните Отправить.
Выберите файл, соответствующий пустому файлу JSON на компьютере, и выберите Отправить.
После отправки файла выберите файл JSON и перейдите на вкладку Создание SAS.
В разделе Метод подписывания выберите Ключ учетной записи.
В разделе Разрешения предоставьте ключу следующие разрешения: чтение, добавление, создание и запись.
Выберите дату и время окончания срока действия для ключа.
Выберите Создать маркер SAS и URL-адрес.
Скопируйте маркер SAS BLOB-объекта и подписанный URL-адрес BLOB-объекта в безопасное расположение.
Создание приложения-функции Azure
На портале в строке Поиск ресурсов введите Приложение-функция.
Выберите Приложение-функция в результатах. На странице "Приложение-функция" выберите + Создать, чтобы открыть страницу Создание приложения-функции.
На странице Создание глобальной сети на вкладке Основные сведения заполните поля. Замените примеры значений на соответствующие для вашей среды.
- Подписка — выберите подписку, которую вы хотите использовать.
- Группа ресурсов — создайте новую группу ресурсов или используйте имеющуюся.
- Имя приложения-функции — выберите имя приложения-функции.
- Опубликовать — выберите Код.
- Стек среды выполнения — выберите PowerShell Core
- Версия— выберите 7.0 (или предпочтительную версию).
- Регион — выберите предпочтительный регион.
Оставшиеся вкладки изменять не обязательно, поэтому вы можете выбрать Проверить и создать и Создать после прохождения проверки.
Перейдите к ресурсу приложения-функции.
Выберите пункт Удостоверение в разделе Параметры в панели слева. Для Состояния установите положение Вкл. для варианта Назначается системой и выберите Сохранить.
Выберите Конфигурация в разделе Параметры на панели слева.
Создайте следующие 7 записей, введя Имя и Значение и нажимая OK после каждого значения.
Имя Значение "resourcegroup" ваша группа ресурсов "sasuri" @Microsoft.KeyVault(SecretUri=https://\<keyvaultname>.vault.azure.net/secrets/sasuri/\<version>)
--> обновите соответствующим образом после создания хранилища ключей в следующем разделе."subscription" идентификатор вашей подписки "tenantname" идентификатор вашего арендатора "vpngw" Это имя имеет вид <guid>-eastus-ps2-gw. Его можно получить из параметров VPN пользователя центра виртуальной глобальной сети. Щелкните Сохранить.
Выберите Функции в панели слева и выберите + Создать.
Заполните поля.
- Среда разработки: разработка на портале.
- Шаблон: триггер таймера.
- Новая функция: выберите имя функции.
- Расписание: введите выражение Cron в формате "{секунда} {минута} {час} {день} {месяц} {день недели}", чтобы задать расписание.
Выберите Код и тестирование в панели слева и введите следующий код в файл 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!"
Вернитесь на страницу Приложение-функция и выберите Редактор службы приложений в панели слева в разделе Средства разработки. Затем выберите Перейти -->.
Перейдите к файлу requirements.psd1 и раскомментируйте строку, начинающуюся на "Az"..., как показано ниже.
Чтобы команда get-AzP2sVpnGatewayDetailedConnectionHealth была выполнено успешно, вам нужны соответствующие права на данные. Перейдите к группе ресурсов и выберите "Управление доступом (IAM)" в панели слева. Это соответствует управлению удостоверениями и доступом. Назначьте FunctionApp доступ на чтение для группы ресурсов.
Создание хранилища Azure Key Vault
На портале в строке Поиск ресурсов введите Хранилища ключей.
Выберите + Создать из результатов, чтобы открыть страницу Создание хранилища ключей.
На вкладке Основы заполните нужные поля. Замените примеры значений на соответствующие для вашей среды.
- Подписка. Выберите подписку, которую вы хотите использовать.
- Группа ресурсов. Создайте новую группу ресурсов или используйте имеющуюся.
- Имя учетной записи хранения — введите имя для хранилища ключей.
- Регион — выберите регион для учетной записи хранения.
- Ценовая категория — "Стандартный" или "Премиум". Стандартный подходит для наших целей мониторинга.
Выберите Далее: Политика доступа >.
В разделе Модель разрешений выберите Политика доступа к хранилищу.
Не включайте параметры в разделе Доступ к ресурсам.
В разделе Политики доступавыберите + Создать.
Нажмите кнопку Далее, чтобы открыть вкладку Субъект. Введите имя приложения функции и выберите его.
Дважды нажмите кнопку Далее, чтобы перейти на четвертую вкладку Просмотр и создание и выберите Создать внизу.
Теперь в разделе Политики доступа должна отобразиться только что созданная политика доступа. Изменять значения по умолчанию на вкладке Сеть не обязательно, поэтому выберите в нижнем левом углу Проверить и создать.
Перейдите к пункту Секреты в разделе Объекты на левой панели ресурса хранилища ключей. Выберите + Создать или импортировать и добавьте секрет, как показано ниже:
- Имя: sasuri.
- Значение: <SASURI>.
- Включено: да.
Вернитесь на вкладку Конфигурация приложения-функции и измените следующую запись. Используется значение из поля Идентификатор секрета, которое отображается после щелчка на секрете:
- Имя: "sasuri".
- Значение:
@Microsoft.KeyVault(SecretUri=https://\<keyvaultname>.vault.azure.net/secrets/sasuri/\<version>)
Создание книги Azure
Теперь книга Azure готова к созданию. Мы будем использовать сочетание встроенных функций и добавленных сведений о сеансе из нашего решения приложения-функции.
Перейдите к ресурсу Виртуальной глобальной сети и выберите Аналитика в разделе Монитор на панели слева. Выберите Книги и нажмите кнопку + Создать.
Добавьте следующий запрос в книгу. Замените "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;
Чтобы просмотреть результаты, выберите синюю кнопку Запустить запрос, чтобы просмотреть результаты.
Если вы видите следующую ошибку, вернитесь к файлу (vpnstatfile.json) в BLOB-объекте контейнера хранилища и повторно создайте подписанный URL-адрес. Затем вставьте обновленный подписанный URL-адрес в запрос.
Сохраните книгу, чтобы вернуться к ней позже.
Для следующих метрик необходимо включить ведение журнала диагностики. Для этого добавьте параметры диагностики на портале Azure. Заполните обязательные поля для подписки и группы ресурсов. Для типа ресурса введите "microsoft.network/p2svpngateways". Добавьте параметр диагностики (или измените текущий параметр диагностики) для шлюза подключения типа "точка — сеть", который вы хотите отслеживать.
Включите allLogs и allMetrics и выберите отправку в "Рабочую область Log Analytics" в качестве назначения. Некоторые журналы могут включать множество данных и требовать много ресурсов (например, IKEDiagnosticLog). Поэтому включите только определенные журналы, которые вы хотите просматривать, а не включайте параметр allLogs.
Примеры запросов
В следующем разделе приведены примеры запросов.
Успешные подключения пользователей P2S с помощью IP-адреса
Успешная аутентификация EAP
Сведения о пользователе VPN-подключения "точка — сеть"
Успешные VPN-подключения "точка — сеть" на пользователя
VPN-подключения "точка — сеть"
Успешные VPN-подключения "точка — сеть"
Сбойные VPN-подключения "точка — сеть"
Число VPN-подключений по P2SDiagnosticLog
IKEDiagnosticLog
Дополнительные диагностические сведения по IKE
Статистика по VPN-подключениям "точка — сеть"
Дальнейшие действия
Дополнительные сведения о часто задаваемых вопросах см. на странице вопросов и ответов по Виртуальной глобальной сети.