Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эффект 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.
- Используйте
Important
Если вы управляете тегами, рекомендуется использовать "Изменить" вместо "Добавить", так как "Изменить" предоставляет больше типов операций и возможность исправления существующих ресурсов. Однако рекомендуется использовать Append, если вы не можете создать управляемое удостоверение, или Modify ещё не поддерживает псевдоним для свойства ресурса.
Изменение оценки
Оценка изменений производится до того, как запрос будет обработан поставщиком ресурсов при создании или обновлении ресурса. Операции modify применяются к содержимому запроса при if выполнении условия правила политики. Каждая modify операция может указать условие, определяющее, когда оно применяется.
При указании псевдонима выполняются дополнительные проверки, чтобы убедиться, что modify операция не изменяет содержимое запроса таким образом, чтобы поставщик ресурсов отклонить его:
- Свойство, которое сопоставляется псевдонимом, помечено как Изменяемое в версии API запроса.
- Тип маркера в
modifyоперации соответствует ожидаемому типу маркера для свойства в версии API запроса.
Если одно из этих проверок завершается ошибкой, оценка политики возвращается к указанному conflictEffect.
Important
Рекомендуется модифицировать определения, включающие псевдонимы, используя аудитэффект конфликта, чтобы избежать неудачных запросов в версиях API, в которых сопоставленное свойство не является 'Modifiable'. Если одинаковый псевдоним ведет себя по-разному между версиями API, операции условного изменения можно использовать для определения операции, используемой modify для каждой версии API.
Пропущенная модификация
В некоторых случаях операции изменения пропускаются во время оценки:
-
Существующие ресурсы: Если определение политики, использующее
modifyэффект, выполняется как часть цикла оценки, он не вносит изменения в ресурсы, которые уже существуют. Вместо этого любой ресурс, который соответствует условиюif, помечается как несоответствующий, чтобы его можно было исправить с помощью ремедиационной задачи. -
Неприменимо: Если условие операции в
operationsмассиве оценивается как false, эта конкретная операция пропускается. -
Свойство не изменяется: Если псевдоним, указанный для операции, не изменяется в версии API запроса, то оценка использует эффект конфликта. Если для эффекта конфликта задано отклонение, запрос блокируется. Если для эффекта конфликта задано значение audit, запрос разрешен, но
modifyоперация пропускается. -
Свойство не присутствует: Если свойство отсутствует в полезных данных ресурса запроса, изменение может быть пропущено. В некоторых случаях изменяемые свойства вложены в другие свойства и имеют псевдоним.
Microsoft.Storage/storageAccounts/blobServices/deleteRetentionPolicy.enabledЕсли свойство "parent", в данном случаеdeleteRetentionPolicy, отсутствует в запросе, изменение пропускается, так как это свойство, как предполагается, опущено намеренно. В качестве практического примера перейдите к разделу Пример отсутствия свойства. -
Операция удостоверения, не связанная с виртуальной машиной или VMSS: Когда операция изменения пытается добавить или заменить
identity.typeполе в ресурсе, отличном от виртуальной машины или масштабируемого набора виртуальных машин, оценка политики полностью пропускается, и изменение не выполняется. В этом случае ресурс считается неприменимым к политике.
Пример свойства не присутствует
Изменение свойств ресурсов зависит от запроса API и обновлённых данных ресурса. Нагрузка может зависеть от используемого клиента, например, портала Azure, и других факторов, таких как поставщик ресурсов.
Представьте, что вы применяете политику, которая изменяет теги на виртуальной машине. При каждом обновлении виртуальной машины, например при изменении размера или изменения диска, теги обновляются соответствующим образом независимо от содержимого полезных данных виртуальной машины. Это связано с тем, что теги не зависят от свойств виртуальной машины.
Однако при применении политики, которая изменяет свойства на виртуальной машине, изменение зависит от нагрузки ресурса. Если вы пытаетесь изменить свойства, которые не содержатся в пакете обновления, изменение не будет выполнено. Например, это может произойти при исправлении assessmentMode свойства виртуальной машины (псевдоним Microsoft.Compute/virtualMachines/osProfile.windowsConfiguration.patchSettings.assessmentMode). Свойство "вложенное", поэтому если его родительские свойства не включены в запрос, это упущение считается преднамеренным, и изменение не выполняется. Для выполнения изменений пейлоад ресурса должен содержать этот контекст.
Изменение свойств
Свойство detailsmodify эффекта имеет все вложенные свойства, определяющие разрешения, необходимые для исправления, и operations используемые для добавления, обновления или удаления значений тегов.
-
roleDefinitionIds(обязательно)- Это свойство должно содержать массив строк, которые соответствуют идентификаторам ролей управления доступом на основе ролей, доступных для подписки. Для получения дополнительной информации см. раздел Устранение - настройка определения политики.
- Роль, которую вы определили, должна включать все операции, предоставленные роли участника/участника тегов.
-
conflictEffect(необязательно)- Определяет, какое определение политики "выигрывает", если несколько определений политики изменяют одно и то же свойство или когда
modifyоперация не работает над указанным псевдонимом.- Для новых или обновленных ресурсов определение политики с запретом имеет приоритет. Определения политик с аудитом пропускают все
operations. Если несколько определений политики имеют эффект запрета, запрос отклоняется как конфликт. Если все определения политик аудит, то ни одно изoperationsконфликтующих определений политики не обрабатывается. - Для существующих ресурсов, если несколько определений политики имеют эффект запрета, состояние соответствия - конфликт. Если одно или менее определений политики имеют эффект отказ, каждое назначение возвращает состояние соответствия Несоответствие.
- Для новых или обновленных ресурсов определение политики с запретом имеет приоритет. Определения политик с аудитом пропускают все
- Доступные значения: аудит, запрет, отключение.
- Значение по умолчанию запрещено.
- Определяет, какое определение политики "выигрывает", если несколько определений политики изменяют одно и то же свойство или когда
-
operations(обязательно)- Массив всех операций тегов, которые необходимо выполнить при сопоставлении ресурсов.
- Properties:
-
operation(обязательно)- Определяет, какое действие необходимо предпринять для соответствующего ресурса. Параметры:
addOrReplace,AddиRemove. -
Addработает аналогично эффекту добавления . -
Removeподдерживается только для тегов ресурсов.
- Определяет, какое действие необходимо предпринять для соответствующего ресурса. Параметры:
-
field(обязательно)- Тег для добавления, замены или удаления. Имена тегов должны соответствовать тому же соглашению об именовании для других полей.
-
value(необязательно)- Значение для задания тега.
- Это свойство является обязательным, если
operationэто addOrReplace или Add.
-
condition(необязательно)- Строка, содержащая выражение языка политики Azure с функциями политики , которые оцениваются как true или false.
- Не поддерживает следующие функции политики:
field(),resourceGroup(),subscription().
-
Изменение операций
Массив 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 имеет следующие параметры:
| Operation | Description |
|---|---|
addOrReplace |
Добавляет определенное свойство или тег и значение в ресурс, даже если свойство или тег уже существует с другим значением. |
add |
Добавляет определенное свойство или тег и значение в ресурс. |
remove |
Удаляет определенный тег из ресурса. Поддерживается только для тегов. |
Изменение примеров
Пример 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
}
]
}
}
Дальнейшие шаги
- Изучите примеры на странице примеров Политики Azure.
- Изучите статью о структуре определения Политики Azure.
- Узнайте о программном создании политик.
- Узнайте, как получать данные о соответствии.
- Узнайте, как исправлять несоответствующие ресурсы.
- Просмотрите группы управления Azure.