Inicio rápido: Creación y publicación de una definición de aplicación administrada

En este inicio rápido se proporciona una introducción al uso de Azure Managed Applications. Puede crear y publicar una aplicación administrada que esté diseñada para los miembros de su organización.

Para publicar una aplicación administrada en el catálogo de servicios, debe hacer lo siguiente:

  • Cree una plantilla de Azure Resource Manager (plantilla de ARM) que defina los recursos que se van a implementar con la aplicación administrada.
  • Defina los elementos de la interfaz de usuario del portal cuando implemente la aplicación administrada.
  • Cree un paquete .zip que contenga los archivos de plantilla necesarios.
  • Decida qué usuario, grupo o aplicación necesita acceder al grupo de recursos en la suscripción del usuario.
  • Cree la definición de aplicación administrada que apunte al paquete .zip y solicite la identidad de acceso.

Nota

Los archivos de Bicep no se pueden usar en una aplicación administrada. Debe convertir un archivo de Bicep en JSON de plantilla de ARM con el comando de compilación de Bicep.

Creación de la plantilla de Resource Manager

Todas las definiciones de aplicaciones administradas incluyen un archivo denominado mainTemplate.json. En él, se definen los recursos de Azure que desea implementar. La plantilla no es diferente de una plantilla de Resource Manager normal.

Cree un archivo denominado mainTemplate.json. El nombre distingue mayúsculas de minúsculas.

Agregue el siguiente código JSON y guarde el archivo. Define los parámetros para crear una cuenta de almacenamiento y especifica las propiedades de la cuenta de almacenamiento.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountNamePrefix": {
      "type": "string"
    },
    "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]"
    }
  }
}

Definición de la experiencia de creación

Como publicador, defina la experiencia del portal para crear la aplicación administrada. El archivo createUiDefinition.json genera la interfaz del portal. Defina cómo los usuarios proporcionan la entrada para cada parámetro mediante elementos de control, incluidas las listas desplegables, los cuadros de texto y los cuadros de contraseña.

Cree un archivo denominado createUiDefinition.json (distingue mayúsculas de minúsculas).

Agregue el siguiente código de inicio JSON y guárdelo.

