Поделиться через


Устранение ошибок при использовании Политики Azure

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

Поиск сведений об ошибке

Расположение сведений об ошибке зависит от того, с какими аспектами Политики Azure вы работаете.

  • Если вы работаете с настраиваемой политикой, перейдите на портал Azure, чтобы получить обратную связь по проверке схемы или изучить итоговые данные о соответствии и узнать, как были оценены ресурсы.
  • Если вы работаете с одним из пакетов SDK, в нем предоставляются сведения о том, почему возник сбой функции.
  • Если вы работаете с надстройкой для Kubernetes, начните с ведения журнала в кластере.

Общие ошибки

Ситуация: псевдоним не найден

Проблема

В определении политики используется недопустимый или несуществующий псевдоним. Политика Azure использует псевдонимы для сопоставления свойств Azure Resource Manager.

Причина

В определении политики используется недопустимый или несуществующий псевдоним.

Резолюция

Сначала проверьте, есть ли псевдоним у свойства Resource Manager. Чтобы посмотреть доступные псевдонимы, перейдите в расширение Политики Azure для Visual Studio Code или пакет SDK. Если для свойства Resource Manager не существует псевдонима, создайте запрос в службу поддержки.

Сценарий: сведения об оценке не актуальны

Проблема

Ресурс находится в состоянии Не запущено или сведения о соответствии требованиям не являются актуальными.

Причина

На внедрение нового назначения политики или инициативы требуется около пяти минут. Новые или обновленные ресурсы в области действия существующего назначения становятся доступными примерно через 15 минут. Стандартная проверка соответствия требованиям выполняется каждые 24 часа. Дополнительные сведения см. в разделе Триггеры оценки.

Резолюция

Сначала дождитесь завершения оценки и появления соответствующих результатов на портале Azure или в пакете SDK. Сведения о запуске новой проверки оценки с помощью Azure PowerShell или REST API см. в разделе Проверка оценки по запросу.

Сценарий: соответствие требованиям не согласуется с ожиданиями

Проблема

Ресурс не находится ни в состоянии соответствия, ни в состоянии несоответствия, как ожидалось для данного ресурса.

Причина

Ресурс находится за пределами области назначения политики, или определение политики не работает должным образом.

Резолюция

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

  1. Сначала дождитесь завершения оценки и появления соответствующих результатов на портале Azure или в пакете SDK.
  2. Сведения о запуске новой проверки оценки с помощью Azure PowerShell или REST API см. в разделе Проверка оценки по запросу.
  3. Убедитесь, что параметры назначения и область назначения заданы правильно.
  4. Проверьте режим определения политики:
    • Режим должен быть all для всех типов ресурсов.
    • Если определение политики проверяет теги и расположение, должен быть установлен режим indexed.
  5. Убедитесь, что ресурс не находится в статусе исключение или освобождение.
  6. Если соответствие требованиям назначенной политики показывает 0/0 ресурсов, значит ни один из ресурсов не был признан применимым в рамках этой области назначения. Проверьте определение и область назначения политики.
  7. Сведения о ресурсе, который согласно ожиданиям должен соответствовать требованиям, но не соответствует им, см. в статье Определение причин несоответствия требованиям. Причину несоответствия ресурса требованиям можно выявить посредством сравнения определения со значением оценки свойства.
    • Если целевое значение неверно, проверьте определение политики.
    • Если текущее значение неверно, проверьте полезные данные ресурса через resources.azure.com.
  8. Для определения режима поставщика ресурсов, поддерживающего параметр строки регулярного выражения (например, Microsoft.Kubernetes.Data и встроенного определения "образы контейнера должны развертываться только из доверенных реестров"), проверьте правильность параметра строки регулярного выражения .
  9. Сведения о других распространенных проблемах и способах их решения см. в разделе Устранение неполадок: исполнение не соответствует ожиданиям.

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

Сценарий: применение не соответствует ожиданиям

Проблема

Ресурс, на который предполагается воздействие политики Azure, не обрабатывается, и в журнале действий Azure нет записи об этом.

