Сведения о действии политик Azure

Каждое определение политики в Azure имеет один эффект. Этот эффект определяет, что происходит при вычислении правила политики при сопоставлении. Действия по-разному влияют на новые, обновленные и имеющиеся ресурсы.

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

Следующие эффекты являются нерекомендуемыми.

Важно!

Вместо эффектов EnforceOPAConstraint и EnforceRegoPolicy используйте audit и deny с режимом Microsoft.Kubernetes.Data поставщика ресурсов. Обновлены определения встроенных политик. При изменении существующих назначений политик для этих встроенных определений политик параметр effect необходимо изменить на значение в обновленном списке allowedValues.

Порядок вычислений

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

  • Действие Disabled проверяется первым. Таким образом определяется, нужно ли оценивать правило политики.
  • Затем оцениваются Append и Modify. Поскольку оба могут изменить запрос, а внесенное изменение может отменить вызов действия аудита или запрета. Эти эффекты доступны только в режиме Resource Manager.
  • Затем оценивается действие Deny (запрет). Запрет оценивается перед аудитом, чтобы нежелательный ресурс не заносился в журнал дважды.
  • Действие Audit оценивается последним.

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

Кроме того, запросы PATCH, которые только изменяют поля, связанные с tags, ограничивают оценку только политиками, содержащими условия, которые проверяют поля, связанные сtags.

Append

Это действие используется для добавления полей к запрашиваемому ресурсу во время создания или обновления. Типичный пример — указание разрешенных IP-адресов для ресурса хранилища.

Важно!

Append предназначено для использования со свойствами, не являющимися тегами. Несмотря на то что Append может добавлять теги к ресурсу во время запроса на создание или обновление, рекомендуется использовать Modify для тегов.

Оценка добавления

Добавление оценивается до обработки запроса поставщиком ресурсов во время создания или обновления ресурса. Это действие добавляет поля к ресурсу, если выполняется условие if правила политики. Если добавление приведет к замене значения в исходном запросе на другое значение, то оно работает как действие запрета и отклоняет запрос. Чтобы добавить новое значение к имеющемуся массиву, используйте версию псевдонима [*].

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

Свойства добавления

Действие добавления содержит только обязательный массив details. Так как свойство details представляет собой массив, оно может принимать как одну, так и несколько пар поле/значение. Список допустимых полей представлен в статье, посвященной структуре определения.

Примеры добавления

Пример 1. Одна пара поле/значение, использующая псевдоним без [*] с массивом value для установки правил IP-адресов в учетной записи хранения. Когда псевдоним без [*] находится в массиве, действие добавляет значение ко всему массиву. Если массив уже существует, из конфликта возникает событие отказа.

"then": {
    "effect": "append",
    "details": [{
        "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
        "value": [{
            "action": "Allow",
            "value": "134.5.0.0/21"
        }]
    }]
}

Пример 2. Одна пара поле/значение с использованием псевдонима[*] с массивом value для установки правил IP-адресов для учетной записи хранения. Путем использования псевдонима [*] действие добавляет массив value к потенциально имеющемуся массиву. Если массив еще не существует, он создается.

"then": {
    "effect": "append",
    "details": [{
        "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*]",
        "value": {
            "value": "40.40.40.40",
            "action": "Allow"
        }
    }]
}

Аудит

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

Оценка аудита

Аудит — это последнее действие проверки политики при создании или обновлении ресурса. В режиме Resource Manager Политика Azure затем отправляет ресурс в поставщик ресурсов. При оценке запроса на создание или обновление ресурса Политика Azure добавляет операцию Microsoft.Authorization/policies/audit/action в журнал действий и помечает ресурс как несоответствующий. В ходе стандартного цикла оценки соответствия обновляется только состояние соответствия для ресурса.

Свойства аудита

В режиме Resource Manager эффект аудита не содержит никаких дополнительных свойств для использования в условии then определения политики.

