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


Структура назначения политики в Azure

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

Вы используете нотацию объектов JavaScript (JSON) для создания назначения политики. Назначение политики содержит следующие элементы:

Например, в следующем формате JSON показан пример запроса на назначение политики в режиме DoNotEnforce с параметрами:

{
  "properties": {
    "displayName": "Enforce resource naming rules",
    "description": "Force resource names to begin with DeptA and end with -LC",
    "definitionVersion": "1.*.*",
    "metadata": {
      "assignedBy": "Cloud Center of Excellence"
    },
    "enforcementMode": "DoNotEnforce",
    "notScopes": [],
    "policyDefinitionId": "/subscriptions/{mySubscriptionID}/providers/Microsoft.Authorization/policyDefinitions/ResourceNaming",
    "nonComplianceMessages": [
      {
        "message": "Resource names must start with 'DeptA' and end with '-LC'."
      }
    ],
    "parameters": {
      "prefix": {
        "value": "DeptA"
      },
      "suffix": {
        "value": "-LC"
      }
    },
    "identity":  {
      "principalId":  "<PrincipalId>",
      "tenantId":  "<TenantId>",
      "identityType":  "SystemAssigned",
      "userAssignedIdentities":  null
    },
    "location":  "westus",
    "resourceSelectors": [],
    "overrides": [],
  }
}

Область

Область, используемая для времени создания ресурса назначения, является основным драйвером применимости ресурсов. Дополнительные сведения об объеме задания см. в разделе "Понимание области в Azure Policy".

Идентификатор определения политики и версия (предварительная версия)

В этом поле должен быть указан полный путь к определению политики или инициативы. Это policyDefinitionId строка, а не массив. Содержимое определения назначенной политики или инициативы обновляется каждый раз, когда оценивается назначение политики. Рекомендация заключается в том, что если несколько политик часто назначаются вместе, вместо этого следует использовать инициативу.

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

  • Для автоматического внесения любых незначительных изменений в определение номер версии будет #.*.*. Подстановочный знак представляет собой автоматический процесс приема обновлений.
  • Чтобы закрепить путь к младшей версии, формат версии будет #.#.*.
  • Все изменения в патчах должны быть автоматически внедрены для целей безопасности. Изменения исправлений ограничены текстовыми изменениями и экстренными сценариями.

Отображаемое имя и описание

Вы используете displayName и description определяете назначение политики и предоставляете контекст для его использования с определенным набором ресурсов. displayNameимеет максимальную длину 128 символов и максимальную длину description символов.

Метаданные

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

Общие свойства метаданных

  • assignedBy (строка): дружественное имя субъекта безопасности, создавшего назначение.
  • createdBy (строка): GUID субъекта безопасности, создавшего назначение.
  • createdOn (строка): универсальный формат ISO 8601 DateTime для времени создания задачи.
  • updatedBy (строка): понятное имя представителя безопасности, обновившего назначение, если имеется.
  • updatedOn (строка): универсальный формат ISO 8601 DateTime для времени обновления назначения (если обновление имело место).

Свойства конкретных метаданных сценария

  • parameterScopes (объект): набор пар "ключ-значение", в которых ключ соответствует заданному имени параметра strongType, а значение определяет область ресурса, используемую на портале для формирования списка доступных ресурсов путем сопоставления strongType. Портал задает это значение, если область отличается от области назначения. Если оно задано, изменение назначения политики на портале автоматически приводит к установке этого значения в качестве области параметра. Однако область не фиксируется на значении и может быть изменена на другую область.

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

    "metadata": {
        "parameterScopes": {
          "backupPolicyId": "/subscriptions/{SubscriptionID}/resourcegroups/{ResourceGroupName}"
        }
    }
    
  • evidenceStorages (объект): рекомендуемая по умолчанию учетная запись хранения, которая должна использоваться для хранения доказательств в подтверждение назначений политик с эффектом manual. Свойство displayName — это имя учетной записи хранения. Это evidenceStorageAccountID свойство является идентификатором ресурса учетной записи хранения. Свойство evidenceBlobContainer — это имя контейнера BLOB-объектов, в котором планируется хранить доказательства.

    {
      "properties": {
        "displayName": "A contingency plan should be in place to ensure operational continuity for each Azure subscription.",
        "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/{definitionId}",
        "metadata": {
          "evidenceStorages": [
            {
              "displayName": "Default evidence storage",
              "evidenceStorageAccountId": "/subscriptions/{subscriptionId}/resourceGroups/{rg-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name}",
              "evidenceBlobContainer": "evidence-container"
            }
          ]
        }
      }
    }
    

Селекторы ресурсов

