Guia de início rápido: definir e atribuir um plano do Azure com a CLI do Azure

Importante

Azure Blueprints (Preview) será descontinuado em 31 de janeiro de 2027, com uma descontinuação faseada a partir de 31 de julho de 2026. Migre as definições e atribuições dos seus blueprints existentes para Deployment Stacks (recomendado) e Template Specs. Os artefactos de blueprint são convertidos em templates ARM JSON ou ficheiros Bicep usados para definir stacks de implementação. Para consultar a cronologia completa por fases, o impacto e as FAQ, veja Azure Blueprints retirement ou https://aka.ms/AzureBlueprintsRetirement. Para saber como criar um artefato como um recurso ARM, consulte:

Neste tutorial, você aprenderá a usar o Azure Blueprints para executar algumas das tarefas comuns relacionadas à criação, publicação e atribuição de um plano em sua organização. Essa habilidade ajuda você a definir padrões comuns para desenvolver configurações reutilizáveis e rapidamente implantáveis, com base em modelos, políticas e segurança do Azure Resource Manager (ARM).

Pré-requisitos

  • Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
  • Se você não tiver usado o Azure Blueprints antes, registre o provedor de recursos por meio da CLI do Azure com az provider register --namespace Microsoft.Blueprint.

Azure Cloud Shell

O Azure aloja o Azure Cloud Shell, um ambiente de shell interativo que pode utilizar através do seu browser. Pode utilizar o Bash ou o PowerShell com o Cloud Shell para trabalhar com os serviços do Azure. Você pode usar os comandos pré-instalados do Cloud Shell para executar o código neste artigo, sem precisar instalar nada em seu ambiente local.

Para iniciar o Azure Cloud Shell:

Opção Exemplo/Ligação
Selecione Experimentar no canto superior direito de um código ou bloco de comandos. Selecionar Experimentar não copia automaticamente o código ou comando para o Cloud Shell. Captura de tela que mostra um exemplo de Try It for Azure Cloud Shell.
Aceda a https://shell.azure.com ou selecione o botão Iniciar Cloud Shell para abrir o Cloud Shell no browser. Botão para iniciar o Azure Cloud Shell.
Selecione o botão Cloud Shell na barra de menus, na parte direita do portal do Azure. Captura de tela que mostra o botão Cloud Shell no portal do Azure

Para usar o Azure Cloud Shell:

  1. Inicie o Cloud Shell.

  2. Selecione o botão Copiar em um bloco de código (ou bloco de comando) para copiar o código ou comando.

  3. Cole o código ou comando na sessão do Cloud Shell premindo Ctrl+Shift+V no Windows e no Linux, ou premindo Cmd+Shift+V no macOS.

  4. Selecione Enter para executar o código ou comando.

Adicionar a extensão do blueprint

Para habilitar a CLI do Azure para gerenciar definições e atribuições de blueprint, você deve adicionar a extensão. Essa extensão funciona onde quer que você possa usar a CLI do Azure. Isso inclui bash no Windows 10, Cloud Shell (tanto a versão autônoma quanto a que está dentro do portal), a imagem do CLI do Azure Docker ou uma extensão instalada localmente.

  1. Verifique se a CLI mais recente do Azure está instalada (pelo menos 2.0.76). Se não estiver ainda instalado, siga estas instruções.

  2. Em seu ambiente de CLI do Azure de escolha, importe a extensão com o seguinte comando:

    # Add the Blueprint extension to the Azure CLI environment
    az extension add --name blueprint
    
  3. Valide se a extensão foi instalada e é a versão esperada (pelo menos 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
    

Criar um esquema

O primeiro passo na definição de um padrão de conformidade é compor um esquema a partir dos recursos disponíveis. Vamos criar um plano chamado MyBlueprint para configurar atribuições de função e política para a assinatura. Em seguida, você adiciona um grupo de recursos, um modelo ARM e uma atribuição de função no grupo de recursos.

Nota

Quando você estiver usando a CLI do Azure, o objeto blueprint é criado primeiro. Para cada artefato a ser adicionado que tenha parâmetros, você define os parâmetros com antecedência no esquema inicial.

  1. Crie o objeto esquema inicial. O parameters parâmetro usa um arquivo JSON que inclui todos os parâmetros de nível de blueprint. Você define os parâmetros durante a atribuição e eles são usados pelos artefatos adicionados em etapas posteriores.

    • Arquivo 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"
             }
         }
      }
      
    • Comando da CLI do Azure

      # 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
      

      Nota

      Use o nome do arquivo blueprint.json ao importar suas definições de blueprint. Esse nome de arquivo é usado quando você chama az blueprint import.

      O objeto de plano é criado na subscrição predefinida por padrão. Para especificar o grupo de gerenciamento, use o parâmetro managementgroup. Para especificar a assinatura, use o parâmetro subscription.

  2. Adicione o grupo de recursos para os artefatos de armazenamento à definição.

    az blueprint resource-group add \
       --blueprint-name 'MyBlueprint' \
       --artifact-name 'storageRG' \
       --description 'Contains the resource template deployment and a role assignment.'
    
  3. Adicione uma atribuição de função na assinatura. No exemplo a seguir, as identidades principais concedidas à função especificada são configuradas para um parâmetro que é definido durante a atribuição do blueprint. Este exemplo usa a Contributor função interna, com um GUID de 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. Adicione uma atribuição de política na assinatura. Este exemplo usa a política incorporada Apply tag and its default value to resource groups, com o GUID 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71.

    • Arquivo JSON - artefatos\policyTags.json

      {
         "tagName": {
            "value": "[parameters('tagName')]"
         },
         "tagValue": {
            "value": "[parameters('tagValue')]"
         }
      }
      
    • Comando da CLI do Azure

      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
      

      Nota

      Quando você usa az blueprint em um Mac, substitua \ por / para valores de parâmetro que incluem o caminho. Neste caso, o valor para parameters torna-se artifacts/policyTags.json.

  5. Adicione outra atribuição de política para a tag de armazenamento (reutilizando storageAccountType_ parameter) ao nível da subscrição. Este artefacto de atribuição de política adicional demonstra que um parâmetro definido no esquema é utilizável por mais do que um artefacto. No exemplo, utiliza o storageAccountType para definir uma etiqueta no grupo de recursos. Esse valor fornece informações sobre a conta de armazenamento que você cria na próxima etapa. Este exemplo usa a política incorporada Apply tag and its default value to resource groups, com o GUID 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71.

    • Arquivo JSON - artefatos\policyStorageTags.json

      {
         "tagName": {
            "value": "StorageType"
         },
         "tagValue": {
            "value": "[parameters('storageAccountType')]"
         }
      }
      
    • Comando da CLI do Azure

      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
      

      Nota

      Quando você usa az blueprint em um Mac, substitua \ por / para valores de parâmetro que incluem o caminho. Neste caso, o valor para parameters torna-se artifacts/policyStorageTags.json.

  6. Adicione um modelo em grupo de recursos. O template parâmetro para um modelo ARM inclui os componentes JSON normais do modelo. O modelo também reutiliza os parâmetros do esquema storageAccountType, tagName e tagValue, passando cada um deles para o modelo. Os parâmetros do blueprint estão disponíveis para o modelo usando o parâmetro parameters, e dentro do modelo JSON esse par chave-valor é usado para injetar o valor. Os nomes dos parâmetros blueprint e template podem ser os mesmos.

    • Ficheiro de modelo ARM JSON - 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')]"
              }
          }
      }
      
    • Ficheiro de parâmetros do modelo ARM em JSON - artefactos\templateStorageParams.json

      {
         "storageAccountTypeFromBP": {
            "value": "[parameters('storageAccountType')]"
         },
         "tagNameFromBP": {
            "value": "[parameters('tagName')]"
         },
         "tagValueFromBP": {
            "value": "[parameters('tagValue')]"
         }
      }
      
    • Comando da CLI do Azure

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

      Nota

      Quando você usa az blueprint em um Mac, substitua \ por / para valores de parâmetro que incluem o caminho. Neste caso, o valor para template torna-se artifacts/templateStorage.json, e parameters torna-se artifacts/templateStorageParams.json.

  7. Adicione uma atribuição de função no grupo de recursos. Semelhante à entrada de atribuição de função anterior, o exemplo a seguir usa o identificador de definição para a Owner função e fornece um parâmetro diferente do blueprint. Este exemplo usa a Owner função interna, com um GUID de 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'
    