В режиме поставщика ресурсов Microsoft.Kubernetes.Data эффект аудита имеет следующие дополнительные подсвойства details. Использование параметра templateInfo является обязательным для новых или обновленных определений политик, так как constraintTemplate является устаревшим.

  • templateInfo (обязательный)
    • Не может использоваться с constraintTemplate.
    • sourceType (обязательный)
      • Определяет тип источника для шаблона ограничения. Допустимые значения: publicURL или Base64Encoded.

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

        Предупреждение

        Не используйте URI или маркеры SAS в url или другие объекты, которые могут предоставить доступ к секрету.

      • Если выбрано значение Base64Encoded, связанное со свойством content, чтобы предоставить шаблон ограничения с кодировкой Base 64. См. раздел Создание определения политики на основе шаблона ограничений, где приведены инструкции по созданию настраиваемого определения на основе существующего шаблона ограниченийагента Open Policy Agent (OPA) GateKeeper v3.

  • constraint (не рекомендуется)
    • Не может использоваться с templateInfo.
    • Реализация CRD шаблона ограничения. Использует параметры, передаваемые через значения как {{ .Values.<valuename> }}. В приведенном ниже примере 2 это значения {{ .Values.excludedNamespaces }} и {{ .Values.allowedContainerImagesRegex }}.
  • namespaces (необязательный)
    • Массивпространства имен Kubernetes, которым ограничивается вычисление политики.
    • Пустое или отсутствующее значение приводит к тому, что вычисление политики будет включать все пространства имен, за исключением определенных в ExcludedNamespaces.
  • excludedNamespaces (обязательный)
  • labelSelector (обязательный)
    • Объект, содержащий свойства matchLabels (объект) и matchExpression (массив), чтобы разрешить указывать ресурсы Kubernetes, которые следует включить в вычисление политики, сопоставленное с указанными метками и селекторами.
    • Пустое или отсутствующее значение приводит к тому, что вычисление политики будет включать все метки и селекторы, за исключением определенных в ExcludedNamespaces.
  • apiGroups (обязательный при использовании templateInfo)
    • Массив, содержащий группы API для сопоставления. Пустой массив ([""]) — это основная группа API.
    • Определение ["*"] для apiGroups запрещено.
  • kinds (обязательный при использовании templateInfo)
    • Массив, включающий тип объекта Kubernetes, которым ограничивается вычисление.
    • Определение ["*"] для параметра kinds запрещено.
  • values (необязательное)
    • Определяет все параметры и значения, передаваемые ограничению. Каждое значение должно существовать в шаблоне ограничения CRD.
  • constraintTemplate (не рекомендуется)
    • Не может использоваться с templateInfo.
    • Необходимо заменить на templateInfo при создании или обновлении определения политики.
    • Шаблон ограничения CustomResourceDefinition (CRD), который определяет новые ограничения. Этот шаблон определяет логику Rego, схему ограничения и параметры ограничения, которые передаются через значения из политики Azure.

Пример аудита

Пример 1. Использование эффекта аудита для режимов Resource Manager.

"then": {
    "effect": "audit"
}

Пример 2. Использование эффекта аудита для режима поставщика ресурсов Microsoft.Kubernetes.Data. Дополнительные сведения в details.templateInfo объявляют использование publicURL и задают url расположение шаблона ограничения для использования в Kubernetes, чтобы ограничить разрешенные образы контейнера.

"then": {
    "effect": "audit",
    "details": {
        "templateInfo": {
            "sourceType": "PublicURL",
            "url": "https://store.policy.core.windows.net/kubernetes/container-allowed-images/v1/template.yaml",
        },
        "values": {
            "imageRegex": "[parameters('allowedContainerImagesRegex')]"
        },
        "apiGroups": [""],
        "kinds": ["Pod"]
    }
}

AuditIfNotExists

Действие AuditIfNotExists позволяет выполнять аудит ресурсов, связанных с ресурсом, который соответствует условию if, но не имеет свойств, указываемых в параметре details условия then.

Оценка AuditIfNotExists

Действие AuditIfNotExists выполняется после того, как поставщик ресурсов обрабатывает запрос на создание или обновление запрос ресурса и возвращает код состояния, указывающий на успешное выполнение. Этот аудит происходит только при отсутствии связанных ресурсов или в том случае, если для ресурсов, определенных в условии ExistenceCondition, не возвращается значение true. Для новых и обновленных ресурсов Политика Azure добавляет операцию Microsoft.Authorization/policies/audit/action в журнал действий и помечает ресурс как несоответствующий. При вызове этого действия ресурс, соответствующий условию if, отмечается как несоответствующий.

Свойства AuditIfNotExists

