Quickstart: Criar e publicar uma definição de Aplicação Gerida Azure

Este quickstart fornece uma introdução ao trabalho com aplicações geridas Azure. Cria e publica uma aplicação gerida que está armazenada no seu catálogo de serviços e destina-se a membros da sua organização.

Para publicar uma aplicação gerida no seu catálogo de serviços, faça as seguintes tarefas:

  • Crie um modelo de Resource Manager Azure (modelo ARM) que define os recursos para implementar com a aplicação gerida.
  • Defina os elementos de interface de utilizador para o portal quando implementar a aplicação gerida.
  • Crie um pacote .zip que contenha os ficheiros de modelos necessários. O ficheiro .zip pacote tem um limite de 120-MB para a definição de aplicação gerida por um catálogo de serviços.
  • Decida que utilizador, grupo ou aplicação precisa de aceder ao grupo de recursos na subscrição do utilizador.
  • Crie a definição de aplicação gerida que aponta para o pacote.zip e solicita o acesso à identidade.

Opcional: Se pretender implementar a definição de aplicação gerida com um modelo ARM na sua própria conta de armazenamento, consulte o seu próprio armazenamento.

Nota

Os ficheiros Bicep não podem ser usados numa aplicação gerida. Tem de converter um ficheiro Bicep no modelo ARM JSON com o comando de construção Bicep.

Pré-requisitos

Para completar este arranque rápido, precisa dos seguintes itens:

Criar um modelo do ARM

Cada definição de aplicação gerida inclui um ficheiro denominado mainTemplate.json. O modelo define os recursos Azure para implementar e não é diferente de um modelo ARM regular.

Abra o Código do Estúdio Visual, crie um ficheiro com o nome sensível ao caso mainTemplate.json e guarde-o.

Adicione o seguinte JSON e guarde o ficheiro. Define os parâmetros para criar uma conta de armazenamento e especifica as propriedades da conta de armazenamento.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountNamePrefix": {
      "type": "string",
      "maxLength": 11,
      "metadata": {
        "description": "Storage prefix must be maximum of 11 characters with only lowercase letters or numbers."
      }
    },
    "storageAccountType": {
      "type": "string"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "storageAccountName": "[concat(parameters('storageAccountNamePrefix'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageEndpoint": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), '2021-09-01').primaryEndpoints.blob]"
    }
  }
}

Defina a sua experiência de criação

Como editor, define a experiência do portal para criar a aplicação gerida. O ficheiro createUiDefinition.json gera a interface do portal. Define como os utilizadores fornecem entrada para cada parâmetro usando elementos de controlo , incluindo drop-downs, caixas de texto e caixas de palavra-passe.

Abra o Código do Estúdio Visual, crie um ficheiro com o nome sensível ao caso createUiDefinition.json e guarde-o.

Adicione o seguinte JSON ao ficheiro e guarde-o.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {}
    ],
    "steps": [
      {
        "name": "storageConfig",
        "label": "Storage settings",
        "subLabel": {
          "preValidation": "Configure the infrastructure settings",
          "postValidation": "Done"
        },
        "bladeTitle": "Storage settings",
        "elements": [
          {
            "name": "storageAccounts",
            "type": "Microsoft.Storage.MultiStorageAccountCombo",
            "label": {
              "prefix": "Storage account name prefix",
              "type": "Storage account type"
            },
            "defaultValue": {
              "type": "Standard_LRS"
            },
            "constraints": {
              "allowedTypes": [
                "Premium_LRS",
                "Standard_LRS",
                "Standard_GRS"
              ]
            }
          }
        ]
      }
    ],
    "outputs": {
      "storageAccountNamePrefix": "[steps('storageConfig').storageAccounts.prefix]",
      "storageAccountType": "[steps('storageConfig').storageAccounts.type]",
      "location": "[location()]"
    }
  }
}

Para saber mais, consulte Começar com CreateUiDefinition.

Empacote os ficheiros