Publicar um esquema

Agora que você adicionou os artefatos ao projeto, é hora de publicá-lo. A publicação disponibiliza o esquema para atribuição a uma assinatura.

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

O valor para {BlueprintVersion} é uma sequência de letras, números e hífenes (sem espaços ou outros caracteres especiais). O comprimento máximo é de 20 carateres. Use algo único e informativo, como v20200605-135541.

Atribuir um esquema

Depois de publicar um plano usando a CLI do Azure, ele pode ser atribuído a uma assinatura. Atribua o plano que criou a uma das subscrições sob a sua hierarquia de grupos de gestão. Se o esquema for salvo em uma assinatura, ele só poderá ser atribuído a essa assinatura. O blueprint-name parâmetro especifica o esquema a ser atribuído. Para fornecer os parâmetros name, location, identity, lock e blueprint, utilize os parâmetros correspondentes da CLI do Azure no comando az blueprint assignment create ou forneça-os no ficheiro JSON de parâmetros.

  1. Execute a implementação do blueprint, atribuindo-o a uma subscrição. Uma vez que os parâmetros contributors e owners exigem uma matriz de objectIds das identidades às quais será atribuída a função, utilize a Azure Active Directory Graph API para obter o objectIds para utilizar no parameters dos seus próprios utilizadores, grupos ou principais de serviço.

    • Arquivo 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"
             ]
         }
      }
      
    • Comando da CLI do Azure

      az blueprint assignment create \
         --name 'assignMyBlueprint' \
         --location 'westus' \
         --resource-group-value artifact_name=storageRG name=StorageAccount location=eastus \
         --parameters blueprintAssignment.json
      
    • Identidade gerida atribuída pelo utilizador

      Uma atribuição de blueprint também pode utilizar uma identidade gerida atribuída pelo utilizador. Nesse caso, o identity-type parâmetro é definido como UserAssigned, e o user-assigned-identities parâmetro especifica a identidade. Substitua {userIdentity} pelo nome da identidade gerenciada atribuída pelo usuário.

      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
      

      A identidade gerenciada atribuída pelo usuário pode estar em qualquer assinatura e grupo de recursos ao qual o usuário que atribui o blueprint tenha permissões.

      Importante

      O Azure Blueprints não gerencia a identidade gerenciada atribuída pelo usuário. Os utilizadores são responsáveis por atribuir funções e permissões suficientes; caso contrário, a atribuição do blueprint falhará.

Limpar recursos

Pode remover um esquema de uma subscrição. A eliminação é frequentemente efetuada quando os recursos do artefacto deixam de ser necessários. Quando um esquema é removido, os artefactos atribuídos como parte desse esquema são deixados para trás. Para remover uma atribuição de blueprint, use o az blueprint assignment delete comando:

az blueprint assignment delete --name 'assignMyBlueprint'

Próximos passos

Neste início rápido, você criou, atribuiu e removeu um esquema com a CLI do Azure. Para saber mais sobre os Esquemas do Azure, consulte o artigo sobre o ciclo de vida dos esquemas.