Свойство details действия AuditIfNotExists содержит все дочерние свойства, определяющие связанные ресурсы для сопоставления.

  • Type (обязательное)
    • Указывает тип связанного ресурса для сопоставления.
    • Если type является типом ресурса в основе ресурса условия if, политика запрашивает ресурсы этого type в области вычисляемого ресурса. В противном случае политики отправляет запрос в той же группе ресурсов или подписке, что и у вычисляемого ресурса, в зависимости от existenceScope.
  • Name (необязательный)
    • Указывает точное имя сопоставляемого ресурса. При этом политика получает определенный ресурс, а не все ресурсы указанного типа.
    • Если значения условия для if.field.type и then.details.type совпадают, свойство Name становится обязательным и должно быть [field('name')] или [field('fullName')] для дочернего ресурса. Однако вместо этого следует учитывать действие audit.
  • ResourceGroupName (необязательный)
    • Позволяет сопоставить связанный ресурс из другой группы ресурсов.
    • Не применяется, если в свойстве type указан тип, относящийся к дочернему ресурсу для ресурса из условия if.
    • По умолчанию указывается группа ресурсов, в которую входит ресурс из условия if.
  • ExistenceScope (необязательный)
    • Допустимые значения: Subscription и ResourceGroup.
    • Задает область, из которой требуется получить связанный ресурс для сопоставления.
    • Не применяется, если в свойстве type указан тип, относящийся к дочернему ресурсу для ресурса из условия if.
    • Если задано значение ResourceGroup, область ограничивается группой ресурсов, в которую входит ресурс из условия if, или группой ресурсов, указанной в свойстве ResourceGroupName.
    • Если задано значение Subscription, запрос применяется ко всей подписке для связанного ресурса. Для правильного вычисления область назначения должна быть задана в подписке или на более высоком уровне.
    • По умолчанию задано значение ResourceGroup.
  • EvaluationDelay (необязательно)
    • Указывает, когда следует оценивать наличие связанных ресурсов. Задержка используется только для оценок, которые являются результатом запроса на создание или обновление ресурса.
    • Допустимые значения: AfterProvisioning, AfterProvisioningSuccess, AfterProvisioningFailure, или длительность ISO 8601 в диапазоне от 0 до 360 минут.
    • Значения AfterProvisioning проверяют результат подготовки ресурса, который был оценен в условии IF правила политики. AfterProvisioning запускается после завершения подготовки, независимо от результата. Если подготовка занимает более 6 часов, это рассматривается как сбой при определении задержек оценки AfterProvisioning.
    • По умолчанию используется значение PT10M (10 минут).
    • Указание длительной задержки оценки может привести к тому, что записанное состояние соответствия требованиям ресурса не обновится до следующего триггера оценки.
  • ExistenceCondition (необязательный)
    • Если это свойство не задано, действие применяется ко всем связанным ресурсам, тип которых соответствует свойству type, а аудит не выполняется.
    • Используется тот же язык, что и в правиле политики для условия if, но оно оценивается отдельно для каждого связанного ресурса.
    • Если при оценке какого-либо связанного ресурса возвращается значение true, то действие не вызывает аудит.
    • С помощью функции [field()] можно проверять эквивалентность значениям из условия if.
    • Например, можно убедиться, что родительский ресурс (из условия if) находится там же, где и соответствующий связанный ресурс.

Пример AuditIfNotExists

Пример. Оценка виртуальных машин для поиска антивредоносного расширения с последующим аудитом при его отсутствии.

{
    "if": {
        "field": "type",
        "equals": "Microsoft.Compute/virtualMachines"
    },
    "then": {
        "effect": "auditIfNotExists",
        "details": {
            "type": "Microsoft.Compute/virtualMachines/extensions",
            "existenceCondition": {
                "allOf": [{
                        "field": "Microsoft.Compute/virtualMachines/extensions/publisher",
                        "equals": "Microsoft.Azure.Security"
                    },
                    {
                        "field": "Microsoft.Compute/virtualMachines/extensions/type",
                        "equals": "IaaSAntimalware"
                    }
                ]
            }
        }
    }
}

Запрет

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

Оценка запрета

При создании или обновлении соответствующего ресурса в режиме Resource Manager запрет останавливает запрос до его отправки поставщику ресурсов. Запрос возвращает 403 (Forbidden). На портале для развертывания, запрещенного в связи с назначением политики, отображается состояние "Запрещено". В режиме поставщика ресурсов поставщик ресурсов управляет оценкой ресурса.

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

Свойства запрета

В режиме Resource Manager эффект запрета не содержит никаких дополнительных свойств для использования в условии then определения политики.