Необязательное resourceSelectors свойство упрощает безопасные методики развертывания (SDP), позволяя постепенно вводить в эксплуатацию назначения политик на основе таких факторов, как расположение ресурсов, тип ресурса, или наличие у ресурса местоположения. При использовании селекторов ресурсов Политика Azure оценивает только ресурсы, применимые к спецификациям, сделанным в селекторах ресурсов. Селекторы ресурсов также можно использовать для уменьшения области исключений таким же образом.

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

{
  "properties": {
    "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyDefinitions/ResourceLimit",
    "definitionVersion": "1.1.*",
    "resourceSelectors": [
      {
        "name": "SDPRegions",
        "selectors": [
          {
            "kind": "resourceLocation",
            "in": [
              "eastus",
              "westus"
            ]
          }
        ]
      }
    ]
  },
  "systemData": { ...
  },
  "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/ResourceLimit",
  "type": "Microsoft.Authorization/policyAssignments",
  "name": "ResourceLimit"
}

Когда вы будете готовы расширить объем оценки для своей политики, вам просто нужно обновить назначение. В следующем примере показано назначение политики с двумя дополнительными регионами Azure, добавленными в селектор SDPRegions . Обратите внимание, что в этом примере SDP означает безопасное развертывание.

{
  "properties": {
    "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyDefinitions/ResourceLimit",
    "definitionVersion": "1.1.*",
    "resourceSelectors": [
      {
        "name": "SDPRegions",
        "selectors": [
          {
            "kind": "resourceLocation",
            "in": [
              "eastus",
              "westus",
              "centralus",
              "southcentralus"
            ]
          }
        ]
      }
    ]
  },
  "systemData": { ...
  },
  "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/ResourceLimit",
  "type": "Microsoft.Authorization/policyAssignments",
  "name": "ResourceLimit"
}

Селекторы ресурсов имеют следующие свойства:

  • name: имя селектора ресурсов.

  • selectors: (Необязательно) Свойство, используемое для определения подмножества ресурсов, применимых к назначению политики, следует оценить для соответствия.

    • kind: свойство селектора, описывающее, какая характеристика сужает набор вычисляемых ресурсов. Каждый вид можно использовать только один раз в одном селекторе ресурсов. Допустимые значения:

      • resourceLocation: это свойство используется для выбора ресурсов на основе их типа. Нельзя использовать в том же селекторе ресурсов, что и resourceWithoutLocation.

      • resourceType: это свойство используется для выбора ресурсов на основе их типа.

      • resourceWithoutLocation: это свойство используется для выбора ресурсов на уровне подписки, которые не имеют расположения. В настоящее время поддерживается только subscriptionLevelResources. Нельзя использовать в одном селекторе ресурсов с resourceLocation.

    • in: список разрешенных значений для указанного kind. Не может использоваться с notIn. Может содержать до 50 значений.

    • notIn: список недопустимых значений для указанного kind. Не может использоваться с in. Может содержать до 50 значений.

Селектор ресурсов может содержать несколькоselectors. Для применения к селектору ресурсов ресурс должен соответствовать требованиям, указанным всеми его селекторами. Кроме того, в одном назначении можно указать до 10 resourceSelectors . Ресурсы в области охвата оцениваются, если они удовлетворяют любому из этих селекторов ресурсов.

Переопределения

Необязательное overrides свойство позволяет изменять эффект определения политики, не изменяя определение базовой политики или используя параметризованный эффект в определении политики.

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

Рассмотрим пример. Представьте, что у вас есть инициатива политики с именем CostManagement, которая включает определение пользовательской политики с policyDefinitionReferenceIdcorpVMSizePolicy и одиночным эффектом audit. Предположим, вы хотите назначить инициативу CostManagement, но пока не хотите получать отчёт о соответствии этой политики. Эффект этой политики audit можно заменить путем disabled переопределения назначения инициативы, как показано в следующем примере:

{
  "properties": {
    "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policySetDefinitions/CostManagement",
    "overrides": [
      {
        "kind": "policyEffect",
        "value": "disabled",
        "selectors": [
          {
            "kind": "policyDefinitionReferenceId",
            "in": [
              "corpVMSizePolicy"
            ]
          }
        ]
      }
    ]
  },
  "systemData": { ...
  },
  "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
  "type": "Microsoft.Authorization/policyAssignments",
  "name": "CostManagement"
}

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