Причина

Назначение политики было настроено на enforcementMode с параметром Disabled. Хотя enforcementMode он отключен, эффект политики не применяется, и нет записи в журнале действий.

Резолюция

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

  1. Сначала дождитесь завершения оценки и появления соответствующих результатов на портале Azure или в пакете SDK.
  2. Сведения о запуске новой проверки оценки с помощью Azure PowerShell или REST API см. в разделе Проверка оценки по запросу.
  3. Убедитесь, что параметры и область задания заданы правильно, и enforcementModeвключены.
  4. Проверьте режим определения политики:
    • Режим должен быть all для всех типов ресурсов.
    • Если определение политики проверяет теги и расположение, должен быть установлен режим indexed.
  5. Убедитесь, что ресурс не находится в статусе исключение или освобождение.
  6. Убедитесь, что нагрузка ресурса соответствует логике политики. Эту проверку можно выполнить путем записи трассировки HTTP-архива (HAR) или просмотра свойств шаблона Azure Resource Manager (шаблона ARM).
  7. Сведения о других распространенных проблемах и способах их решения см. в разделе Устранение неполадок: соответствие требованиям не согласуется с ожиданиями.

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

Сценарий: отклонение Политикой Azure

Проблема

Создание или обновление ресурса отклонено.

Причина

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

Резолюция

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

Сценарий: определение предназначено для нескольких типов ресурсов

Проблема

Определение политики, которое включает несколько типов ресурсов, не проходит проверку при создании или обновлении со следующей ошибкой:

The policy definition '{0}' targets multiple resource types, but the policy rule is authored in a way that makes the policy not applicable to the target resource types '{1}'.

Причина

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

Резолюция

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

Сценарий. Превышено ограничение подписок

Проблема

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

Причина

Количество подписок в выбранных областях в запросе превысило ограничение в 5000 подписок. Результаты соответствия могут отображаться частично.

Резолюция

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

Ошибки шаблона

Сценарий: функции, поддерживаемые политикой, обработаны шаблоном.

Проблема

Политика Azure поддерживает множество функций шаблонов ARM и функций, доступных только в определении политики. Resource Manager обрабатывает эти функции в рамках развертывания, а не в рамках определения политики.

Причина

Использование поддерживаемых функций, таких как parameter() или resourceGroup(), приводит к тому, что результат функции обрабатывается во время развертывания, а не разрешается для обработки функцией определения политики и подсистемой Политики Azure.

Резолюция

