Краткое руководство. Определение и назначение схемы Azure с помощью PowerShell

Внимание

11 июля 2026 г. схемы (предварительная версия) будут устарели. Перенос существующих определений схемы и назначений в спецификации шаблонов и стеки развертывания. Артефакты схемы необходимо преобразовать в шаблоны JSON ARM или файлы Bicep, используемые для определения стеков развертывания. Сведения о создании артефакта в качестве ресурса ARM см. в статье:

Из этого руководства вы узнаете, как с помощью службы Azure Blueprints выполнять некоторые общие задачи, связанных с созданием, публикацией и назначением схемы в вашей организации. Этот навык помогает создавать стандартные шаблоны для разработки многоразовых и быстро развертываемых конфигураций на основе шаблонов, политик и правил безопасности Azure Resource Manager (ARM).

Необходимые компоненты

  • Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
  • Выполните инструкции из этой статьи, чтобы установить модуль Az.Blueprint из коллекции PowerShell и проверить его работу.
  • Если вы ранее не использовали Azure Blueprints, зарегистрируйте поставщик ресурсов, выполнив командлет Register-AzResourceProvider -ProviderNamespace Microsoft.Blueprint в Azure PowerShell.

Azure Cloud Shell

В Azure есть Azure Cloud Shell, интерактивная оболочка среды, с которой можно работать в браузере. Для работы со службами Azure можно использовать Bash или PowerShell с Cloud Shell. Для запуска кода из этой статьи можно использовать предварительно установленные команды Cloud Shell. Ничего дополнительного в локальной среде устанавливать не нужно.

Начало работы с Azure Cloud Shell

Вариант Пример и ссылка
Нажмите кнопку Попробовать в правом верхнем углу блока кода или команд. При нажатии кнопки Попробовать код или команда не копируется в Cloud Shell автоматически. Screenshot that shows an example of Try It for Azure Cloud Shell.
Чтобы открыть Cloud Shell в браузере, перейдите по адресу https://shell.azure.com или нажмите кнопку Запуск Cloud Shell. Button to launch Azure Cloud Shell.
Нажмите кнопку Cloud Shell в строке меню в правом верхнем углу окна портала Azure. Screenshot that shows the Cloud Shell button in the Azure portal

Чтобы использовать Azure Cloud Shell, выполните следующие действия:

  1. Запустите Cloud Shell.

  2. Нажмите кнопку Копировать в блоке кода (или блоке команд), чтобы скопировать код или команду.

  3. Вставьте код или команду в окно сеанса Cloud Shell, нажав клавиши CTRL+SHIFT+V в Windows и Linux или CMD+SHIFT+V в macOS.

  4. Нажмите клавишу ВВОД, чтобы запустить код или команду.

Создание схемы

Первым этапом при определении стандартной модели соответствия требованиям является формирование схемы на основе доступных ресурсов. Мы создадим схему с именем MyBlueprint для настройки назначения ролей и политик для подписки. Затем мы добавим группу ресурсов, шаблон ARM и назначение ролей группе ресурсов.

Примечание.

