
Azure: автоматизация назначения Azure Policy для настройки Log Analytics скриптами Azure PowerShell
Мой LinkedIn ►►► https://www.linkedin.com/in/iwalker2000/ | Подписаться на канал ►►► http://bit.ly/iwalker2000_subs | Подготовка к AZ-900 ►►► http://bit.ly/Exam-Az-900 |Загляните на мой блог ►►► http://iwalker2000.com
Обещанные «очень технические» видео по теме Azure на канале – пришло время поделиться некоторыми из личных скриптов и заложенных в них идеях и особенностях реализации той или иной функциональности Azure. В этом видео/посте – поговорим про реализацию автоматического назначения некоторых Azure Policy для конфигурации отправки различными объектами диагностики в Azure Log Analytics при помощи скриптов Azure PowerShell.
Почему не с применением ARM Template? – да потому, что «заморочек» в работе с политиками через ARM Template, особенно если говорить о назначении имеющихся политик, да еще и в режиме «исправления» Remediation. Это и огромные нечитаемые «простыни» самого ARM Template вероятными ошибками при копи-пасте и «заморочками» при редактировании, и масса вопросов по описанию в том же (или отдельном) шаблоне всех необходимых учетных записей managed identity (principal) с раздачей им необходимых ролей в том же шаблоне, и процесс поиска и прописывания массы параметров вручную и прочие моменты типа «ручного участия» даже в назначении имен в том же шаблоне… Потому – скрипт, который управляет назначением выбранных политик – является куда меньшим «злом» с точки зрения процесса и более универсальным в работе, чем шаблоны, которые нужно потом очень внимательно править.
И пару моих детальных видео об автоматизации Azure с применением скриптов (с детальным разбором данных скриптов):
• Azure - подробный обзор универсального PowerShell скрипта для работы с Azure Log Analytics API - https://youtu.be/2AB-bIQl_4Q
• Закон Мерфи для кода или автоматическое копирование файлов между Azure Storage с Azure Logic Apps - https://youtu.be/jvWX6V92aCQ
Но вернемся к представленному Azure PowerShell скрипту, в задачу которого входит назначение политик (стандартных, встроенных в Azure) настройки мониторинга Azure Log Analytics для всех типов сервисов Azure, которые поддерживают данные настройки, на уровне выбранной подписки Azure (хотя в качестве области назначения политик может быть и ресурсная группа, и Management Group). В качестве политики используются встроенные политики Azure Policy, которые соответствуют шаблону имени '*diagnostic settings*Log Analytics*', которые развертываются в режиме Remediation (effect = DeployIfNotExists) для своего типа сервисов.
Какие важные блоки в данном скрипте, на что обратить внимание при работе с назначением политик и использованием их в режиме Remediation (исправления) в коде Azure PowerShell:
• Простые операции получения списка нужных политик (или инициатив – набора политик) при помощи команды
$mons = Get-AzPolicyDefinition | Where-Object { $_.Properties.DisplayName -like '*diagnostic settings*Log Analytics*' }
и работы с данным списком в цикле для каждого элемента.
• Проверка параметров для политики – напомню, что у политики есть свои параметры – большинство из которых – например, тот же режим работы политики – параметр Effect – является установленным по умолчанию в рекомендуемое значение, но вот параметр logAnalytics (которым назначается конкретное хранилище Log Analytics Workspace, куда направляются все логи) может иметь различные модификации имен. Потому – в скрипте проводится проверка точного имени параметра по шалону ‘logAnalytics*’ и формирование параметра на основе полученного имени.
• Формирование имени для назначения конкретной политики на основе строки описания политики, из которой по шаблонам извлекается название сервиса, для которого назначается политика, и после, используя полученное название – создается имя типа $name = "{0}-monitoring-assigned-byScript" -f $aname
• Назначение политики в режиме Remediation – обязательное указание параметров локации (параметр команды -Location) и привязки managed identity (-AssignIdentity) - $assignment = New-AzPolicyAssignment -Name $name -PolicyDefinition $mon -Scope $subsId -PolicyParameterObject $asparam -Location westeurope -AssignIdentity
• Ожидание создания учетной записи, привязанной к назначенной политики – требуется время, чтобы вновь созданная учетная запись была реплицирована внутри Azure AD и была доступна – поскольку без этого нельзя назначать требуемые роли.
• Самая важная часть скрипта – при назначении политик в портале Azure выполняет операцию по конфигурации связанной учетной записи на фоне, но когда используется PowerShell – команда New-AzPolicyAssignment только создает учетную запись, но не назначает на нее роли, которые потом требуются для выполнения политикой операций по исправлению конфигураций. Потому скрипт берет данные о ролях из описания политик и назначает роли для вновь созданных учетных записей.
• И, в заключение – назначение задачи по сканированию конфигурации существующих экземпляров соответствующих политике сервисов и исправлению, если таково требуется.