В режиме поставщика ресурсов Microsoft.Kubernetes.Data эффект запрета имеет следующие дополнительные подсвойства details. Использование параметра templateInfo является обязательным для новых или обновленных определений политик, так как constraintTemplate является устаревшим.

  • templateInfo (обязательный)
    • Не может использоваться с constraintTemplate.
    • sourceType (обязательный)
      • Определяет тип источника для шаблона ограничения. Допустимые значения: publicURL или Base64Encoded.

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

        Предупреждение

        Не используйте URI или маркеры SAS в url или другие объекты, которые могут предоставить доступ к секрету.

      • Если выбрано значение Base64Encoded, связанное со свойством content, чтобы предоставить шаблон ограничения с кодировкой Base 64. См. раздел Создание определения политики на основе шаблона ограничений, где приведены инструкции по созданию настраиваемого определения на основе существующего шаблона ограниченийагента Open Policy Agent (OPA) GateKeeper v3.

  • constraint (необязательный)
    • Не может использоваться с templateInfo.
    • Реализация CRD шаблона ограничения. Использует параметры, передаваемые через значения как {{ .Values.<valuename> }}. В приведенном ниже примере 2 это значения {{ .Values.excludedNamespaces }} и {{ .Values.allowedContainerImagesRegex }}.
  • namespaces (необязательный)
    • Массивпространства имен Kubernetes, которым ограничивается вычисление политики.
    • Пустое или отсутствующее значение приводит к тому, что вычисление политики будет включать все пространства имен, за исключением определенных в ExcludedNamespaces.
  • excludedNamespaces (обязательный)
  • labelSelector (обязательный)
    • Объект, содержащий свойства matchLabels (объект) и matchExpression (массив), чтобы разрешить указывать ресурсы Kubernetes, которые следует включить в вычисление политики, сопоставленное с указанными метками и селекторами.
    • Пустое или отсутствующее значение приводит к тому, что вычисление политики будет включать все метки и селекторы, за исключением определенных в ExcludedNamespaces.
  • apiGroups (обязательный при использовании templateInfo)
    • Массив, содержащий группы API для сопоставления. Пустой массив ([""]) — это основная группа API.
    • Определение ["*"] для apiGroups запрещено.
  • kinds (обязательный при использовании templateInfo)
    • Массив, включающий тип объекта Kubernetes, которым ограничивается вычисление.
    • Определение ["*"] для параметра kinds запрещено.
  • values (необязательное)
    • Определяет все параметры и значения, передаваемые ограничению. Каждое значение должно существовать в шаблоне ограничения CRD.
  • constraintTemplate (не рекомендуется)
    • Не может использоваться с templateInfo.
    • Необходимо заменить на templateInfo при создании или обновлении определения политики.
    • Шаблон ограничения CustomResourceDefinition (CRD), который определяет новые ограничения. Этот шаблон определяет логику Rego, схему ограничения и параметры ограничения, которые передаются через значения из политики Azure. Рекомендуется использовать более позднюю версию templateInfo для замены constraintTemplate.

Пример запрета

Пример 1. Использование эффекта запрета для режимов Resource Manager.

"then": {
    "effect": "deny"
}

Пример 2. Использование эффекта запрета для режима поставщика ресурсов Microsoft.Kubernetes.Data. Дополнительные сведения в details.templateInfo объявляют использование publicURL и задают url расположение шаблона ограничения для использования в Kubernetes, чтобы ограничить разрешенные образы контейнера.

"then": {
    "effect": "deny",
    "details": {
        "templateInfo": {
            "sourceType": "PublicURL",
            "url": "https://store.policy.core.windows.net/kubernetes/container-allowed-images/v1/template.yaml",
        },
        "values": {
            "imageRegex": "[parameters('allowedContainerImagesRegex')]"
        },
        "apiGroups": [""],
        "kinds": ["Pod"]
    }
}

DeployIfNotExists

Как и AuditIfNotExists, определение политики DeployIfNotExists выполняет шаблон развертывания при соблюдении условия. Для назначения политик с заданным эффектом DeployIfNotExists требуется управляемое удостоверение для исправления.

Примечание

Вложенные шаблоны поддерживаются с deployIfNotExists, но связанные шаблоны сейчас не поддерживаются.

Оценка DeployIfNotExists

Действие DeployIfNotExists выполняется после настраиваемой задержки, когда поставщик ресурсов обработает запрос на создание или обновление подписки или ресурса и возвращает код состояния, указывающий на успешное выполнение. Шаблон развертывания появляется только при отсутствии связанных ресурсов или в том случае, если для ресурсов, определенных в условии ExistenceCondition, не возвращается значение true. Длительность развертывания зависит от сложности ресурсов, включенных в шаблон.

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

Свойства DeployIfNotExists