Adicione os dois ficheiros a um ficheiro chamado app.zip. Os dois ficheiros devem estar ao nível da raiz do ficheiro .zip . Se colocar os ficheiros numa pasta, recebe um erro que diz que os ficheiros necessários não estão presentes quando cria a definição de aplicação gerida.

Carregue o pacote para uma localização acessível a partir de onde pode ser utilizada. O nome da conta de armazenamento deve ser globalmente único em todo o Azure e o comprimento deve ser de 3-24 caracteres com apenas letras e números minúsculos. Name No parâmetro, substitua o espaço reservado demostorageaccount pelo nome exclusivo da sua conta de armazenamento.

New-AzResourceGroup -Name storageGroup -Location eastus

$storageAccount = New-AzStorageAccount `
  -ResourceGroupName storageGroup `
  -Name "demostorageaccount" `
  -Location eastus `
  -SkuName Standard_LRS `
  -Kind StorageV2

$ctx = $storageAccount.Context

New-AzStorageContainer -Name appcontainer -Context $ctx -Permission blob

Set-AzStorageBlobContent `
  -File "D:\myapplications\app.zip" `
  -Container appcontainer `
  -Blob "app.zip" `
  -Context $ctx

Criar a definição da aplicação gerida

Nesta secção você receberá informações de identidade do Azure Ative Directory, criará um grupo de recursos e criará a definição de aplicação gerida.

Crie uma aplicação ou grupo de utilizador no Azure Active Directory

O próximo passo é selecionar um grupo de utilizadores, utilizador ou aplicação para gerir os recursos para o cliente. Esta identidade tem permissões no grupo de recursos gerido, de acordo com a função que é atribuída. O papel pode ser qualquer papel incorporado do Azure, como Proprietário ou Colaborador. Para criar um novo grupo de utilizadores do Active Directory, veja Criar um grupo e adicionar membros no Azure Active Directory.

É preciso o ID de objeto do grupo de utilizadores a utilizar para gerir os recursos.

$groupID=(Get-AzADGroup -DisplayName mygroup).Id

Obtenha o ID de definição de função

Em seguida, precisa da definição de função ID da função incorporada Azure que pretende conceder acesso ao utilizador, grupo de utilizadores ou aplicação. Normalmente, utiliza-se o papel de Proprietário, Contribuinte ou Leitor. O comando seguinte mostra como obter o ID da definição da função da função Proprietário:

$roleid=(Get-AzRoleDefinition -Name Owner).Id

Criar a definição da aplicação gerida

Se ainda não tiver um grupo de recursos para armazenar a definição de aplicação gerida, crie um novo grupo de recursos.

Opcional: Se pretender implementar a definição de aplicação gerida com um modelo ARM na sua própria conta de armazenamento, consulte o seu próprio armazenamento.

New-AzResourceGroup -Name appDefinitionGroup -Location westcentralus

Crie o recurso de definição de aplicação gerido. Name No parâmetro, substitua o espaço reservado demostorageaccount pelo nome exclusivo da sua conta de armazenamento.

$blob = Get-AzStorageBlob -Container appcontainer -Blob app.zip -Context $ctx

New-AzManagedApplicationDefinition `
  -Name "ManagedStorage" `
  -Location "westcentralus" `
  -ResourceGroupName appDefinitionGroup `
  -LockLevel ReadOnly `
  -DisplayName "Managed Storage Account" `
  -Description "Managed Azure Storage Account" `
  -Authorization "${groupID}:$roleid" `
  -PackageFileUri $blob.ICloudBlob.StorageUri.PrimaryUri.AbsoluteUri

Após a conclusão do comando, terá uma definição de aplicação gerida no seu grupo de recursos.

Alguns dos parâmetros utilizados no exemplo anterior são:

  • grupo de recursos: O nome do grupo de recursos onde é criada a definição de aplicação gerida.

  • nível de bloqueio: O tipo de bloqueio colocado no grupo de recursos geridos. Impede o cliente de realizar operações não desejadas neste grupo. Atualmente, ReadOnly é o único nível de bloqueio suportado. Quando ReadOnly especificado, o cliente só pode ler os recursos presentes no grupo de recursos geridos. As entidades editoras que têm acesso ao grupo de recurso gerido estão isentos do bloqueio.

  • authorizations: descreve o ID de principal e o ID da definição da função utilizados para conceder permissões ao grupo de recursos gerido.

    • Azure PowerShell: "${groupid}:$roleid" ou pode usar aparelhos encaracolados para cada variável"${groupid}:${roleid}". Utilize uma vírgula para separar vários valores: "${groupid1}:$roleid1", "${groupid2}:$roleid2".
    • Azure CLI: "$groupid:$roleid" ou pode utilizar aparelhos encaracolados como mostrado no PowerShell. Utilize um espaço para separar vários valores: "$groupid1:$roleid1" "$groupid2:$roleid2".
  • ficheiro de pacote URI: A localização de um ficheiro de pacote.zip que contém os ficheiros necessários.

Traga o seu próprio armazenamento para a definição de aplicação gerida

Esta secção é opcional. Pode armazenar a definição de aplicação gerida na sua própria conta de armazenamento para que a sua localização e acesso possam ser geridos por si para as suas necessidades regulamentares. O ficheiro .zip pacote tem um limite de 120-MB para a definição de aplicação gerida por um catálogo de serviços.

Nota

O armazenamento do seu próprio armazenamento só é suportado com o modelo ARM ou as implementações de API REST da definição de aplicação gerida.

Crie a sua conta de armazenamento

Tem de criar uma conta de armazenamento que contenha a definição de aplicação gerida para utilização com um catálogo de serviços. O nome da conta de armazenamento deve ser globalmente único em todo o Azure e o comprimento deve ser de 3-24 caracteres com apenas letras e números minúsculos.

Este exemplo cria um novo grupo de recursos chamado byosStorageRG. Name No parâmetro, substitua o espaço reservado definitionstorage pelo nome exclusivo da sua conta de armazenamento.

New-AzResourceGroup -Name byosStorageRG -Location eastus

New-AzStorageAccount `
  -ResourceGroupName byosStorageRG `
  -Name "definitionstorage" `
  -Location eastus `
  -SkuName Standard_LRS `
  -Kind StorageV2

