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


Политика Azure определения изменяют эффект

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

Существуют некоторые нюансы в поведении изменения свойств ресурса. Узнайте больше о сценариях при пропуске изменений.

Одно modify правило может иметь любое количество операций. Поддерживаемые операции:

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

Внимание

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

Оценка Modify

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

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

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

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

Внимание

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

Пропущенная модификация

В некоторых случаях операции изменения пропускаются во время оценки:

  • Существующие ресурсы: если определение политики с помощью modify эффекта выполняется в рамках цикла оценки, он не вносит изменения в ресурсы, которые уже существуют. Вместо этого он помечает if любой ресурс, соответствующий условию, как несоответствующий требованиям, чтобы их можно было исправить с помощью задачи исправления.
  • Неприменимо. Если условие операции в operations массиве оценивается как false, эта конкретная операция пропускается.
  • Свойство не изменяется: если псевдоним, указанный для операции, не изменяется в версии API запроса, то оценка использует эффект конфликта. Если для эффекта конфликта задано отклонение, запрос блокируется. Если для результата конфликта задано значение аудита, запрос разрешен, но modify операция пропускается.
  • Свойство не присутствует: если свойство отсутствует в полезных данных ресурса запроса, изменение может быть пропущено. В некоторых случаях изменяемые свойства вложены в другие свойства и имеют псевдоним.Microsoft.Storage/storageAccounts/blobServices/deleteRetentionPolicy.enabled Если свойство "parent", в данном случае deleteRetentionPolicy, отсутствует в запросе, изменение пропускается, так как это свойство, как предполагается, опущено намеренно. В практическом примере перейдите к разделу Example of property not present.
  • Не операция идентификации виртуальной машины или виртуальной машины. Если операция изменения пытается добавить или заменить identity.type поле в ресурсе, отличном от виртуальной машины или масштабируемого набора виртуальных машин, оценка политики пропускается полностью, поэтому изменение не выполняется. В этом случае ресурс считается неприменимым к политике.

Пример свойства не присутствует

Изменение свойств ресурсов зависит от запроса API и обновленной полезных данных ресурса. Полезные данные могут зависеть от используемых клиентов, таких как портал Azure, и других факторов, таких как поставщик ресурсов.

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

Однако при применении политики, которая изменяет свойства на виртуальной машине, изменение зависит от полезных данных ресурса. Если вы пытаетесь изменить свойства, которые не включены в полезные данные обновления, изменение не будет выполнено. Например, это может произойти при исправлении assessmentMode свойства виртуальной машины (псевдоним Microsoft.Compute/virtualMachines/osProfile.windowsConfiguration.patchSettings.assessmentMode). Свойство "вложено", поэтому если его родительские свойства не включены в запрос, это упущение, как предполагается, является преднамеренным и изменение пропускается. Для изменения полезные данные ресурса должны содержать этот контекст.

Свойства Modify

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

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

Операции Modify

Массив operations свойств позволяет изменять несколько тегов по-разному от одного определения политики. Каждая операция состоит из operationсвойств fieldи value свойств. Определяет 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 имеет следующие параметры:

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

Примеры 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
      }
    ]
  }
}

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