Свойство details действия DeployIfNotExists содержит все дочерние свойства, определяющие связанные ресурсы для сопоставления и шаблон развертывания.

  • Type (обязательное)

    • Указывает тип связанного ресурса для сопоставления.
    • Если type является типом ресурса в основе ресурса условия if, политика запрашивает ресурсы этого type в области вычисляемого ресурса. В противном случае политики отправляет запрос в той же группе ресурсов или подписке, что и у вычисляемого ресурса, в зависимости от existenceScope.
  • Name (необязательный)

    • Указывает точное имя сопоставляемого ресурса. При этом политика получает определенный ресурс, а не все ресурсы указанного типа.
    • Если значения условия для if.field.type и then.details.type совпадают, свойство Name становится обязательным и должно быть [field('name')] или [field('fullName')] для дочернего ресурса.
  • ResourceGroupName (необязательный)

    • Позволяет сопоставить связанный ресурс из другой группы ресурсов.
    • Не применяется, если в свойстве type указан тип, относящийся к дочернему ресурсу для ресурса из условия if.
    • По умолчанию указывается группа ресурсов, в которую входит ресурс из условия if.
    • Шаблон развертывания выполняется в группе ресурсов, соответствующей этому значению.
  • ExistenceScope (необязательный)

    • Допустимые значения: Subscription и ResourceGroup.
    • Задает область, из которой требуется получить связанный ресурс для сопоставления.
    • Не применяется, если в свойстве type указан тип, относящийся к дочернему ресурсу для ресурса из условия if.
    • Если задано значение ResourceGroup, область ограничивается группой ресурсов, в которую входит ресурс из условия if, или группой ресурсов, указанной в свойстве ResourceGroupName.
    • Если задано значение Subscription, запрос применяется ко всей подписке для связанного ресурса. Для правильного вычисления область назначения должна быть задана в подписке или на более высоком уровне.
    • По умолчанию задано значение ResourceGroup.
  • EvaluationDelay (необязательно)

    • Указывает, когда следует оценивать наличие связанных ресурсов. Задержка используется только для оценок, которые являются результатом запроса на создание или обновление ресурса.
    • Допустимые значения: AfterProvisioning, AfterProvisioningSuccess, AfterProvisioningFailure, или длительность ISO 8601 в диапазоне от 0 до 360 минут.
    • Значения AfterProvisioning проверяют результат подготовки ресурса, который был оценен в условии IF правила политики. AfterProvisioning запускается после завершения подготовки, независимо от результата. Если подготовка занимает более 6 часов, это рассматривается как сбой при определении задержек оценки AfterProvisioning.
    • По умолчанию используется значение PT10M (10 минут).
    • Указание длительной задержки оценки может привести к тому, что записанное состояние соответствия требованиям ресурса не обновится до следующего триггера оценки.
  • ExistenceCondition (необязательный)

    • Если это свойство не задано, действие применяется ко всем связанным ресурсам, тип которых соответствует свойству type, а развертывание не активируется.
    • Используется тот же язык, что и в правиле политики для условия if, но оно оценивается отдельно для каждого связанного ресурса.
    • Если при оценке какого-либо связанного ресурса возвращается значение true, то действие не активирует развертывание.
    • С помощью функции [field()] можно проверять эквивалентность значениям из условия if.
    • Например, можно убедиться, что родительский ресурс (из условия if) находится там же, где и соответствующий связанный ресурс.
  • roleDefinitionIds (обязательное)

    • Это свойство должно содержать массив строк, которые соответствуют идентификатору роли управления доступом на основе ролей, доступному для определенной подписки. Дополнительные сведения см. в разделе Настройка определения политики.
  • DeploymentScope (необязательно)

    • Допустимые значения: Subscription и ResourceGroup.
    • Задает тип инициируемого развертывания. Subscription указывает на развертывание на уровне подписки, а ResourceGroup — на развертывание в группе ресурсов.
    • Свойство location должно быть указано для объекта Deployment при использовании развертываний на уровне подписки.
    • По умолчанию задано значение ResourceGroup.
  • Deployment (обязательное)

    • Это свойство должно содержать полный шаблон развертывания, так как оно будет передано в API PUT Microsoft.Resources/deployments. Дополнительные сведения см. в документации по REST API развертываний.
    • Вложенный объект Microsoft.Resources/deployments в шаблоне должен использовать уникальные имена, чтобы избежать конфликта между несколькими оценками политики. Имя родительского развертывания можно использовать как часть имени вложенного развертывания через [concat('NestedDeploymentName-', uniqueString(deployment().name))].

    Примечание

    Все функции в свойстве Deployment оцениваются как компоненты шаблона, а не политики. Исключение составляет свойство parameters, передающее значения из политики в шаблон. Свойство value из этого раздела под именем параметра шаблона используется для передачи значения (см. fullDbName в примере DeployIfNotExists).

Пример DeployIfNotExists

Пример. Оценка баз данных SQL Server, позволяющая определить, включен ли параметр transparentDataEncryption. Если это не так, выполняется развертывание для включения.

"if": {
    "field": "type",
    "equals": "Microsoft.Sql/servers/databases"
},
"then": {
    "effect": "DeployIfNotExists",
    "details": {
        "type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
        "name": "current",
        "evaluationDelay": "AfterProvisioning",
        "roleDefinitionIds": [
            "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
            "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
        ],
        "existenceCondition": {
            "field": "Microsoft.Sql/transparentDataEncryption.status",
            "equals": "Enabled"
        },
        "deployment": {
            "properties": {
                "mode": "incremental",
                "template": {
                    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {
                        "fullDbName": {
                            "type": "string"
                        }
                    },
                    "resources": [{
                        "name": "[concat(parameters('fullDbName'), '/current')]",
                        "type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
                        "apiVersion": "2014-04-01",
                        "properties": {
                            "status": "Enabled"
                        }
                    }]
                },
                "parameters": {
                    "fullDbName": {
                        "value": "[field('fullName')]"
                    }
                }
            }
        }
    }
}

