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

Внимание

Azure Blueprints (предварительная версия) будет выведена из эксплуатации 31 января 2027 года, при этом поэтапный вывод из эксплуатации начнется 31 июля 2026 года. Перенесите существующие определения и назначения схем в стеки развертывания (рекомендуется) и спецификации шаблонов. Артефакты схемы преобразуются в JSON-шаблоны ARM или Bicep-файлы, которые используются для определения стеков развертывания. Сведения о полном поэтапном графике, последствиях и часто задаваемых вопросах см. в разделе О прекращении поддержки Azure Blueprints или https://aka.ms/AzureBlueprintsRetirement. Сведения о том, как создать артефакт в качестве ресурса 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 автоматически. Снимок экрана с примером использования Try It для Azure Cloud Shell.
Чтобы открыть Cloud Shell в браузере, перейдите по адресу https://shell.azure.com или нажмите кнопку Запуск Cloud Shell. Кнопка запуска Azure Cloud Shell.
Нажмите кнопку Cloud Shell в строке меню в правом верхнем углу окна портала Azure. Снимок экрана: кнопка

Чтобы использовать 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 (как автономная версия, так и версия в портале), образ Azure CLI Docker или локально установленное расширение.

  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 с идентификатором GUID 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 с идентификатором GUID 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 шаблона. Шаблон также повторно использует параметры схемы storageAccountType, tagName и 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, перейдите к статье о жизненном цикле схемы.