Переопределения имеют следующие свойства:

  • kind: свойство, которое переопределяется назначением. Поддерживаемые виды: policyEffect и policyVersion.

  • value: новое значение, которое переопределяет существующее значение. Для kind: policyEffect, поддерживаемые значения — это эффекты. Для kind: policyVersion поддерживаемая версия должна быть больше или равна definitionVersion указанной в назначении.

  • selectors: (Необязательно) Свойство, определяющее, к какой области назначения политики следует применять переопределение.

    • kind: свойство селектора, которое определяет, какая характеристика сужает область переопределения. Допустимые значения для kind: policyEffect:

      • policyDefinitionReferenceId: это свойство указывает, какие определения политики в назначении инициативы должны принимать на себя переопределение эффекта.

      • resourceLocation: это свойство используется для выбора ресурсов на основе их типа. Не удается использовать в том же селекторе ресурсов, что resourceWithoutLocation.

      Допустимое значение для kind: policyVersion:

      • resourceLocation: это свойство используется для выбора ресурсов на основе их типа. Нельзя использовать в том же селекторе ресурсов, что и resourceWithoutLocation.
    • in: список разрешенных значений для указанного kind. Использование вместе с notIn невозможно. Может содержать до 50 значений.

    • notIn: список недопустимых значений для указанного kind. Не может использоваться с in. Может содержать до 50 значений.

Одно переопределение можно использовать для замены эффекта многих политик путем указания нескольких значений в массиве policyDefinitionReferenceId . Одно переопределение может использоваться для до 50 policyDefinitionReferenceId, а одно назначение политики может содержать до 10 переопределения, вычисляется в том порядке, в котором они указаны. Перед созданием назначения эффект, выбранный в переопределении, проверяется в соответствии с правилом политики и списком разрешенных параметров (в случаях, когда эффект параметризуется).

Режим исполнения

Свойство enforcementMode предоставляет клиентам возможность проверить результаты политики на существующих ресурсах без инициирования эффекта политики или активации записей в журнале действий Azure.

Этот сценарий обычно называется "Что если " и соответствует методам безопасного развертывания. Действие enforcementMode отличается от действия Disabled, так как оно предотвращает оценку ресурсов.

Это свойство имеет следующие значения.

Режим Значение JSON Тип Устранение уязвимостей вручную Запись журнала действий Описание
Активировано По умолчанию строка Да Да Этот эффект политики применяется при создании или обновлении ресурса.
Выключено Не применять строка Да Нет Этот эффект политики не применяется при создании или обновлении ресурса.

Если enforcementMode не указано в определении политики или инициативы, используется значение По умолчанию. Задачи устранения можно запускать для политик deployIfNotExists, даже при установке enforcementMode в значение DoNotEnforce.

Исключенные области

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

Примечание.

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

Сообщения о несоответствии требованиям

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

Внимание

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

"nonComplianceMessages": [
  {
    "message": "Default message"
  }
]

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

"nonComplianceMessages": [
  {
    "message": "Default message"
  },
  {
    "message": "Message for just this policy definition by reference ID",
    "policyDefinitionReferenceId": "10420126870854049575"
  }
]

Параметры

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

"parameters": {
  "prefix": {
    "value": "DeptA"
  },
  "suffix": {
    "value": "-LC"
  }
}

В этом примере используются параметры prefix и suffix, которые определены ранее в определении политики. Это конкретное назначение политики задает для параметра prefix значение DeptA, а для suffix — LC. Одно и то же определение политики можно повторно использовать с другим набором параметров для другого отдела, это сокращает уровень дублирования и сложности определений политик и обеспечивает гибкость.

Идентификация

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

Назначения, использующие управляемое удостоверение, выданное системой, также должны указывать свойство верхнего уровня location, чтобы определить, где они будут развернуты. Расположение не может быть задано global, и его нельзя изменить. Свойство location указывается только в rest API версии 2018-05-01 и более поздних версий. Если расположение указано в назначении, которое не использует удостоверение, то расположение будет игнорироваться.

# System-assigned identity
  "identity":  {
    "principalId":  "<PrincipalId>",
    "tenantId":  "<TenantId>",
    "identityType":  "SystemAssigned",
    "userAssignedIdentities":  null
  },
  "location":  "westus",
  ...

# User-assigned identity
  "identity": {
  "identityType": "UserAssigned",
  "userAssignedIdentities": {
    "/subscriptions/SubscriptionID/resourceGroups/{rgName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity": {}
  }
},

Примечание.

Для политики deployIfNotExists идентификатор назначения всегда используется для развертывания шаблона ARM. Однако при создании или обновлении целевого ресурса для оценки используется удостоверение личности запрашивающего.

Например, представьте политику, которая разворачивает Microsoft.Insights/diagnosticSettings на Microsoft.KeyVault/vaults. При создании хранилища ключей вызывающий идентификатор будет использоваться для получения Microsoft.Insights/diagnosticSettings ресурсов для оценки условия существования определения политики. Если условия выполнены, идентификация назначения политики будет использоваться для настройки параметров диагностики в хранилище ключей. Это означает, что вызывающему абоненту потребуется Microsoft.Insights/diagnosticSettings/read permissions, и назначению потребуется Microsoft.Insights/diagnosticSettings/write permissions.

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