Выключено

Это действие применяется при тестировании или для определения, имеет ли политика параметризованное действие. Такая гибкость позволяет отключить одно назначение этой политики вместо всех назначений.

Альтернативой эффекту Disabled является enforcementMode, который задается в назначении политики. Когда enforcementMode является Disabled, ресурсы все равно оцениваются. Ведение журнала, например журналов действий, и последствий применения политик не выполняются. Дополнительные сведения см. в назначение политик — режим применения.

EnforceOPAConstraint

Это действие используется с определением политики mode из Microsoft.Kubernetes.Data. Оно используется для передачи правил управления допуском Gatekeeper v3, определенных с помощью OPA Constraint Framework, Open Policy Agent (OPA) в кластерах Kubernetes в Azure.

Важно!

Определения политик ограниченной предварительной версии с помощью эффекта EnforceRegoPolicy, а также связанная категория Kubernetes Service являются нерекомендуемыми. Вместо них используйте эффекты аудит и запретить в режиме поставщика ресурсов Microsoft.Kubernetes.Data.

Оценка EnforceOPAConstraint

Контроллер допуска Open Policy Agent оценивает все новые запросы в кластере в режиме реального времени. Каждые 15 минут завершается полное сканирование кластера и результаты отправляются политике Azure.

Свойства EnforceOPAConstraint

Свойство details для действия EnforceOPAConstraint имеет вложенные свойства, описывающие правило управления допуском Gatekeeper v3.

  • constraintTemplate (обязательное)
    • Шаблон ограничения CustomResourceDefinition (CRD), который определяет новые ограничения. Этот шаблон определяет логику Rego, схему ограничения и параметры ограничения, которые передаются через значения из политики Azure.
  • constraint (обязательное)
    • Реализация CRD шаблона ограничения. Использует параметры, передаваемые через значения как {{ .Values.<valuename> }}. В следующем примере эти значения — {{ .Values.cpuLimit }} и {{ .Values.memoryLimit }}.
  • values (необязательное)
    • Определяет все параметры и значения, передаваемые ограничению. Каждое значение должно существовать в шаблоне ограничения CRD.

Пример EnforceOPAConstraint

Пример Правило управления допуском Gatekeeper v3 для задания ограничений контейнера ЦП и ресурсов памяти в Kubernetes.

"if": {
    "allOf": [
        {
            "field": "type",
            "in": [
                "Microsoft.ContainerService/managedClusters",
                "AKS Engine"
            ]
        },
        {
            "field": "location",
            "equals": "westus2"
        }
    ]
},
"then": {
    "effect": "enforceOPAConstraint",
    "details": {
        "constraintTemplate": "https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/Kubernetes/container-resource-limits/template.yaml",
        "constraint": "https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/Kubernetes/container-resource-limits/constraint.yaml",
        "values": {
            "cpuLimit": "[parameters('cpuLimit')]",
            "memoryLimit": "[parameters('memoryLimit')]"
        }
    }
}

EnforceRegoPolicy

Это действие используется с определением политики mode из Microsoft.ContainerService.Data. Оно используется для передачи правил управления допуском Gatekeeper v2, определенных с помощью Rego, Open Policy Agent (OPA) в службе AzureKubernetes.

Важно!

Определения политик ограниченного просмотра с помощью действия EnforceRegoPolicy, а также связанная категория Kubernetes Service являются устаревшими. Вместо них используйте эффекты аудит и запретить в режиме поставщика ресурсов Microsoft.Kubernetes.Data.

Оценка EnforceRegoPolicy

Контроллер допуска Open Policy Agent оценивает все новые запросы в кластере в режиме реального времени. Каждые 15 минут завершается полное сканирование кластера и результаты отправляются политике Azure.

Свойства EnforceRegoPolicy

Свойство details для действия EnforceRegoPolicy имеет вложенные свойства, описывающие правило управления допуском Gatekeeper v2.

  • policyId (обязательное)
    • Уникальное имя, передаваемое в качестве параметра в правило управления допуском Rego.
  • policy (обязательное)
    • Указывает универсальный код ресурса (URI) правила управления допуском Rego.
  • policyParameters (необязательное)
    • Определяет все параметры и значения, передаваемые политике Rego.

Пример EnforceRegoPolicy

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