Чтобы передать функцию в составе определения политики, экранируйте всю строку с помощью [, чтобы свойство выглядело так: [[resourceGroup().tags.myTag]. Из-за escape-символа Resource Manager при обработке шаблона воспринимает значение как строку. Затем Политика Azure помещает функцию в определение политики, что позволяет ей быть динамичной, как и ожидалось. Дополнительные сведения см. в статье Синтаксис и выражения в шаблонах Azure Resource Manager.

Ошибки установки дополнений для Kubernetes

Сценарий: установка с помощью Helm chart не выполнена из-за ошибки пароля

Проблема

Выполнение команды helm install azure-policy-addon завершается сбоем и возвращается одна из указанных ниже ошибок.

  • !: event not found
  • Error: failed parsing --set data: key "<key>" has no value (cannot end with ,)

Причина

Созданный пароль содержит запятую (,), которая используется в чарте Helm в качестве разделителя.

Резолюция

При запуске команды helm install azure-policy-addon в значении пароля экранируйте запятую (,) с помощью символа обратной косой черты (\).

Сценарий: установка с помощью чарта Helm завершается сбоем, потому что имя уже существует

Проблема

Выполнение команды helm install azure-policy-addon завершается сбоем и возвращается указанная ниже ошибка.

  • Error: cannot re-use a name that is still in use

Причина

Диаграмма Helm с именем azure-policy-addon уже установлена или частично установлена.

Резолюция

Следуйте инструкциям по удалению дополнения для Kubernetes Azure Policy, затем повторно выполните команду helm install azure-policy-addon.

Сценарий: идентичности виртуальной машины Azure, назначенные пользователем, заменяются управляемыми идентичностями, автоматически назначенными системой

Проблема

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

Причина

Определения политики, которые ранее использовались в определениях гостевой конфигурации deployIfNotExists , гарантируют, что удостоверение, назначаемое системой, назначается компьютеру. Но они также удалили назначения удостоверений, заданные пользователем.

Резолюция

Определения, которые ранее вызвали эту проблему, отображаются как \[Deprecated\], и заменяются политическими определениями, которые управляют предварительными условиями без удаления управляемых учетных записей, назначенные пользователем. Требуется ручное действие. Удалите все существующие назначения политик, помеченные как \[Deprecated\], и замените их обновленными определениями политики предварительных требований и определениями политик, которые имеют то же имя, что и исходное.

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

Надстройка для общих ошибок в Kubernetes

Сценарий: надстройке не удалось связаться с конечной точкой службы "Политика Azure" из-за ограничений исходящего трафика

Проблема

Надстройка не может связаться с конечной точкой службы "Политика Azure" и возвращает одну из указанных ниже ошибок.

  • failed to fetch token, service not reachable
  • Error getting file "Get https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/Kubernetes/container-allowed-images/template.yaml: dial tcp 151.101.228.133.443: connect: connection refused

Причина

Эта проблема возникает при блокировке выхода из кластера.

Резолюция

Убедитесь, что домены и порты, указанные в следующей статье, открыты:

Сценарий: надстройка не может связаться с конечной точкой службы Azure Policy из-за конфигурации aad-pod-identity.

Проблема

Надстройка не может связаться с конечной точкой службы "Политика Azure" и возвращает одну из указанных ниже ошибок.

  • azure.BearerAuthorizer#WithAuthorization: Failed to refresh the Token for request to https://gov-prod-policy-data.trafficmanager.net/checkDataPolicyCompliance?api-version=2019-01-01-preview: StatusCode=404
  • adal: Refresh request failed. Status Code = '404'. Response body: getting assigned identities for pod kube-system/azure-policy-8c785548f-r882p in CREATED state failed after 16 attempts, retry duration [5]s, error: <nil>

Причина

Эта ошибка возникает при установке aad-pod-identity в кластере, а поды подсистемы kube-system не исключаются в aad-pod-identity.

Компонентные модули pod Node Managed Identity (NMI) изменяют iptables узлов для перехвата вызовов к конечной точке метаданных экземпляра Azure. Эта настройка означает, что любой запрос, сделанный в конечную точку метаданных, перехватывается NMI, даже если pod не использует aad-pod-identity. AzurePodIdentityException CustomResourceDefinition (CRD) можно настроить, чтобы сообщать aad-pod-identity, что любые запросы к конечной точке метаданных, исходящие из подов, соответствующих меткам, определённым в CRD, должны быть отправлены через прокси без обработки в NMI.

Резолюция

Исключите системные pod в пространстве имен kube-system, которые имеют метку kubernetes.azure.com/managedby: aks, настроив aad-pod-identity CRD.

Для получения дополнительной информации см. статью Отключение идентификации Azure Active Directory (Azure AD) для конкретной подсистемы pod или приложения.

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

apiVersion: "aadpodidentity.k8s.io/v1"
kind: AzurePodIdentityException
metadata:
  name: mic-exception
  namespace: default
spec:
  podLabels:
    app: mic
    component: mic
---
apiVersion: "aadpodidentity.k8s.io/v1"
kind: AzurePodIdentityException
metadata:
  name: aks-addon-exception
  namespace: kube-system
spec:
  podLabels:
    kubernetes.azure.com/managedby: aks

Сценарий: поставщик ресурсов не зарегистрирован

Проблема

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

  • The resource provider 'Microsoft.PolicyInsights' is not registered in subscription '{subId}'. See https://aka.ms/policy-register-subscription for how to register subscriptions.

  • policyinsightsdataplane.BaseClient#CheckDataPolicyCompliance: Failure responding to request: StatusCode=500 -- Original Error: autorest/azure: Service returned an error. Status=500 Code="InternalServerError" Message="Encountered an internal server error.

Причина

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

Резолюция

Microsoft.PolicyInsights Зарегистрируйте поставщика ресурсов в подписке кластера. Инструкции см. в разделе Регистрация поставщика ресурсов.

Сценарий: подписка отключена

Проблема

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

The subscription '{subId}' has been disabled for azure data-plane policy. Please contact support.

Причина

Эта ошибка означает, что подписка определена как проблематичная, и для блокировки подписки добавлен флаг функции Microsoft.PolicyInsights/DataPlaneBlocked.

Резолюция

Чтобы исследовать и устранить эту проблему, обратитесь к команде разработчиков.

Сценарий: определения в категории "Гостевая конфигурация" не могут дублироваться из портала Azure

Проблема

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

Причина

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

Резолюция

Вместо использования портала следует дублировать определение политики с помощью API Policy Insights. Следующий пример PowerShell может скопировать определение политики, включая метаданные с помощью Az.Resources 7.3.0 или более поздней версии.

# duplicates the built-in policy which audits Windows machines for pending reboots
$def = Get-AzPolicyDefinition -id "/providers/Microsoft.Authorization/policyDefinitions/4221adbc-5c0f-474f-88b7-037a99e6114c"
New-AzPolicyDefinition -name (new-guid).guid -DisplayName "$($def.DisplayName) (Copy)" -Description $def.Description -Metadata ($def.Metadata | convertto-json) -Parameter ($def.Parameter | convertto-json) -Policy ($def.PolicyRule | convertto-json -depth 15)

Сценарий: ресурс Kubernetes создается во время сбоя подключения, несмотря на то, что назначена политика запрета

Проблема

Если произошел сбой подключения к кластеру Kubernetes, оценка только что созданных или обновленных ресурсов может быть пропущена из-за поведения fail-open в Gatekeeper.

Причина

Модель GK с функцией сбоя в открытом состоянии была разработана на основе отзывов сообщества. Документация к Gatekeeper подробно объясняет эти причины здесь: https://open-policy-agent.github.io/gatekeeper/website/docs/failing-closed#considerations.

Резолюция

В предыдущем событии случай ошибки можно отслеживать с помощью метрик веб-перехватчика допуска, предоставляемых kube-apiserver. Если во время создания выполняется обход оценки и создается объект, он сообщает о Политика Azure соответствия требованиям как флаг для клиентов.

Независимо от сценария, политика Azure сохраняет последнюю известную политику в кластере и поддерживает контрольные механизмы.

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

Причина

Функция regex.match в rego использует RE2, которая по умолчанию не поддерживается многими онлайн-инструментами для работы с регулярными выражениями. Если вы тестируете регрессию в онлайн-сопоставлении, вы можете увидеть разные результаты от того, что будет оцениваться в кластере.

Резолюция

Вам потребуется выбрать вариант re2 или golang регулярных выражений в вашем обработчике. См. документацию по rego, чтобы получить больше информации о типе RE2 и о том, какие онлайн-инструменты рекомендуется использовать для тестирования ваших регулярных выражений.

Сценарий: я вижу большое количество обновлений в constraint.gatekeeper.sh CRDs и других ресурсах Gatekeeper

Причина

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

Резолюция

Проверьте наличие нескольких установок Gatekeeper. Удалите все компоненты Gatekeeper, не управляемые AKS.

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

Если проблема не указана в этой статье, или вам не удалось ее устранить, получите поддержку с помощью одно из следующих каналов.

  • Получите ответы от экспертов на веб-сайте Microsoft Q&A.
  • Свяжитесь с @AzureSupport. Этот официальный ресурс Microsoft Azure на X помогает улучшить взаимодействие с клиентами, подключив сообщество Azure к правильным ответам, поддержке и экспертам.
  • Если вам по-прежнему нужна помощь, перейдите на сайт поддержка Azure и выберите "Отправить запрос в службу поддержки".