Utilize o seguinte comando para armazenar o ID de recursos da conta de armazenamento numa variável chamada storageId. Usará esta variável quando implementar a definição de aplicação gerida.

$storageId = (Get-AzStorageAccount -ResourceGroupName byosStorageRG -Name definitionstorage).Id

Desa cos para a sua conta de armazenamento

Antes de a definição de aplicação gerida poder ser implantada na sua conta de armazenamento, atribua a função contribuinte ao utilizador do Fornecedor de Recursos do Aparelho no âmbito da conta de armazenamento. Esta atribuição permite que a identidade escreva ficheiros de definição para o contentor da sua conta de armazenamento.

No PowerShell, pode utilizar variáveis para a atribuição de funções. Este exemplo utiliza o $storageId que criou num passo anterior e cria a $arpId variável.

$arpId = (Get-AzADServicePrincipal -SearchString "Appliance Resource Provider").Id

New-AzRoleAssignment -ObjectId $arpId `
-RoleDefinitionName Contributor `
-Scope $storageId

O Fornecedor de Recursos do Aparelho é uma aplicação da Azure Enterprise (principal serviço). Vá àsaplicaçõesda Azure Ative Directory> Enterprise e altere o filtro de pesquisa para todas as aplicações. Procure por Fornecedor de Recursos do Aparelho. Se não for encontrado, registe oMicrosoft.Solutions fornecedor de recursos.

Implementar a definição de aplicação gerida com um modelo ARM

Utilize o seguinte modelo ARM para implementar a sua aplicação gerida embalada como uma nova definição de aplicação gerida no seu catálogo de serviços. Os ficheiros de definição são armazenados e mantidos na sua conta de armazenamento.

Abra o Código do Estúdio Visual, crie um ficheiro com o nome azuredeploy.json e guarde-o.

Adicione o seguinte JSON e guarde o ficheiro.