{
  "$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 más información, consulte Introducción a CreateUiDefinition.

Empaquetado de los archivos

Agregue los dos archivos a un archivo .zip denominado app.zip. Los dos archivos tienen que estar en el nivel raíz del archivo .zip. Si los coloca en una carpeta, recibe un error al crear la definición de aplicación administrada que indica que los archivos requeridos no están presentes.

Cargue el paquete en una ubicación accesible desde donde pueda consumirse. Deberá proporcionar un nombre único para la cuenta de almacenamiento.

New-AzResourceGroup -Name storageGroup -Location eastus

$storageAccount = New-AzStorageAccount `
  -ResourceGroupName storageGroup `
  -Name "mystorageaccount" `
  -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

Creación de la definición de aplicación administrada

Creación de una aplicación o grupo de usuarios de Azure Active Directory

El siguiente paso consiste en seleccionar una aplicación, un usuario o un grupo de usuarios para administrar los recursos para el cliente. Esta identidad tiene permisos en el grupo de recursos administrado, según el rol asignado. El rol puede ser cualquier rol integrado en Azure, como Propietario o Colaborador. Para crear un grupo de usuarios de Active Directory, consulte Creación de un grupo y adición de miembros en Azure Active Directory.

Necesita el identificador de objeto del grupo de usuarios que se usará para administrar los recursos.

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

Obtención del identificador de definición de rol

A continuación, necesita el identificador de definición de rol para el rol integrado de Azure que desea para conceder acceso al usuario, al grupo de usuarios o a la aplicación. Por lo general, se usa el rol Propietario, Colaborador o Lector. El comando siguiente muestra cómo obtener el identificador de definición de rol para el rol Propietario:

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

Creación de la definición de aplicación administrada

Si ya no dispone de un grupo de recursos para almacenar la definición de aplicación administrada, créelo ahora:

New-AzResourceGroup -Name appDefinitionGroup -Location westcentralus

Ahora, cree el recurso de la definición de aplicación administrada.

$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

Cuando finalice el comando, tendrá una definición de aplicación administrada en el grupo de recursos.

Algunos de los parámetros usados en el ejemplo anterior son:

  • grupo de recursos: El nombre del grupo de recursos donde se creó la definición de aplicación administrada.

  • nivel de bloqueo: El tipo de bloqueo aplicado al grupo de recursos administrado. Impide que el cliente realice operaciones no deseadas en este grupo de recursos. Actualmente, ReadOnly es el único nivel de bloqueo admitido. Cuando se especifica ReadOnly, el cliente solo puede leer los recursos presentes en el grupo de recursos administrado. Las identidades del publicador a las que se concede acceso al grupo de recursos administrados están exentas del bloqueo.

  • authorizations: Describe el identificador de entidad de seguridad y el identificador de definición de rol que se usan para conceder el permiso al grupo de recursos administrado.

    • Azure PowerShell: "${groupid}:$roleid" o puede usar llaves para cada variable "${groupid}:${roleid}". Use una coma para separar varios valores: "${groupid1}:$roleid1", "${groupid2}:$roleid2".
    • CLI de Azure: "$groupid:$roleid" o puede usar llaves como se muestra en PowerShell. Use un espacio para separar varios valores: "$groupid1:$roleid1" "$groupid2:$roleid2".
  • URI del archivo de paquete: La ubicación de un paquete .zip que contiene los archivos necesarios.

Traiga su propio almacenamiento para la definición de aplicación administrada

Como alternativa, puede optar por almacenar la definición de aplicación administrada en la cuenta de almacenamiento que proporciona durante la creación para poder administrar totalmente su ubicación y acceso en función de las necesidades regulatorias aplicables.

Nota

La opción para traer su propio almacenamiento solo es compatible con las implementaciones de la plantilla de Resource Manager o de la API REST de la definición de aplicación administrada.

Selección de la cuenta de almacenamiento

Debe crear una cuenta de almacenamiento para que contenga la definición de aplicación administrada para su uso con el catálogo de servicios.

Copie el identificador de recurso de la cuenta de almacenamiento. Se usará más adelante al implementar la definición.

Establezca la asignación de roles para "Appliance Resource Provider" en la cuenta de almacenamiento.

Para que la definición de aplicación administrada pueda implementarse en la cuenta de almacenamiento, asigne el rol Colaborador al usuario Appliance Resource Provider (Proveedor de recursos de dispositivos) en el ámbito de la cuenta de almacenamiento. Esta asignación permite a la identidad escribir archivos de definición en el contenedor de la cuenta de almacenamiento.

Para asignar roles, consulte Asignación de roles de Azure mediante Azure Portal.

Implementación de la definición de aplicación administrada con una plantilla de Resource Manager

Use la plantilla de Resource Manager siguiente para implementar la aplicación administrada empaquetada como una definición de aplicación administrada nueva en el catálogo de servicios cuyos archivos de definición se guardan y mantienen en la cuenta de almacenamiento del usuario:

{
  "$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"
      }
    },
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    },
    "definitionStorageResourceID": {
      "type": "string",
      "metadata": {
        "description": "Storage account resource ID for where you're storing your definition"
      }
    },
    "_artifactsLocation": {
      "type": "string",
      "metadata": {
        "description": "The base URI where artifacts required by this template are located."
      }
    }
  },
  "variables": {
    "lockLevel": "None",
    "description": "Sample Managed application definition",
    "displayName": "Sample Managed application definition",
    "managedApplicationDefinitionName": "[parameters('applicationName')]",
    "packageFileUri": "[parameters('_artifactsLocation')]",
    "defLocation": "[parameters('definitionStorageResourceID')]",
    "managedResourceGroupId": "[concat(subscription().id,'/resourceGroups/', concat(parameters('applicationName'),'_managed'))]",
    "applicationDefinitionResourceId": "[resourceId('Microsoft.Solutions/applicationDefinitions',variables('managedApplicationDefinitionName'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Solutions/applicationDefinitions",
      "apiVersion": "2020-08-21-preview",
      "name": "[variables('managedApplicationDefinitionName')]",
      "location": "[parameters('location')]",
      "properties": {
        "lockLevel": "[variables('lockLevel')]",
        "description": "[variables('description')]",
        "displayName": "[variables('displayName')]",
        "packageFileUri": "[variables('packageFileUri')]",
        "storageAccountId": "[variables('defLocation')]"
      }
    }
  ],
  "outputs": {}
}

Las propiedades applicationDefinitions incluyen un valor storageAccountId que contiene el identificador de la cuenta de almacenamiento. Puede comprobar que los archivos de definición de aplicación se guardan en la cuenta de almacenamiento proporcionada en un contenedor titulado applicationDefinitions.

Nota

Para mayor seguridad, puede crear una definición de aplicaciones administradas y almacenarla en un blob de cuenta de almacenamiento de Azure con el cifrado habilitado. El contenido de la definición se cifra mediante las opciones de cifrado de la cuenta de almacenamiento. Solo los usuarios con permisos para el archivo pueden ver la definición en el catálogo de servicios.

Asegurarse de que los usuarios pueden ver la definición

Tiene acceso a la definición de la aplicación administrada, pero desea asegurarse de que otros usuarios de su organización puedan acceder a ella. Concédales al menos el rol de lector en la definición. Puede haber heredado este nivel de acceso de la suscripción o del grupo de recursos. Para comprobar quién tiene acceso a la definición y agregar usuarios o grupos, consulte Asignación de roles de Azure mediante Azure Portal.

Pasos siguientes

Ha publicado la definición de aplicación administrada. Ahora, aprenda a implementar una instancia de esa definición.