При использовании PowerShell сначала создается объект схемы. Для каждого добавляемого артефакта с параметрами нужно заранее определить параметры в исходной схеме.

  1. Создайте исходный объект схемы. Параметр BlueprintFile принимает JSON-файл со свойствами схемы, групп ресурсов, которые необходимо создать, и всеми параметрами уровня схемы. Эти параметры задаются при назначении и используются артефактами, которые будут добавлены в дальнейшем.

    • JSON-файл — blueprint.json

      {
          "properties": {
              "description": "This blueprint sets tag policy and role assignment on the subscription, creates a ResourceGroup, and deploys a resource template and role assignment to that ResourceGroup.",
              "targetScope": "subscription",
              "parameters": {
                  "storageAccountType": {
                      "type": "string",
                      "defaultValue": "Standard_LRS",
                      "allowedValues": [
                          "Standard_LRS",
                          "Standard_GRS",
                          "Standard_ZRS",
                          "Premium_LRS"
                      ],
                      "metadata": {
                          "displayName": "storage account type.",
                          "description": null
                      }
                  },
                  "tagName": {
                      "type": "string",
                      "metadata": {
                          "displayName": "The name of the tag to provide the policy assignment.",
                          "description": null
                      }
                  },
                  "tagValue": {
                      "type": "string",
                      "metadata": {
                          "displayName": "The value of the tag to provide the policy assignment.",
                          "description": null
                      }
                  },
                  "contributors": {
                      "type": "array",
                      "metadata": {
                          "description": "List of AAD object IDs that is assigned Contributor role at the subscription",
                          "strongType": "PrincipalId"
                      }
                  },
                  "owners": {
                      "type": "array",
                      "metadata": {
                          "description": "List of AAD object IDs that is assigned Owner role at the resource group",
                          "strongType": "PrincipalId"
                      }
                  }
              },
              "resourceGroups": {
                  "storageRG": {
                      "description": "Contains the resource template deployment and a role assignment."
                  }
              }
          }
      }
      
    • Команда PowerShell

      # Login first with Connect-AzAccount if not using Cloud Shell
      
      # Get a reference to the new blueprint object, we'll use it in subsequent steps
      $blueprint = New-AzBlueprint -Name 'MyBlueprint' -BlueprintFile .\blueprint.json
      

      Примечание.

      При создании определений схем с помощью программных средств используйте имя файла blueprint.json. Это имя файла применяется при вызове Import-AzBlueprintWithArtifact.

      По умолчанию объект схемы создается в подписке, заданной по умолчанию. Чтобы указать группу управления, используйте параметр ManagementGroupId. Чтобы указать подписку, используйте параметр SubscriptionId.

  2. Добавьте назначение роли на уровне подписки. В ArtifactFile определяется тип артефакта и свойства, соответствующие идентификатору определения роли, а удостоверения субъектов передаются в виде массива значений. В приведенном ниже примере удостоверения субъектов, которым предоставляется указанная роль, передаются в параметре, задаваемом во время назначения схемы. В этом примере используется встроенная роль Contributor с GUID b24988ac-6180-42a0-ab88-20f7382dd24c.

    • JSON-файл — \artifacts\roleContributor.json

      {
          "kind": "roleAssignment",
          "properties": {
              "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
              "principalIds": "[parameters('contributors')]"
          }
      }
      
    • Команда PowerShell

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintArtifact -Blueprint $blueprint -Name 'roleContributor' -ArtifactFile .\artifacts\roleContributor.json
      
  3. Добавьте назначение политики в подписку. В ArtifactFile определяется тип артефакта и свойства, соответствующие определению политики или инициативы, а также настраивается назначение политики для использования указанных параметров схемы во время назначения схемы. В этом примере используется встроенная политика Apply tag and its default value to resource groups с глобальным уникальным идентификатором 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71.

    • JSON-файл — \artifacts\policyTags.json

      {
          "kind": "policyAssignment",
          "properties": {
              "displayName": "Apply tag and its default value to resource groups",
              "description": "Apply tag and its default value to resource groups",
              "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71",
              "parameters": {
                  "tagName": {
                      "value": "[parameters('tagName')]"
                  },
                  "tagValue": {
                      "value": "[parameters('tagValue')]"
                  }
              }
          }
      }
      
    • Команда PowerShell

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintArtifact -Blueprint $blueprint -Name 'policyTags' -ArtifactFile .\artifacts\policyTags.json
      
  4. Добавьте в подписку еще одно назначение политики для тега хранилища (повторно используя параметр storageAccountType_ parameter). Этот дополнительный артефакт назначения политики демонстрирует, что определенный в схеме параметр может использоваться несколькими артефактами. В этом примере storageAccountType используется для настройки тега группы ресурсов. Это значение предоставляет сведения об учетной записи хранения, которая будет создана на следующем шаге. В этом примере используется встроенная политика Apply tag and its default value to resource groups с глобальным уникальным идентификатором 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71.

    • JSON-файл \artifacts\policyStorageTags.json

      {
          "kind": "policyAssignment",
          "properties": {
              "displayName": "Apply storage tag to resource group",
              "description": "Apply storage tag and the parameter also used by the template to resource groups",
              "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71",
              "parameters": {
                  "tagName": {
                      "value": "StorageType"
                  },
                  "tagValue": {
                      "value": "[parameters('storageAccountType')]"
                  }
              }
          }
      }
      
    • Команда PowerShell

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintArtifact -Blueprint $blueprint -Name 'policyStorageTags' -ArtifactFile .\artifacts\policyStorageTags.json
      
  5. Добавьте шаблон в группу ресурсов: Шаблон TemplateFile ARM включает обычный компонент JSON шаблона. Шаблон также повторно использует storageAccountTypetagNameпараметры схемы и tagValue схемы путем передачи каждого из них в шаблон. Параметры схемы доступны шаблону за счет использования параметра TemplateParameterFile. В коде JSON-шаблона эта пара "ключ — значение" используется для внедрения значения. Имена параметров схемы и шаблона могут быть одинаковыми.

    • JSON-файл шаблона ARM — \artifacts\templateStorage.json

      {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
              "storageAccountTypeFromBP": {
                  "type": "string",
                  "metadata": {
                      "description": "Storage Account type"
                  }
              },
              "tagNameFromBP": {
                  "type": "string",
                  "defaultValue": "NotSet",
                  "metadata": {
                      "description": "Tag name from blueprint"
                  }
              },
              "tagValueFromBP": {
                  "type": "string",
                  "defaultValue": "NotSet",
                  "metadata": {
                      "description": "Tag value from blueprint"
                  }
              }
          },
          "variables": {
              "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'standardsa')]"
          },
          "resources": [{
              "type": "Microsoft.Storage/storageAccounts",
              "name": "[variables('storageAccountName')]",
              "apiVersion": "2016-01-01",
              "tags": {
                  "[parameters('tagNameFromBP')]": "[parameters('tagValueFromBP')]"
              },
              "location": "[resourceGroup().location]",
              "sku": {
                  "name": "[parameters('storageAccountTypeFromBP')]"
              },
              "kind": "Storage",
              "properties": {}
          }],
          "outputs": {
              "storageAccountSku": {
                  "type": "string",
                  "value": "[variables('storageAccountName')]"
              }
          }
      }
      
    • JSON-файл параметров шаблона ARM — \artifacts\templateStorageParams.json

      {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
              "storageAccountTypeFromBP": {
                  "value": "[parameters('storageAccountType')]"
              },
              "tagNameFromBP": {
                  "value": "[parameters('tagName')]"
              },
              "tagValueFromBP": {
                  "value": "[parameters('tagValue')]"
              }
          }
      }
      
    • Команда PowerShell

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintArtifact -Blueprint $blueprint -Type TemplateArtifact -Name 'templateStorage' -TemplateFile .\artifacts\templateStorage.json -TemplateParameterFile .\artifacts\templateStorageParams.json -ResourceGroupName storageRG
      
  6. Добавьте назначение ролей в группу ресурсов. Как и в предыдущем фрагменте назначения ролей, в примере ниже применяется идентификатор для роли Owner, но из схемы для него передается другой параметр. В этом примере используется встроенная роль Owner с GUID 8e3af657-a8ff-443c-a75c-2fe8c4bcb635.

    • JSON-файл — \artifacts\roleOwner.json

      {
          "kind": "roleAssignment",
          "properties": {
              "resourceGroup": "storageRG",
              "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635",
              "principalIds": "[parameters('owners')]"
          }
      }
      
    • Команда PowerShell

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintArtifact -Blueprint $blueprint -Name 'roleOwner' -ArtifactFile .\artifacts\roleOwner.json
      