{
  "$schema": "http://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "applicationName": {
      "type": "string",
      "metadata": {
        "description": "Managed Application name."
      }
    },
    "definitionStorageResourceID": {
      "type": "string",
      "metadata": {
        "description": "Storage account's resource ID where you're storing your managed application definition."
      }
    },
    "packageFileUri": {
      "type": "string",
      "metadata": {
        "description": "The URI where the .zip package file is located."
      }
    }
  },
  "variables": {
    "lockLevel": "None",
    "description": "Sample Managed application definition",
    "displayName": "Sample Managed application definition",
    "managedApplicationDefinitionName": "[parameters('applicationName')]",
    "packageFileUri": "[parameters('packageFileUri')]",
    "defLocation": "[parameters('definitionStorageResourceID')]"
  },
  "resources": [
    {
      "type": "Microsoft.Solutions/applicationDefinitions",
      "apiVersion": "2021-07-01",
      "name": "[variables('managedApplicationDefinitionName')]",
      "location": "[parameters('location')]",
      "properties": {
        "lockLevel": "[variables('lockLevel')]",
        "description": "[variables('description')]",
        "displayName": "[variables('displayName')]",
        "packageFileUri": "[variables('packageFileUri')]",
        "storageAccountId": "[variables('defLocation')]"
      }
    }
  ],
  "outputs": {}
}

Para obter mais informações sobre as propriedades do modelo ARM, consulte Microsoft.Solutions.

Implementar a definição

Crie um grupo de recursos chamado byosDefinitionRG e implemente a definição de aplicação gerida na sua conta de armazenamento.

New-AzResourceGroup -Name byosDefinitionRG -Location eastus

$storageId

New-AzResourceGroupDeployment `
  -ResourceGroupName byosDefinitionRG `
  -TemplateFile .\azuredeploy.json

Serão solicitados três parâmetros para implementar a definição.

Parâmetro Valor
applicationName Escolha um nome para a definição de aplicação gerida. Para este exemplo, utilize a amostraManagedAppDefintion.
definitionStorageResourceID Introduza o ID de recursos da sua conta de armazenamento. Criou a storageId variável com este valor num passo anterior. Não embrulhe a identificação do recurso com aspas.
packageFileUri Introduza o URI no seu ficheiro de pacote.zip . Utilize o URI para o ficheiro de pacote.zip que criou num passo anterior. O formato é https://yourStorageAccountName.blob.core.windows.net/appcontainer/app.zip.

Verifique o armazenamento de ficheiros de definição

Durante a implementação, a propriedade do storageAccountId modelo utiliza o ID de recursos da sua conta de armazenamento e cria um novo recipiente com o nome applicationdefinitionssensível ao caso. Os ficheiros do pacote.zip especificado durante a colocação são armazenados no novo recipiente.

Pode utilizar os seguintes comandos para verificar se os ficheiros de definição de aplicação geridos são guardados no contentor da sua conta de armazenamento. Name No parâmetro, substitua o espaço reservado definitionstorage pelo nome exclusivo da sua conta de armazenamento.

Get-AzStorageAccount -ResourceGroupName byosStorageRG -Name definitionstorage |
Get-AzStorageContainer -Name applicationdefinitions |
Get-AzStorageBlob | Select-Object -Property *

Nota

Para uma maior segurança, pode criar uma definição de aplicações geridas e armazená-la numa bolha de conta de armazenamento Azure onde a encriptação está ativada. Os conteúdos de definição são encriptados através das opções de encriptação da conta de armazenamento. Apenas os utilizadores com permissões para o ficheiro podem ver a definição no seu catálogo de serviços.

Confirmar que os utilizadores podem ver a definição

Tem acesso à definição de aplicação gerida, mas deve verificar se outros utilizadores na sua organização podem aceder à mesma. Conceda-lhes, pelo menos, a função de Leitor na definição. Estes podem ter herdado este nível de acesso através da subscrição ou do grupo de recursos. Para verificar quem tem acesso à definição e adicionar utilizadores ou grupos, consulte as funções De Atribuição Azure utilizando o portal do Azure.

Passos seguintes

Publicou a definição da aplicação gerida. Agora, saiba como implementar uma instância dessa definição.