Inicio rápido: traiga su propio almacenamiento para crear y publicar una definición de aplicación administrada de Azure
En este inicio rápido se proporciona una introducción a Traiga su propio almacenamiento (BYOS) para una aplicación administrada de Azure. Creará y publicará una definición de aplicación administrada en el catálogo de servicios para los miembros de la organización. Al usar su propia cuenta de almacenamiento, la definición de la aplicación administrada podrá superar el límite de 120 MB del catálogo de servicios.
Para publicar una definición de aplicación administrada en el catálogo de servicios, deberá realizar las siguientes tareas:
- Crear una plantilla de Azure Resource Manager (plantilla de ARM) que defina los recursos de Azure implementados por la aplicación administrada.
- Defina los elementos de la interfaz de usuario del portal cuando implemente la aplicación administrada.
- Crear un paquete .zip que contenga los archivos de JSON necesarios.
- Crear una cuenta de almacenamiento donde almacene la definición de aplicación administrada.
- Implemente la definición de aplicación administrada en su propia cuenta de almacenamiento para que esté disponible en el catálogo de servicios.
Si la definición de la aplicación administrada fuera inferior a 120 MB y no desease usar su propia cuenta de almacenamiento, vaya a Inicio rápido: creación y publicación de una definición de aplicación administrada por Azure.
Puede usar Bicep para desarrollar una definición de aplicación administrada, pero deberá convertirse en JSON de plantilla de ARM para poder publicar la definición en Azure. Para más información, vaya a Inicio rápido: Usar Bicep para crear y publicar una definición de aplicación administrada por Azure.
También puede utilizar Bicep para implementar una definición de aplicación administrada desde el catálogo de servicios. Para más información, vaya a Inicio rápido: Usar Bicep para implementar una definición de aplicación administrada por Azure.
Prerrequisitos
Para completar este inicio rápido, necesita los siguientes elementos:
- Una cuenta de Azure con una suscripción activa y permisos para recursos de Microsoft Entra, como usuarios, grupos o entidades de servicio. Antes de comenzar, si no tiene una cuenta, cree una gratuita.
- Visual Studio Code con la extensión Herramientas de Azure Resource Manager más reciente. En el caso de los archivos de Bicep, instale la extensión de Bicep para Visual Studio Code.
- Instale la versión más reciente de Azure PowerShell o la CLI de Azure.
Creación de la plantilla de Resource Manager
Todas las definiciones de aplicaciones administradas incluyen un archivo denominado mainTemplate.json. La plantilla define los recursos de Azure que se van a implementar, y no difiere de una plantilla de ARM normal.
Abra Visual Studio Code, cree un archivo con el nombre mainTemplate.json (se distingue entre mayúsculas y minúsculas) y guárdelo.
Agregue el siguiente código JSON y guarde el archivo. Define los recursos de la aplicación administrada para implementar un plan de App Service, App Service y una cuenta de almacenamiento.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"appServicePlanName": {
"type": "string",
"maxLength": 40,
"metadata": {
"description": "App Service plan name."
}
},
"appServiceNamePrefix": {
"type": "string",
"maxLength": 47,
"metadata": {
"description": "App Service name prefix."
}
}
},
"variables": {
"appServicePlanSku": "B1",
"appServicePlanCapacity": 1,
"appServiceName": "[format('{0}{1}', parameters('appServiceNamePrefix'), uniqueString(resourceGroup().id))]",
"linuxFxVersion": "DOTNETCORE|8.0"
},
"resources": [
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2023-01-01",
"name": "[parameters('appServicePlanName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[variables('appServicePlanSku')]",
"capacity": "[variables('appServicePlanCapacity')]"
},
"kind": "linux",
"properties": {
"zoneRedundant": false,
"reserved": true
}
},
{
"type": "Microsoft.Web/sites",
"apiVersion": "2023-01-01",
"name": "[variables('appServiceName')]",
"location": "[parameters('location')]",
"properties": {
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
"httpsOnly": true,
"redundancyMode": "None",
"siteConfig": {
"linuxFxVersion": "[variables('linuxFxVersion')]",
"minTlsVersion": "1.2",
"ftpsState": "Disabled"
}
},
"dependsOn": [
"[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]"
]
}
],
"outputs": {
"appServicePlan": {
"type": "string",
"value": "[parameters('appServicePlanName')]"
},
"appServiceApp": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Web/sites', variables('appServiceName')), '2023-01-01').defaultHostName]"
}
}
}
Defina su experiencia del portal
Como publicador, define la experiencia del portal para crear la aplicación administrada. El archivo createUiDefinition.json genera la interfaz de usuario del portal. Defina cómo los usuarios proporcionan la entrada para cada parámetro mediante elementos de control, como las listas desplegables y los cuadros de texto.
En este ejemplo, la interfaz de usuario le pide que escriba el prefijo de nombre de App Service y el nombre del plan de App Service. Durante la implementación de mainTemplate.json, las variables appServiceName
usan la función uniqueString
para anexar una cadena de 13 caracteres a los prefijos de nombre para que los nombres sean únicos globalmente en Azure.
Abra Visual Studio Code, cree un archivo con el nombre createUiDefinition.json (se distingue entre mayúsculas y minúsculas) y guárdelo.
Agregue el siguiente código 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": "webAppSettings",
"label": "Web App settings",
"subLabel": {
"preValidation": "Configure the web app settings",
"postValidation": "Completed"
},
"elements": [
{
"name": "appServicePlanName",
"type": "Microsoft.Common.TextBox",
"label": "App Service plan name",
"placeholder": "App Service plan name",
"defaultValue": "",
"toolTip": "Use alphanumeric characters or hyphens with a maximum of 40 characters.",
"constraints": {
"required": true,
"regex": "^[a-z0-9A-Z-]{1,40}$",
"validationMessage": "Only alphanumeric characters or hyphens are allowed, with a maximum of 40 characters."
},
"visible": true
},
{
"name": "appServiceName",
"type": "Microsoft.Common.TextBox",
"label": "App Service name prefix",
"placeholder": "App Service name prefix",
"defaultValue": "",
"toolTip": "Use alphanumeric characters or hyphens with minimum of 2 characters and maximum of 47 characters.",
"constraints": {
"required": true,
"regex": "^[a-z0-9A-Z-]{2,47}$",
"validationMessage": "Only alphanumeric characters or hyphens are allowed, with a minimum of 2 characters and maximum of 47 characters."
},
"visible": true
}
]
}
],
"outputs": {
"location": "[location()]",
"appServicePlanName": "[steps('webAppSettings').appServicePlanName]",
"appServiceNamePrefix": "[steps('webAppSettings').appServiceName]"
}
}
}
Para más información, vaya a Introducción a CreateUiDefinition.
Empaquetado de los archivos
Agregue los dos archivos a un paquete de archivo denominado app.zip. Los dos archivos tienen que estar en el nivel raíz del archivo .zip. Si los archivos estuvieran en una carpeta, cuando cree la definición de la aplicación administrada, recibirá un error indicando que los archivos necesarios no están presentes.
Cargue app.zip en una cuenta de almacenamiento de Azure para que pueda usarla al implementar la definición de la aplicación administrada. El nombre de la cuenta de almacenamiento debe ser único globalmente en Azure y su longitud debe ser de entre 3 y 24 caracteres (solo letras en minúsculas y números). En el comando, reemplace el marcador de posición <pkgstorageaccountname>
, incluyendo los corchetes angulares (<>
), por el nombre de la cuenta de almacenamiento único.
New-AzResourceGroup -Name packageStorageGroup -Location westus
$pkgstorageparms = @{
ResourceGroupName = "packageStorageGroup"
Name = "<pkgstorageaccountname>"
Location = "westus"
SkuName = "Standard_LRS"
Kind = "StorageV2"
MinimumTlsVersion = "TLS1_2"
AllowBlobPublicAccess = $true
AllowSharedKeyAccess = $false
}
$pkgstorageaccount = New-AzStorageAccount @pkgstorageparms
La variable $pkgstorageparms
usa la expansión de PowerShell para mejorar la legibilidad de los valores de parámetro usados en el comando para crear la nueva cuenta de almacenamiento. La expansión se usa en otros comandos de PowerShell que usan varios valores de parámetro.
Después de crear la cuenta de almacenamiento, agregue la asignación de rol Colaborador de datos de Storage Blob al ámbito de la cuenta de almacenamiento. Asigne acceso a su cuenta de usuario de Microsoft Entra. En función del nivel de acceso de Azure, es posible que necesite otros permisos asignados por el administrador. Para más información, consulte Asignación de roles de Azure para el acceso a datos de blobs y Asignación de roles de Azure mediante Azure Portal.
Después de agregar el rol a la cuenta de almacenamiento, este tarda unos minutos en activarse en Azure. A continuación, puede crear el contexto necesario para crear el contenedor y cargar el archivo.
$pkgstoragecontext = New-AzStorageContext -StorageAccountName $pkgstorageaccount.StorageAccountName -UseConnectedAccount
New-AzStorageContainer -Name appcontainer -Context $pkgstoragecontext -Permission blob
$blobparms = @{
File = "app.zip"
Container = "appcontainer"
Blob = "app.zip"
Context = $pkgstoragecontext
}
Set-AzStorageBlobContent @blobparms
Use el siguiente comando para almacenar el URI del archivo de paquete en una variable denominada packageuri
. Usará el valor de variable al implementar la definición de aplicación administrada.
$packageuri=(Get-AzStorageBlob -Container appcontainer -Blob app.zip -Context $pkgstoragecontext).ICloudBlob.StorageUri.PrimaryUri.AbsoluteUri
Traiga su propio almacenamiento para la definición de aplicación administrada
Almacenará la definición de aplicación administrada en su propia cuenta de almacenamiento, lo que le permitirá administrar su ubicación y acceso en función de las necesidades regulatorias aplicables de la organización. El uso de su propia cuenta de almacenamiento le permitirá tener una aplicación que supere el límite de 120 MB para la definición de aplicación administrada de un catálogo de servicios.
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.
Creación de la cuenta de almacenamiento
Cree la cuenta de almacenamiento para la definición de aplicación administrada. El nombre de la cuenta de almacenamiento debe ser único globalmente en Azure y su longitud debe ser de entre 3 y 24 caracteres (solo letras en minúsculas y números).
En este ejemplo se crea un nuevo grupo de recursos llamado byosDefinitionStorageGroup
. En el comando, reemplace el marcador de posición <byosaccountname>
, incluyendo los corchetes angulares (<>
), por el nombre de la cuenta de almacenamiento único.
New-AzResourceGroup -Name byosDefinitionStorageGroup -Location westus
$byostorageparms = @{
ResourceGroupName = "byosDefinitionStorageGroup"
Name = "<byosaccountname>"
Location = "westus"
SkuName = "Standard_LRS"
Kind = "StorageV2"
MinimumTlsVersion = "TLS1_2"
AllowBlobPublicAccess = $true
AllowSharedKeyAccess = $true
}
$byosstorageaccount = New-AzStorageAccount @byostorageparms
Después de crear la cuenta de almacenamiento, agregue la asignación de rol Colaborador de datos de Storage Blob al ámbito de la cuenta de almacenamiento. Asigne acceso a su cuenta de usuario de Microsoft Entra. Necesita acceso para un paso más adelante en el proceso.
Después de agregar el rol a la cuenta de almacenamiento, este tarda unos minutos en activarse en Azure. A continuación, puede crear el contexto necesario para crear el contenedor y cargar el archivo.
$byosstoragecontext = New-AzStorageContext -StorageAccountName $byosstorageaccount.StorageAccountName -UseConnectedAccount
Use el siguiente comando para almacenar el identificador de recurso de la cuenta de almacenamiento en una variable denominada byosstorageid
. Usará el valor de variable al implementar la definición de aplicación administrada.
$byosstorageid = (Get-AzStorageAccount -ResourceGroupName $byosstorageaccount.ResourceGroupName -Name $byosstorageaccount.StorageAccountName).Id
Configuración de la asignación de roles para la cuenta de almacenamiento
Antes de implementar la definición de aplicación administrada en la cuenta de almacenamiento, asigne el rol Colaborador al usuario 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.
Es posible usar variables para configurar la asignación de roles. En este ejemplo, se usa la variable $byosstorageid
que creó en un paso anterior y se crea la variable $arpid
.
$arpid = (Get-AzADServicePrincipal -SearchString "Appliance Resource Provider").Id
New-AzRoleAssignment -ObjectId $arpid -RoleDefinitionName Contributor -Scope $byosstorageid
El Proveedor de recursos del dispositivo es una entidad de servicio en el inquilino de Microsoft Entra. En Azure Portal, para comprobar si está registrada, vaya a Microsoft Entra ID>Aplicaciones empresariales y cambie el filtro de búsqueda a Aplicaciones de Microsoft. Busque por proveedor de recursos de dispositivos. Si no se encuentra, registre el proveedor de recursos Microsoft.Solutions
.
Obtención del identificador de grupo y el identificador de definición de roles
El siguiente paso consiste en seleccionar un usuario, grupo de seguridad o aplicación 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.
En este ejemplo se usa un grupo de seguridad, y la cuenta de Microsoft Entra deberá ser miembro del grupo. Para obtener el identificador de objeto del grupo, reemplace el marcador de posición <managedAppDemo>
, incluyendo los corchetes angulares (<>
), por el nombre del grupo. Usará el valor de variable al implementar la definición de aplicación administrada.
Para crear un nuevo grupo de Microsoft Entra, vaya a Administración de grupos y pertenencia a grupos de Microsoft Entra.
$principalid=(Get-AzADGroup -DisplayName <managedAppDemo>).Id
A continuación, obtenga el identificador de definición de rol para el rol integrado de Azure que desee para conceder acceso al usuario, grupo o aplicación. Usará el valor de variable al implementar la definición de aplicación administrada.
$roleid=(Get-AzRoleDefinition -Name Owner).Id
Creación de la plantilla de implementación de definición
Use un archivo de Bicep para implementar la definición de aplicación administrada en el catálogo de servicios. Después de la implementación, los archivos de definición se almacenarán en su propia cuenta de almacenamiento.
Abra Visual Studio Code, cree un archivo llamado deployDefinition.bicep y guárdelo.
Agregue el código de Bicep siguiente y guarde el archivo.
param location string = resourceGroup().location
@description('Name of the managed application definition.')
param managedApplicationDefinitionName string
@description('Resource ID for the bring your own storage account where the definition is stored.')
param definitionStorageResourceID string
@description('The URI of the .zip package file.')
param packageFileUri string
@description('Publishers Principal ID that needs permissions to manage resources in the managed resource group.')
param principalId string
@description('Role ID for permissions to the managed resource group.')
param roleId string
var definitionLockLevel = 'ReadOnly'
var definitionDisplayName = 'Sample BYOS managed application'
var definitionDescription = 'Sample BYOS managed application that deploys web resources'
resource managedApplicationDefinition 'Microsoft.Solutions/applicationDefinitions@2021-07-01' = {
name: managedApplicationDefinitionName
location: location
properties: {
lockLevel: definitionLockLevel
description: definitionDescription
displayName: definitionDisplayName
packageFileUri: packageFileUri
storageAccountId: definitionStorageResourceID
authorizations: [
{
principalId: principalId
roleDefinitionId: roleId
}
]
}
}
Para obtener más información sobre las propiedades de plantilla, vaya a Microsoft.Solutions/applicationDefinitions.
El lockLevel
del grupo de recursos administrados impedirá que el cliente realice operaciones no deseadas en este grupo de recursos. Actualmente, ReadOnly
es el único nivel de bloqueo admitido. ReadOnly
especifica que 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 nivel de bloqueo.
Creación del archivo de parámetros
La plantilla de implementación de la definición de aplicación administrada necesita entradas para varios parámetros. El comando de implementación le pedirá los valores o podrá crear un archivo de parámetros para los valores. En este ejemplo, se usa un archivo de parámetros para pasar los valores de parámetro al comando de implementación.
En Visual Studio Code, cree un archivo denominado deployDefinition.parameters.json y guárdelo.
Agregue lo siguiente al archivo de parámetros y guárdelo. A continuación, reemplace <placeholder values>
, incluyendo los corchetes angulares (<>
), por sus valores.
using './deployDefinition.bicep'
param managedApplicationDefinitionName = 'sampleByosManagedApplication'
param definitionStorageResourceID = '<placeholder for you BYOS storage account ID>'
param packageFileUri = '<placeholder for the packageFileUri>'
param principalId = '<placeholder for principalid value>'
param roleId = '<placeholder for roleid value>'
En la tabla siguiente se describen los valores de parámetro de la definición de aplicación administrada.
Parámetro | Valor |
---|---|
managedApplicationDefinitionName |
Nombre de la definición de aplicación administrada. En este ejemplo, use sampleByosManagedApplication. |
definitionStorageResourceID |
Identificador de recurso de la cuenta de almacenamiento donde se almacena la definición. Use el valor de la variable byosstorageid . |
packageFileUri |
Escriba el URI en el archivo de paquete .zip. Use el valor de la variable packageuri . |
principalId |
Identificador de entidad de seguridad de publicadores que necesita permisos para administrar recursos en el grupo de recursos administrados. Use el valor de la variable principalid . |
roleId |
Id. de rol para los permisos para el grupo de recursos administrados. Por ejemplo: Propietario, Colaborador o Lector. Use el valor de la variable roleid . |
Para obtener los valores de la variable:
- Azure PowerShell: en PowerShell, escriba
$variableName
para mostrar el valor de una variable. - CLI de Azure: en Bash, escriba
echo $variableName
para mostrar el valor de una variable.
Implementación de la definición
Al implementar la definición de la aplicación administrada, estará disponible en el catálogo de servicios. Este proceso no implementará los recursos de la aplicación administrada.
Cree un grupo de recursos denominado byosAppDefinitionGroup e implemente la definición de aplicación administrada en su cuenta de almacenamiento.
New-AzResourceGroup -Name byosAppDefinitionGroup -Location westus
$deployparms = @{
ResourceGroupName = "byosAppDefinitionGroup"
TemplateFile = "deployDefinition.bicep"
TemplateParameterFile = "deployDefinition-parameters.bicepparam"
Name = "deployDefinition"
}
New-AzResourceGroupDeployment @deployparms
Comprobación del almacenamiento de archivos de definición
Durante la implementación, la propiedad storageAccountId
de la plantilla usa el identificador de recurso de la cuenta de almacenamiento y crea un contenedor con el nombre applicationdefinitions
(se distinguen mayúsculas de minúsculas). Los archivos del paquete .zip que especificó durante la implementación se almacenan en el nuevo contenedor.
Puede usar los siguientes comandos para comprobar que los archivos de definición de aplicación administrada se guardan en el contenedor de la cuenta de almacenamiento.
Get-AzStorageContainer -Name applicationdefinitions -Context $byosstoragecontext |
Get-AzStorageBlob | Select-Object -Property Name | Format-List
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 acceder a la definición en el catálogo de servicios.
Actualizar la seguridad de la cuenta de almacenamiento
Después de una implementación correcta, para mejorar la seguridad de la cuenta de almacenamiento, deshabilite la propiedad de clave de acceso compartido. Cuando se creó la cuenta de almacenamiento, se añadió una asignación de funciones para el Colaboradorr de datos de blobs de almacenamiento que le permite acceder al contenedor y a los blobs sin utilizar claves de almacenamiento.
Para revisar y actualizar la configuración de la clave de acceso compartido de la cuenta de almacenamiento, use los siguientes comandos:
(Get-AzStorageAccount -ResourceGroupName $byosstorageaccount.ResourceGroupName -Name $byosstorageaccount.StorageAccountName).AllowSharedKeyAccess
Set-AzStorageAccount -ResourceGroupName $byosstorageaccount.ResourceGroupName -Name $byosstorageaccount.StorageAccountName -AllowSharedKeyAccess $false
Asegurarse de que los usuarios pueden acceder a 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. Es posible que hayan 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, vaya a Asignación de roles de Azure mediante Azure Portal.
Limpieza de recursos
Si va a implementar la definición, continúe con la sección Pasos siguientes que se vincula al artículo para implementar la definición.
Si ha terminado con la definición de la aplicación administrada, puede eliminar los grupos de recursos creados denominados packageStorageGroup, byosDefinitionStorageGroup y byosAppDefinitionGroup.
El comando le pide que confirme que quiere quitar el grupo de recursos.
Remove-AzResourceGroup -Name packageStorageGroup
Remove-AzResourceGroup -Name byosDefinitionStorageGroup
Remove-AzResourceGroup -Name byosAppDefinitionGroup
Pasos siguientes
Ha publicado la definición de aplicación administrada. Ahora, aprenda a implementar una instancia de esa definición.