Публикация схемы

Теперь, когда артефакты добавлены в схему, пора ее опубликовать. После публикации схему можно будет назначить подписке.

# Use the reference to the new blueprint object from the previous steps
Publish-AzBlueprint -Blueprint $blueprint -Version '{BlueprintVersion}'

Значение {BlueprintVersion} представляет собой строку, состоящую из букв, цифр и дефисов (без пробелов или других специальных символов), Оно может содержать до 20 знаков. Оно должно быть уникальным и информативным, например v20180622-135541.

Назначение схемы

После публикации схемы с помощью PowerShell ее можно назначить подписке. Назначьте созданную схему одной из подписок в иерархии группы управления. Если схема сохранена в подписке, схему можно будет назначить только этой подписке. Параметр Blueprint задает схему, назначаемую. Чтобы указать параметры name, location, identity, lock и blueprint, используйте соответствующие параметры PowerShell для командлета New-AzBlueprintAssignment или укажите их в JSON-файле AssignmentFile.

  1. Запустите развертывание схемы, назначив ее подписке. Поскольку в параметрах contributors и owners должны быть переданы массивы идентификаторов objectIds субъектов, которым должно быть предоставлено назначение ролей, используйте API Graph Azure Active Directory для сбора идентификаторов objectIds, которые вы затем будете использовать в параметре AssignmentFile для собственных пользователей, групп или субъектов-служб.

    • JSON-файл — blueprintAssignment.json

      {
          "properties": {
              "blueprintId": "/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint",
              "resourceGroups": {
                  "storageRG": {
                      "name": "StorageAccount",
                      "location": "eastus2"
                  }
              },
              "parameters": {
                  "storageAccountType": {
                      "value": "Standard_GRS"
                  },
                  "tagName": {
                      "value": "CostCenter"
                  },
                  "tagValue": {
                      "value": "ContosoIT"
                  },
                  "contributors": {
                      "value": [
                          "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
                          "38833b56-194d-420b-90ce-cff578296714"
                      ]
                  },
                  "owners": {
                      "value": [
                          "44254d2b-a0c7-405f-959c-f829ee31c2e7",
                          "316deb5f-7187-4512-9dd4-21e7798b0ef9"
                      ]
                  }
              }
          },
          "identity": {
              "type": "systemAssigned"
          },
          "location": "westus"
      }
      
    • Команда PowerShell

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintAssignment -Blueprint $blueprint -Name 'assignMyBlueprint' -AssignmentFile .\blueprintAssignment.json
      
    • Управляемое удостоверение, назначаемое пользователем

      Для назначения схемы можно также использовать управляемое удостоверение, назначаемое пользователем. В этом случае identity часть файла назначения JSON изменяется следующим образом. Замените {tenantId}, {subscriptionId}, {yourRG} и {userIdentity} идентификатором арендатора, идентификатором подписки, именем группы ресурсов и именем назначаемого пользователем управляемого удостоверения соответственно.

      "identity": {
          "type": "userAssigned",
          "tenantId": "{tenantId}",
          "userAssignedIdentities": {
              "/subscriptions/{subscriptionId}/resourceGroups/{yourRG}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{userIdentity}": {}
          }
      },
      

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

      Внимание

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

Очистка ресурсов

Вы можете удалить схему из подписки. Удаление часто выполняется, когда ресурсы артефакта больше не требуются. При удалении схемы назначенные артефакты оставляются. Чтобы удалить назначение схемы, используйте командлет Remove-AzBlueprintAssignment:

assignMyBlueprint

Remove-AzBlueprintAssignment -Name 'assignMyBlueprint'

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

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