"if": {
    "allOf": [
        {
            "field": "type",
            "equals": "Microsoft.ContainerService/managedClusters"
        },
        {
            "field": "location",
            "equals": "westus2"
        }
    ]
},
"then": {
    "effect": "EnforceRegoPolicy",
    "details": {
        "policyId": "ContainerAllowedImages",
        "policy": "https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/KubernetesService/container-allowed-images/limited-preview/gatekeeperpolicy.rego",
        "policyParameters": {
            "allowedContainerImagesRegex": "[parameters('allowedContainerImagesRegex')]"
        }
    }
}

Изменить

Действие Modify используется для добавления, обновления или удаления свойств или тегов в подписке или ресурсе во время создания или обновления. Распространенный пример — обновление тегов для таких ресурсов, как costCenter. Существующие несоответствующие ресурсы можно исправить, активировав задачу исправления. Одно правило Modify может иметь любое количество операций. Для назначения политик с заданным эффектом Modify требуется управляемое удостоверение для исправления.

Действие Modify поддерживает следующие операции.

  • Добавление, замена или удаление тегов ресурсов. Для тегов в политике Modify параметр mode должен иметь значение Indexed, если целевой ресурс не является группой ресурсов.
  • Добавление или замена значения типа управляемого удостоверения (identity.type) для виртуальных машин и масштабируемых наборов виртуальных машин.
  • Добавление или замена значений определенных псевдонимов.
    • ИспользоватьGet-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' } в Azure PowerShell 4.6.0 или более поздней версии, чтобы получить список псевдонимов, которые можно использовать с действием Modify.

Важно!

Если вы управляете тегами, рекомендуется использовать Modify вместо Append, так как Modify предоставляет дополнительные типы операций и возможность исправлять существующие ресурсы. Однако, если вы не можете создать управляемое удостоверение или если Modify еще не поддерживает псевдоним для свойства ресурса, рекомендуется использовать Append.

Оценка Modify

Modify выполняет оценку до обработки запроса поставщиком ресурсов во время создания или обновления ресурса. Операции Modify применяются к содержимому запроса, когда выполняется условие if правила политики. Каждая операция Modify может указывать условие, определяющее, когда она применяется. Операции с условиями, которые оцениваются как false, пропускаются.

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

  • Свойство, с которым сопоставлен псевдоним, помечено как изменяемое в версии API запроса.
  • Тип токена в операции Modify соответствует ожидаемому типу токена для свойства в версии API запроса.

Если какая-либо из этих проверок завершается неудачно, оценка политики возвращается к указанному conflictEffect.

Важно!

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

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

Свойства Modify

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

  • roleDefinitionIds (обязательное)
    • Это свойство должно содержать массив строк, которые соответствуют идентификатору роли управления доступом на основе ролей, доступному для определенной подписки. Дополнительные сведения см. в разделе Настройка определения политики.
    • Определенная роль должна включать все операции, предоставленные участнику роли Contributor.
  • conflictEffect (необязательное)
    • Определяет, какое определение политики "побеждает", если несколько определений политики изменяют одно и то же свойство или если операция Modify не работает с указанным псевдонимом.
      • Для новых или обновленных ресурсов приоритет имеет определение политики с действием deny. Определения политик с действием audit пропускают все операции. Если deny присутствует в нескольких определениях политики, запрос отклоняется из-за конфликта. Если audit присутствует во всех определениях политики, то ни одна из операций конфликтующих определений политик не обрабатывается.
      • Для существующих ресурсов при наличии более одного определения политики с действием deny состояние соответствия устанавливается как Conflict (Конфликт). Если deny присутствует не более чем в одном определении политики, каждое назначение возвращает состояние соответствия Non-compliant (Несоответствие).
    • Возможные значения: audit, deny, disabled.
    • Значение по умолчанию: deny.
  • operations (обязательное)
    • Массив всех операций тегов, которые должны быть выполнены при сопоставлении ресурсов.
    • Свойства:
      • operation (обязательное)
        • Определяет, какое действие следует предпринять с совпавшим ресурсом. Возможные варианты: addOrReplace, Add, Remove. Add ведет себя так же, как и Append.
      • field (обязательное)
        • Добавляемый, заменяемый или удаляемый тег Имена тегов должны соответствовать тому же соглашению об именовании, что и другие поля.
      • value [необязательное]
        • Задаваемое значение тега.
        • Это свойство является обязательным, если operation (операцией) является addOrReplace или Add.
      • condition (необязательное)
        • Строка, содержащая выражение языка Политики Azure с функциями политики, результатом оценки которого может быть значение true или false.
        • Не поддерживаются следующие функции политики: field(), resourceGroup(), subscription().

Операции Modify

