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

Внимание

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

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

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

  • Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
  • Если вы ранее не использовали Azure Blueprints, зарегистрируйте поставщик ресурсов, выполнив команду az provider register --namespace Microsoft.Blueprint в Azure CLI.

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. Нажмите клавишу ВВОД, чтобы запустить код или команду.

Добавление расширения схемы

Чтобы разрешить Azure CLI управлять определениями и назначениями схем, необходимо добавить расширение. Это расширение работает везде, где можно использовать Azure CLI. Сюда входят bash на Windows 10, Cloud Shell (автономная версия и версия на портале), образ Docker Azure CLI или локально установленное расширение.

  1. Убедитесь, что установлена последняя версия Azure CLI (не ниже 2.0.76). Если она еще не установлена, выполните эти инструкции.

  2. В выбранной вами среде Azure CLI импортируйте расширение с помощью следующей команды:

    # Add the Blueprint extension to the Azure CLI environment
    az extension add --name blueprint
    
  3. Проверьте установку расширения и номер версии (не ниже 0.1.0):

    # Check the extension list (note that you might have other extensions installed)
    az extension list
    
    # Run help for extension options
    az blueprint -h
    

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

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

Примечание.

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

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

    • JSON-файл — blueprintparms.json

      {
         "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"
             }
         }
      }
      
    • Команда Azure CLI

      # Login first with az login if not using Cloud Shell
      
      # Create the blueprint object
      az blueprint create \
         --name 'MyBlueprint' \
         --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.' \
         --parameters blueprintparms.json
      

      Примечание.

      При импорте определений схем используйте имя файла blueprint.json. Это имя файла используется при вызове az blueprint import.

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

  2. Добавьте в определение группу ресурсов для артефактов хранилища.

    az blueprint resource-group add \
       --blueprint-name 'MyBlueprint' \
       --artifact-name 'storageRG' \
       --description 'Contains the resource template deployment and a role assignment.'
    
  3. Добавьте назначение роли на уровне подписки. В приведенном ниже примере удостоверения субъектов, которым предоставляется указанная роль, передаются в параметре, задаваемом во время назначения схемы. В этом примере используется встроенная роль Contributor с GUID b24988ac-6180-42a0-ab88-20f7382dd24c.

    az blueprint artifact role create \
       --blueprint-name 'MyBlueprint' \
       --artifact-name 'roleContributor' \
       --role-definition-id '/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c' \
       --principal-ids "[parameters('contributors')]"
    
  4. Добавьте назначение политики в подписку. В этом примере используется встроенная политика Apply tag and its default value to resource groups с глобальным уникальным идентификатором 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71.

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

      {
         "tagName": {
            "value": "[parameters('tagName')]"
         },
         "tagValue": {
            "value": "[parameters('tagValue')]"
         }
      }
      
    • Команда Azure CLI

      az blueprint artifact policy create \
         --blueprint-name 'MyBlueprint' \
         --artifact-name 'policyTags' \
         --policy-definition-id '/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71' \
         --display-name 'Apply tag and its default value to resource groups' \
         --description 'Apply tag and its default value to resource groups' \
         --parameters artifacts\policyTags.json
      

      Примечание.

      При использовании az blueprint на компьютерах Mac замените \ на / в значениях параметров, которые включают путь. В этом случае значение parameters примет вид artifacts/policyTags.json.

  5. Добавьте в подписку еще одно назначение политики для тега хранилища (повторно используя параметр storageAccountType_ parameter). Этот дополнительный артефакт назначения политики демонстрирует, что определенный в схеме параметр может использоваться несколькими артефактами. В этом примере storageAccountType используется для настройки тега группы ресурсов. Это значение предоставляет сведения об учетной записи хранения, которая будет создана на следующем шаге. В этом примере используется встроенная политика Apply tag and its default value to resource groups с глобальным уникальным идентификатором 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71.

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

      {
         "tagName": {
            "value": "StorageType"
         },
         "tagValue": {
            "value": "[parameters('storageAccountType')]"
         }
      }
      
    • Команда Azure CLI

      az blueprint artifact policy create \
         --blueprint-name 'MyBlueprint' \
         --artifact-name 'policyStorageTags' \
         --policy-definition-id '/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71' \
         --display-name 'Apply storage tag to resource group' \
         --description 'Apply storage tag and the parameter also used by the template to resource groups' \
         --parameters artifacts\policyStorageTags.json
      

      Примечание.

      При использовании az blueprint на компьютерах Mac замените \ на / в значениях параметров, которые включают путь. В этом случае значение parameters примет вид artifacts/policyStorageTags.json.

  6. Добавьте шаблон в группу ресурсов. Параметр template шаблона ARM включает обычные компоненты JSON шаблона. Шаблон также повторно использует storageAccountTypetagNameпараметры схемы и tagValue схемы путем передачи каждого из них в шаблон. Параметры схемы доступны шаблону за счет использования параметра parameters. В коде 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

      {
         "storageAccountTypeFromBP": {
            "value": "[parameters('storageAccountType')]"
         },
         "tagNameFromBP": {
            "value": "[parameters('tagName')]"
         },
         "tagValueFromBP": {
            "value": "[parameters('tagValue')]"
         }
      }
      
    • Команда Azure CLI

      az blueprint artifact template create \
         --blueprint-name 'MyBlueprint' \
         --artifact-name 'templateStorage' \
         --template artifacts\templateStorage.json \
         --parameters artifacts\templateStorageParams.json \
         --resource-group-art 'storageRG'
      

      Примечание.

      При использовании az blueprint на компьютерах Mac замените \ на / в значениях параметров, которые включают путь. В этом случае значение template примет вид artifacts/templateStorage.json, а parameters — artifacts/templateStorageParams.json.

  7. Добавьте назначение ролей в группу ресурсов. Как и в предыдущем фрагменте назначения ролей, в примере ниже применяется идентификатор для роли Owner, но из схемы для него передается другой параметр. В этом примере используется встроенная роль Owner с GUID 8e3af657-a8ff-443c-a75c-2fe8c4bcb635.

    az blueprint artifact role create \
       --blueprint-name 'MyBlueprint' \
       --artifact-name 'roleOwner' \
       --role-definition-id '/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635' \
       --principal-ids "[parameters('owners')]" \
       --resource-group-art 'storageRG'
    

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

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

az blueprint publish --blueprint-name 'MyBlueprint' --version '{BlueprintVersion}'

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

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

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

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

    • JSON-файл — blueprintAssignment.json

      {
         "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"
             ]
         }
      }
      
    • Команда Azure CLI

      az blueprint assignment create \
         --name 'assignMyBlueprint' \
         --location 'westus' \
         --resource-group-value artifact_name=storageRG name=StorageAccount location=eastus \
         --parameters blueprintAssignment.json
      
    • Управляемое удостоверение, назначаемое пользователем

      Для назначения схемы можно также использовать управляемое удостоверение, назначаемое пользователем. В этом случае для параметра identity-type задается значение UserAssigned, а параметр user-assigned-identities задает удостоверение. Замените {userIdentity} именем вашего управляемого удостоверения, назначаемого пользователем.

      az blueprint assignment create \
         --name 'assignMyBlueprint' \
         --location 'westus' \
         --identity-type UserAssigned \
         --user-assigned-identities {userIdentity} \
         --resource-group-value artifact_name=storageRG name=StorageAccount location=eastus \
         --parameters blueprintAssignment.json
      

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

      Внимание

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

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

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

az blueprint assignment delete --name 'assignMyBlueprint'

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

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