Массив свойств operation позволяет изменять несколько тегов различными способами из одного определения политики. Каждая операция состоит из свойств operation (операция), field (поле) и value (значение). Операция определяет, что делает задача исправления в тегах, поле определяет, какой тег изменяется, а значение определяет новый параметр для этого тега. В следующем примере вносятся следующие изменения тегов.

  • Задает для тега environment значение Test, даже если он уже существует с другим значением.
  • Удаляет тег TempResource.
  • Задает тег Dept для параметра политики DeptName, настроенного для назначения политики.
"details": {
    ...
    "operations": [
        {
            "operation": "addOrReplace",
            "field": "tags['environment']",
            "value": "Test"
        },
        {
            "operation": "Remove",
            "field": "tags['TempResource']",
        },
        {
            "operation": "addOrReplace",
            "field": "tags['Dept']",
            "value": "[parameters('DeptName')]"
        }
    ]
}

Свойство operation имеет следующие параметры.

Операция Описание
addOrReplace Добавляет в ресурс заданное свойство или тег и значение, даже если это свойство или тег уже существует с другим значением.
Add Добавляет в ресурс заданное свойство или тег и значение.
Удалить Удаляет из ресурса заданное свойство или тег.

Примеры Modify

Пример 1: Добавьте тег environment и замените существующие теги environment на Test.

"then": {
    "effect": "modify",
    "details": {
        "roleDefinitionIds": [
            "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
        ],
        "operations": [
            {
                "operation": "addOrReplace",
                "field": "tags['environment']",
                "value": "Test"
            }
        ]
    }
}

Пример 2. Удалите тег env и добавьте тег environment или замените существующие теги environment параметризованным значением.

"then": {
    "effect": "modify",
    "details": {
        "roleDefinitionIds": [
            "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
        ],
        "conflictEffect": "deny",
        "operations": [
            {
                "operation": "Remove",
                "field": "tags['env']"
            },
            {
                "operation": "addOrReplace",
                "field": "tags['environment']",
                "value": "[parameters('tagValue')]"
            }
        ]
    }
}

Пример 3. Убедитесь, что учетная запись хранения не разрешает общий доступ к BLOB-объекту; операция Modify применяется, только когда результат оценки запросов на версию API не ниже 2019-04-01.

"then": {
    "effect": "modify",
    "details": {
        "roleDefinitionIds": [
            "/providers/microsoft.authorization/roleDefinitions/17d1049b-9a84-46fb-8f53-869881c3d3ab"
        ],
        "conflictEffect": "audit",
        "operations": [
            {
                "condition": "[greaterOrEquals(requestContext().apiVersion, '2019-04-01')]",
                "operation": "addOrReplace",
                "field": "Microsoft.Storage/storageAccounts/allowBlobPublicAccess",
                "value": false
            }
        ]
    }
}

Наложение определений политик

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

  • Политика 1
    • Ограничивает расположение ресурсов для региона "westus"
    • Назначенная подписка А
    • Результат запрета
  • Политика 2
    • Ограничивает расположение ресурсов для региона "eastus"
    • Назначенные группе ресурсов B в подписке A
    • Действие аудита

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

  • Любой ресурс, уже входящий в группу ресурсов В и находящийся в регионе "eastus", соответствует политике 2, но не соответствует политике 1.
  • Любой ресурс, уже входящий в группу ресурсов В и не находящийся в регионе "eastus", не соответствует политике 2 и политике 1, если не находится в регионе "westus".
  • Любой новый ресурс в подписке А, не расположенный в регионе "westus", отклоняется политикой 1.
  • Любой новый ресурс, который создается в подписке A и группе ресурсов В, расположенный в регионе "westus" и не соответствует политике 2.

Если задать для политик 1 и 2 действие запрета, ситуация изменится следующим образом.

  • Любой ресурс, уже входящий в группу ресурсов В, но не расположенный в регионе "eastus", не соответствует политике 2.
  • Любой ресурс, уже входящий в группу ресурсов В, но не расположенный в регионе "westus", не соответствует политике 1.
  • Любой новый ресурс в подписке А, не расположенный в регионе "westus", отклоняется политикой 1.
  • Любой новый ресурс в группе ресурсов B в подписке A запрещается.

Каждое назначение оценивается по отдельности. Таким образом, у ресурса нет возможности ускользнуть из-за различий в объеме. Общий результат наложения определений политик считается накопительным по принципу максимальной строгости. Например, если бы политики 1 и 2 имели эффект запрета, ресурс был бы заблокирован перекрывающимися и конфликтующими определениями политик. Если вам все равно нужно создать ресурс в целевой области, пересмотрите исключения в каждом назначении, чтобы гарантировать, что определения политик влияют на правильные области.

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