0% encontró este documento útil (0 votos)
67 vistas354 páginas

Azure Azure Resource Manager Managed Applications

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
67 vistas354 páginas

Azure Azure Resource Manager Managed Applications

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Díganos qué opina sobre la experiencia de descarga del PDF.

Documentación sobre Azure Managed


Applications
Oferta de soluciones en la nube que los consumidores pueden implementar y utilizar
fácilmente.

Acerca de Azure Managed Applications

e INFORMACIÓN GENERAL

¿Qué es Azure Managed Applications?

p CONCEPTO

Ver definición de artefacto

Azure Policy para asociaciones

Creación de aplicaciones administradas

f INICIO RÁPIDO

Publicar definición de la aplicación administrada

Publicación de la definición con BYOS

Publicación de la definición de aplicación administrada con Bicep

Implementar aplicación administrada del catálogo de servicios

Implementación de una definición de aplicación administrada con Bicep

Implementar aplicación administrada de Azure Marketplace

g TUTORIAL

Publicación de la aplicación Marketplace

Creación de una aplicación administrada con el proveedor personalizado

c GUÍA PASO A PASO

Uso de un secreto de Key Vault


Creación de almacenamiento con clave administrada por el cliente

Control de acceso

c GUÍA PASO A PASO

Solicitud de acceso Just-In-Time

Aprobación de acceso Just-In-Time

Implementación con identidad administrada

Creación de interfaz de usuario del portal

c GUÍA PASO A PASO

Creación de la interfaz del portal

Prueba de la interfaz del portal

Artefacto de elementos de la interfaz de usuario

Elementos de la interfaz

Funciones de la interfaz

Administrar recursos

c GUÍA PASO A PASO

Supervisión de una instancia implementada

Implementación con notificaciones

Actualización de los recursos administrados


Introducción a las aplicaciones
administradas de Azure
Artículo • 01/08/2023

Las aplicaciones administradas de Azure le permiten ofrecer soluciones en la nube que


los clientes pueden implementar y utilizar fácilmente. Como publicador, implementa la
infraestructura y puede proporcionar soporte técnico continuo. Para poner a disposición
de todos los clientes una aplicación administrada, publíquela en Azure Marketplace. Si
quiere que esté disponible solo para los usuarios de su organización, publíquela en un
catálogo interno.

Una aplicación administrada es similar a una plantilla de solución de Azure Marketplace,


aunque hay una diferencia importante. En una aplicación administrada, los recursos se
implementan en un grupo de recursos que está administrado por el publicador de la
aplicación. El grupo de recursos administrados está presente en la suscripción del
cliente, pero se puede dar acceso al grupo de recursos administrados a una identidad
en el inquilino del publicador. Como publicador, puede especificar el costo del soporte
técnico continuado de la solución.

7 Nota

En Managed Applications se debe incluir la documentación de los proveedores


personalizados de Azure que se van a usar. Esa documentación se movió a
Proveedores personalizados de Azure.

Permisos de publicador y cliente


Para el grupo de recursos administrado, el acceso de administración del publicador y la
asignación de denegación del cliente son opcionales. Hay diferentes escenarios de
permisos disponibles en función de las necesidades de publicador y cliente de una
aplicación administrada.

Publicador administrado: El publicador tiene acceso de administración a los


recursos del grupo de recursos administrados en el inquilino de Azure del cliente.
El acceso de los clientes al grupo de recursos administrado está restringido por
una asignación de denegación. El publicador administrado es el escenario de
permisos de aplicación administrada predeterminado.
Acceso al publicador y al cliente: El publicador y el cliente tienen acceso total al
grupo de recursos administrado. Se quita la asignación de denegación.
Modo bloqueado: El publicador no tiene acceso a la aplicación administrada
implementada por los clientes ni al grupo de recursos administrados. El acceso al
cliente está restringido por la asignación de denegación.
Administrado por el cliente: El cliente tiene acceso de administración total al
grupo de recursos administrado y se quita el acceso del publicador. No hay
ninguna asignación de denegación. El publicador desarrolla la aplicación y publica
en Azure Marketplace, pero no administra la aplicación. El publicador concede
licencias a la aplicación para la facturación a través de Azure Marketplace.

Ventajas del uso de escenarios de permisos:

Por motivos de seguridad, los publicadores no quieren acceso de administración


persistente al grupo de recursos administrados, al inquilino del cliente ni a los
datos del grupo de recursos administrados.
Los publicadores quieren quitar la asignación de denegación para que los clientes
administren la aplicación. El publicador no necesita administrar la asignación de
denegación para habilitar o deshabilitar acciones para el cliente. Por ejemplo, una
acción como reiniciar una máquina virtual en la aplicación administrada.
Proporcione a los clientes control total para administrar la aplicación de modo que
los publicadores no tengan que ser un proveedor de servicios para administrar la
aplicación.

Ventajas de las aplicaciones administradas


Las aplicaciones administradas reducen las barreras que existen para los clientes que
utilizan sus soluciones. No es necesario que tengan conocimientos de la infraestructura
de nube para usar la solución. En función de los permisos configurados por el
publicador, es posible que los clientes tengan acceso limitado a los recursos críticos y
no tengan que preocuparse por cometer un error al administrarlo.

Las aplicaciones administradas le permiten establecer una relación continuada con los
clientes. Defina los términos de administración de la aplicación y todos los cargos se
controlarán mediante la facturación de Azure.

A pesar de que los clientes implementan estas aplicaciones administradas en sus


suscripciones, no es necesario que las mantengan, actualicen ni atiendan. Pero hay
permisos que permiten al cliente tener acceso total a los recursos del grupo de recursos
administrados. Puede estar seguro de que todos los clientes usan versiones aprobadas.
No es necesario que los clientes desarrollen un conocimiento ni dominio específico para
administrar estas aplicaciones. Los clientes adquieren de inmediato las actualizaciones
de las aplicaciones sin tener que preocuparse de solucionar ni diagnosticar problemas
de estas.
Para los equipos de TI, las aplicaciones administradas permiten ofrecer soluciones
aprobadas previamente a los usuarios de la organización. Estas soluciones se sabe que
son compatibles con los estándares de la organización.

Las aplicaciones administradas admiten las identidades administradas para recursos de


Azure.

Tipos de aplicaciones administradas


Puede publicar la aplicación administrada internamente en el catálogo de servicios o
externamente en Azure Marketplace.

Catálogo de servicios
El catálogo de servicios es un catálogo interno de soluciones aprobadas para los
usuarios de una organización. Usará el catálogo para cumplir los estándares
organizativos y ofrecer al mismo tiempo soluciones para las organizaciones. Los
empleados usan el catálogo de servicios para encontrar aplicaciones recomendadas y
aprobadas por sus departamentos de TI. También pueden ver las aplicaciones
administradas que otras personas de su organización comparten con ellos.

Para información sobre cómo publicar una aplicación administrada en un catálogo de


servicios, consulte Inicio rápido: Creación y publicación de una definición de aplicación
administrada.

Azure Marketplace
Los proveedores que deseen facturar sus servicios pueden disponer de una aplicación
administrada mediante Azure Marketplace. Después de que el proveedor publica una
aplicación, esta está disponible para los usuarios de fuera de la organización. Con este
enfoque, los proveedores de servicios administrados (MSP), los proveedores de software
independiente (ISV) o los integradores de sistemas (SI) pueden ofrecer sus soluciones a
todos los clientes de Azure.

Para información sobre cómo publicar una aplicación administrada en Azure


Marketplace, consulte Creación de una oferta de aplicación de Azure.

Grupos de recursos para aplicaciones


administradas
Normalmente, los recursos de una aplicación administrada residen en dos grupos de
recursos. El cliente administra un grupo de recursos y el editor administra el otro. Al
definir la aplicación administrada, el editor especifica los niveles de acceso. El publicador
puede solicitar una asignación de roles permanentes, o acceso Just-In-Time para una
asignación que esté restringida a un período de tiempo. Los publicadores también
pueden configurar la aplicación administrada para que no haya acceso al publicador.

No se admite actualmente la restricción del acceso para las operaciones de datos para
todos los proveedores de datos en Azure.

En la imagen siguiente se muestra la relación entre la suscripción de Azure del cliente y


la suscripción de Azure del publicador, que es el permiso administrado por el publicador
predeterminado. La aplicación administrada y el grupo de recursos administrados se
encuentran en la suscripción del cliente. El publicador tiene acceso de administración al
grupo de recursos administrados para mantener los recursos de la aplicación
administrada. El publicador coloca un bloqueo de solo lectura en el grupo de recursos
administrado que limita el acceso del cliente para administrar los recursos. Las
identidades del publicador a las que tiene acceso al grupo de recursos administrado
están exentas del bloqueo.
Se puede cambiar el acceso de administración tal como se muestra en la imagen. El
cliente puede tener acceso total al grupo de recursos administrado. Además, se puede
quitar el acceso del publicador al grupo de recursos administrado.

Grupo de recursos de la aplicación


Este grupo de recursos mantiene la instancia de la aplicación administrada. Este grupo
de recursos solo puede contener un recurso. El tipo de recurso de la aplicación
administrada es [Link]/applications.

El cliente tiene acceso total al grupo de recursos y lo utiliza para administrar el ciclo de
vida de la aplicación administrada.

Grupo de recursos administrado


Este grupo de recursos contiene todos los recursos que requiere la aplicación
administrada. Por ejemplo, las máquinas virtuales, las cuentas de almacenamiento y las
redes virtuales de una aplicación. El cliente tiene acceso limitado a este grupo de
recursos porque, a menos que se cambien las opciones de permiso, el cliente no
administra los recursos individuales de la aplicación administrada. El acceso del editor a
este grupo de recursos se corresponde con el rol especificado en la definición de la
aplicación administrada. Por ejemplo, el editor puede solicitar el rol de propietario o
colaborador para este grupo de recursos. El acceso es permanente o está limitado a un
momento específico. El publicador puede optar por no tener acceso al grupo de
recursos administrado.
Al publicar la aplicación administrada en el mercado, el publicador puede conceder a los
clientes la capacidad de realizar acciones específicas en los recursos del grupo de
recursos administrados o darles acceso total. Por ejemplo, el editor puede especificar
que los clientes puedan reiniciar máquinas virtuales. Se continuarán rechazando el resto
de acciones que no sean de lectura. Los cambios en los recursos de un grupo de
recursos administrado por un clientes con acciones concedidas están sujetos a que las
asignaciones de Azure Policy dentro del inquilino de los clientes del ámbito incluyan el
grupo de recursos administrado.

Cuando el cliente elimina la aplicación administrada, también se elimina el grupo de


recursos administrados.

Proveedor de recursos
Las aplicaciones administradas usan el proveedor de recursos [Link] con
JSON de plantilla de ARM. Para más información, consulte los tipos de recursos y las
versiones de API.

[Link]/applicationDefinitions
[Link]/applications
[Link]/jitRequests

Azure Policy
Puede aplicar una directiva de Azure Policy para auditar la aplicación administrada. Las
definiciones de directiva se aplican para garantizar que las instancias implementadas de
la aplicación administrada cumplan con los requisitos de seguridad y datos. Si la
aplicación interactúa con datos confidenciales, asegúrese de que se ha evaluado cómo
debe protegerse. Por ejemplo, si la aplicación interactúa con datos de Microsoft 365,
aplique una definición de directiva para asegurarse de que el cifrado de datos esté
habilitado.

Pasos siguientes
En este artículo, ha aprendido acerca de las ventajas de uso de las aplicaciones
administradas. Vaya al siguiente artículo para crear una definición de aplicación
administrada.

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


de Azure
Inicio rápido: Creación y publicación de
una definición de aplicación
administrada de Azure
Artículo • 16/05/2023

En este inicio rápido se proporciona una introducción al uso de Azure Managed


Applications. Creará y publicará una definición de aplicación administrada que está
almacenada en el catálogo de servicios y que está pensada para los miembros de la
organización.

Para publicar una aplicación administrada en el catálogo de servicios, debe realizar las
siguientes tareas:

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 JSON necesarios. El archivo de
paquete .zip tiene un límite de 120 MB para las definiciones de aplicación
administrada de un catálogo de servicios.
Implemente la definición de aplicación administrada para que esté disponible en el
catálogo de servicios.

Si la definición de aplicación administrada tiene más de 120 MB o si desea usar su


propia cuenta de almacenamiento por motivos de cumplimiento de la organización,
vaya a Inicio rápido: traiga su propio almacenamiento para crear y publicar una
definición de aplicación administrada de 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 Azure
Active Directory, 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
[Link]. 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 [Link] (se distingue
entre mayúsculas y minúsculas) y guárdelo.

Agregue el siguiente código JSON y guarde el archivo. Define los recursos para
implementar una instancia de App Service, un plan de App Service, una cuenta de
almacenamiento para la aplicación. Esta cuenta de almacenamiento se usa para
almacenar la definición de aplicación administrada.

JSON

{
"$schema": "[Link]
01/[Link]#",
"contentVersion": "[Link]",
"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."
}
},
"storageAccountNamePrefix": {
"type": "string",
"maxLength": 11,
"metadata": {
"description": "Storage account name prefix."
}
},
"storageAccountType": {
"type": "string",
"allowedValues": [
"Premium_LRS",
"Standard_LRS",
"Standard_GRS"
],
"metadata": {
"description": "Storage account type allowed values"
}
}
},
"variables": {
"appServicePlanSku": "F1",
"appServicePlanCapacity": 1,
"appServiceName": "[format('{0}{1}', parameters('appServiceNamePrefix'),
uniqueString(resourceGroup().id))]",
"storageAccountName": "[format('{0}{1}',
parameters('storageAccountNamePrefix'), uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "[Link]/serverfarms",
"apiVersion": "2022-03-01",
"name": "[parameters('appServicePlanName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[variables('appServicePlanSku')]",
"capacity": "[variables('appServicePlanCapacity')]"
}
},
{
"type": "[Link]/sites",
"apiVersion": "2022-03-01",
"name": "[variables('appServiceName')]",
"location": "[parameters('location')]",
"properties": {
"serverFarmId": "[resourceId('[Link]/serverfarms',
parameters('appServicePlanName'))]",
"httpsOnly": true,
"siteConfig": {
"appSettings": [
{
"name": "AppServiceStorageConnectionString",
"value": "[format('DefaultEndpointsProtocol=https;AccountName=
{0};EndpointSuffix={1};Key={2}', variables('storageAccountName'),
environment().[Link],
listKeys(resourceId('[Link]/storageAccounts',
variables('storageAccountName')), '2022-09-01').keys[0].value)]"
}
]
}
},
"dependsOn": [
"[resourceId('[Link]/serverfarms',
parameters('appServicePlanName'))]",
"[resourceId('[Link]/storageAccounts',
variables('storageAccountName'))]"
]
},
{
"type": "[Link]/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
],
"outputs": {
"appServicePlan": {
"type": "string",
"value": "[parameters('appServicePlanName')]"
},
"appServiceApp": {
"type": "string",
"value": "[reference(resourceId('[Link]/sites',
variables('appServiceName')), '2022-03-01').defaultHostName]"
},
"storageAccount": {
"type": "string",
"value": "[reference(resourceId('[Link]/storageAccounts',
variables('storageAccountName')), '2022-09-01').[Link]]"
}
}
}

Definición de la experiencia del portal


Como publicador, define la experiencia del portal para crear la aplicación administrada.
El archivo [Link] 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, el nombre del plan de App Service, el prefijo de la cuenta de almacenamiento y
el tipo de cuenta de almacenamiento. Durante la implementación, las variables de
[Link] usarán 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 [Link] (se
distingue entre mayúsculas y minúsculas) y guárdelo.

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

JSON

{
"$schema": "[Link]
preview/[Link]#",
"handler": "[Link]",
"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": "[Link]",
"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": "[Link]",
"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
}
]
},
{
"name": "storageConfig",
"label": "Storage settings",
"subLabel": {
"preValidation": "Configure the storage settings",
"postValidation": "Completed"
},
"elements": [
{
"name": "storageAccounts",
"type": "[Link]",
"label": {
"prefix": "Storage account name prefix",
"type": "Storage account type"
},
"toolTip": {
"prefix": "Enter maximum of 11 lowercase letters or numbers.",
"type": "Available choices are Standard_LRS, Standard_GRS, and
Premium_LRS."
},
"defaultValue": {
"type": "Standard_LRS"
},
"constraints": {
"allowedTypes": [
"Premium_LRS",
"Standard_LRS",
"Standard_GRS"
]
},
"visible": true
}
]
}
],
"outputs": {
"location": "[location()]",
"appServicePlanName": "[steps('webAppSettings').appServicePlanName]",
"appServiceNamePrefix": "[steps('webAppSettings').appServiceName]",
"storageAccountNamePrefix": "
[steps('storageConfig').[Link]]",
"storageAccountType": "[steps('storageConfig').[Link]]"
}
}
}

Para más información, consulte Introducción a CreateUiDefinition.

Empaquetado de los archivos


Agregue los dos archivos a un paquete de archivo denominado [Link]. 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 [Link] 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 <demostorageaccount> , incluyendo los corchetes angulares ( <> ),
por el nombre de la cuenta de almacenamiento único.

PowerShell

En Visual Studio Code, abra un nuevo terminal de PowerShell e inicie sesión en su


suscripción de Azure.

Azure PowerShell

Connect-AzAccount

Este comando abrirá el explorador predeterminado y le solicitará iniciar sesión en


Azure. Para obtener más información, vaya a Inicio de sesión con Azure PowerShell.

Azure PowerShell

New-AzResourceGroup -Name packageStorageGroup -Location westus3

$storageAccount = New-AzStorageAccount `
-ResourceGroupName packageStorageGroup `
-Name "<demostorageaccount>" `
-Location westus3 `
-SkuName Standard_LRS `
-Kind StorageV2
$ctx = $[Link]

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

Set-AzStorageBlobContent `
-File "[Link]" `
-Container appcontainer `
-Blob "[Link]" `
-Context $ctx

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


administrada
En esta sección, obtiene información de identidad de Azure Active Directory, crea un
grupo de recursos e implementa la definición de aplicación administrada.

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.

PowerShell

En este ejemplo se usa un grupo de seguridad, y la cuenta de Azure Active


Directory deberá ser miembro del grupo. Para obtener el id. de objeto del grupo,
reemplace el marcador de posición <managedAppDemo> , incluyendo los corchetes
angulares ( <> ), con el nombre del grupo. Use el valor de esta variable al
implementar la definición de aplicación administrada.

Para crear un grupo nuevo de Azure Active Directory, vaya a Administración de


grupos y pertenencia a grupos de Azure Active Directory.

Azure PowerShell

$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. Use el
valor de esta variable al implementar la definición de aplicación administrada.

Azure PowerShell

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

Publicación de la definición de aplicación administrada

PowerShell

Cree un grupo de recursos para la definición de aplicación administrada.

Azure PowerShell

New-AzResourceGroup -Name appDefinitionGroup -Location westus3

El blob comando crea una variable para almacenar la URL del archivo .zip del
paquete. Esa variable se usa en el comando que crea la definición de aplicación
administrada.

Azure PowerShell

$blob = Get-AzStorageBlob -Container appcontainer -Blob [Link] -Context


$ctx

New-AzManagedApplicationDefinition `
-Name "sampleManagedApplication" `
-Location "westus3" `
-ResourceGroupName appDefinitionGroup `
-LockLevel ReadOnly `
-DisplayName "Sample managed application" `
-Description "Sample managed application that deploys web resources" `
-Authorization "${principalid}:$roleid" `
-PackageFileUri $[Link]

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:

ResourceGroupName : El nombre del grupo de recursos donde se creó la

definición de aplicación administrada.


LockLevel : 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.
Authorization : 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.
"${principalid}:$roleid" o puede usar llaves para cada variable

"${principalid}:${roleid}" .
Use una coma para separar varios valores: "${principalid1}:$roleid1",
"${principalid2}:$roleid2" .

PackageFileUri : ubicación del archivo de paquete .zip que contiene los


archivos necesarios.

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.

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 y appDefinitionGroup.

PowerShell

El comando le pide que confirme que quiere quitar el grupo de recursos.

Azure PowerShell

Remove-AzResourceGroup -Name packageStorageGroup


Remove-AzResourceGroup -Name appDefinitionGroup

Pasos siguientes
Ha publicado la definición de aplicación administrada. El siguiente paso es aprender a
implementar una instancia de esa definición.

Inicio rápido: implementación de una aplicación administrada del catálogo de


servicios
Inicio rápido: traiga su propio
almacenamiento para crear y publicar una
definición de aplicación administrada de
Azure
Artículo • 12/05/2023

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 Azure Active
Directory, 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
[Link]. 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 [Link] (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.

JSON

{
"$schema": "[Link]
01/[Link]#",
"contentVersion": "[Link]",
"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."
}
},
"storageAccountNamePrefix": {
"type": "string",
"maxLength": 11,
"metadata": {
"description": "Storage account name prefix."
}
},
"storageAccountType": {
"type": "string",
"allowedValues": [
"Premium_LRS",
"Standard_LRS",
"Standard_GRS"
],
"metadata": {
"description": "Storage account type allowed values"
}
}
},
"variables": {
"appServicePlanSku": "F1",
"appServicePlanCapacity": 1,
"appServiceName": "[format('{0}{1}', parameters('appServiceNamePrefix'),
uniqueString(resourceGroup().id))]",
"storageAccountName": "[format('{0}{1}', parameters('storageAccountNamePrefix'),
uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "[Link]/serverfarms",
"apiVersion": "2022-03-01",
"name": "[parameters('appServicePlanName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[variables('appServicePlanSku')]",
"capacity": "[variables('appServicePlanCapacity')]"
}
},
{
"type": "[Link]/sites",
"apiVersion": "2022-03-01",
"name": "[variables('appServiceName')]",
"location": "[parameters('location')]",
"properties": {
"serverFarmId": "[resourceId('[Link]/serverfarms',
parameters('appServicePlanName'))]",
"httpsOnly": true,
"siteConfig": {
"appSettings": [
{
"name": "AppServiceStorageConnectionString",
"value": "[format('DefaultEndpointsProtocol=https;AccountName=
{0};EndpointSuffix={1};Key={2}', variables('storageAccountName'),
environment().[Link],
listKeys(resourceId('[Link]/storageAccounts',
variables('storageAccountName')), '2022-09-01').keys[0].value)]"
}
]
}
},
"dependsOn": [
"[resourceId('[Link]/serverfarms',
parameters('appServicePlanName'))]",
"[resourceId('[Link]/storageAccounts',
variables('storageAccountName'))]"
]
},
{
"type": "[Link]/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
],
"outputs": {
"appServicePlan": {
"type": "string",
"value": "[parameters('appServicePlanName')]"
},
"appServiceApp": {
"type": "string",
"value": "[reference(resourceId('[Link]/sites',
variables('appServiceName')), '2022-03-01').defaultHostName]"
},
"storageAccount": {
"type": "string",
"value": "[reference(resourceId('[Link]/storageAccounts',
variables('storageAccountName')), '2022-09-01').[Link]]"
}
}
}

Defina su experiencia del portal


Como publicador, define la experiencia del portal para crear la aplicación administrada. El archivo
[Link] 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, el
nombre del plan de App Service, el prefijo de la cuenta de almacenamiento y el tipo de cuenta
de almacenamiento. Durante la implementación, las variables de [Link] usarán 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 [Link] (se distingue
entre mayúsculas y minúsculas) y guárdelo.

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

JSON
{
"$schema": "[Link]
preview/[Link]#",
"handler": "[Link]",
"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": "[Link]",
"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": "[Link]",
"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
}
]
},
{
"name": "storageConfig",
"label": "Storage settings",
"subLabel": {
"preValidation": "Configure the storage settings",
"postValidation": "Completed"
},
"elements": [
{
"name": "storageAccounts",
"type": "[Link]",
"label": {
"prefix": "Storage account name prefix",
"type": "Storage account type"
},
"toolTip": {
"prefix": "Enter maximum of 11 lowercase letters or numbers.",
"type": "Available choices are Standard_LRS, Standard_GRS, and
Premium_LRS."
},
"defaultValue": {
"type": "Standard_LRS"
},
"constraints": {
"allowedTypes": [
"Premium_LRS",
"Standard_LRS",
"Standard_GRS"
]
},
"visible": true
}
]
}
],
"outputs": {
"location": "[location()]",
"appServicePlanName": "[steps('webAppSettings').appServicePlanName]",
"appServiceNamePrefix": "[steps('webAppSettings').appServiceName]",
"storageAccountNamePrefix": "[steps('storageConfig').[Link]]",
"storageAccountType": "[steps('storageConfig').[Link]]"
}
}
}

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 [Link]. 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 [Link] 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 <demostorageaccount> , incluyendo los corchetes angulares ( <> ), por el nombre de la
cuenta de almacenamiento único.
PowerShell

Azure PowerShell

New-AzResourceGroup -Name packageStorageGroup -Location westus3

$storageAccount = New-AzStorageAccount `
-ResourceGroupName packageStorageGroup `
-Name "<demostorageaccount>" `
-Location westus3 `
-SkuName Standard_LRS `
-Kind StorageV2

$ctx = $[Link]

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

Set-AzStorageBlobContent `
-File "[Link]" `
-Container appcontainer `
-Blob "[Link]" `
-Context $ctx

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.

Azure PowerShell

$packageuri=(Get-AzStorageBlob -Container appcontainer -Blob [Link] -Context


$ctx).[Link]

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.

7 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 <definitionstorage> , incluyendo los corchetes
angulares ( <> ), por el nombre de la cuenta de almacenamiento único.

PowerShell

Azure PowerShell

New-AzResourceGroup -Name byosDefinitionStorageGroup -Location westus3

New-AzStorageAccount `
-ResourceGroupName byosDefinitionStorageGroup `
-Name "<definitionstorage>" `
-Location westus3 `
-SkuName Standard_LRS `
-Kind StorageV2

Use el siguiente comando para almacenar el identificador de recurso de la cuenta de


almacenamiento en una variable denominada storageid . Usará el valor de variable al
implementar la definición de aplicación administrada.

Azure PowerShell

$storageid = (Get-AzStorageAccount -ResourceGroupName byosDefinitionStorageGroup


-Name <definitionstorage>).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.

PowerShell

Es posible usar variables para configurar la asignación de roles. En este ejemplo, se usa la
variable $storageid que creó en un paso anterior y se crea la variable $arpid .

Azure PowerShell
$arpid = (Get-AzADServicePrincipal -SearchString "Appliance Resource
Provider").Id

New-AzRoleAssignment -ObjectId $arpid `


-RoleDefinitionName Contributor `
-Scope $storageid

El Proveedor de recursos del dispositivo es una entidad de servicio en el inquilino de Azure Active
Directory. En Azure Portal, es posible verificar si está registrada yendo a Azure Active
Directory>Aplicaciones empresariales y cambiando 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 [Link] .

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 Azure Active Directory 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 grupo nuevo de Azure Active Directory, vaya a Administración de grupos y
pertenencia a grupos de Azure Active Directory.

PowerShell

Azure PowerShell

$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.

PowerShell

Azure PowerShell

$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 [Link] y guárdelo.

Agregue el código de Bicep siguiente y guarde el archivo.

Bicep

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
'[Link]/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


[Link]/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 [Link] 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.

JSON

{
"$schema": "[Link]
01/[Link]#",
"contentVersion": "[Link]",
"parameters": {
"managedApplicationDefinitionName": {
"value": "<placeholder for managed application name>"
},
"definitionStorageResourceID": {
"value": "<placeholder for you storage account ID>"
},
"packageFileUri": {
"value": "<placeholder for the packageFileUri>"
},
"principalId": {
"value": "<placeholder for principalid value>"
},
"roleId": {
"value": "<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 storageid .

packageFileUri Escriba el URI en el archivo de paquete .zip. Use el valor de la variable


packageuri . El formato es
[Link] .

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.

PowerShell

Azure PowerShell

New-AzResourceGroup -Name byosAppDefinitionGroup -Location westus3

New-AzResourceGroupDeployment `
-ResourceGroupName byosAppDefinitionGroup `
-TemplateFile [Link] `
-TemplateParameterFile [Link]

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. En el comando,
reemplace el marcador de posición <definitionstorage> , incluyendo los corchetes angulares
( <> ), por el nombre de la cuenta de almacenamiento único.

PowerShell

Azure PowerShell

Get-AzStorageAccount -ResourceGroupName byosDefinitionStorageGroup -Name


<definitionstorage> |
Get-AzStorageContainer -Name applicationdefinitions |
Get-AzStorageBlob | Select-Object -Property Name | Format-List

7 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.

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. 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, 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.

PowerShell

El comando le pide que confirme que quiere quitar el grupo de recursos.

Azure PowerShell

Remove-AzResourceGroup -Name packageStorageGroup

Remove-AzResourceGroup -Name byosAppDefinitionGroup

Remove-AzResourceGroup -Name byosDefinitionStorageGroup

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

Inicio rápido: implementación de una aplicación administrada del catálogo de servicios


Inicio rápido: Usar Bicep para crear y
publicar una definición de aplicación
administrada de Azure
Artículo • 15/05/2023

Este inicio rápido describe cómo traer su propio almacenamiento para crear y publicar una
definición de aplicación administrada de Azure en el catálogo de servicios. La definición del
catálogo de servicios está disponible para los miembros de su organización.

Para crear y publicar una definición de aplicación administrada en el catálogo de servicios,


deberá realizar las siguientes tareas:

Usar Bicep para desarrollar la plantilla y convertirla en una plantilla de Azure Resource
Manager (plantilla de ARM). La plantilla define los recursos de Azure implementados por la
aplicación administrada.
Utilice el comando Bicep build para convertir Bicep en JSON. Una vez convertido el archivo
en JSON, se recomienda comprobar la precisión del código.
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 JSON necesarios. El archivo de paquete
.zip tiene un límite de 120 MB para las definiciones de aplicación administrada de un
catálogo de servicios.
Implemente la definición de aplicación administrada para que esté disponible en el
catálogo de servicios.

Si la definición de aplicación administrada tiene más de 120 MB o si desea usar su propia cuenta
de almacenamiento por motivos de cumplimiento de la organización, vaya a Inicio rápido: traiga
su propio almacenamiento para crear y publicar una definición de aplicación administrada de
Azure.

También puede utilizar Bicep para implementar una definición de aplicación administrada del
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.

Requisitos previos
Para completar las tareas de este artículo, necesitará lo siguiente:

Una cuenta de Azure con una suscripción activa y permisos para recursos de Azure Active
Directory, 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 un archivo de Bicep


Todas las definiciones de aplicaciones administradas incluyen un archivo denominado
[Link]. La plantilla define los recursos de Azure que se van a implementar, y no
difiere de una plantilla de ARM normal. Puede desarrollar la plantilla mediante Bicep y, a
continuación, convertir el archivo de Bicep en JSON.

Abra Visual Studio Code, cree un archivo con el nombre [Link] (se distingue entre
mayúsculas y minúsculas) y guárdelo.

Agregue el código de Bicep siguiente 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.

Bicep

param location string = resourceGroup().location

@description('App Service plan name.')


@maxLength(40)
param appServicePlanName string

@description('App Service name prefix.')


@maxLength(47)
param appServiceNamePrefix string

@description('Storage account name prefix.')


@maxLength(11)
param storageAccountNamePrefix string

@description('Storage account type allowed values')


@allowed([
'Premium_LRS'
'Standard_LRS'
'Standard_GRS'
])
param storageAccountType string

var appServicePlanSku = 'F1'


var appServicePlanCapacity = 1
var appServiceName = '${appServiceNamePrefix}${uniqueString(resourceGroup().id)}'
var storageAccountName =
'${storageAccountNamePrefix}${uniqueString(resourceGroup().id)}'
var appServiceStorageConnectionString =
'DefaultEndpointsProtocol=https;AccountName=${[Link]};EndpointSuffix=${
environment().[Link]};Key=${[Link]().keys[0].value}'

resource appServicePlan '[Link]/serverfarms@2022-03-01' = {


name: appServicePlanName
location: location
sku: {
name: appServicePlanSku
capacity: appServicePlanCapacity
}
}

resource appServiceApp '[Link]/sites@2022-03-01' = {


name: appServiceName
location: location
properties: {
serverFarmId: [Link]
httpsOnly: true
siteConfig: {
appSettings: [
{
name: 'AppServiceStorageConnectionString'
value: appServiceStorageConnectionString
}
]
}
}
}

resource storageAccount '[Link]/storageAccounts@2022-09-01' = {


name: storageAccountName
location: location
sku: {
name: storageAccountType
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}

output appServicePlan string = [Link]


output appServiceApp string = [Link]
output storageAccount string = [Link]

Conversión de Bicep en JSON


Use PowerShell o la CLI de Azure para compilar el archivo [Link] . Vaya al directorio
donde guardó el archivo Bicep y ejecute el comando build .

PowerShell

PowerShell

bicep build [Link]

Para más información, vaya a Compilación de Bicep.


Después de convertir el archivo Bicep en JSON, el archivo [Link] debe coincidir con
el ejemplo siguiente. Puede tener valores diferentes en las propiedades de metadata para
version y templateHash .

JSON

{
"$schema": "[Link]
01/[Link]#",
"contentVersion": "[Link]",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.17.1.54307",
"templateHash": "1234567891234567890"
}
},
"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."
}
},
"storageAccountNamePrefix": {
"type": "string",
"maxLength": 11,
"metadata": {
"description": "Storage account name prefix."
}
},
"storageAccountType": {
"type": "string",
"allowedValues": [
"Premium_LRS",
"Standard_LRS",
"Standard_GRS"
],
"metadata": {
"description": "Storage account type allowed values"
}
}
},
"variables": {
"appServicePlanSku": "F1",
"appServicePlanCapacity": 1,
"appServiceName": "[format('{0}{1}', parameters('appServiceNamePrefix'),
uniqueString(resourceGroup().id))]",
"storageAccountName": "[format('{0}{1}', parameters('storageAccountNamePrefix'),
uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "[Link]/serverfarms",
"apiVersion": "2022-03-01",
"name": "[parameters('appServicePlanName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[variables('appServicePlanSku')]",
"capacity": "[variables('appServicePlanCapacity')]"
}
},
{
"type": "[Link]/sites",
"apiVersion": "2022-03-01",
"name": "[variables('appServiceName')]",
"location": "[parameters('location')]",
"properties": {
"serverFarmId": "[resourceId('[Link]/serverfarms',
parameters('appServicePlanName'))]",
"httpsOnly": true,
"siteConfig": {
"appSettings": [
{
"name": "AppServiceStorageConnectionString",
"value": "[format('DefaultEndpointsProtocol=https;AccountName=
{0};EndpointSuffix={1};Key={2}', variables('storageAccountName'),
environment().[Link],
listKeys(resourceId('[Link]/storageAccounts',
variables('storageAccountName')), '2022-09-01').keys[0].value)]"
}
]
}
},
"dependsOn": [
"[resourceId('[Link]/serverfarms',
parameters('appServicePlanName'))]",
"[resourceId('[Link]/storageAccounts',
variables('storageAccountName'))]"
]
},
{
"type": "[Link]/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
],
"outputs": {
"appServicePlan": {
"type": "string",
"value": "[parameters('appServicePlanName')]"
},
"appServiceApp": {
"type": "string",
"value": "[reference(resourceId('[Link]/sites',
variables('appServiceName')), '2022-03-01').defaultHostName]"
},
"storageAccount": {
"type": "string",
"value": "[reference(resourceId('[Link]/storageAccounts',
variables('storageAccountName')), '2022-09-01').[Link]]"
}
}
}

Defina su experiencia del portal


Como publicador, define la experiencia del portal para crear la aplicación administrada. El archivo
[Link] 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, el
nombre del plan de App Service, el prefijo de la cuenta de almacenamiento y el tipo de cuenta
de almacenamiento. Durante la implementación, las variables de [Link] usarán 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 [Link] (se distingue
entre mayúsculas y minúsculas) y guárdelo.

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

JSON

{
"$schema": "[Link]
preview/[Link]#",
"handler": "[Link]",
"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": "[Link]",
"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": "[Link]",
"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
}
]
},
{
"name": "storageConfig",
"label": "Storage settings",
"subLabel": {
"preValidation": "Configure the storage settings",
"postValidation": "Completed"
},
"elements": [
{
"name": "storageAccounts",
"type": "[Link]",
"label": {
"prefix": "Storage account name prefix",
"type": "Storage account type"
},
"toolTip": {
"prefix": "Enter maximum of 11 lowercase letters or numbers.",
"type": "Available choices are Standard_LRS, Standard_GRS, and
Premium_LRS."
},
"defaultValue": {
"type": "Standard_LRS"
},
"constraints": {
"allowedTypes": [
"Premium_LRS",
"Standard_LRS",
"Standard_GRS"
]
},
"visible": true
}
]
}
],
"outputs": {
"location": "[location()]",
"appServicePlanName": "[steps('webAppSettings').appServicePlanName]",
"appServiceNamePrefix": "[steps('webAppSettings').appServiceName]",
"storageAccountNamePrefix": "[steps('storageConfig').[Link]]",
"storageAccountType": "[steps('storageConfig').[Link]]"
}
}
}

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 [Link]. 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 [Link] 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 <demostorageaccount> , incluyendo los corchetes angulares ( <> ), por el nombre de la
cuenta de almacenamiento único.

PowerShell

En Visual Studio Code, abra un nuevo terminal de PowerShell e inicie sesión en su


suscripción de Azure.

Azure PowerShell

Connect-AzAccount

Este comando abrirá el explorador predeterminado y le solicitará iniciar sesión en Azure.


Para obtener más información, vaya a Inicio de sesión con Azure PowerShell.

Después de conectarse, ejecute los siguientes comandos.


Azure PowerShell

New-AzResourceGroup -Name packageStorageRG -Location westus3

$storageAccount = New-AzStorageAccount `
-ResourceGroupName packageStorageRG `
-Name "<demostorageaccount>" `
-Location westus3 `
-SkuName Standard_LRS `
-Kind StorageV2 `
-AllowBlobPublicAccess $true

$ctx = $[Link]

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

Set-AzStorageBlobContent `
-File "[Link]" `
-Container appcontainer `
-Blob "[Link]" `
-Context $ctx

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.

Azure PowerShell

$packageuri=(Get-AzStorageBlob -Container appcontainer -Blob [Link] -Context


$ctx).[Link]

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


En esta sección, obtiene información de identidad de Azure Active Directory, crea un grupo de
recursos e implementa la definición de aplicación administrada.

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 Azure Active Directory 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 grupo nuevo de Azure Active Directory, vaya a Administración de grupos y
pertenencia a grupos de Azure Active Directory.

PowerShell

Azure PowerShell

$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.

PowerShell

Azure PowerShell

$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.

Abra Visual Studio Code, cree un archivo llamado [Link] y guárdelo.

Agregue el código de Bicep siguiente y guarde el archivo.

Bicep

param location string = resourceGroup().location

@description('Name of the managed application definition.')


param managedApplicationDefinitionName 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 Bicep managed application'
var definitionDescription = 'Sample Bicep managed application that deploys web
resources'

resource managedApplicationDefinition
'[Link]/applicationDefinitions@2021-07-01' = {
name: managedApplicationDefinitionName
location: location
properties: {
lockLevel: definitionLockLevel
description: definitionDescription
displayName: definitionDisplayName
packageFileUri: packageFileUri
authorizations: [
{
principalId: principalId
roleDefinitionId: roleId
}
]
}
}

Para obtener más información sobre las propiedades de plantilla, vaya a


[Link]/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 [Link] 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.

JSON

{
"$schema": "[Link]
01/[Link]#",
"contentVersion": "[Link]",
"parameters": {
"managedApplicationDefinitionName": {
"value": "sampleBicepManagedApplication"
},
"packageFileUri": {
"value": "<placeholder for the packageFileUri>"
},
"principalId": {
"value": "<placeholder for principalid value>"
},
"roleId": {
"value": "<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


sampleBicepManagedApplication.

packageFileUri Escriba el URI en el archivo de paquete .zip. Use el valor de la variable


packageuri . El formato es
[Link] .

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 bicepDefinitionRG e implemente la definición de


aplicación administrada.

PowerShell

Azure PowerShell

New-AzResourceGroup -Name bicepDefinitionRG -Location westus3


New-AzResourceGroupDeployment `
-ResourceGroupName bicepDefinitionRG `
-TemplateFile [Link] `
-TemplateParameterFile [Link]

Verificación de los resultados


Ejecute el siguiente comando para comprobar que la definición se publica en el catálogo de
servicios.

PowerShell

Azure PowerShell

Get-AzManagedApplicationDefinition -ResourceGroupName bicepDefinitionRG

Get-AzManagedApplicationDefinition enumera todas las definiciones disponibles del grupo

de recursos especificado, como sampleBicepManagedApplication.

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. 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, 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 con Bicep.

Si ha terminado con la definición de la aplicación administrada, puede eliminar los grupos de


recursos creados denominados packageStorageRG y bicepDefinitionRG.

PowerShell

El comando le pide que confirme que quiere quitar el grupo de recursos.

Azure PowerShell
Remove-AzResourceGroup -Name packageStorageRG

Remove-AzResourceGroup -Name bicepDefinitionRG

Pasos siguientes
Ha publicado la definición de aplicación administrada. El siguiente paso es aprender a
implementar una instancia de esa definición.

Inicio rápido: Usar Bicep para implementar una definición de aplicación administrada por
Azure
.
Inicio rápido: implementación de una
aplicación administrada del catálogo de
servicios
Artículo • 12/05/2023

En este inicio rápido, se usará la definición de aplicación administrada que creó usando
uno de los artículos de inicio rápido. La implementación crea dos grupos de recursos.
Uno contiene la aplicación administrada y el otro es un grupo de recursos administrado
para el recurso implementado. La definición de aplicación administrada implementa un
plan de App Service, App Service y cuenta de almacenamiento.

Prerrequisitos
Una definición de aplicación administrada creada con la publicación de una
definición de aplicación o la publicación de una definición con Bring Your Own
Storage.
Una cuenta de Azure con una suscripción activa. Antes de comenzar, si no tiene
una cuenta, cree una gratuita .
Visual Studio Code .
Instale la versión más reciente de Azure PowerShell o la CLI de Azure.

Creación de una aplicación administrada del


catálogo de servicios
En los ejemplos se usan los nombres para los grupos de recursos creados en el inicio
rápido para publicar una definición de aplicación. Si usó el inicio rápido para publicar una
definición con Bring Your Own Storage, use esos nombres de grupo de recursos.

Publicar definición de aplicación: packageStorageGroup y appDefinitionGroup.


Publicar definición con Trae tu almacenamiento: packageStorageGroup,
byosDefinitionStorageGroup y byosAppDefinitionGroup.

Obtener la definición de la aplicación administrada

PowerShell
Para obtener la definición de la aplicación administrada con Azure PowerShell,
ejecute los siguientes comandos.

En Visual Studio Code, abra un nuevo terminal de PowerShell e inicie sesión en su


suscripción de Azure.

Azure PowerShell

Connect-AzAccount

Este comando abrirá el explorador predeterminado y le solicitará iniciar sesión en


Azure. Para obtener más información, vaya a Inicio de sesión con Azure PowerShell.

En Azure PowerShell, obtenga la definición de la aplicación administrada. En este


ejemplo, use el nombre del grupo de recursos appDefinitionGroup que se creó
cuando implementó la definición de aplicación administrada.

Azure PowerShell

Get-AzManagedApplicationDefinition -ResourceGroupName appDefinitionGroup

Get-AzManagedApplicationDefinition enumera todas las definiciones disponibles

del grupo de recursos especificado, como sampleManagedApplication.

Cree una variable para el identificador de recurso de la definición de aplicación


administrada.

Azure PowerShell

$definitionid = (Get-AzManagedApplicationDefinition -ResourceGroupName


appDefinitionGroup -Name
sampleManagedApplication).ManagedApplicationDefinitionId

Use el valor de variable $definitionid cuando implemente la aplicación


administrada.

Creación de un grupo de recursos y parámetros

PowerShell

Cree un grupo de recursos para la aplicación administrada que se usa durante la


implementación.
Azure PowerShell

New-AzResourceGroup -Name applicationGroup -Location westus3

También debe crear un nombre para el grupo de recursos de la aplicación


administrada. El grupo de recursos se crea al implementar la aplicación
administrada.

Ejecute los comandos siguientes para crear el nombre del grupo de recursos
administrado.

Azure PowerShell

$mrgprefix = 'mrg-sampleManagedApplication-'
$mrgtimestamp = Get-Date -UFormat "%Y%m%d%H%M%S"
$mrgname = $mrgprefix + $mrgtimestamp
$mrgname

Las variables $mrgprefix y $mrgtimestamp se concatenan y almacenan en la variable


$mrgname . El valor de la variable tiene el formato mrg-sampleManagedApplication-

20230512103059. Use el valor de variable $mrgname cuando implemente la


aplicación administrada.

Debe proporcionar varios parámetros al comando de implementación de la


aplicación administrada. Puede usar una cadena con formato JSON o crear un
archivo JSON. En este ejemplo, se usa una cadena con formato JSON. El carácter de
escape de PowerShell para las comillas es el carácter de tilde aguda ( ` ). La tilde
aguda también se usa para la continuación de línea en los comandos que puedan
usar varias líneas.

La sintaxis de la cadena con formato JSON es la siguiente:

JSON

"{ `"parameterName`": {`"value`":`"parameterValue`"}, `"parameterName`":


{`"value`":`"parameterValue`"} }"

Para mejorar la legibilidad, la cadena JSON completada usa la tilde aguda para la
continuación de línea. Los valores se almacenan en el valor de variable $params ,
que se usa en el comando de implementación. Los parámetros de la cadena JSON
son necesarios para implementar los recursos administrados.

PowerShell
$params="{ `"appServicePlanName`": {`"value`":`"demoAppServicePlan`"}, `
`"appServiceNamePrefix`": {`"value`":`"demoApp`"}, `
`"storageAccountNamePrefix`": {`"value`":`"demostg1234`"}, `
`"storageAccountType`": {`"value`":`"Standard_LRS`"} }"

Parámetros para crear los recursos administrados:

appServicePlanName : Crear un nombre para el plan. Máximo de 40 caracteres


alfanuméricos y guiones. Por ejemplo, demoAppServicePlan. Los nombres de
plan de App Service deben ser únicos dentro de un grupo de recursos de la
suscripción.
appServiceNamePrefix : crea un prefijo para el nombre del plan. Máximo de

47 caracteres alfanuméricos o guiones. Por ejemplo, demoApp. Durante la


implementación, el prefijo se concatena con una cadena única para crear un
nombre único globalmente en Azure.
storageAccountNamePrefix : use solo letras minúsculas y números y un máximo

de 11 caracteres. Por ejemplo, demostg1234. Durante la implementación, el


prefijo se concatena con una cadena única para crear un nombre único
globalmente en Azure. Aunque estás creando un prefijo, el control comprueba
los nombres existentes en Azure y puede publicar un mensaje de validación
de que el nombre ya existe. Si es así, elige un prefijo diferente.
storageAccountType : Las demás opciones son Premium_LRS, Standard_LRS y
Standard_GRS.

Implementación de la aplicación administrada

PowerShell

Ejecute el siguiente comando para implementar la aplicación administrada.

Azure PowerShell

New-AzManagedApplication `
-Name "demoManagedApplication" `
-ResourceGroupName applicationGroup `
-Location westus3 `
-ManagedResourceGroupName $mrgname `
-ManagedApplicationDefinitionId $definitionid `
-Kind ServiceCatalog `
-Parameter $params
Los parámetros usados en el comando de implementación:

Name : Especificar un nombre para la aplicación administrada. En este ejemplo,


use demoManagedApplication.
ResourceGroupName : Nombre del grupo de recursos que creó para la aplicación
administrada.
Location : Especificar la región para implementar los recursos. En este ejemplo,

use westus3.
ManagedResourceGroupName : usa el valor de la variable de $mrgname . El grupo de

recursos administrado se crea cuando se implementa la aplicación


administrada.
ManagedApplicationDefinitionId : Usa el valor de variable $definitionid para

el identificador de recurso de la definición de aplicación administrada.


Kind : Especifica el tipo de aplicación administrada. En este ejemplo se usa

ServiceCatalog.
Parameter : Usa el valor de variable $params en la cadena con formato JSON.

Vista de resultados
Una vez implementada la aplicación administrada del catálogo de servicios, tendrá dos
nuevos grupos de recursos. Uno contiene la aplicación administrada El otro grupo de
recursos contiene los recursos administrados que se han implementado. En este
ejemplo, un App Service, un plan de App Service y una cuenta de almacenamiento.

Aplicación administrada
Una vez finalizada la implementación, puede comprobar el estado de la aplicación
administrada.

PowerShell

Ejecute el comando siguiente para comprobar el estado de la aplicación


administrada.

Azure PowerShell

Get-AzManagedApplication -Name demoManagedApplication -ResourceGroupName


applicationGroup
Expanda las propiedades para facilitar la lectura de la información Properties .

Azure PowerShell

Get-AzManagedApplication -Name demoManagedApplication -ResourceGroupName


applicationGroup | Select-Object -ExpandProperty Properties

Recursos administrados
Puede ver los recursos implementados en el grupo de recursos administrados.

PowerShell

Para mostrar los recursos del grupo de recursos administrados, ejecute el siguiente
comando. Ha creado la variable $mrgname al crear los parámetros.

Azure PowerShell

Get-AzResource -ResourceGroupName $mrgname

Para mostrar todas las asignaciones de roles para el grupo de recursos


administrados.

Azure PowerShell

Get-AzRoleAssignment -ResourceGroupName $mrgname

La definición de aplicación administrada que creó en los artículos de inicio rápido


usó un grupo con la asignación de roles Propietario. Cree el grupo con el comando
siguiente.

Azure PowerShell

Get-AzRoleAssignment -ResourceGroupName $mrgname -RoleDefinitionName


Owner

También puede enumerar las asignaciones de denegación para el grupo de


recursos administrado.

Azure PowerShell

Get-AzDenyAssignment -ResourceGroupName $mrgname


Limpieza de recursos
Cuando haya terminado con la aplicación administrada, podrá eliminar los grupos de
recursos y eso eliminará todos los recursos creados. Por ejemplo, en esta guía de inicio
rápido creó los grupos de recursos applicationGroup y un grupo de recursos
administrado con el prefijo mrg-sampleManagedApplication.

PowerShell

El comando le pide que confirme que quiere quitar el grupo de recursos.

Azure PowerShell

Remove-AzResourceGroup -Name applicationGroup

Si deseas eliminar la definición de la aplicación administrada, elimina los grupos de


recursos que creaste en los artículos de inicio rápido.

Publicar definición de aplicación: packageStorageGroup y appDefinitionGroup.


Publicar definición con Trae tu almacenamiento: packageStorageGroup,
byosDefinitionStorageGroup y byosAppDefinitionGroup.

Pasos siguientes
Para obtener información sobre cómo crear y publicar los archivos de definición
para una aplicación administrada, ve a Inicio rápido: crear y publicar una definición
de aplicación administrada de Azure.
Para usar tu propio almacenamiento para crear y publicar los archivos de
definición para una aplicación administrada, ve a Inicio rápido: trae tu propio
almacenamiento para crear y publicar una definición de aplicación administrada de
Azure.
Inicio rápido: Usar Bicep para
implementar una definición de
aplicación administrada por Azure
Artículo • 17/05/2023

En este inicio rápido se describe cómo usar Bicep para implementar una definición de
aplicación administrada de Azure desde el catálogo de servicios. La definición del
catálogo de servicios está disponible para los miembros de su organización.

Para implementar una definición de aplicación administrada desde su catálogo de


servicios, realice las siguientes tareas:

Use Bicep para desarrollar una plantilla que implemente una definición de
aplicación administrada.
Cree un archivo de parámetros para la implementación.
Implemente la definición de aplicación administrada desde el catálogo de
servicios.

Prerrequisitos
Para completar las tareas de este artículo, necesitará lo siguiente:

Complete el inicio rápido para usar Bicep para crear y publicar una definición de
aplicación administrada en su catálogo de servicios.
Una cuenta de Azure con una suscripción activa. 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.

Obtener la definición de la aplicación


administrada
PowerShell

Para obtener la definición de la aplicación administrada con Azure PowerShell,


ejecute los siguientes comandos.
En Visual Studio Code, abra un nuevo terminal de PowerShell e inicie sesión en su
suscripción de Azure.

Azure PowerShell

Connect-AzAccount

Este comando abrirá el explorador predeterminado y le solicitará iniciar sesión en


Azure. Para obtener más información, vaya a Inicio de sesión con Azure PowerShell.

En Azure PowerShell, obtenga la definición de la aplicación administrada. En este


ejemplo, use el nombre del grupo de recursos bicepDefinitionRG que se creó
cuando implementó la definición de aplicación administrada.

Azure PowerShell

Get-AzManagedApplicationDefinition -ResourceGroupName bicepDefinitionRG

Get-AzManagedApplicationDefinition enumera todas las definiciones disponibles

del grupo de recursos especificado, como sampleBicepManagedApplication.

El siguiente comando analiza la salida para mostrar solo el nombre de definición y


el nombre del grupo de recursos. Usará los nombres cuando implemente la
aplicación administrada.

Azure PowerShell

Get-AzManagedApplicationDefinition -ResourceGroupName bicepDefinitionRG


| Select-Object -Property Name, ResourceGroupName

Creación del archivo de Bicep


Abra Visual Studio Code y cree un archivo denominado [Link].
Copie y pegue el siguiente código en el archivo y guárdelo.

Bicep

@description('Region where the resources are deployed.')


param location string = resourceGroup().location

@description('Resource group name where the definition is stored.')


param definitionRG string

@description('Name of the service catalog definition.')


param definitionName string

// Parameters for the managed application's resource deployment


@description('Name of the managed application.')
param managedAppName string

@description('Name for the managed resource group.')


param mrgName string

@maxLength(40)
@description('Service plan name with maximum 40 alphanumeric characters and
hyphens. Must be unique within a resource group in your subscription.')
param appServicePlanName string

@maxLength(47)
@description('Globally unique across Azure. Maximum of 47 alphanumeric
characters or hyphens.')
param appServiceNamePrefix string

@maxLength(11)
@description('Use only lowercase letters and numbers and a maximum of 11
characters.')
param storageAccountNamePrefix string

@allowed([
'Premium_LRS'
'Standard_LRS'
'Standard_GRS'
])
@description('The options are Premium_LRS, Standard_LRS, or Standard_GRS')
param storageAccountType string

@description('Resource ID for the managed application definition.')


var appResourceId = resourceId('${definitionRG}',
'[Link]/applicationdefinitions', '${definitionName}')

@description('Creates the path for the managed resource group. The resource
group is created during deployment.')
var mrgId = '${subscription().id}/resourceGroups/${mrgName}'

resource bicepServiceCatalogApp '[Link]/applications@2021-07-


01' = {
name: managedAppName
kind: 'ServiceCatalog'
location: location
properties: {
applicationDefinitionId: appResourceId
managedResourceGroupId: mrgId
parameters: {
appServicePlanName: {
value: appServicePlanName
}
appServiceNamePrefix: {
value: appServiceNamePrefix
}
storageAccountNamePrefix: {
value: storageAccountNamePrefix
}
storageAccountType: {
value: storageAccountType
}
}
}
}

Para más información sobre el tipo de recurso, vaya a [Link]/applications.

Creación del archivo de parámetros


Abra Visual Studio Code y cree un archivo de parámetros denominado
[Link]. Copie y pegue el siguiente código en el archivo y
guárdelo.

JSON

{
"$schema": "[Link]
01/[Link]#",
"contentVersion": "[Link]",
"parameters": {
"definitionName": {
"value": "sampleBicepManagedApplication"
},
"definitionRG": {
"value": "bicepDefinitionRG"
},
"managedAppName": {
"value": "sampleBicepManagedApp"
},
"mrgName": {
"value": "<placeholder for managed resource group name>"
},
"appServicePlanName": {
"value": "demoAppServicePlan"
},
"appServiceNamePrefix": {
"value": "demoApp"
},
"storageAccountNamePrefix": {
"value": "demostg1234"
},
"storageAccountType": {
"value": "Standard_LRS"
}
}
}
Debe proporcionar varios parámetros para implementar la aplicación administrada:

Parámetro Value

definitionName Nombre de la definición del catálogo de servicios. Este ejemplo usa


sampleBicepManagedApplication.

definitionRG Nombre del grupo de recursos donde se almacena la definición. En


este ejemplo se usa bicepDefinitionRG.

managedAppName Nombre de la aplicación administrada implementada. En este


ejemplo se usa sampleBicepManagedApp.

mrgName Nombre único del grupo de recursos administrado que contiene los
recursos implementados de la aplicación. El grupo de recursos se
crea al implementar la aplicación administrada. Para crear un nombre
de grupo de recursos administrado, puede ejecutar los comandos
que siguen esta lista de parámetros.

appServicePlanName Cree un nombre para el plan. Máximo de 40 caracteres alfanuméricos


y guiones. Por ejemplo, demoAppServicePlan. Los nombres de plan
de App Service deben ser únicos dentro de un grupo de recursos de
la suscripción.

appServiceNamePrefix Cree un prefijo para el nombre del plan. Máximo de 47 caracteres


alfanuméricos o guiones. Por ejemplo, demoApp. Durante la
implementación, el prefijo se concatena con una cadena única para
crear un nombre único globalmente en Azure.

storageAccountNamePrefix Use solo letras minúsculas y números y un máximo de 11 caracteres.


Por ejemplo, demostg1234. Durante la implementación, el prefijo se
concatena con una cadena única para crear un nombre único
globalmente en Azure.

storageAccountType Las demás opciones son Premium_LRS, Standard_LRS y


Standard_GRS.

Puede ejecutar los comandos siguientes para crear un nombre para el grupo de
recursos administrado.

PowerShell

Azure PowerShell

$mrgprefix = 'mrg-sampleBicepManagedApplication-'
$mrgtimestamp = Get-Date -UFormat "%Y%m%d%H%M%S"
$mrgname = $mrgprefix + $mrgtimestamp
$mrgname
Las variables $mrgprefix y $mrgtimestamp se concatenan y almacenan en la variable
$mrgname . El valor de la variable tiene el formato mrg-sampleBicepManagedApplication-

20230512103059. Use el valor de variable $mrgname cuando implemente la aplicación


administrada.

Implementación de la aplicación administrada


Use Azure PowerShell o la CLI de Azure para crear un grupo de recursos e implementar
la aplicación administrada.

PowerShell

Azure PowerShell

New-AzResourceGroup -Name bicepAppRG -Location westus3

New-AzResourceGroupDeployment `
-ResourceGroupName bicepAppRG `
-TemplateFile [Link] `
-TemplateParameterFile [Link]

La implementación podría mostrar una advertencia de linter de Bicep de que la


propiedad managedResourceGroupId espera un identificador de recurso. Dado que el
grupo de recursos administrado se crea durante la implementación, no hay un
identificador de recurso disponible para la propiedad.

Vista de resultados
Una vez implementada la aplicación administrada del catálogo de servicios, tendrá dos
nuevos grupos de recursos. Uno contiene la aplicación administrada El otro grupo de
recursos contiene los recursos administrados que se han implementado. En este
ejemplo, un App Service, un plan de App Service y una cuenta de almacenamiento.

Aplicación administrada
Una vez finalizada la implementación, puede comprobar el estado de la aplicación
administrada.

PowerShell
Ejecute el comando siguiente para comprobar el estado de la aplicación
administrada.

Azure PowerShell

Get-AzManagedApplication -Name sampleBicepManagedApp -ResourceGroupName


bicepAppRG

Expanda las propiedades para facilitar la lectura de la información Properties .

Azure PowerShell

Get-AzManagedApplication -Name sampleBicepManagedApp -ResourceGroupName


bicepAppRG | Select-Object -ExpandProperty Properties

Recursos administrados
Puede ver los recursos implementados en el grupo de recursos administrados.

PowerShell

Para mostrar los recursos del grupo de recursos administrados, ejecute el siguiente
comando. Ha creado la variable $mrgname al crear los parámetros.

Azure PowerShell

Get-AzResource -ResourceGroupName $mrgname

Para mostrar todas las asignaciones de roles para el grupo de recursos


administrados.

Azure PowerShell

Get-AzRoleAssignment -ResourceGroupName $mrgname

La definición de aplicación administrada que creó en los artículos de inicio rápido


usó un grupo con la asignación de roles Propietario. Cree el grupo con el comando
siguiente.

Azure PowerShell
Get-AzRoleAssignment -ResourceGroupName $mrgname -RoleDefinitionName
Owner

También puede enumerar las asignaciones de denegación para el grupo de


recursos administrado.

Azure PowerShell

Get-AzDenyAssignment -ResourceGroupName $mrgname

Limpieza de recursos
Cuando haya terminado con la aplicación administrada, podrá eliminar los grupos de
recursos y eso eliminará todos los recursos creados. Por ejemplo, ha creado los grupos
de recursos bicepAppRG y un grupo de recursos administrados con el prefijo mrg-
bicepManagedApplication.

Cuando eliminas el grupo de recursos bicepAppRG, se eliminan la aplicación


administrada, el grupo de recursos administrado y todos los recursos de Azure.

PowerShell

El comando le pide que confirme que quiere quitar el grupo de recursos.

Azure PowerShell

Remove-AzResourceGroup -Name bicepAppRG

Si quiere eliminar la definición de la aplicación administrada, elimine los grupos de


recursos que creó denominados packageStorageRG y bicepDefinitionRG.

Pasos siguientes
Para obtener información sobre cómo crear y publicar los archivos de definición de
una aplicación administrada usando Azure PowerShell, la CLI de Azure o el portal,
vaya a Inicio rápido: Crear y publicar una definición de aplicación administrada de
Azure.
Para usar tu propio almacenamiento para crear y publicar los archivos de
definición para una aplicación administrada, ve a Inicio rápido: trae tu propio
almacenamiento para crear y publicar una definición de aplicación administrada de
Azure.
Inicio rápido: implementar una
aplicación administrada de Azure
Marketplace
Artículo • 01/05/2023

En este inicio rápido, implementará una aplicación administrada de Azure Marketplace y


verificará las implementaciones de recursos en Azure. Un publicador de aplicaciones
administradas de Marketplace cobra una tarifa para mantener la aplicación y, durante la
implementación, el publicador recibe permisos para el grupo de recursos administrados
de su aplicación. Como cliente, tienes acceso limitado a los recursos implementados,
pero puedes eliminar la aplicación administrada de tu suscripción de Azure.

Para evitar costes innecesarios para los recursos de Azure de la aplicación administrada,
ve a Limpiar recursos cuando hayas terminado.

Prerrequisitos
Una cuenta de Azure con una suscripción activa. Antes de comenzar, si no tiene una
cuenta, cree una gratuita .

Busca una aplicación administrada


Para obtener una aplicación administrada desde Azure Portal, sigue los siguientes pasos.

1. Inicie sesión en Azure Portal .

2. Busca Marketplace y selecciónalo entre las opciones disponibles. O bien, si has


usado recientemente Marketplace, seleccionalo en la lista.

3. En la página Marketplace , busca Entrenamiento de la comunidad de Microsoft.

4. Selecciona Entrenamiento de la comunidad de Microsoft (versión preliminar).


5. Selecciona el plan Básico y, a continuación, Crear.

Implementación de la aplicación administrada


1. En la pestaña Aspectos básicos, escriba la información necesaria.
Suscripción: Seleccione su suscripción a Azure.
Grupo de recursos: Cree un nuevo grupo de recursos. Para este ejemplo, usa
demo-marketplace-app.
Región: selecciona una región, como Oeste de EE. UU.
Nombre de la aplicación: escribe un nombre, como demotrainingapp.
Grupo de recursos administrados: usa el nombre predeterminado de este
ejemplo. El formato es mrg-microsoft-community-training-<dateTime> . Pero
puedes cambiar el nombre si quieres.

2. Selecciona Siguiente: Configurar el portal.

3. En la pestaña Configurar el portal, escribe la información necesaria.


Nombre del sitio web: escribe un nombre que cumpla los criterios
especificados en el formulario, como demotrainingsite. El nombre de tu sitio
web debe ser globalmente único en Azure.
Nombre de la organización: escribe el nombre de la organización.
Direcciones de correo electrónico de contacto: escribe al menos una
dirección de correo electrónico válida.

4. Selecciona Siguiente: Configurar el tipo de inicio de sesión.

5. En la pestaña Configurar el tipo de inicio de sesión, escribe la información


requerida.
Tipo de inicio de sesión: en este ejemplo, selecciona Móvil.
Número de teléfono móvil del administrador de la organización: escribe un
número de teléfono móvil válido, incluido el código de país o región, en el
formato +1 1234567890. El número de teléfono se utiliza para iniciar sesión
en el sitio de entrenamiento.

6. Seleccione Siguiente: Review + create (Revisar y crear).

7. Después de que se muestre Validación aprobada, verifica que la información sea


correcta.

8. Lee el Permiso de acceso de coadministrador y marca la casilla para aceptar los


términos.
9. Seleccione Crear.

La implementación comienza y, dado que se crean muchos recursos, la implementación


de Azure tarda unos 20 minutos en finalizar. Puedes verificar las implementaciones de
Azure antes de que el sitio web esté disponible.

Verificar la implementación de la aplicación


administrada
Una vez finalizada la implementación de la aplicación administrada, puedes verificar los
recursos.

1. Ve a grupo de recursos demo-marketplace-app y selecciona la aplicación


administrada.

2. Selecciona la pestaña Información general para mostrar la aplicación administrada


y vincular al grupo de recursos administrados.

3. El grupo de recursos administrado muestra los recursos que se implementaron y


las implementaciones que crearon los recursos.
4. Para revisar los permisos del editor en el grupo de recursos administrado,
selecciona Access Control (IAM)>Asignaciones de roles.

También puedes verificar las asignaciones denegadas.

Para este ejemplo, la disponibilidad del sitio web no es necesaria. El propósito del
artículo es mostrar cómo implementar una aplicación administrada de Azure
Marketplace y verificar los recursos. Para evitar costos innecesarios, ve a limpiar los
recursos cuando hayas terminado.

Iniciar el sitio web (opcional)


Una vez completada la implementación, desde el grupo de recursos administrado,
puedes ir al recurso de App Service e iniciar tu sitio web.

El sitio podría responder con una página que la implementación aún está procesando.
Cuando tu sitio web está disponible, se muestra una página de inicio de sesión
predeterminada. Puedes iniciar sesión con el número de teléfono móvil que utilizaste
durante la implementación y recibirás un mensaje de texto de confirmación. Cuando
hayas terminado, asegúrate de cerrar sesión en tu sitio web de entrenamiento.

Limpieza de recursos
Cuando hayas terminado con la aplicación administrada, podrás eliminar los grupos de
recursos y eso eliminará todos los recursos de Azure creados. Por ejemplo, en este inicio
rápido creaste los grupos de recursos demo-marketplace-app y un grupo de recursos
administrado con el prefijo mrg-microsoft-community-training.

Cuando eliminas el grupo de recursos demo-marketplace-app, se eliminan la aplicación


administrada, el grupo de recursos administrado y todos los recursos de Azure.

1. Ve al grupo de recursos demo-marketplace-app y Elimina el grupo de recursos.

2. Para confirmar la eliminación, escriba el nombre del grupo de recursos y seleccione


Eliminar.
Pasos siguientes
Para obtener información sobre cómo crear y publicar los archivos de definición
para una aplicación administrada, ve a Inicio rápido: crear y publicar una definición
de aplicación administrada de Azure.
Para obtener información sobre cómo implementar una aplicación administrada,
ve al Inicio rápido: implementar una aplicación administrada por catálogo de
servicios
Para usar tu propio almacenamiento para crear y publicar los archivos de
definición para una aplicación administrada, ve a Inicio rápido: trae tu propio
almacenamiento para crear y publicar una definición de aplicación administrada de
Azure.
Tutorial: Creación de una aplicación
administrada con acciones y recursos
personalizados
Artículo • 01/06/2023

En este tutorial, creará su propia aplicación administrada con acciones y recursos


personalizados. La aplicación administrada contendrá una acción personalizada en la
página Overview , un tipo de recurso personalizado que se muestra como un elemento
de menú independiente en Table of Content y una acción de contexto personalizada
en la página de recursos personalizados.

Este tutorial incluye los siguientes pasos:

" Creación de un archivo de definición de la interfaz de usuario para crear una


instancia de aplicación administrada.
" Creación de una plantilla de implementación con el proveedor personalizado de
Azure, la cuenta de Azure Storage y una función de Azure.
" Creación de un artefacto de definición de vistas con acciones y recursos
personalizados.
" Creación de una definición de aplicación administrada.
" Implementación de una instancia de aplicación administrada.
" Realización de acciones personalizadas y creación de recursos personalizados.

Prerrequisitos
Para completar este tutorial, necesita saber lo siguiente:

Creación y publicación de una definición de aplicación administrada.


Implementación de aplicaciones del catálogo de servicios mediante Azure Portal.
Creación de la interfaz de usuario de Azure Portal para una aplicación
administrada.
Funcionalidades de artefactos de definición de vistas.
Funcionalidades del proveedor personalizado de Azure.

Definición de la interfaz de usuario


En este tutorial, creará una aplicación administrada y su grupo de recursos
administrados contendrá una instancia de proveedor personalizado, una cuenta de
almacenamiento y una función. La función de Azure que se usa en este ejemplo
implementa una API que controla las operaciones del proveedor personalizado para las
acciones y los recursos. La cuenta de Azure Storage se usa como almacenamiento básico
para los recursos del proveedor personalizado.

La definición de la interfaz de usuario para crear una instancia de aplicación


administrada incluye los elementos de entrada funcname y storagename . El nombre de la
cuenta de almacenamiento y el nombre de la función deben ser únicos globalmente. De
forma predeterminada, los archivos de función se implementarán desde el paquete de
función de ejemplo , pero esto puede cambiarse si agrega un elemento de entrada de
un vínculo de paquete en [Link]:

JSON

{
"name": "funcname",
"type": "[Link]",
"label": "Name of the function to be created",
"toolTip": "Name of the function to be created",
"visible": true,
"constraints": {
"required": true
}
},
{
"name": "storagename",
"type": "[Link]",
"label": "Name of the storage to be created",
"toolTip": "Name of the storage to be created",
"visible": true,
"constraints": {
"required": true
}
},
{
"name": "zipFileBlobUri",
"type": "[Link]",
"defaultValue": "[Link]
templates/tree/master/quickstarts/[Link]/custom-rp-with-
function/artifacts/functionzip/[Link]",
"label": "The Uri to the uploaded function zip file",
"toolTip": "The Uri to the uploaded function zip file",
"visible": true
}

y de salida en [Link]:

JSON
"funcname": "[steps('applicationSettings').funcname]",
"storageName": "[steps('applicationSettings').storagename]",
"zipFileBlobUri": "[steps('applicationSettings').zipFileBlobUri]"

El ejemplo de [Link] completo se puede encontrar en Referencia:


Artefactos de elementos de la interfaz de usuario.

Plantilla con proveedor personalizado


Para crear una instancia de aplicación administrada con un proveedor personalizado,
debe definir el recurso de proveedor personalizado con el nombre public y el tipo
[Link]/resourceProviders en [Link] En ese recurso,
defina los tipos de recurso y las acciones para el servicio. Para implementar las
instancias de Azure Functions y de la cuenta de Azure Storage, defina recursos del tipo
[Link]/sites y [Link]/storageAccounts respectivamente.

En este tutorial, creará un tipo de recurso users , una acción personalizada ping y una
acción personalizada users/contextAction que se realizarán en un contexto de un
recurso personalizado users . Para cada tipo de recurso y acción, proporcione un punto
de conexión que apunte a la función con el nombre proporcionado en
[Link]. Especifique routingType como Proxy,Cache para los tipos de
recurso y Proxy para las acciones:

JSON

{
"apiVersion": "[variables('customrpApiversion')]",
"type": "[Link]/resourceProviders",
"name": "[variables('customProviderName')]",
"location": "[parameters('location')]",
"properties": {
"actions": [
{
"name": "ping",
"routingType": "Proxy",
"endpoint": "
[listSecrets(resourceId('[Link]/sites/functions',
parameters('funcname'), 'HttpTrigger1'), '2018-02-01').trigger_url]"
},
{
"name": "users/contextAction",
"routingType": "Proxy",
"endpoint": "
[listSecrets(resourceId('[Link]/sites/functions',
parameters('funcname'), 'HttpTrigger1'), '2018-02-01').trigger_url]"
}
],
"resourceTypes": [
{
"name": "users",
"routingType": "Proxy,Cache",
"endpoint": "
[listSecrets(resourceId('[Link]/sites/functions',
parameters('funcname'), 'HttpTrigger1'), '2018-02-01').trigger_url]"
}
]
},
"dependsOn": [
"[concat('[Link]/sites/',parameters('funcname'))]"
]
}

El ejemplo de [Link] completo se puede encontrar en Referencia: Artefacto


de plantilla de implementación.

Ver definición de artefacto


Para definir una interfaz de usuario que incluya acciones personalizadas y recursos
personalizados en la aplicación administrada, debe crear el artefacto
[Link]. Para más información sobre el artefacto de definición de vistas,
consulte Artefacto de definición de vistas en Azure Managed Applications.

En este tutorial, definirá:

Una página de información general con un botón de la barra de herramientas que


representa una acción personalizada TestAction con entrada de texto básica.
Una página de usuarios que representa un tipo de recurso personalizado users .
Una acción de recursos personalizada users/contextAction en la página de
usuarios que se realizará en un contexto de recurso personalizado de tipo users .

En el ejemplo siguiente se muestra la configuración de vista de una página de


información general:

JSON

{
"kind": "Overview",
"properties": {
"header": "Welcome to your Demo Azure Managed Application",
"description": "This Managed application with Custom Provider is for
demo purposes only.",
"commands": [{
"displayName": "Ping Action",
"path": "/customping",
"icon": "LaunchCurrent"
}]
}
}

En el ejemplo siguiente se incluye la configuración de la página de recursos de usuarios


con la acción de recursos personalizada:

JSON

{
"kind": "CustomResources",
"properties": {
"displayName": "Users",
"version": "[Link]",
"resourceType": "users",
"createUIDefinition": {
},
"commands": [{
"displayName": "Custom Context Action",
"path": "users/contextAction",
"icon": "Start"
}],
"columns": [
{ "key": "[Link]", "displayName": "Full Name" },
{ "key": "[Link]", "displayName": "Location",
"optional": true }
]
}
}

El ejemplo de [Link] completo se puede encontrar en Referencia: Artefacto


de definición de vistas.

Definición de aplicación administrada


Empaquete los siguientes artefactos de aplicación administrada en un archivo ZIP y
cárguelo en el almacenamiento:

[Link]
[Link]
[Link]

Todos los archivos deben estar en el nivel raíz. El paquete con artefactos se puede
almacenar en cualquier almacenamiento, por ejemplo, un blob de GitHub o un blob de
una cuenta de Azure Storage. Este es un script para cargar el paquete de aplicación en la
cuenta de almacenamiento:

PowerShell

$resourceGroup="appResourcesGroup"
$storageName="mystorageaccount$RANDOM"

# Sign in to your Azure subscription


Connect-AzAccount
# Create resource group for managed application definition and application
package
New-AzResourceGroup -Name $resourceGroup -Location eastus

# Create storage account for a package with application artifacts


$storageAccount=New-AzStorageAccount `
-ResourceGroupName $resourceGroup `
-Name $storageName `
-SkuName Standard_LRS `
-Location eastus `
$ctx=$[Link]

# Create storage container and upload zip to blob


New-AzStorageContainer -Name appcontainer -Context $ctx -Permission blob
Set-AzStorageBlobContent `
-File "path_to_your_zip_package" `
-Container appcontainer `
-Blob [Link] `
-Context $ctx

# Get blob absolute uri


$blobUri=(Get-AzureStorageBlob -Container appcontainer -Blob [Link] -
Context $ctx).[Link]

Ejecute el siguiente script de la CLI de Azure o siga los pasos descritos en Azure Portal
para implementar una definición de aplicación administrada del catálogo de servicios:

Para ejecutar este ejemplo, instale la versión más reciente de la CLI de Azure. Para
empezar, ejecute az login para crear una conexión con Azure.

Los ejemplos de la CLI de Azure están escritos para el shell bash . Para ejecutar este
ejemplo en Windows PowerShell o en el símbolo del sistema, es posible que necesite
cambiar algunos elementos del script.

CLI de Azure

Azure CLI
resourceGroup="appResourcesGroup"
# Select subscription and create resource group (if you have not created
yet)
az account set --subscription <subscriptionID>
az group create --name $resourceGroup --location eastus

# Get object ID of your identity


userid=$(az ad user show --upn-or-object-id example@[Link] --query
objectId --output tsv)
# Get role definition ID for the Owner role
roleid=$(az role definition list --name Owner --query [].name --output
tsv)

# Create managed application definition resource


az managedapp definition create \
--name "ManagedUsersAppDefinition" \
--location "eastus" \
--resource-group $resourceGroup \
--lock-level ReadOnly \
--display-name "Managed users app definition" \
--description "Managed application with Azure Custom Provider" \
--authorizations "$userid:$roleid" \
--package-file-uri "path to your [Link] package"

Instancia de la aplicación administrada


Una vez implementada la definición de la aplicación administrada, ejecute el siguiente
script o siga los pasos descritos en Azure Portal para implementar la instancia de la
aplicación administrada con el proveedor personalizado:

CLI de Azure

Azure CLI

appResourcesGroup="appResourcesGroup"
applicationGroup="usersApplicationGroup"

# Create resource group for managed application instance


az group create --name $applicationGroup --location eastus

# Get ID of managed application definition


appid=$(az managedapp definition show --name ManagedUsersAppDefinition -
-resource-group $appResourcesGroup --query id --output tsv)

# Create the managed application


az managedapp create \
--name ManagedUsersApp \
--location "eastus" \
--kind "Servicecatalog" \
--resource-group $applicationGroup \
--managedapp-definition-id $appid \
--managed-rg-id "managedResourcesGroup" \
--parameters "{\"funcname\": {\"value\": \"managedusersappfunction\"},
\"storageName\": {\"value\": \"managedusersappstorage\"}}"

Acciones y recursos personalizados


Una vez implementada la instancia de la aplicación del catálogo de servicios, tendrá dos
nuevos grupos de recursos. El primer grupo de recursos applicationGroup contiene una
instancia de la aplicación administrada y el segundo grupo de recursos
managedResourceGroup contiene los recursos de la aplicación administrada, incluido el

proveedor personalizado.

Puede ir a la instancia de la aplicación administrada y realizar una acción personalizada


en la página de información general, crear un recurso personalizado de usuarios en la
página de usuarios y ejecutar una acción de contexto personalizada en un recurso
personalizado.

Vaya a la página de información general y haga clic en el botón "Ping Action"


(Acción ping):
Vaya a la página de usuarios y haga clic en el botón "Agregar". Proporcione
entradas para crear un recurso y envíe el formulario:

Vaya a la página de usuarios, seleccione un recurso "users" y haga clic en "Custom


Context Action" (Acción de contexto personalizado):
Limpieza de recursos
En los pasos anteriores, creó recursos de Azure en un grupo de recursos. Si no cree que
vaya a necesitar estos recursos en el futuro, puede eliminarlos mediante la eliminación
del grupo de recursos.

En el menú de Azure Portal o la página Inicio, seleccione Grupos de recursos. En la


página Grupos de recursos, seleccione myResourceGroup.

En la página myResourceGroup, asegúrese de que los recursos enumerados sean los


que desea eliminar.

Seleccione Eliminar grupo de recursos, escriba myResourceGroup en el cuadro de texto


para confirmar y, después, seleccione Eliminar.

¿Busca ayuda?
Si tiene preguntas sobre Azure Managed Applications, puede probar a formularlas en
Stack Overflow con la etiqueta azure-managed-app o en Microsoft Q&A con la
etiqueta azure-managed-application. Puede que ya se haya formulado y respondido
una pregunta similar, así que compruébelo antes de publicar la suya. Use las etiquetas
correspondientes para recibir una respuesta más rápida.

Pasos siguientes
Para publicar la aplicación administrada en Azure Marketplace, consulte Aplicaciones
administradas de Azure en Marketplace.

Más información sbre los proveedores personalizados de Azure.


Ejemplos de proyectos para las
aplicaciones administradas de Azure
Artículo • 01/06/2023

La tabla siguiente incluye vínculos a aplicaciones administradas de Azure de ejemplo en


GitHub.

Ejemplo Descripción

Aplicación administrada Se muestra cómo puede crear opciones de implementación


(prueba o producción) en una flexibles para los clientes. Esta aplicación administrada se
red virtual nueva o existente puede implementar en una red virtual nueva o en una
existente. Los clientes pueden especificar la versión de prueba
o de producción de las aplicaciones administradas.

Cuenta de Azure Storage Implementa una cuenta de almacenamiento individual. Utilice


administrada este proyecto de ejemplo como introducción a la creación de
aplicaciones administradas.

Service Fabric administrado con Implementa un clúster de Service Fabric y conjuntos de


servicios de administración de escalado de máquinas virtuales. Incluye cuentas de
Azure almacenamiento para el registro y diagnóstico.

Aplicación web administrada Implementa una máquina virtual que hospeda una aplicación
(IaaS) con los servicios de web.
administración de Azure

Managed SQL 2017 IaaS with Implementa una máquina virtual que hospeda SQL 2017.
automated patching and
backup (IaaS administrada de
SQL 2017 con revisiones y
copias de seguridad
automatizadas)
Artefacto de definición de vistas en
Azure Managed Applications
Artículo • 01/06/2023

La definición de vistas es un artefacto opcional en Azure Managed Applications. Permite


personalizar la página de información general y agregar más vistas, tales como métricas
y recursos personalizados.

En este artículo se proporciona una introducción al artefacto de definición de vistas y


sus capacidades.

Ver definición de artefacto


El artefacto de definición de vistas debe denominarse [Link] y debe
colocarse en el mismo nivel que [Link] y [Link] en el
paquete .zip que crea la definición de una aplicación administrada. Para obtener
información sobre cómo crear el paquete .zip y publicar la definición de una aplicación
administrada, vea Publicación de la definición de una aplicación administrada de Azure.

Esquema de la definición de vistas


El archivo [Link] solo tiene una propiedad views de nivel superior, que es
una matriz de vistas. Cada vista se muestra en la interfaz de usuario de la aplicación
administrada como un elemento de menú independiente en la tabla de contenidos.
Cada vista tiene una propiedad kind que establece el tipo de vista. Debe establecerse
en uno de los siguientes valores: Introducción, Métricas, Recursos personalizados,
Asociaciones. Para obtener más información, consulte el esquema JSON actual para
[Link] .

Ejemplo de JSON para la definición de vistas:

JSON

{
"$schema":
"[Link]
preview/[Link]#",
"contentVersion": "[Link]",
"views": [
{
"kind": "Overview",
"properties": {
"header": "Welcome to your Azure Managed Application",
"description": "This managed application is for demo purposes
only.",
"commands": [
{
"displayName": "Test Action",
"path": "testAction"
}
]
}
},
{
"kind": "Metrics",
"properties": {
"displayName": "This is my metrics view",
"version": "1.0.0",
"charts": [
{
"displayName": "Sample chart",
"chartType": "Bar",
"metrics": [
{
"name": "Availability",
"aggregationType": "avg",
"resourceTagFilter": [
"tag1"
],
"resourceType": "[Link]/storageAccounts",
"namespace": "[Link]/storageAccounts"
}
]
}
]
}
},
{
"kind": "CustomResources",
"properties": {
"displayName": "Test custom resource type",
"version": "1.0.0",
"resourceType": "testCustomResource",
"createUIDefinition": {},
"commands": [
{
"displayName": "Custom Context Action",
"path": "testCustomResource/testContextAction",
"icon": "Stop",
"createUIDefinition": {}
}
],
"columns": [
{
"key": "name",
"displayName": "Name"
},
{
"key": "properties.myProperty1",
"displayName": "Property 1"
},
{
"key": "properties.myProperty2",
"displayName": "Property 2",
"optional": true
}
]
}
},
{
"kind": "Associations",
"properties": {
"displayName": "Test association resource type",
"version": "1.0.0",
"targetResourceType": "[Link]/virtualMachines",
"createUIDefinition": {}
}
}
]
}

Información general
"kind": "Overview"

Cuando proporciona esta vista en [Link], esta reemplaza la página de


introducción predeterminada en la aplicación administrada.

JSON

{
"kind": "Overview",
"properties": {
"header": "Welcome to your Azure Managed Application",
"description": "This managed application is for demo purposes only.",
"commands": [
{
"displayName": "Test Action",
"path": "testAction"
}
]
}
}

Propiedad Obligatorio Descripción


Propiedad Obligatorio Descripción

encabezado No El encabezado de la página de introducción.

description No La descripción de la aplicación administrada.

comandos No La matriz de botones adicionales de la barra de herramientas de la


página de información general; vea comandos.

Métricas
"kind": "Metrics"

La vista de métricas le permite recopilar y agregar datos de los recursos de la aplicación


administrada a las métricas de Azure Monitor.

JSON

{
"kind": "Metrics",
"properties": {
"displayName": "This is my metrics view",
"version": "1.0.0",
"charts": [
{
"displayName": "Sample chart",
"chartType": "Bar",
"metrics": [
{
"name": "Availability",
"aggregationType": "avg",
"resourceTagFilter": [
"tag1"
],
"resourceType": "[Link]/storageAccounts",
"namespace": "[Link]/storageAccounts"
}
]
}
]
}
}

Propiedad Obligatorio Descripción

DisplayName No El título de visualización de la vista.

version No La versión de la plataforma utilizada para representar la vista.

gráficos Sí La matriz de los gráficos de la página de métricas.

Gráfico

Propiedad Obligatorio Descripción

DisplayName Sí El título de visualización del gráfico.

chartType No La visualización que se utilizará para este gráfico. De forma


predeterminada, se utiliza un gráfico de líneas. Tipos de gráficos
compatibles: Bar, Line, Area, Scatter .

Métricas Sí La matriz de métricas que se trazarán en el gráfico. Para obtener


más información acerca de las métricas compatibles con Azure
Portal, consulte Métricas compatibles con Azure Monitor.

Métrica

Propiedad Obligatorio Descripción

name Sí El nombre de la métrica.


Propiedad Obligatorio Descripción

AggregationType Sí El tipo de agregación que se usará para esta métrica. Tipos de


agregación compatibles: none, sum, min, max, avg, unique,
percentile, count .

espacio de No Más información que se usará al determinar el proveedor de


nombres métricas adecuado.

resourceTagFilter No La matriz de etiquetas del recurso (se separarán con la palabra


or ) para las que se mostrarán métricas. Se aplica encima del
filtro de tipo de recurso.

resourceType Sí El tipo de recurso para el que se mostrarán métricas.

Recursos personalizados
"kind": "CustomResources"

Puede definir varias vistas de este tipo. Cada vista representa un único tipo de recurso
personalizado del proveedor personalizado que ha definido en [Link]. Para
consultar una introducción a los proveedores de recursos, vea la introducción a los
proveedores personalizados de Azure en versión preliminar.
En esta vista, puede realizar operaciones GET, PUT, DELETE y POST para el tipo de
recurso personalizado. Las operaciones POST podrían ser acciones personalizadas
globales o acciones personalizadas en un contexto del tipo de recurso personalizado.

JSON

{
"kind": "CustomResources",
"properties": {
"displayName": "Test custom resource type",
"version": "1.0.0",
"resourceType": "testCustomResource",
"icon": "[Link]",
"createUIDefinition": {},
"commands": [
{
"displayName": "Custom Context Action",
"path": "testCustomResource/testContextAction",
"icon": "Stop",
"createUIDefinition": {},
}
],
"columns": [
{
"key": "name",
"displayName": "Name"
},
{
"key": "properties.myProperty1",
"displayName": "Property 1"
},
{
"key": "properties.myProperty2",
"displayName": "Property 2",
"optional": true
}
]
}
}

Propiedad Obligatorio Descripción

DisplayName Sí El título de visualización de la vista. El título debe ser único


para cada vista CustomResources en su [Link].

version No La versión de la plataforma utilizada para representar la vista.

resourceType Sí El tipo de recurso personalizado. Debe ser un tipo de recurso


personalizado único del proveedor personalizado.
Propiedad Obligatorio Descripción

icon No Icono de la vista. La lista de iconos de ejemplo se define en el


esquema JSON .

createUIDefinition No Esquema de creación de definiciones de interfaz de usuario


para crear el comando de recurso personalizado. Para ver una
introducción sobre la creación de definiciones de interfaz de
usuario, consulte Introducción a CreateUiDefinition.

comandos No La matriz de botones adicionales de la barra de herramientas


de la vista CustomResources; vea comandos.

columnas No La matriz de columnas del recurso personalizado. Si no se ha


definido, se mostrará la columna name de forma
predeterminada. La columna debe tener "key" y
"displayName" . Para la clave, proporcione la clave de la
propiedad que se va a mostrar en una vista. Si es anidada,
utilice el punto como delimitador, por ejemplo, "key": "name"
o "key": "properties.property1" . Como nombre para
mostrar, proporcione el nombre de la propiedad que se
mostrará en una vista. También puede proporcionar una
propiedad "optional" . Si se establece en true, la columna se
oculta en una vista de forma predeterminada.

Comandos
La propiedad commands es una matriz de botones adicionales de la barra de
herramientas que se muestran en la página. Cada comando representa una acción POST
del proveedor personalizado de Azure definida en [Link]. Para ver una
introducción a los proveedores personalizados, consulte la información general sobre
proveedores personalizados de Azure.

JSON

{
"commands": [
{
"displayName": "Start Test Action",
"path": "testAction",
"icon": "Start",
"createUIDefinition": {}
},
]
}

Propiedad Obligatorio Descripción

DisplayName Sí El nombre para mostrar del botón de comando.

path Sí Debe ser un nombre de la acción del proveedor


personalizado. La acción debe estar definida en
[Link].

No acepta valores dinámicos como un URI que se genera


desde [Link].

icon No El icono del botón de comando. La lista de iconos de ejemplo


se define en el esquema JSON .

createUIDefinition No Esquema de creación de definiciones de interfaz de usuario


del comando. Para ver una introducción sobre la creación de
definiciones de interfaz de usuario, consulte Introducción a
CreateUiDefinition.

Asociaciones
"kind": "Associations"

Puede definir varias vistas de este tipo. Esta vista permite vincular recursos existentes a
la aplicación administrada a través del proveedor personalizado definido en
[Link]. Para consultar una introducción a los proveedores de recursos, vea la
introducción a los proveedores personalizados de Azure en versión preliminar.
En esta vista puede extender recursos de Azure existentes en función de
targetResourceType . Cuando se selecciona un recurso, se crea una solicitud de
incorporación al proveedor personalizado público, lo que puede aplicar un efecto
secundario al recurso.

JSON

{
"kind": "Associations",
"properties": {
"displayName": "Test association resource type",
"version": "1.0.0",
"targetResourceType": "[Link]/virtualMachines",
"createUIDefinition": {}
}
}

Propiedad Obligatorio Descripción

DisplayName Sí El título de visualización de la vista. El título debe ser único


para cada vista Asociaciones de [Link].

version No La versión de la plataforma utilizada para representar la


vista.

targetResourceType Sí Tipo de recurso de destino. Este tipo de recurso se va a


mostrar para la incorporación de recursos.

createUIDefinition No Esquema de creación de definiciones de interfaz de usuario


para crear el comando de recurso de asociación. Para ver
una introducción sobre la creación de definiciones de
interfaz de usuario, consulte Introducción a
CreateUiDefinition.

¿Busca ayuda?
Si tiene alguna pregunta sobre Azure Managed Applications, pregunte en Stack
Overflow . Puede que ya se haya formulado y respondido una pregunta similar, así que
compruébelo antes de publicar la suya. Agregue la etiqueta azure-managed-app para
obtener una respuesta rápida.

Pasos siguientes
Para una introducción a las aplicaciones administradas, consulte la introducción a
las aplicaciones administradas de Azure.
Para ver una introducción a los proveedores personalizados, consulte la
información general sobre proveedores personalizados de Azure.
Para crear una aplicación administrada de Azure con proveedores personalizados
de Azure, consulte Tutorial: Creación de una aplicación administrada con tipos de
recursos y acciones de proveedor personalizados.
Implementación de asociaciones para
aplicaciones administradas mediante
Azure Policy
Artículo • 01/06/2023

Se pueden usar directivas de Azure para implementar asociaciones con el fin de asociar
recursos a aplicaciones administradas. En este artículo se describe una directiva
integrada que implementa asociaciones y el modo de usarla.

Directiva integrada para implementar


asociaciones
La implementación de asociaciones para aplicaciones administradas es una directiva
integrada que asocia un recurso a una aplicación administrada. La implementación de
directivas no admite tipos de recursos anidados. La directiva acepta tres parámetros:

Identificador de la aplicación administrada: es el identificador de recurso de la


aplicación administrada al que se deben asociar los recursos.
Tipos de recursos que se van a asociar: son la lista de tipos de recursos que se van
a asociar a la aplicación administrada. Puede asociar varios tipos de recursos a una
aplicación administrada con la misma directiva.
Prefijo de nombre de asociación: esta cadena es el prefijo que se va a agregar al
nombre del recurso de asociación que se va a crear. El valor predeterminado es
DeployedByPolicy .

La directiva usa la evaluación DeployIfNotExists . Se ejecuta después de que un


proveedor de recursos ha administrado una solicitud de creación o actualización de
recursos del tipo de recurso seleccionado y la evaluación ha devuelto un código de
estado correcto. Luego, el recurso de asociación se implementa mediante una
implementación de plantilla. Para más información sobre las asociaciones, consulte
Información general sobre la incorporación de recursos de proveedores personalizados
de Azure.

Para obtener más información, consulte Implementación de asociaciones para una


aplicación administrada.
Uso de la directiva integrada de
implementación de asociaciones

Prerrequisitos
Si la aplicación administrada necesita permisos sobre la suscripción para realizar una
acción, la implementación de los recursos de asociación de la directiva no funcionará sin
conceder los permisos.

Asignación de directiva
Para usar la directiva integrada, cree una asignación de directiva y asigne las
asociaciones de implementación a una directiva de aplicación administrada. Cuando la
directiva se haya asignado correctamente, identificará los recursos no compatibles e
implementará la asociación de esos recursos.
Ayuda
Si tiene preguntas sobre el desarrollo de proveedores de recursos personalizados de
Azure, haga su consulta en Stack Overflow . Puede que ya se haya respondido a una
pregunta similar, así que compruébelo antes de publicar la suya. Use la etiqueta azure-
custom-providers .

Pasos siguientes
En este artículo, aprendió a usar la directiva integrada para implementar asociaciones.
Para obtener más información, vea estos artículos:

Conceptos: Incorporación de recursos de proveedores personalizados de Azure


Tutorial: Incorporación de recursos con proveedores personalizados
Tutorial: Creación de acciones y recursos personalizados en Azure
Inicio rápido: Creación de un proveedor de recursos personalizados e
implementación de recursos personalizados
Cómo: Incorporación de acciones personalizadas a una API REST de Azure
Cómo: Incorporación de recursos personalizados a una API REST de Azure
Base de referencia de seguridad de
Azure para Azure Managed Applications
Artículo • 20/09/2023

Esta línea base de seguridad aplica instrucciones de la versión 1.0 de La prueba


comparativa de seguridad en la nube de Microsoft a Azure Managed Applications. El
punto de referencia de seguridad en la nube de Microsoft proporciona
recomendaciones sobre cómo puede proteger sus soluciones de nube en Azure. El
contenido se agrupa mediante los controles de seguridad definidos por la prueba
comparativa de seguridad de la nube de Microsoft y las instrucciones relacionadas
aplicables a Azure Managed Applications.

Puede supervisar esta línea de base de seguridad y sus recomendaciones mediante


Microsoft Defender for Cloud. Azure Policy definiciones se mostrarán en la sección
Cumplimiento normativo de la página Microsoft Defender for Cloud Portal.

Cuando una característica tiene definiciones de Azure Policy relevantes, se muestran en


esta línea de base para ayudarle a medir el cumplimiento de los controles y
recomendaciones de las pruebas comparativas de seguridad en la nube de Microsoft.
Algunas recomendaciones pueden requerir un plan de Microsoft Defender de pago para
habilitar determinados escenarios de seguridad.

7 Nota

Se han excluido las características no aplicables a las aplicaciones administradas de


Azure. Para ver cómo Azure Managed Applications se asigna por completo a la
prueba comparativa de seguridad en la nube de Microsoft, consulte el archivo
completo de asignación de línea de base de seguridad de Azure Managed
Applications .

Perfil de seguridad
El perfil de seguridad resume los comportamientos de alto impacto de Las aplicaciones
administradas de Azure, lo que puede dar lugar a un aumento de las consideraciones de
seguridad.

ノ Expandir tabla
Atributo de comportamiento del servicio Value

Categoría de productos

El cliente puede acceder a HOST/OS. Acceso total

El servicio se puede implementar en la red virtual del cliente. False

Almacena el contenido del cliente en reposo True

Seguridad de red
Para más información, consulte la prueba comparativa de seguridad en la nube de
Microsoft: Seguridad de red.

NS-1: Establecimiento de límites de segmentación de red

Características

Integración de Virtual Network

Descripción: el servicio admite la implementación en el Virtual Network privado (VNet)


del cliente. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True True Microsoft

Guía de configuración: no se requieren configuraciones adicionales, ya que está


habilitada en una implementación predeterminada.

Referencia: Uso de una red virtual existente con Azure Managed Applications

Compatibilidad con grupos de seguridad de red

Descripción: el tráfico de red de servicio respeta la asignación de reglas de grupos de


seguridad de red en sus subredes. Más información.

ノ Expandir tabla
Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se


basan en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.

Guía de configuración: use grupos de seguridad de red (NSG) para restringir o


supervisar el tráfico por puerto, protocolo, dirección IP de origen o dirección IP de
destino. Cree reglas de NSG para restringir los puertos abiertos del servicio (por
ejemplo, impedir que se acceda a los puertos de administración desde redes que no son
de confianza). Tenga en cuenta que, de forma predeterminada, los NSG deniegan todo
el tráfico entrante, pero permiten el tráfico desde la red virtual y las instancias de Azure
Load Balancer.

NS-2: Servicios en la nube seguros con controles de red

Características

Azure Private Link

Descripción: funcionalidad de filtrado ip nativa del servicio para filtrar el tráfico de red
(no confundir con NSG o Azure Firewall). Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se


basan en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.

Guía de configuración: implemente puntos de conexión privados para todos los


recursos de Azure que admitan la característica de Private Link, para establecer un punto
de acceso privado para los recursos.
Deshabilitación del acceso de la red pública

Descripción: el servicio admite la deshabilitación del acceso a la red pública mediante el


uso de una regla de filtrado de ACL de IP de nivel de servicio (no NSG o Azure Firewall)
o mediante un modificador de alternancia "Deshabilitar acceso a la red pública". Más
información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se


basan en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.

Guía de configuración: deshabilite el acceso a la red pública mediante la regla de


filtrado de ACL ip de nivel de servicio o un conmutador de alternancia para el acceso a
la red pública.

Administración de identidades
Para obtener más información, consulte La prueba comparativa de seguridad en la nube
de Microsoft: Administración de identidades.

IM-1: Uso de una identidad centralizada y un sistema de


autenticación

Características

Métodos de autenticación local para el acceso al plano de datos

Descripción: métodos de autenticación locales admitidos para el acceso al plano de


datos, como un nombre de usuario y una contraseña locales. Más información.

ノ Expandir tabla
Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: el publicador de la aplicación administrada puede implementar


métodos de autenticación local como parte de la solución. Evite el uso de métodos o
cuentas de autenticación local, que deben deshabilitarse siempre que sea posible. En su
lugar, use Azure AD para autenticarse siempre que sea posible.

Guía de configuración: restrinja el uso de métodos de autenticación local para el acceso


al plano de datos. En su lugar, use Azure Active Directory (Azure AD) como método de
autenticación predeterminado para controlar el acceso al plano de datos.

IM-3: Administración de identidades de aplicaciones de


forma segura y automática

Características

Identidades administradas

Descripción: las acciones del plano de datos admiten la autenticación mediante


identidades administradas. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se basan


en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.

Guía de configuración: use identidades administradas de Azure en lugar de entidades


de servicio cuando sea posible, lo que puede autenticarse en los servicios y recursos de
Azure que admiten la autenticación de Azure Active Directory (Azure AD). La plataforma
administra totalmente, rota y protege las credenciales de identidad administrada, lo que
evita las credenciales codificadas de forma rígida en el código fuente o en los archivos
de configuración.

Referencia: Aplicación administrada de Azure con identidad administrada


Entidades de servicio

Descripción: el plano de datos admite la autenticación mediante entidades de servicio.


Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se basan


en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.

Guía de configuración: no hay ninguna guía actual de Microsoft para esta configuración
de características. Revise y determine si su organización quiere configurar esta
característica de seguridad.

IM-7: Restricción del acceso a los recursos en función de


las condiciones

Características

Acceso condicional para el plano de datos

Descripción: el acceso al plano de datos se puede controlar mediante directivas de


acceso condicional de Azure AD. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se basan


en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.
Guía de configuración: defina las condiciones y criterios aplicables para el acceso
condicional de Azure Active Directory (Azure AD) en la carga de trabajo. Considere casos
de uso comunes, como bloquear o conceder acceso desde ubicaciones específicas,
bloquear el comportamiento de inicio de sesión de riesgo o requerir dispositivos
administrados por la organización para aplicaciones específicas.

IM-8: Restricción de la exposición de credenciales y


secretos

Características

Integración y almacenamiento de credenciales y secretos de


servicio en Azure Key Vault

Descripción: el plano de datos admite el uso nativo de Azure Key Vault para el almacén
de credenciales y secretos. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se


basan en ningún otro tipo de recurso, sino en la implementación de recursos
subyacentes que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.

Guía de configuración: asegúrese de que los secretos y las credenciales se almacenan


en ubicaciones seguras, como Azure Key Vault, en lugar de insertarlos en archivos de
código o configuración.

Referencia: Acceso Key Vault secreto al implementar aplicaciones administradas de


Azure

Acceso con privilegios


Para obtener más información, consulte la prueba comparativa de seguridad en la nube
de Microsoft: Acceso con privilegios.
PA-1: Separación y limitación de usuarios administrativos
o con muchos privilegios

Características

Cuentas de Administración locales

Descripción: el servicio tiene el concepto de una cuenta administrativa local. Más


información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

False No es aplicable No es aplicable

Guía de configuración: esta característica no se admite para proteger este servicio.

PA-7: Seguimiento del principio de administración


suficiente (privilegios mínimos)

Características

RBAC de Azure para el plano de datos

Descripción: Azure Role-Based Access Control (Azure RBAC) se puede usar para
administrar el acceso a las acciones del plano de datos del servicio. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

False No es aplicable No es aplicable

Notas de características: los propios recursos de la aplicación administrada no tienen


un plano de datos. Implementan recursos subyacentes y sus características que
componen la aplicación administrada. Un publicador puede ofrecer personalización y
configuración para las aplicaciones, pero no es necesario.

Guía de configuración: esta característica no se admite para proteger este servicio.


PA-8: Determinación del proceso de acceso para soporte
técnico a proveedores de nube

Características

Caja de seguridad del cliente

Descripción: La Caja de seguridad del cliente se puede usar para el acceso de soporte
técnico de Microsoft. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

False No es aplicable No es aplicable

Guía de configuración: esta característica no se admite para proteger este servicio.

Protección de los datos


Para obtener más información, consulte la prueba comparativa de seguridad en la nube
de Microsoft: Protección de datos.

DP-1: detección, clasificación y etiquetado de datos


confidenciales

Características

Clasificación y detección de datos confidenciales

Descripción: se pueden usar herramientas (como Azure Purview o Azure Information


Protection) para la detección y clasificación de datos en el servicio. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer


Notas de características: los propios recursos de aplicaciones administradas no se
basan en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.

Guía de configuración: use herramientas como Azure Purview, Azure Information


Protection y Azure SQL detección y clasificación de datos para examinar, clasificar y
etiquetar de forma centralizada los datos confidenciales que residen en Azure, local,
Microsoft 365 u otras ubicaciones.

DP-2: Supervisión de anomalías y amenazas dirigidas a


datos confidenciales

Características

Prevención de pérdida o pérdida de datos

Descripción: el servicio admite la solución DLP para supervisar el movimiento de datos


confidenciales (en el contenido del cliente). Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: dependiendo de los recursos incluidos en el grupo de recursos


administrados, se pueden admitir soluciones DLP. Por ejemplo, Defender para Storage
se puede usar para proteger un recurso de almacenamiento contenido en el grupo de
recursos administrado.

Guía de configuración: si es necesario para el cumplimiento de la prevención de


pérdida de datos (DLP), puede usar una solución DLP basada en host desde Azure
Marketplace o una solución DLP de Microsoft 365 para aplicar controles de detección
y/o preventivos para evitar la filtración de datos.

DP-3: Cifrado de datos confidenciales en tránsito

Características
Cifrado de los datos en tránsito

Descripción: el servicio admite el cifrado de datos en tránsito para el plano de datos.


Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True True Microsoft

Guía de configuración: no se requieren configuraciones adicionales, ya que está


habilitada en una implementación predeterminada.

DP-4: Habilitación del cifrado de datos en reposo de


forma predeterminada

Características

Cifrado de datos en reposo mediante claves de plataforma

Descripción: se admite el cifrado de datos en reposo mediante claves de plataforma,


cualquier contenido del cliente en reposo se cifra con estas claves administradas por
Microsoft. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True True Microsoft

Guía de configuración: no se requieren configuraciones adicionales, ya que está


habilitada en una implementación predeterminada.

DP-5: Uso de la opción de clave administrada por el


cliente en el cifrado de datos en reposo cuando sea
necesario

Características
Cifrado de datos en reposo mediante CMK

Descripción: el cifrado de datos en reposo mediante claves administradas por el cliente


es compatible con el contenido del cliente almacenado por el servicio. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: el cliente puede optar por usar su propia cuenta de


almacenamiento como parte de la pila de aplicaciones administradas y puede cifrar esa
cuenta de almacenamiento con una clave administrada por el cliente.

Para obtener más información sobre el uso de su propio almacenamiento, visite: Traiga
su propio almacenamiento para la definición de aplicación administrada.

Guía de configuración: si es necesario para el cumplimiento normativo, defina el caso


de uso y el ámbito de servicio donde se necesite el cifrado mediante claves
administradas por el cliente. Habilite e implemente el cifrado de datos en reposo
mediante la clave administrada por el cliente en los servicios.

DP-6: Uso de un proceso seguro de administración de


claves

Características

Administración de claves en Azure Key Vault

Descripción: el servicio admite la integración de Azure Key Vault para las claves, secretos
o certificados de cliente. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se


basan en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.

Guía de configuración: use Azure Key Vault para crear y controlar el ciclo de vida de las
claves de cifrado, incluida la generación de claves, la distribución y el almacenamiento.
Gire y revoque las claves en Azure Key Vault y el servicio en función de una
programación definida o cuando haya una retirada o peligro de clave. Cuando sea
necesario usar la clave administrada por el cliente (CMK) en el nivel de carga de trabajo,
servicio o aplicación, asegúrese de seguir los procedimientos recomendados para la
administración de claves: use una jerarquía de claves para generar una clave de cifrado
de datos independiente (DEK) con la clave de cifrado de claves (KEK) en el almacén de
claves. Asegúrese de que las claves están registradas con Azure Key Vault y a las que se
hace referencia a través de identificadores de clave desde el servicio o la aplicación. Si
necesita traer su propia clave (BYOK) al servicio (por ejemplo, importar claves protegidas
con HSM desde los HSM locales a Azure Key Vault), siga las instrucciones recomendadas
para realizar la generación inicial de claves y la transferencia de claves.

DP-7: Uso de un proceso seguro de administración de


certificados

Características

Administración de certificados en Azure Key Vault

Descripción: el servicio admite la integración de Azure Key Vault para los certificados de
cliente. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se


basan en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.

Guía de configuración: use Azure Key Vault para crear y controlar el ciclo de vida del
certificado, incluida la creación, la importación, la rotación, la revocación, el
almacenamiento y la purga del certificado. Asegúrese de que la generación de
certificados sigue los estándares definidos sin usar ninguna propiedad no segura, como:
tamaño de clave insuficiente, período de validez demasiado largo, criptografía no
segura. Configure la rotación automática del certificado en Azure Key Vault y el servicio
de Azure (si se admite) en función de una programación definida o cuando haya una
expiración del certificado. Si no se admite la rotación automática en la aplicación,
asegúrese de que siguen rotando mediante métodos manuales en Azure Key Vault y la
aplicación.

Administración de recursos
Para obtener más información, consulte La prueba comparativa de seguridad en la nube
de Microsoft: Administración de recursos.

AM-2: Uso exclusivo de los servicios aprobados

Características

Compatibilidad con Azure Policy

Descripción: las configuraciones de servicio se pueden supervisar y aplicar a través de


Azure Policy. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se


basan en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.

Guía de configuración: use Microsoft Defender for Cloud para configurar Azure Policy
para auditar y aplicar configuraciones de los recursos de Azure. Use Azure Monitor para
crear alertas cuando se detecte una desviación de la configuración en los recursos. Use
Azure Policy [deny] y [deploy if not exists] efectos para aplicar la configuración segura
en los recursos de Azure.
AM-5: Uso exclusivo de aplicaciones aprobadas en una
máquina virtual

Características

Microsoft Defender for Cloud: controles de aplicación adaptables

Descripción: el servicio puede limitar qué aplicaciones de cliente se ejecutan en la


máquina virtual mediante controles de aplicación adaptables en Microsoft Defender for
Cloud. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de la aplicación administrada no se basan


en ningún otro tipo de recurso, sino que implementan recursos subyacentes que
componen la aplicación administrada. Un publicador puede ofrecer personalización y
configuración para las aplicaciones, pero no es necesario.

Guía de configuración: use Microsoft Defender para los controles de aplicaciones


adaptables en la nube para detectar aplicaciones que se ejecutan en máquinas virtuales
(VM) y generar una lista de aplicaciones permitidas para exigir qué aplicaciones
aprobadas se pueden ejecutar en el entorno de máquina virtual.

Registro y detección de amenazas


Para más información, consulte la prueba comparativa de seguridad en la nube de
Microsoft: Registro y detección de amenazas.

LT-1: Habilitación de las funcionalidades de detección de


amenazas

Características

Microsoft Defender para la oferta de servicio o producto


Descripción: el servicio tiene una solución de Microsoft Defender específica de la oferta
para supervisar y alertar sobre problemas de seguridad. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

False No es aplicable No es aplicable

Notas de características: aunque no hay una oferta de Defender específica de


aplicaciones administradas, Microsoft Defender soluciones se pueden usar para
proteger los recursos subyacentes incluidos en el grupo de recursos administrados.

Guía de configuración: esta característica no se admite para proteger este servicio.

LT-4: Habilitación del registro para la investigación de


seguridad

Características

Registros de recursos de Azure

Descripción: el servicio genera registros de recursos que pueden proporcionar métricas


y registros mejorados específicos del servicio. El cliente puede configurar estos registros
de recursos y enviarlos a su propio receptor de datos, como una cuenta de
almacenamiento o un área de trabajo de Log Analytics. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Guía de configuración: habilite los registros de recursos para el servicio. Por ejemplo,
Key Vault admite registros de recursos adicionales para las acciones que obtienen un
secreto de un almacén de claves o Azure SQL tiene registros de recursos que realizan un
seguimiento de las solicitudes a una base de datos. El contenido de estos registros de
recurso varía según el servicio de Azure y el tipo de recurso.

Posición y administración de vulnerabilidades


Para obtener más información, consulte la prueba comparativa de seguridad en la nube
de Microsoft: Administración de posturas y vulnerabilidades.

PV-3: Definición y establecimiento de configuraciones


seguras para los recursos de proceso

Características

State Configuration de Azure Automation

Descripción: Azure Automation State Configuration se puede usar para mantener la


configuración de seguridad del sistema operativo. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se


basan en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.

Guía de configuración: use Azure Automation State Configuration para mantener la


configuración de seguridad del sistema operativo.

Agente de configuración de invitado de Azure Policy

Descripción: Azure Policy agente de configuración de invitado se puede instalar o


implementar como una extensión para calcular recursos. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se


basan en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.
Guía de configuración: use Microsoft Defender for Cloud y Azure Policy agente de
configuración de invitado para evaluar y corregir periódicamente las desviaciones de
configuración en los recursos de proceso de Azure, incluidas las máquinas virtuales, los
contenedores y otros.

Imágenes de máquina virtual personalizadas

Descripción: el servicio admite el uso de imágenes de máquina virtual proporcionadas


por el usuario o imágenes precompiladas de Marketplace con determinadas
configuraciones de línea base aplicadas previamente. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Guía de configuración: use una imagen protegida preconfigurada de un proveedor de


confianza, como Microsoft, o cree una línea base de configuración segura deseada en la
plantilla de imagen de máquina virtual.

Imágenes de contenedores personalizados

Descripción: el servicio admite el uso de imágenes de contenedor proporcionadas por


el usuario o imágenes pregeneradas de Marketplace con determinadas configuraciones
de línea base preaplicadas. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: las aplicaciones administradas pueden implementar máquinas


virtuales y otros recursos que admiten la referencia a una oferta o SKU desde
Marketplace al implementar a través de una plantilla de ARM.

Guía de configuración: use una imagen protegida preconfigurada de un proveedor de


confianza como Microsoft o cree la línea base de configuración segura deseada en la
plantilla de imagen de contenedor.

PV-5: Realización de evaluaciones de vulnerabilidades


Características

Evaluación de vulnerabilidades mediante Microsoft Defender

Descripción: el servicio se puede examinar para detectar vulnerabilidades mediante


Microsoft Defender para la nube u otra funcionalidad de evaluación de vulnerabilidades
insertada de servicios Microsoft Defender (incluidos Microsoft Defender para servidor,
registro de contenedor, App Service, SQL y DNS). Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se basan


en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.

Guía de configuración: siga las recomendaciones de Microsoft Defender for Cloud para
realizar evaluaciones de vulnerabilidades en las máquinas virtuales de Azure, las
imágenes de contenedor y los servidores SQL Server.

PV-6: Reparación rápida y automática de vulnerabilidades

Características

Update Management en Azure Automation

Descripción: el servicio puede usar Azure Automation Update Management para


implementar revisiones y actualizaciones automáticamente. Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se basan


en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.

Guía de configuración: use Azure Automation Update Management o una solución de


terceros para asegurarse de que las actualizaciones de seguridad más recientes están
instaladas en las máquinas virtuales Windows y Linux. En el caso de las máquinas
virtuales con Windows, asegúrese de que Windows Update se ha habilitado y
configurado para actualizarse automáticamente.

Seguridad de punto de conexión


Para obtener más información, consulte la prueba comparativa de seguridad en la nube
de Microsoft: Seguridad de los puntos de conexión.

ES-1: uso de la detección y respuesta de puntos de


conexión (EDR)

Características

Solución EDR

Descripción: la característica detección y respuesta de puntos de conexión (EDR), como


Azure Defender para servidores, se puede implementar en el punto de conexión. Más
información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se basan


en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.

Guía de configuración: Azure Defender para servidores (con Microsoft Defender para
punto de conexión integrado) proporciona funcionalidad EDR para evitar, detectar,
investigar y responder a amenazas avanzadas. Use Microsoft Defender for Cloud para
implementar Azure Defender para servidores para el punto de conexión e integrar las
alertas en la solución SIEM, como Azure Sentinel.
ES-2: Uso de software antimalware moderno

Características

Solución antimalware

Descripción: característica antimalware, como Microsoft Defender Antivirus, Microsoft


Defender para punto de conexión se puede implementar en el punto de conexión. Más
información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se basan


en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.

Guía de configuración: para Windows Server 2016 y versiones posteriores, Microsoft


Defender para antivirus se instala de forma predeterminada. Para Windows Server 2012
R2 y versiones posteriores, los clientes pueden instalar SCEP (System Center Endpoint
Protection). Para Linux, los clientes pueden tener la opción de instalar Microsoft
Defender para Linux. Como alternativa, los clientes también tienen la opción de instalar
productos antimalware de terceros.

ES-3: Asegúrese de que se han actualizado el software y


las firmas antimalware

Características

Supervisión del estado de la solución antimalware

Descripción: la solución antimalware proporciona supervisión del estado de


mantenimiento para las actualizaciones automáticas de firma, motor y plataforma. Más
información.

ノ Expandir tabla
Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: un publicador puede ofrecer personalización y configuración


para las aplicaciones, pero no es necesario.

Guía de configuración: configure la solución antimalware para asegurarse de que la


plataforma, el motor y las firmas se actualizan de forma rápida y coherente y se puede
supervisar su estado.

Copia de seguridad y recuperación


Para obtener más información, consulte la prueba comparativa de seguridad en la nube
de Microsoft: Copia de seguridad y recuperación.

BR-1: Garantía de copias de seguridad automáticas


periódicas

Características

Azure Backup

Descripción: el servicio puede realizar una copia de seguridad del servicio Azure Backup.
Más información.

ノ Expandir tabla

Compatible Habilitado de forma predeterminada Responsabilidad de configuración

True False Customer

Notas de características: los propios recursos de aplicaciones administradas no se


basan en ningún otro tipo de recurso, sino que implementan recursos subyacentes y sus
características que componen la aplicación administrada. Un publicador puede ofrecer
personalización y configuración para las aplicaciones, pero no es necesario.

Guía de configuración: habilite Azure Backup y configure el origen de copia de


seguridad (como Azure Virtual Machines, SQL Server, bases de datos de HANA o
recursos compartidos de archivos) con una frecuencia deseada y con un período de
retención deseado. Para Azure Virtual Machines, puede usar Azure Policy para habilitar
copias de seguridad automáticas.

Pasos siguientes
Consulte la introducción a la prueba comparativa de seguridad en la nube de
Microsoft.
Obtenga más información sobre las líneas de base de seguridad de Azure.
[Link] para la
experiencia de creación de aplicaciones
administradas de Azure
Artículo • 01/06/2023

En este documento se presentan los conceptos principales del archivo


[Link]. Azure Portal usa este archivo para generar la interfaz de usuario
al crear una aplicación administrada.

La plantilla es la siguiente:

JSON

{
"$schema": "[Link]
preview/[Link]#",
"handler": "[Link]",
"version": "0.1.2-preview",
"parameters": {
"config": {
"isWizard": false,
"basics": { }
},
"basics": [ ],
"steps": [ ],
"outputs": { },
"resourceTypes": [ ]
}
}

CreateUiDefinition siempre contiene tres propiedades:

handler
version
parámetros

Handler siempre debería ser [Link] , y la última versión admitida


es 0.1.2-preview .

El esquema de la propiedad parameters depende de la combinación de los valores de


handler y version especificados. En las aplicaciones administradas, las propiedades
admitidas son config , basics , steps y outputs . Utilice config solo cuando necesite
invalidar el comportamiento predeterminado del paso basics . Las propiedades basics y
steps contienen los elementos, como cuadros de texto y listas desplegables, que se
mostrarán en Azure Portal. La propiedad outputs se utiliza para asignar los valores de
salida de los elementos especificados a los parámetros de la plantilla de Azure Resource
Manager.

Se recomienda incluir $schema , aunque es opcional. Si se especifica, el valor de version


debe coincidir con la versión en el identificador URI de $schema .

Puede usar un editor de JSON para crear el valor createUiDefinition y luego probarlo en
el espacio aislado createUiDefinition para obtener una vista previa. Para obtener más
información sobre el espacio aislado, consulte Probar la interfaz del portal de Azure
Managed Applications.

Config
La propiedad config es opcional. Utilícela para invalidar el comportamiento
predeterminado del paso básico o para establecer la interfaz como un asistente paso a
paso. Si se usa config , es la primera propiedad de la sección parameters del archivo
[Link]. En el ejemplo siguiente se muestran las propiedades
disponibles.

JSON

"config": {
"isWizard": false,
"basics": {
"description": "Customized description with **markdown**, see [more]
([Link]
"subscription": {
"constraints": {
"validations": [
{
"isValid": "
[not(contains(subscription().displayName, 'Test'))]",
"message": "Can't use test subscription."
},
{
"permission":
"[Link]/virtualmachines/write",
"message": "Must have write permission for the
virtual machine."
},
{
"permission":
"[Link]/virtualMachines/extensions/write",
"message": "Must have write permission for the
extension."
}
]
},
"resourceProviders": [
"[Link]"
]
},
"resourceGroup": {
"constraints": {
"validations": [
{
"isValid": "[not(contains(resourceGroup().name,
'test'))]",
"message": "Resource group name can't contain
'test'."
}
]
},
"allowExisting": true
},
"location": {
"label": "Custom label for location",
"toolTip": "provide a useful tooltip",
"resourceTypes": [
"[Link]/virtualMachines"
],
"allowedValues": [
"eastus",
"westus2"
],
"visible": true
}
}
},

Para la propiedad isValid , escriba una expresión que se resuelva en true o en false.
Para la propiedad permission , especifique una de las acciones del proveedor de
recursos.

Asistente
La propiedad isWizard le permite solicitar la validación correcta de cada paso antes de
continuar con el paso siguiente. Cuando no se especifica la propiedad isWizard , el valor
predeterminado es falso y la validación paso a paso no es necesaria.

Cuando isWizard está habilitado, es decir, se ha establecido en true, la pestaña


Aspectos básicos está disponible y las demás pestañas están deshabilitadas. Cuando se
selecciona el botón Siguiente, el icono de la pestaña indica si una pestaña se ha
validado correctamente o no. Una vez que se han rellenado y validado los campos
obligatorios de una pestaña, el botón Siguiente permite desplazarse a la pestaña
siguiente. Cuando todas las pestañas superan la validación, puede ir a la página Revisar
y crear y seleccionar el botón Crear para comenzar la implementación.

Aspectos básicos de invalidación


La configuración básica permite personalizar el paso básico.

En description , proporcione una cadena habilitada para Markdown que describa el


recurso. Se admiten vínculos y formato de varias líneas.

Los elementos subscription y resourceGroup permiten especificar más validaciones. La


sintaxis para especificar validaciones es idéntica a la de la validación personalizada de
cuadro de texto. También puede especificar validaciones de permission en la
suscripción o el grupo de recursos.

El control de suscripción acepta una lista de espacios de nombres del proveedor de


recursos. Por ejemplo, puede especificar [Link]. En este caso, se muestra
un mensaje de error cuando el usuario selecciona una suscripción que no admite el
proveedor de recursos. El error se produce cuando el proveedor de recursos no está
registrado en esa suscripción y el usuario no tiene permiso para registrarlo.

El control de grupo de recursos tiene una opción allowExisting . Cuando es true , los
usuarios pueden seleccionar grupos de recursos que ya tengan recursos. Esta marca se
aplica principalmente a las plantillas de soluciones, donde el comportamiento
predeterminado obliga a los usuarios a seleccionar un grupo de recursos nuevo o vacío.
En la mayoría del resto de los escenarios, no es necesario especificar esta propiedad.

En location , especifique las propiedades del control de ubicación que quiere invalidar.
Cualquier propiedad que no se haya invalidado se establece en sus valores
predeterminados. resourceTypes acepta una matriz de cadenas que contienen los
nombres de tipo de recurso completos. Las opciones de ubicación solo están
restringidas a las regiones que admiten los tipos de recursos. allowedValues acepta una
matriz de cadenas de región. Solo esas regiones aparecen en la lista desplegable. Puede
establecer tanto allowedValues como resourceTypes . El resultado es la intersección de
ambas listas. Por último, la propiedad visible se puede utilizar para deshabilitar la lista
desplegable de ubicación de forma condicional o por completo.

Aspectos básicos
El paso Aspectos básicos es el primer paso que se genera cuando Azure Portal analiza el
archivo. De forma predeterminada, este paso permite a los usuarios elegir la suscripción,
el grupo de recursos y la ubicación de la implementación.

Puede agregar más elementos en esta sección. Cuando sea posible, agregue elementos
que consulten los parámetros de toda la implementación, como el nombre de un clúster
o las credenciales del administrador.

En el ejemplo siguiente se muestra un cuadro de texto que se ha agregado a los


elementos predeterminados.

JSON

"basics": [
{
"name": "textBox1",
"type": "[Link]",
"label": "Textbox on basics",
"defaultValue": "my text value",
"toolTip": "",
"visible": true
}
]

Pasos
La propiedad steps contiene cero o más pasos que se muestran después de los aspectos
básicos. Cada paso contiene uno o varios elementos. Considere la posibilidad de
agregar pasos por rol o nivel de aplicación que se está implementando. Por ejemplo,
agregue un paso para las entradas del nodo principal y otro para los nodos de trabajo
de un clúster.

JSON

"steps": [
{
"name": "demoConfig",
"label": "Configuration settings",
"elements": [
ui-elements-needed-to-create-the-instance
]
}
]

Salidas
Azure Portal usa la propiedad outputs para asignar elementos de basics y steps a los
parámetros de la plantilla de implementación de Azure Resource Manager. Las claves de
este diccionario son los nombres de los parámetros de plantilla, y los valores son
propiedades de los objetos de salida de los elementos a los que se hace referencia.

Para definir el nombre del recurso de la aplicación administrada, debe incluir un valor
llamado applicationResourceName en la propiedad outputs. Si no establece este valor, la
aplicación asigna un GUID al nombre. Puede incluir un cuadro de texto en la interfaz de
usuario que requiera un nombre de usuario.

JSON

"outputs": {
"vmName": "[steps('appSettings').vmName]",
"trialOrProduction": "[steps('appSettings').trialOrProd]",
"userName": "[steps('vmCredentials').adminUsername]",
"pwd": "[steps('vmCredentials').[Link]]",
"applicationResourceName": "[steps('appSettings').vmName]"
}

Tipos de recursos
Para limitar las ubicaciones disponibles a solo las que admiten los tipos de recursos que
se van a implementar, proporcione una matriz de los tipos de recursos. Si se
proporciona más de un tipo de recurso, solo se devuelven las ubicaciones que admiten
todos los tipos de recursos. Esta propiedad es opcional.

JSON

{
"$schema": "[Link]
preview/[Link]#",
"handler": "[Link]",
"version": "0.1.2-preview",
"parameters": {
"resourceTypes": ["[Link]/disks"],
"basics": [
...

Functions
CreateUiDefinition proporciona funciones para trabajar con entradas y salidas de los
elementos, y características como los condicionales. La sintaxis y funcionalidad de estas
funciones son similares a las de las funciones de las plantillas de Azure Resource
Manager.

Pasos siguientes
El propio archivo [Link] tiene un esquema simple. Su profundidad real
procede de todos los elementos y funciones que admite. Dichos elementos se describen
con más detalle en:

Elementos
Funciones

Un esquema JSON actual para createUiDefinition está disponible aquí:


[Link]

preview/[Link] .

Para un archivo de interfaz de usuario de ejemplo, vea [Link] .


Prueba de la interfaz de su portal para
Azure Managed Applications
Artículo • 01/06/2023

Después de crear el archivo [Link] para la aplicación administrada,


debe probar la experiencia del usuario. Para simplificar las pruebas, use un entorno de
espacio aislado que cargue el archivo en el portal. No es necesario implementar la
aplicación administrada. El espacio aislado presenta la interfaz de usuario en la
experiencia del portal actual y en pantalla completa. El espacio aislado es la manera
recomendada de obtener una vista previa de la interfaz.

Requisitos previos
Un archivo [Link]. Si no tiene este archivo, copie el archivo de
ejemplo .

Suscripción a Azure. Si no tiene una suscripción a Azure, cree una cuenta


gratuita antes de empezar.

Uso de un espacio aislado


1. Abra el espacio aislado de Crear definición de UI .

2. Reemplace la definición vacía con el contenido del archivo [Link].


Seleccione Vista previa.
3. Se muestra el formulario creado. Puede recorrer la experiencia del usuario y
rellenar los valores.
Solución de problemas
Si no se muestra el formulario después de seleccionar Versión preliminar, es posible
que haya un error de sintaxis. Busque el indicador rojo en la barra de desplazamiento a
la derecha y navegue hasta él.

Si no se muestra el formulario y, en su lugar, ve un icono de una nube con una gota,


esto significa que el formulario tiene un error, como una propiedad que falta. Abra Web
Developer Tools en el explorador. La consola muestra mensajes importantes sobre la
interfaz.

Prueba de los archivos de la solución


Ahora que ha comprobado que la interfaz del portal funciona como se espera, es el
momento de validar que el archivo createUiDefinition está correctamente integrado con
el archivo [Link]. Puede ejecutar una prueba del script de validación para
probar el contenido de los archivos de la solución, incluido el archivo createUiDefinition.
El script valida la sintaxis JSON, comprueba si hay expresiones regex en los campos de
texto y se asegura de que los valores de salida de la interfaz del portal coincidan con los
parámetros de la plantilla. Para más información sobre cómo ejecutar este script,
consulte Ejecución de comprobaciones de validación estática para plantillas .
Pasos siguientes
Después de validar la interfaz de su portal, infórmese sobre cómo hacer que la
aplicación administrada de Azure esté disponible en Marketplace.
Creación de una oferta de aplicación de
Azure
Artículo • 30/11/2023

Como editor del marketplace comercial, puede crear una oferta de Aplicación de Azure
para que los posibles clientes puedan comprar su solución. En este artículo se explica el
proceso de crear una oferta de Aplicación de Azure en el marketplace comercial de
Microsoft.

Antes de empezar
Antes de publicar una oferta de aplicación de Azure, cree una cuenta de Marketplace
comercial en el Centro de partners y asegúrese de que su cuenta esté inscrita en el
programa de Marketplace comercial. Consulte Crear una cuenta de marketplace
comercial en el Centro de partners y Comprobar la información de su cuenta al
inscribirse en un nuevo programa del Centro de partners.

Si aún no lo ha hecho, lea Planeamiento de una oferta de aplicación de Azure para el


marketplace comercial. Proporcionará los recursos y le ayudará a recopilar la
información y los recursos que necesitará al crear la oferta.

Crear una nueva oferta


1. Inicie sesión en el Centro de partners .

2. En la página principal, seleccione el icono Ofertas de Marketplace.


3. En la página de ofertas de Marketplace, seleccione + Nueva oferta>Aplicación de
Azure.

4. En el cuadro de diálogo New Azure Application (Nueva aplicación de Azure),


especifique un Id. de oferta. Se trata de un identificador único para cada oferta de
su cuenta. Este identificador es visible en la dirección URL de la oferta del
marketplace comercial y de las plantillas de Azure Resource Manager, si procede.
Por ejemplo, si escribe test-offer-1 en este cuadro, la dirección web de la oferta
será [Link] .

Cada oferta de su cuenta debe tener un identificador único.


Use solo letras minúsculas y números. Puede incluir guiones y caracteres de
subrayado, pero no espacios, y está limitado a 50 caracteres.
El identificador de oferta no se puede cambiar después de seleccionar Crear.

5. Escriba un Alias de la oferta. Este es el nombre que se usa para la oferta en el


Centro de partners.

Este nombre solo es visible en el Centro de partners y es diferente del


nombre de la oferta y de otros valores que se muestran a los clientes.
El alias de la oferta todavía se puede cambiar después de seleccionar Crear.

6. Asocie la nueva oferta a un publicador. Un publicador representa una cuenta para


su organización. Es posible que tenga que crear la oferta en un publicador
determinado. Si no lo hace, puede simplemente aceptar la cuenta de publicador en
la que ha iniciado sesión.

7 Nota
El publicador seleccionado debe inscribirse en el programa Marketplace
comercial y no se puede modificar después de crear la oferta.

7. Para generar la oferta y continuar, seleccione Crear.

Configuración de los detalles de configuración


de la oferta de Aplicación de Azure
En la pestaña Configuración de la oferta, en Detalles del programa de instalación,
elegirá si desea configurar una versión de prueba. También puede elegir si se debe
conectar el sistema de administración de las relaciones con el cliente (CRM) con la
oferta de marketplace comercial.

Habilitación de una versión de prueba (opcional)


Una versión de prueba es una excelente manera de exhibir la oferta a posibles clientes al
concederles acceso a un entorno preconfigurado durante un número fijo de horas. La
oferta de una versión de prueba tiene como resultado una mayor tasa de conversión y
genera clientes potenciales muy cualificados. Para más información sobre las versiones
de prueba, consulte Versión de prueba.

Habilitación de una versión de prueba

En Versión de prueba, active la casilla Habilitar una versión de prueba.

Administración de clientes potenciales


Cuando un cliente exprese interés o implemente el producto, recibirá un cliente
potencial en el área de trabajo Referencias del Centro de partners.

También puede conectar el producto al sistema de administración de relaciones con los


clientes (CRM) para controlar los clientes potenciales allí.

7 Nota

La conexión al sistema de CRM es opcional.


Configuración de los detalles de la conexión en el Centro de
partners

1. En Clientes potenciales, seleccione el vínculo Conectar.

2. En el cuadro de diálogo Detalles de conexión, seleccione un destino de cliente


potencial de la lista.

3. Rellene los campos que aparecen. Para más información, consulte los siguientes
artículos:

Configuración de la oferta para enviar clientes potenciales a la tabla de Azure


Configuración de la oferta para enviar clientes potenciales a Dynamics 365
Customer Engagement
Configuración de la oferta para enviar clientes potenciales al punto de
conexión HTTPS
Configuración de la oferta para enviar clientes potenciales a Marketo
Configuración de la oferta para enviar clientes potenciales a Salesforce

4. Para validar la configuración proporcionada, seleccione el vínculo Validar, si


corresponde.

5. Para cerrar el cuadro de diálogo, seleccione Conectar.

6. Seleccione Guardar borrador antes de continuar con la pestaña siguiente:


Propiedades.

7 Nota

Asegúrese de que la conexión con el destino de clientes potenciales permanece


actualizada para que el sistema CRM no pierda ningún cliente potencial.

Asegúrese de actualizar estas conexiones siempre que haya algún cambio. Todavía
puede acceder a los clientes potenciales en el área de trabajo Referencias del Centro
de partners. Si es necesario, puede exportar clientes potenciales desde el Centro de
partners para importarlos a su CRM.

Pasos siguientes
Configuración de las propiedades de la aplicación de Azure

Tutorial en vídeo
Configuración del Centro de partners para Azure Managed Applications:
demostración

Comentarios
¿Le ha resultado útil esta página?  Sí  No

Proporcionar comentarios sobre el producto | Preguntar a la comunidad


Habilitación y solicitud de acceso Just-
In-Time para Azure Managed
Applications
Artículo • 01/06/2023

Los consumidores de la aplicación administrada pueden ser reacios a concederle acceso


permanente al grupo de recursos administrados. Como editor de una aplicación
administrada, puede establecer que los consumidores sepan exactamente cuando
necesita acceder a los recursos administrados. Para ofrecer a los consumidores mayor
control sobre la concesión de acceso a los recursos administrados, Azure Managed
Applications proporciona una característica denominada acceso Just-In-Time (JIT). El
acceso JIT permite solicitar acceso con privilegios elevados a recursos de la aplicación
administrada con fines de solución de problemas o mantenimiento. Siempre tendrá
acceso de solo lectura a los recursos, pero puede tener mayor acceso durante un
período de tiempo específico.

El flujo de trabajo de concesión de acceso es el siguiente:

1. Agrega una aplicación administrada en Marketplace y especifica que el acceso JIT


esté disponible.

2. Durante la implementación, el consumidor permite el acceso JIT a esa instancia de


la aplicación administrada.

3. Después de la implementación, el consumidor puede cambiar la configuración del


acceso JIT.

4. Envía una solicitud de acceso cuando se necesita para solucionar problemas o


actualizar los recursos administrados.

5. El consumidor aprueba la solicitud.

Este artículo se centra en las acciones que los editores llevan a cabo para habilitar el
acceso JIT y enviar solicitudes. Para obtener información acerca de la aprobación de
solicitudes de acceso JIT, consulte el tema sobre la aprobación del acceso Just-In-Time
en Azure Managed Applications.

Agregar el paso de acceso JIT a la interfaz de


usuario
En el archivo [Link], incluya un paso que permita a los consumidores
habilitar el acceso JIT. Para admitir la funcionalidad JIT para la oferta, agregue el
siguiente contenido al archivo [Link].

En "steps":

JSON

{
"name": "jitConfiguration",
"label": "JIT Configuration",
"subLabel": {
"preValidation": "Configure JIT settings for your application",
"postValidation": "Done"
},
"bladeTitle": "JIT Configuration",
"elements": [
{
"name": "jitConfigurationControl",
"type": "[Link]",
"label": "JIT Configuration"
}
]
}

En "outputs":

JSON

"jitAccessPolicy": "[steps('jitConfiguration').jitConfigurationControl]"

7 Nota

El acceso JIT está en versión preliminar. El esquema de configuración de JIT podría


cambiar en futuras iteraciones.

Habilitar el acceso JIT


Al crear la oferta en el Centro de partners, asegúrese de habilitar el acceso JIT.

1. Inicie sesión en el portal de Marketplace comercial del Centro de partners .

2. Para obtener instrucciones sobre cómo crear una nueva aplicación administrada,
siga los pasos descritos en Creación de una oferta de aplicación de Azure.
3. En la página Configuración técnica, seleccione la casilla Habilitar acceso Just-In-
Time (JIT) .

Ha agregado un paso de configuración JIT a la interfaz de usuario y habilitado el acceso


JIT en la oferta de Marketplace comercial. Cuando los consumidores implementen la
aplicación administrada, pueden activar el acceso JIT para su instancia.

Solicitar acceso
Cuando necesite acceder a los recursos administrados del consumidor, envíe una
solicitud para un rol, una hora y una duración específicos. A continuación, el consumidor
debe aprobar la solicitud.

Para enviar una solicitud de acceso JIT:

1. Seleccione Acceso de JIT para la aplicación administrada a la que necesita acceder.

2. Seleccione Roles elegibles y, a continuación, Activar en la columna ACCIÓN del rol


deseado.
3. En el formulario Activar rol, seleccione una hora de inicio y la duración que el rol
deberá estar activo. Seleccione Activar para enviar la solicitud.
4. Consulte las notificaciones para ver que la nueva solicitud de JIT se ha enviado
correctamente al consumidor.

Ahora, debe esperar a que el consumidor apruebe su solicitud.

5. Para ver el estado de todas las solicitudes JIT de una aplicación administrada,
seleccione Acceso de JIT e Historial de solicitudes.

Problemas conocidos
El identificador de entidad de seguridad de la cuenta que solicita acceso JIT debe
incluirse explícitamente en la definición de la aplicación administrada. La cuenta no
puede incluirse solo a través de un grupo especificado en el paquete. Esta limitación se
corregirá en una versión futura.

Pasos siguientes
Para obtener información acerca de la aprobación de solicitudes de acceso JIT, consulte
el tema sobre la aprobación del acceso Just-In-Time en Azure Managed Applications.
Uso de una red virtual existente con
Azure Managed Applications
Artículo • 01/06/2023

En este artículo se muestra cómo definir una aplicación administrada de Azure que se
integra con una red virtual existente en la suscripción del cliente. La aplicación
administrada permite al cliente decidir si quiere crear una nueva red virtual o usar una
existente. La red virtual existente puede estar fuera del grupo de recursos administrado.

Plantilla principal
En primer lugar, vamos a echar un vistazo al archivo [Link]. Toda la plantilla
para implementar una máquina virtual y sus recursos asociados se muestra a
continuación. Luego, vamos a examinar más detalladamente los elementos de la
plantilla que están relacionadas con el uso de una red virtual existente.

JSON

{
"$schema": "[Link]
01/[Link]#",
"contentVersion": "[Link]",
"parameters": {
"location": {
"type": "string",
"metadata": {
"description": "Deployment location"
}
},
"windowsOSVersion": {
"type": "string",
"defaultValue": "2016-Datacenter",
"allowedValues": [
"2008-R2-SP1",
"2012-Datacenter",
"2012-R2-Datacenter",
"2016-Nano-Server",
"2016-Datacenter-with-Containers",
"2016-Datacenter",
"2019-Datacenter"
],
"metadata": {
"description": "The Windows version for the VM. This will pick a
fully patched image of this given Windows version."
}
},
"vmName": {
"type": "string",
"metadata": {
"title": "VM Name",
"description": "This is the name of the your VM"
}
},
"adminUsername": {
"type": "string",
"defaultValue": "testadmin",
"metadata": {
"description": "Username for the Virtual Machine."
}
},
"adminPassword": {
"type": "securestring",
"metadata": {
"description": "Password for the Virtual Machine."
}
},
"virtualNetworkName": {
"type": "string",
"metadata": {
"description": "New or Existing VNet Name"
}
},
"virtualNetworkNewOrExisting": {
"type": "string",
"metadata": {
"description": "Boolean indicating whether the VNet is new or
existing"
}
},
"virtualNetworkAddressPrefix": {
"type": "string",
"metadata": {
"description": "VNet address prefix"
}
},
"virtualNetworkResourceGroup": {
"type": "string",
"metadata": {
"description": "Resource group of the VNet"
}
},
"virtualMachineSize": {
"type": "string",
"metadata": {
"description": "The size of the VM"
}
},
"subnetName": {
"type": "string",
"metadata": {
"description": "New or Existing subnet Name"
}
},
"subnetAddressPrefix": {
"type": "string",
"metadata": {
"description": "Subnet address prefix"
}
},
"baseUrl": {
"type": "string",
"defaultValue": "",
"metadata": {
"artifactsBaseUrl": "",
"description": "URL to acquire other templates"
}
}
},
"variables": {
"storageAccountName": "[concat(uniquestring(resourceGroup().id),
'sawinvm')]",
"publicIPAddressName": "
[concat(uniqueString(resourceGroup().id),'IP')]",
"vmName": "[parameters('vmName')]",
"nicName": "[concat(parameters('vmName'),'Nic')]",
"vnetId": {
"new": "
[resourceId('[Link]/virtualNetworks',parameters('virtualNetworkNa
me'))]",
"existing": "
[resourceId(parameters('virtualNetworkResourceGroup'),'[Link]/vir
tualNetworks',parameters('virtualNetworkName'))]"
},
"subnetId": "[concat(variables('vnetId')
[parameters('virtualNetworkNewOrExisting')],'/subnets/',parameters('subnetNa
me'))]",
"publicIPAddressType": "Dynamic"
},
"resources": [
{
"condition": "
[equals(parameters('virtualNetworkNewOrExisting'),'new')]",
"type": "[Link]/virtualNetworks",
"apiVersion": "2021-02-01",
"name": "[parameters('virtualNetworkName')]",
"location": "[parameters('location')]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('virtualNetworkAddressPrefix')]"
]
},
"subnets": [
{
"name": "[parameters('subnetName')]",
"properties": {
"addressPrefix": "[parameters('subnetAddressPrefix')]"
}
}
]
}
},
{
"type": "[Link]/publicIPAddresses",
"name": "[variables('publicIPAddressName')]",
"apiVersion": "2021-02-01",
"location": "[parameters('location')]",
"properties": {
"publicIPAllocationMethod": "[variables('publicIPAddressType')]"
}
},
{
"type": "[Link]/networkInterfaces",
"name": "[variables('nicName')]",
"apiVersion": "2021-02-01",
"location": "[parameters('location')]",
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "
[resourceId('[Link]/publicIPAddresses',variables('publicIPAddress
Name'))]"
},
"subnet": {
"id": "[variables('subnetId')]"
}
}
}
],
"enableIPForwarding": true
},
"dependsOn": [
"[concat('[Link]/publicIPAddresses/',
variables('publicIPAddressName'))]",
"[resourceId('[Link]/virtualNetworks/',
parameters('virtualNetworkName'))]"
]
},
{
"type": "[Link]/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {}
},
{
"type": "[Link]/virtualMachines",
"apiVersion": "2021-04-01",
"name": "[variables('vmName')]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('[Link]/storageAccounts/',
variables('storageAccountName'))]",
"[resourceId('[Link]/networkInterfaces/',
variables('nicName'))]"
],
"properties": {
"hardwareProfile": {
"vmSize": "[parameters('virtualMachineSize')]"
},
"osProfile": {
"computerName": "[variables('vmName')]",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]"
},
"storageProfile": {
"imageReference": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "[parameters('windowsOSVersion')]",
"version": "latest"
},
"osDisk": {
"createOption": "FromImage"
},
"dataDisks": [
{
"diskSizeGB": 1023,
"lun": 0,
"createOption": "Empty"
}
]
},
"networkProfile": {
"networkInterfaces": [
{
"id": "
[resourceId('[Link]/networkInterfaces',variables('nicName'))]"
}
]
},
"diagnosticsProfile": {
"bootDiagnostics": {
"enabled": true,
"storageUri": "
[reference(resourceId('[Link]/storageAccounts/',
variables('storageAccountName'))).[Link]]"
}
}
}
}
]
}

Observe que la red virtual se implementa de forma condicional. El cliente pasa un valor
de parámetro que indica si se va a crear una red virtual nueva o se va a usar una
existente. Si el cliente selecciona una red virtual nueva, se implementa el recurso. De lo
contrario, el recurso se omite durante la implementación.

JSON

{
"condition": "[equals(parameters('virtualNetworkNewOrExisting'),'new')]",
"type": "[Link]/virtualNetworks",
"apiVersion": "2021-02-01",
"name": "[parameters('virtualNetworkName')]",
"location": "[parameters('location')]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('virtualNetworkAddressPrefix')]"
]
},
"subnets": [
{
"name": "[parameters('subnetName')]",
"properties": {
"addressPrefix": "[parameters('subnetAddressPrefix')]"
}
}
]
}
},

La variable del identificador de red virtual tiene dos propiedades. Una propiedad
devuelve el identificador de recurso cuando se implementa una nueva red virtual. La
otra devuelve el identificador de recurso cuando se usa una red virtual existente. El
identificador de recurso de la red virtual existente incluye el nombre del grupo de
recursos que contiene la red virtual.

El identificador de subred se construye a partir del valor del identificador de red virtual.
Usa el valor que coincide con la selección de los clientes.

JSON

"variables": {
"storageAccountName": "[concat(uniquestring(resourceGroup().id),
'sawinvm')]",
"publicIPAddressName": "[concat(uniqueString(resourceGroup().id),'IP')]",
"vmName": "[parameters('vmName')]",
"nicName": "[concat(parameters('vmName'),'Nic')]",
"vnetId": {
"new": "
[resourceId('[Link]/virtualNetworks',parameters('virtualNetworkNa
me'))]",
"existing": "
[resourceId(parameters('virtualNetworkResourceGroup'),'[Link]/vir
tualNetworks',parameters('virtualNetworkName'))]"
},
"subnetId": "[concat(variables('vnetId')
[parameters('virtualNetworkNewOrExisting')],'/subnets/',parameters('subnetNa
me'))]",
"publicIPAddressType": "Dynamic"
},

La interfaz de red se establece en la variable del identificador de subred.

JSON

{
"type": "[Link]/networkInterfaces",
"name": "[variables('nicName')]",
"apiVersion": "2021-02-01",
"location": "[parameters('location')]",
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "
[resourceId('[Link]/publicIPAddresses',variables('publicIPAddress
Name'))]"
},
"subnet": {
"id": "[variables('subnetId')]"
}
}
}
],
"enableIPForwarding": true
},

Definición de la interfaz de usuario


Ahora vamos a echar un vistazo al archivo [Link]. El archivo completo
es:

JSON

{
"handler": "[Link]",
"version": "0.1.2-preview",
"parameters": {
"basics": [],
"steps": [
{
"name": "deploymentDetails",
"label": "Deployment Details",
"subLabel": {
"preValidation": "Required",
"postValidation": "Done"
},
"bladeTitle": "Deployment Details",
"elements": [
{
"name": "virtualMachine",
"type": "[Link]",
"elements": [
{
"name": "vmName",
"type": "[Link]",
"label": "VM Name",
"toolTip": "Name of your virtual machine",
"constraints": {
"required": true
}
},
{
"name": "vmPassword",
"type": "[Link]",
"label": {
"password": "Password",
"confirmPassword": "Confirm password"
},
"toolTip": {
"password": ""
},
"constraints": {
"required": true,
"customPasswordRegex": "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-
z\\d]{12,}$",
"customValidationMessage": "The password must be
alphanumeric, contain at least 12 characters, and have at least 1 letter and
1 number."
},
"options": {
"hideConfirmation": false
},
"osPlatform": "Windows",
"visible": true
}
],
"visible": true
},
{
"name": "vnet",
"type": "[Link]",
"label": {
"virtualNetwork": "Virtual Network",
"subnets": "Subnets"
},
"defaultValue": {
"name": "vmx-vnet",
"addressPrefixSize": "/16"
},
"constraints": {
"minAddressPrefixSize": "/24"
},
"subnets": {
"subnet1": {
"label": "Subnet",
"defaultValue": {
"name": "vmx-subnet",
"addressPrefixSize": "/24"
},
"constraints": {
"minAddressPrefixSize": "/29",
"minAddressCount": 8,
"requireContiguousAddresses": true
}
}
}
},
{
"name": "VMSize",
"type": "[Link]",
"label": "VM size",
"toolTip": "The size of virtual machine for VM.",
"recommendedSizes": [
"Standard_D2_v2",
"Standard_D2_v3"
],
"constraints": {
"allowedSizes": [
"Standard_D2_v2",
"Standard_D2_v3"
],
"excludedSizes": []
},
"osPlatform": "Windows",
"imageReference": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "2012-R2-Datacenter"
}
}
]
},
{
"name": "identityDetails",
"label": "Managed Identity Details",
"subLabel": {
"preValidation": "Required",
"postValidation": "Done"
},
"bladeTitle": "Managed Identity Details",
"elements": [
{
"name": "identity",
"type": "[Link]",
"label": "Managed Identity Configuration",
"toolTip": {
"systemAssignedIdentity": "Enable system assigned identity to
grant the resource access to other existing resources.",
"userAssignedIdentity": "Add user assigned identities to grant
the resource access to other existing resources."
},
"defaultValue": {
"systemAssignedIdentity": "Off"
},
"options": {
"hideSystemAssignedIdentity": false,
"hideUserAssignedIdentity": false
},
"visible": true
}
]
}
],
"outputs": {
"location": "[location()]",
"vmName": "[steps('deploymentDetails').[Link]]",
"adminPassword": "
[steps('deploymentDetails').[Link]]",
"virtualNetworkName": "[steps('deploymentDetails').[Link]]",
"virtualNetworkNewOrExisting": "
[steps('deploymentDetails').[Link]]",
"virtualNetworkAddressPrefix": "
[first(steps('deploymentDetails').[Link])]",
"virtualNetworkResourceGroup": "
[steps('deploymentDetails').[Link]]",
"virtualMachineSize": "[steps('deploymentDetails').VMSize]",
"subnetName": "
[steps('deploymentDetails').[Link]]",
"subnetAddressPrefix": "
[steps('deploymentDetails').[Link]]",
"managedIdentity": "[steps('identityDetails').identity]"
}
}
}

El archivo incluye un elemento de red virtual.

JSON

{
"name": "vnet",
"type": "[Link]",
"label": {
"virtualNetwork": "Virtual Network",
"subnets": "Subnets"
},
"defaultValue": {
"name": "vmx-vnet",
"addressPrefixSize": "/16"
},
"constraints": {
"minAddressPrefixSize": "/24"
},
"subnets": {
"subnet1": {
"label": "Subnet",
"defaultValue": {
"name": "vmx-subnet",
"addressPrefixSize": "/24"
},
"constraints": {
"minAddressPrefixSize": "/29",
"minAddressCount": 8,
"requireContiguousAddresses": true
}
}
}
},

Ese elemento permite al cliente seleccionar una red virtual nueva o existente.

En las salidas, se incluye un valor que indica si el cliente ha seleccionado una red virtual
nueva o existente. También hay un valor de identidad administrada.

7 Nota
El valor de salida de la identidad administrada debe tener el nombre
managedIdentity.

JSON

"outputs": {
"location": "[location()]",
"vmName": "[steps('deploymentDetails').[Link]]",
"adminPassword": "
[steps('deploymentDetails').[Link]]",
"virtualNetworkName": "[steps('deploymentDetails').[Link]]",
"virtualNetworkNewOrExisting": "
[steps('deploymentDetails').[Link]]",
"virtualNetworkAddressPrefix": "
[first(steps('deploymentDetails').[Link])]",
"virtualNetworkResourceGroup": "
[steps('deploymentDetails').[Link]]",
"virtualMachineSize": "[steps('deploymentDetails').VMSize]",
"subnetName": "[steps('deploymentDetails').[Link]]",
"subnetAddressPrefix": "
[steps('deploymentDetails').[Link]]",
"managedIdentity": "[steps('identityDetails').identity]"
}

Pasos siguientes
Para obtener más información sobre cómo crear el archivo de definición de la interfaz
de usuario, vea [Link] para la experiencia de creación de aplicaciones
administradas de Azure.
Trabajo con los recursos del grupo de
recursos administrado de una aplicación
administrada de Azure
Artículo • 01/06/2023

En este artículo se describe cómo actualizar los recursos que se implementan como
parte de una aplicación administrada. Como editor de una aplicación administrada, tiene
acceso a los recursos del grupo de recursos administrado. Para actualizar estos recursos,
debe encontrar el grupo de recursos administrados asociado a una aplicación
administrada y acceder a los recursos de ese grupo.

En este artículo se da por supuesto que ha implementado la aplicación administrada del


proyecto de ejemplo de Managed Web Application (IaaS) with Azure management
services (Aplicación web administrada (IaaS) con los servicios de administración de
Azure). Esa aplicación administrada incluye una máquina virtual Standard_D1_v2. Si no
ha implementado esa aplicación administrada, puede usar igualmente este artículo para
familiarizarse con los pasos para actualizar un grupo de recursos administrados.

La siguiente imagen muestra la aplicación administrada implementada.

En este artículo, va a usar la CLI de Azure para:


Identificar la aplicación administrada
Identificar el grupo de recursos administrado
Identificar los recursos de máquina virtual del grupo de recursos administrados
Cambiar el tamaño de la máquina virtual (ya sea a un tamaño más pequeño si no
la utiliza o uno mayor para admitir más carga)
Asignar una directiva al grupo de recursos administrados que especifica las
ubicaciones permitidas

Obtención de la aplicación administrada y del


grupo de recursos administrados
Para obtener las aplicaciones administradas en un grupo de recursos, use:

Azure CLI

az managedapp list --query "[?contains(resourceGroup,'DemoApp')]"

Para obtener el identificador del grupo de recursos administrado, use:

Azure CLI

az managedapp list --query "[?contains(resourceGroup,'DemoApp')].{


managedResourceGroup:managedResourceGroupId }"

Cambio de tamaño de las máquinas virtuales


en un grupo de recursos administrado
Para ver las máquinas virtuales en el grupo de recursos administrados, proporcione el
nombre de ese grupo.

Azure CLI

az vm list -g DemoApp6zkevchqk7sfq --query "[].


{VMName:name,OSType:[Link],VMSize:[Link]
ze}"

Para actualizar el tamaño de las máquinas virtuales, use:

Azure CLI
az vm resize --size Standard_D2_v2 --ids $(az vm list -g
DemoApp6zkevchqk7sfq --query "[].id" -o tsv)

Una vez completada la operación, compruebe que la aplicación se está ejecutando en


Standard D2 v2.

Aplicación de directivas a un grupo de recursos


administrado
Obtenga el grupo de recursos administrado y asigne una directiva en ese ámbito. La
directiva e56962a6-4747-49cd-b67b-bf8b01975c4c es una directiva incorporada para
especificar ubicaciones permitidas.

Azure CLI

managedGroup=$(az managedapp show --name <app-name> --resource-group DemoApp


--query managedResourceGroupId --output tsv)

az policy assignment create --name locationAssignment --policy e56962a6-


4747-49cd-b67b-bf8b01975c4c --scope $managedGroup --params '{
"listofallowedLocations": {
"value": [
"northeurope",
"westeurope"
]
}
}'

Para ver las ubicaciones permitidas, use:

Azure CLI

az policy assignment show --name locationAssignment --scope $managedGroup --


query [Link]

La asignación de directivas aparece en el portal.

Pasos siguientes
Para una introducción a las aplicaciones administradas, consulte Introducción a las
aplicaciones administradas.
Para ver ejemplos de proyectos, consulte Sample projects for Azure managed
applications (Ejemplos de proyectos para aplicaciones administradas de Azure).
Acceso al secreto de Key Vault al
implementar Azure Managed
Applications
Artículo • 21/10/2023

Cuando tiene que pasar un valor seguro (por ejemplo, una contraseña) como un
parámetro durante la implementación, puede recuperar el valor de Azure Key Vault. Para
acceder a Key Vault cuando se implementa Managed Applications, debe conceder
acceso a la entidad de servicio del proveedor de recursos de dispositivos. El servicio
Managed Applications utiliza esta identidad para ejecutar operaciones. Para recuperar
correctamente un valor de un almacén de claves durante la implementación, es
necesario que la entidad de servicio pueda obtener acceso al almacén de claves.

En este artículo se describe cómo configurar Key Vault para que funcione con Managed
Applications.

Habilitar la implementación de plantillas


1. Inicie sesión en Azure Portal .

2. Abra el almacén de claves. Escriba almacenes de claves en el cuadro de búsqueda o


seleccione Almacenes de claves.

3. Seleccione Configuración de acceso.


4. Seleccione Azure Resource Manager para la implementación de plantillas. Luego,
seleccione Aplicar.

Agregar servicio como colaborador


Asigne el rol de Colaborador al usuario del proveedor de recursos del dispositivo en el
ámbito del almacén de claves. El rol Colaborador es un rol de administrador con
privilegios para la asignación de roles. Para obtener los pasos detallados, consulte
Asignación de roles de Azure mediante Azure Portal.

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 [Link] .

Referencia a secreto de Key Vault


Para pasar un secreto desde Key Vault a una plantilla de la aplicación administrada, debe
usar una plantilla vinculada o anidada y hacer referencia a Key Vault en los parámetros
de la plantilla vinculada o anidada. Proporcione el identificador de recurso de Key Vault
y el nombre del secreto.

JSON

{
"$schema": "[Link]
01/[Link]#",
"contentVersion": "[Link]",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The location where the resources will be deployed."
}
},
"vaultName": {
"type": "string",
"metadata": {
"description": "The name of the key vault that contains the secret."
}
},
"secretName": {
"type": "string",
"metadata": {
"description": "The name of the secret."
}
},
"vaultResourceGroupName": {
"type": "string",
"metadata": {
"description": "The name of the resource group that contains the key
vault."
}
},
"vaultSubscription": {
"type": "string",
"defaultValue": "[subscription().subscriptionId]",
"metadata": {
"description": "The name of the subscription that contains the key
vault."
}
}
},
"resources": [
{
"type": "[Link]/deployments",
"apiVersion": "2022-09-01",
"name": "dynamicSecret",
"properties": {
"mode": "Incremental",
"expressionEvaluationOptions": {
"scope": "inner"
},
"template": {
"$schema": "[Link]
01/[Link]#",
"contentVersion": "[Link]",
"parameters": {
"adminLogin": {
"type": "string"
},
"adminPassword": {
"type": "securestring"
},
"location": {
"type": "string"
}
},
"variables": {
"sqlServerName": "[concat('sql-',
uniqueString(resourceGroup().id, 'sql'))]"
},
"resources": [
{
"type": "[Link]/servers",
"apiVersion": "2022-05-01-preview",
"name": "[variables('sqlServerName')]",
"location": "[parameters('location')]",
"properties": {
"administratorLogin": "[parameters('adminLogin')]",
"administratorLoginPassword": "
[parameters('adminPassword')]"
}
}
],
"outputs": {
"sqlFQDN": {
"type": "string",
"value": "
[reference(variables('sqlServerName')).fullyQualifiedDomainName]"
}
}
},
"parameters": {
"location": {
"value": "[parameters('location')]"
},
"adminLogin": {
"value": "ghuser"
},
"adminPassword": {
"reference": {
"keyVault": {
"id": "[resourceId(parameters('vaultSubscription'),
parameters('vaultResourceGroupName'), '[Link]/vaults',
parameters('vaultName'))]"
},
"secretName": "[parameters('secretName')]"
}
}
}
}
}
],
"outputs": {
}
}

Pasos siguientes
Ha configurado Key Vault para que esté accesible durante la implementación de una
aplicación administrada.

Para obtener información sobre cómo pasar un valor de Key Vault como parámetro
de plantilla, consulte Uso de Azure Key Vault para pasar el valor de parámetro
seguro durante la implementación.
Para obtener más información sobre la seguridad del almacén de claves, consulte
Seguridad de Azure Key Vault y Autenticación en Azure Key Vault.
Para ver ejemplos de aplicaciones administradas, consulte Ejemplos de proyectos
para aplicaciones administradas de Azure.
Para aprender a crear un archivo de definición de interfaz de usuario para una
aplicación administrada, consulte Comenzar con CreateUiDefinition.
Aplicación administrada por Azure con
identidad administrada
Artículo • 19/07/2023

7 Nota

La compatibilidad de identidad administrada para Azure Managed Applications


está actualmente en versión preliminar. Use la versión de api 2018-09-01-preview
para usar la identidad administrada.

Obtenga información sobre cómo configurar una aplicación administrada para contener
una identidad administrada. Se puede usar una identidad administrada para permitir
que el cliente conceda a la aplicación administrada acceso a los recursos existentes. La
plataforma de Azure administra la identidad y no requiere que aprovisione ni gire
ningún secreto. Para más información sobre las identidades administradas en Azure
Active Directory (Azure AD), consulte Identidades administradas para recursos de Azure.

La aplicación puede tener dos tipos de identidades:

Una identidad administrada asignada por el sistema está asociada a la aplicación


y se elimina si se elimina la aplicación. Una aplicación solo puede tener una
identidad administrada asignada por el sistema.
Una identidad administrada asignada por el usuario es un recurso de Azure
independiente que puede asignarse a la aplicación. Una aplicación puede tener
varias identidades administradas asignadas por el usuario.

Cómo usar la identidad administrada


La identidad administrada facilita muchos escenarios para aplicaciones administradas.
Algunos escenarios comunes que pueden resolverse son:

Implementar una aplicación administrada vinculada a recursos de Azure existentes.


Un ejemplo es implementar una máquina virtual (VM) de Azure dentro de la
aplicación administrada que se conecta a una interfaz de red existente.
Conceder acceso a la aplicación administrada y al editor a los recursos de Azure
fuera del grupo de recursos administrado.
Proporcionar una identidad operativa de aplicaciones administradas para el
registro de actividad y otros servicios dentro de Azure.
Agregar la identidad administrada
La creación de una aplicación administrada con una identidad administrada requiere
que se establezca otra propiedad en el recurso de Azure. A continuación se muestra una
propiedad identity de ejemplo:

JSON

{
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"/subscriptions/00000000-0000-0000-0000-
000000000000/resourceGroups/testRG/providers/[Link]/usera
ssignedidentites/myuserassignedidentity": {}
}
}
}

Hay dos maneras comunes de crear una aplicación administrada con identity :
[Link] y plantillas de Azure Resource Manager. Para escenarios simples
de creación única, debe usarse createUIDefinition para habilitar la identidad
administrada, ya que proporciona una experiencia enriquecida. Sin embargo, cuando se
trabaja con sistemas avanzados o complejos que requieren implementaciones
automatizadas o múltiples de aplicación administrada, pueden usarse plantillas.

Uso de createUIDefinition
Se puede configurar una aplicación administrada con identidad administrada a través de
[Link]. En la sección Salidas, la clave managedIdentity puede usarse
para reemplazar la propiedad identity de la plantilla de aplicación administrada. En el
ejemplo siguiente, se habilita una identidad administrada asignada por el sistema en la
aplicación administrada. Para formar objetos de identidad más complejos, use
elementos createUIDefinition para pedir entradas al consumidor. Estas entradas se
pueden usar para construir aplicaciones administradas con una identidad administrada
asignada por el usuario.

JSON

"outputs": {
"managedIdentity": { "Type": "SystemAssigned" }
}
Cuándo usar createUIDefinition para identidad administrada
A continuación, se muestran algunas recomendaciones sobre cuándo usar
createUIDefinition para habilitar una identidad administrada en aplicaciones
administradas.

La creación de aplicaciones administradas se realiza a través de Azure Portal o


Azure Marketplace.
La identidad administrada requiere una intervención compleja del consumidor.
La identidad administrada es necesaria en la creación de la aplicación
administrada.

Control de createUIDefinition de la identidad administrada

[Link] admite un control de identidad administrada integrado.

JSON

{
"$schema": "[Link]
preview/[Link]#",
"handler": "[Link]",
"version": "0.1.2-preview",
"parameters": {
"basics": [],
"steps": [
{
"name": "applicationSettings",
"label": "Application Settings",
"subLabel": {
"preValidation": "Configure your application settings",
"postValidation": "Done"
},
"bladeTitle": "Application Settings",
"elements": [
{
"name": "appName",
"type": "[Link]",
"label": "Managed application Name",
"toolTip": "Managed application instance name",
"visible": true
},
{
"name": "appIdentity",
"type": "[Link]",
"label": "Managed Identity Configuration",
"toolTip": {
"systemAssignedIdentity": "Enable system assigned identity to
grant the managed application access to additional existing resources.",
"userAssignedIdentity": "Add user assigned identities to grant
the managed application access to additional existing resources."
},
"defaultValue": {
"systemAssignedIdentity": "Off"
},
"options": {
"hideSystemAssignedIdentity": false,
"hideUserAssignedIdentity": false,
"readOnlySystemAssignedIdentity": false
},
"visible": true
}
]
}
],
"outputs": {
"applicationResourceName": "[steps('applicationSettings').appName]",
"location": "[location()]",
"managedIdentity": "[steps('applicationSettings').appIdentity]"
}
}
}

Uso de plantillas del Administrador de recursos de Azure

7 Nota
Las plantillas de aplicación administrada de Marketplace se generan
automáticamente para los clientes que siguen la experiencia de creación de
Azure Portal. Para estos escenarios, la clave de salida managedIdentity en
createUIDefinition debe usarse para la identidad habilitada.

Además, la identidad administrada puede habilitarse con plantillas de Azure Resource


Manager. En el ejemplo siguiente, se habilita una identidad administrada asignada por
el sistema en la aplicación administrada. Los objetos de identidad más complejos se
pueden formar mediante los parámetros de plantillas de Azure Resource Manager para
proporcionar entradas. Estas entradas se pueden usar para construir aplicaciones
administradas con una identidad administrada asignada por el usuario.

Cuándo usar plantillas de Azure Resource Manager para la


identidad administrada

A continuación, se muestran algunas recomendaciones sobre cuándo usar plantillas de


Azure Resource Manager para habilitar la identidad administrada en aplicaciones
administradas.

Las aplicaciones administradas se pueden implementar mediante programación


basada en una plantilla.
Se necesitan asignaciones de roles personalizados para la identidad administrada a
fin de aprovisionar la aplicación administrada.
La aplicación administrada no necesita el flujo de creación de Azure Portal ni
Marketplace.

Plantilla SystemAssigned

Una plantilla básica de Azure Resource Manager que implementa una aplicación
administrada con la identidad administrada asignada por el sistema.

JSON

"resources": [
{
"type": "[Link]/applications",
"name": "[parameters('applicationName')]",
"apiVersion": "2018-09-01-preview",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned"
},
"properties": {
"ManagedResourceGroupId": "
[parameters('managedByResourceGroupId')]",
"parameters": { }
}
}
]

Plantilla UserAssigned
Una plantilla básica de Azure Resource Manager que implementa una aplicación
administrada con la identidad administrada asignada por el usuario.

JSON

"resources": [
{
"type": "[Link]/userAssignedIdentities",
"name": "[parameters('managedIdentityName')]",
"apiVersion": "2018-11-30",
"location": "[parameters('location')]"
},
{
"type": "[Link]/applications",
"name": "[parameters('applicationName')]",
"apiVersion": "2018-09-01-preview",
"location": "[parameters('location')]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"
[resourceID('[Link]/userAssignedIdentities/',parameters('
managedIdentityName'))]": {}
}
},
"properties": {
"ManagedResourceGroupId": "
[parameters('managedByResourceGroupId')]",
"parameters": { }
}
}
]

Conceder acceso a los recursos de Azure


Una vez que se concede una identidad a una aplicación administrada, se le puede
conceder acceso a recursos de Azure existentes al crear una asignación de roles.

Para ello, busque y seleccione el nombre de la aplicación administrada o identidad


administrada asignada por el usuario y, luego, seleccione Control de acceso (IAM). Para
asignar roles, consulte Asignación de roles de Azure mediante Azure Portal.

Vincular recursos de Azure existentes

7 Nota

Una identidad administrada asignada por el usuario debe configurarse antes de


implementar la aplicación administrada. Además, la implementación de recursos
vinculados de las aplicaciones administradas solo se admite para el tipo
Marketplace.

La identidad administrada también puede usarse para implementar una aplicación


administrada que requiera acceso a los recursos existentes durante su implementación.
Cuando el cliente aprovisiona la aplicación administrada, las identidades administradas
asignadas por el usuario se pueden agregar para proporcionar más autorizaciones en la
implementación mainTemplate.

Creación de createUIDefinition con un recurso vinculado


Al vincular la implementación de la aplicación administrada a los recursos existentes, se
deben proporcionar tanto el recurso de Azure existente como una identidad
administrada asignada por el usuario con la asignación de roles aplicable en dicho
recurso.

Ejemplo de createUIDefinition que requiere dos entradas: un identificador de recurso de


interfaz de red y un identificador de recurso de identidad administrada asignada por el
usuario.

JSON

{
"$schema": "[Link]
preview/[Link]#",
"handler": "[Link]",
"version": "0.1.2-preview",
"parameters": {
"basics": [
{}
],
"steps": [
{
"name": "managedApplicationSetting",
"label": "Managed Application Settings",
"subLabel": {
"preValidation": "Managed Application Settings",
"postValidation": "Done"
},
"bladeTitle": "Managed Application Settings",
"elements": [
{
"name": "networkInterfaceId",
"type": "[Link]",
"label": "Network interface resource ID",
"defaultValue": "/subscriptions/00000000-0000-0000-0000-
000000000000/resourceGroups/testRG/providers/[Link]/networkInterf
aces/existingnetworkinterface",
"toolTip": "Must represent the identity as an Azure Resource
Manager resource identifer format ex.
/subscriptions/sub1/resourcegroups/myGroup/providers/[Link]/netwo
rkInterfaces/networkinterface1",
"visible": true
},
{
"name": "userAssignedId",
"type": "[Link]",
"label": "User-assigned managed identity resource ID",
"defaultValue": "/subscriptions/00000000-0000-0000-0000-
000000000000/resourceGroups/testRG/providers/[Link]/usera
ssignedidentites/myuserassignedidentity",
"toolTip": "Must represent the identity as an Azure Resource
Manager resource identifer format ex.
/subscriptions/sub1/resourcegroups/myGroup/providers/[Link]
ty/userAssignedIdentities/identity1",
"visible": true
}
]
}
],
"outputs": {
"existingNetworkInterfaceId": "
[steps('managedApplicationSetting').networkInterfaceId]",
"managedIdentity": "
[parse(concat('{\"Type\":\"UserAssigned\",\"UserAssignedIdentities\":
{',string(steps('managedApplicationSetting').userAssignedId),':{}}}'))]"
}
}
}

Este archivo [Link] genera una experiencia de creación de usuario que


tiene dos campos. El primer campo permite al usuario escribir en el identificador de
recurso de Azure para el recurso que se está vinculando con la implementación de la
aplicación administrada. El segundo es para que un consumidor escriba el identificador
de recursos de Azure de la identidad administrada asignada por el usuario, que tiene
acceso al recurso de Azure vinculado. La experiencia generada tendría el aspecto
siguiente:
Creación de mainTemplate con un recurso vinculado
Además de actualizar la instancia de createUIDefinition, la plantilla principal también
debe actualizarse para aceptar el identificador de recurso vinculado que se ha pasado.
La plantilla principal puede actualizarse para aceptar la nueva salida si se agrega un
nuevo parámetro. Puesto que la salida managedIdentity invalida el valor en la plantilla
de la aplicación administrada generada, no se pasa a la plantilla principal y no deben
incluirse en la sección de parámetros.

Plantilla principal de ejemplo que establece el perfil de red a una interfaz de red
existente proporcionada por [Link].

JSON

{
"$schema": "[Link]
01/[Link]#",
"contentVersion": "[Link]",
"parameters": {
"existingNetworkInterfaceId": { "type": "string" }
},
"variables": {
},
"resources": [
{
"apiVersion": "2016-04-30-preview",
"type": "[Link]/virtualMachines",
"name": "myLinkedResourceVM",
"location": "[resourceGroup().location]",
"properties": {
…,
"networkProfile": {
"networkInterfaces": [
{
"id": "[parameters('existingNetworkInterfaceId')]"
}
]
}
}
}
]
}

Consumir la aplicación administrada con un recurso


vinculado
Una vez creado el paquete de la aplicación administrada, esta se puede consumir a
través de Azure Portal. Antes de que pueda consumirse, hay varios requisitos previos.

Debe crearse una instancia del recurso de Azure vinculado necesario.


La identidad administrada asignada por el usuario debe crearse y recibir las
asignaciones de roles al recurso vinculado.
El id. del recurso vinculado existente y el id. de la identidad administrada asignada
por el usuario se proporcionan a createUIDefinition.

Acceder al token de identidad administrada


Ahora se puede acceder al token de la aplicación administrada mediante la API
listTokens desde el inquilino del editor. Un ejemplo de solicitud puede tener el

siguiente aspecto:

HTTP

POST
[Link]
resourceGroup}/providers/[Link]/applications/{applicationName}/
listTokens?api-version=2018-09-01-preview HTTP/1.1

{
"authorizationAudience": "[Link]
"userAssignedIdentities": [

"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Mi
[Link]/userAssignedIdentities/{userAssignedIdentityName}"
]
}

Parámetros del cuerpo de la solicitud:

Parámetro Obligatorio Descripción

authorizationAudience no El URI del id. de la aplicación del recurso de destino.


También es la notificación aud (audiencia) del token
Parámetro Obligatorio Descripción

emitido. El valor predeterminado es


"[Link]

userAssignedIdentities no La lista de identidades administradas asignadas por el


usuario para las cuales recuperar un token. Si no se
especifica, listTokens devuelve el token para la
identidad administrada asignada por el sistema.

Una respuesta de ejemplo puede tener el siguiente aspecto:

HTTP

HTTP/1.1 200 OK
Content-Type: application/json

{
"value": [
{
"access_token": "eyJ0eXAi…",
"expires_in": "2…",
"expires_on": "1557…",
"not_before": "1557…",
"authorizationAudience": "[Link]
"resourceId":
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Mi
[Link]/applications/{applicationName}",
"token_type": "Bearer"
}
]
}

La respuesta contiene una matriz de tókenes en la propiedad value :

Parámetro Descripción

access_token El token de acceso solicitado.

expires_in El número de segundos que es válido el token de acceso.

expires_on La hora a la que expira el token de acceso. Este valor se representa


como el número de segundos desde el tiempo Unix.

not_before El intervalo de tiempo en que el token de acceso surte efecto. Este valor
se representa como el número de segundos desde el tiempo Unix.

authorizationAudience La aud (audiencia) para la cual se solicitó el token de acceso. Este valor
es igual al que se ha proporcionado en la solicitud listTokens .
Parámetro Descripción

resourceId El identificador de recursos de Azure para el token emitido. Este valor es


el id. de la aplicación administrada o el id. de la identidad administrada
asignada por el usuario.

token_type Tipo de token.

Pasos siguientes
Cómo configurar una aplicación administrada con un proveedor personalizado
Creación de una aplicación administrada
de Azure que implementa la cuenta de
almacenamiento cifrada con una clave
administrada por el cliente
Artículo • 06/05/2023

En este artículo se describe cómo crear una aplicación administrada de Azure que
implemente una cuenta de almacenamiento cifrada con una clave administrada por el
cliente. La cuenta de almacenamiento, Cosmos DB y Azure Database for Postgres
admiten el cifrado de datos en reposo mediante claves administradas por el cliente o
claves administradas por Microsoft. Puede usar su propia clave de cifrado para proteger
los datos de la cuenta de almacenamiento. Cuando se especifica una clave administrada
por el cliente, esa clave se usa para proteger y controlar el acceso a la clave que cifra los
datos. Las claves administradas por el cliente ofrecen más flexibilidad para administrar
controles de acceso.

Requisitos previos
Una cuenta de Azure con una suscripción activa y permisos para recursos de Azure
Active Directory, 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.
Familiarícese con cómo crear e implementar una definición de catálogo de
servicios.

Identidades administradas
La configuración de una clave administrada por el cliente para una cuenta de
almacenamiento implementada por la aplicación administrada como un recurso dentro
del grupo de recursos administrados requiere una identidad administrada asignada por
el usuario. Esta identidad administrada asignada por el usuario se puede usar para
conceder a la aplicación administrada acceso a otros recursos existentes. Para aprender
a configurar la aplicación administrada con una identidad administrada asignada por el
usuario, vaya a Aplicación administrada de Azure con identidad administrada.
La aplicación puede tener dos tipos de identidades:

Una identidad administrada asignada por el sistema está asignada a la aplicación


y se elimina si se elimina la aplicación. Una aplicación solo puede tener una
identidad administrada asignada por el sistema.
Una identidad administrada asignada por el usuario es un recurso de Azure
independiente que puede asignarse a la aplicación. Una aplicación puede tener
varias identidades administradas asignadas por el usuario.

Para implementar una cuenta de almacenamiento en el grupo de recursos


administrados de la aplicación administrada que se cifra con claves de cliente desde el
almacén de claves existente, se requiere más configuración. La identidad administrada
configurada con su aplicación administrada necesita el control de acceso basado en
roles Operador de identidad administrada de Azure integrado sobre la identidad
administrada que tiene acceso al almacén de claves. Para más detalles, vaya al rol de
Operador de identidad administrada.

Creación de un almacén de claves con


protección de purga
1. Inicie sesión en Azure Portal .
2. En el menú de Azure Portal o en la página principal, seleccione Crear un recurso.
3. En el cuadro de búsqueda, escriba Key Vault.
4. En la lista de resultados, seleccione Key Vault.
5. En la sección Key Vault, seleccione Crear.
6. En la sección Crear almacén de claves, proporcione la siguiente información:

Suscripción: seleccione su suscripción.


Grupo de recursos: seleccione Crear nuevo y escriba un nombre como
demo-cmek-rg.
Nombre: se requiere un nombre único, como demo-keyvault-cmek.
Región: seleccione una ubicación, como Este de EE. UU.
Plan de tarifa: seleccione Estándar en la lista desplegable.
Protección de purga: seleccione Habilitar protección de purga.

7. Seleccione Siguiente y vaya a la pestaña Directiva de acceso.

Configuración de acceso: seleccione Control de acceso basado en rol de


Azure.
Acepte los valores predeterminados del resto de opciones.

8. Seleccione Revisar + crear.


9. Confirme que la configuración es correcta y seleccione Crear.

Una vez que la implementación se haya realizado correctamente, seleccione Ir al


recurso. En la pestaña Información general , tome nota de las siguientes propiedades:

Nombre del almacén: en el ejemplo, el nombre del almacén es demo-keyvault-


cmek. Este nombre se usará en otros pasos.
URI del almacén: en el ejemplo, el URI del almacén es [Link]
[Link]/ .

Crear una identidad administrada asignada por


el usuario
Para crear una identidad administrada asignada por el usuario, la cuenta requiere la
asignación del rol Colaborador de identidades administradas.

1. En el cuadro de búsqueda, escriba Identidades administradas.


2. En Servicios, seleccione Identidades administradas.
3. Seleccione Crear y escriba los valores siguientes en la pestaña Aspectos básicos:

Suscripción: seleccione su suscripción.


Grupo de recursos: seleccione el grupo de recursos demo-cmek-rg que creó
en los pasos anteriores.
Región: selecciona una región, como Este de EE. UU.
Nombre: especifique el nombre de la identidad administrada asignada por el
usuario, demokeyvaultmi.

4. Seleccione Revisar + crear.


5. Una vez que se muestre Validación superada, seleccione Crear.

Una vez que la implementación se haya realizado correctamente, seleccione Ir al


recurso.

Crear asignaciones de roles


Debe crear dos asignaciones de roles para el almacén de claves. Para más detalles,
consulte Asignar roles de Azure usando Azure Portal.

Concesión del permiso de clave en el almacén de claves a


la identidad administrada
Cree una asignación de roles para la identidad administrada demokeyvaultmi del
almacén de claves para encapsular y desencapsular claves.

1. Vaya al almacén de claves demo-cmek-keyvault.


2. Seleccione Access Control (IAM) .
3. Seleccione Agregar>Agregar asignación de roles.
4. Asigne el siguiente rol:

Rol: Usuario de cifrado del servicio de cifrado del almacén de claves


Asignar acceso a: Identidad administrada
Miembro: demokeyvaultmi

5. Seleccione Revisar y asignar para ver su configuración.


6. Seleccione Revisar y asignar para crear la asignación del rol.

Creación de una asignación de rol para la cuenta


Cree otra asignación de rol para que la cuenta pueda crear una nueva clave en el
almacén de claves.

1. Asigne el siguiente rol:

Rol: Agente criptográfico de Key Vault


Asignar acceso a: Usuario, grupo o entidad de servicio
Miembro: Su cuenta de Azure Active Directory

2. Seleccione Revisar y asignar para ver su configuración.


3. Seleccione Revisar y asignar para crear la asignación del rol.

Puede verificar la asignación de roles del almacén de claves en Control de acceso


(IAM)>Asignación de roles.

Crear una clave


Debe crear una clave que use el almacén de claves para cifrar una cuenta de
almacenamiento.

1. Vaya a su almacén de claves, demo-cmek-keyvault.


2. Seleccione Claves.
3. Seleccione Generar o importar.
4. En la página Crear una clave, seleccione los siguientes valores:

Opciones: Generar
Nombre: demo-cmek-llave

5. Acepte los valores predeterminados para las demás opciones.


6. Seleccione Crear.

Anote el valor de la clave. Lo usará cuando implemente la aplicación administrada.

Creación de una identidad administrada asignada por el


usuario para la aplicación administrada
Cree una identidad administrada asignada por el usuario para usarla como identidad
administrada para la aplicación administrada.

1. En el cuadro de búsqueda, escriba Identidades administradas.


2. En Servicios, seleccione Identidades administradas.
3. Seleccione Crear.

Suscripción: seleccione su suscripción.


Grupo de recursos: seleccione el grupo de recursos demo-cmek-rg.
Región: selecciona una región, como Este de EE. UU.
Nombre: especifique el nombre de la identidad administrada asignada por el
usuario, demomanagedappmi.

4. Seleccione Revisar + crear.


5. Una vez que se muestre Validación superada, seleccione Crear.

Una vez que la implementación se haya realizado correctamente, seleccione Ir al


recurso.

Asignación de permisos de rol a la identidad


administrada
Asigne el rol Operador de identidad administrada a la identidad administrada en el
ámbito de la identidad administrada asignada por el usuario denominada
demokeyvaultmi.

1. Vaya a la identidad administrada asignada por el usuario denominada


demokeyvaultmi.
2. Seleccione Control de acceso (IAM).
3. Seleccione Agregar>Agregar asignación de roles para abrir la página Agregar
asignación de roles.
4. Asigne el siguiente rol.
Rol: Operador de identidad administrada
Asignar acceso a: Identidad administrada
Miembro: demomanagedappmi

5. Seleccione Revisar y asignar para ver su configuración.


6. Seleccione Revisar y asignar para crear la asignación del rol.

Puede verificar la asignación de rol para demokeyvaultmi en Control de acceso


(IAM)>Asignación de roles.

Plantilla de aplicación administrada de ejemplo


Cree una aplicación administrada que implemente una cuenta de almacenamiento en un
grupo de recursos administrado y use una clave del almacén de claves existente para
cifrar los datos de la cuenta de almacenamiento.

Para publicar una aplicación administrada en el catálogo de servicios, debe realizar las
siguientes tareas:

1. Cree el archivo [Link] desde el ejemplo de este artículo. La plantilla


define los elementos de la interfaz de usuario del portal al implementar la
aplicación administrada.
2. Cree una plantilla de Azure Resource Manager denominada [Link]
mediante la conversión del archivo Bicep de este artículo a JSON. La plantilla
define los recursos que se implementarán con la aplicación administrada.
3. Cree un paquete .zip que contenga los archivos JSON necesarios:
[Link] y [Link].
4. Implemente la definición de aplicación administrada para que esté disponible en el
catálogo de servicios. Para más información, vaya a Inicio rápido: Creación y
publicación de una definición de aplicación administrada por Azure.

Creación de una plantilla [Link]


La plantilla siguiente crea una identidad administrada asignada por el usuario para la
aplicación administrada. En este ejemplo, deshabilitamos la identidad administrada
asignada por el sistema porque necesitamos que nuestra identidad administrada
asignada por el usuario se configure de antemano con los permisos de Operador de
identidad administrada sobre la identidad administrada del almacén de claves.

1. Cree un nuevo archivo en Visual Studio Code llamado [Link].


2. Copie y pegue el código siguiente en el archivo.
3. Guarde el archivo.
JSON

{
"$schema": "[Link]
preview/[Link]#",
"handler": "[Link]",
"version": "0.1.2-preview",
"parameters": {
"basics": [],
"steps": [
{
"name": "managedApplicationSetting",
"label": "Application Settings",
"subLabel": {
"preValidation": "Configure your application settings and Managed
Identity for the application",
"postValidation": "Done"
},
"bladeTitle": "Application Settings - Config",
"elements": [
{
"name": "appIdentity",
"type": "[Link]",
"label": "Managed Identity Configuration for the Application
(Needs Managed Identity Operator permissions over KV Managed Identity).",
"toolTip": {
"systemAssignedIdentity": "Enable system assigned identity to
grant the managed application access to additional existing resources.",
"userAssignedIdentity": "Add user assigned identities to grant
the managed application access to additional existing resources."
},
"defaultValue": {
"systemAssignedIdentity": "Off"
},
"options": {
"hideSystemAssignedIdentity": true,
"hideUserAssignedIdentity": false,
"readOnlySystemAssignedIdentity": true
},
"visible": true
}
]
},
{
"name": "configuration",
"type": "[Link]",
"label": "Configuration",
"elements": [
{
"name": "cmek",
"type": "[Link]",
"label": "Customer Managed Encryption Key (CMEK)",
"elements": [
{
"name": "cmekEnable",
"type": "[Link]",
"label": "Enable CMEK",
"toolTip": "Enable to provide a CMEK",
"constraints": {
"required": false
}
},
{
"name": "cmekKeyVaultUrl",
"type": "[Link]",
"label": "Key Vault URL",
"toolTip": "Specify the CMEK Key Vault URL",
"defaultValue": "",
"constraints": {
"required": "[steps('configuration').[Link]]",
"regex": ".*",
"validationMessage": "The value must not be empty."
},
"visible": "[steps('configuration').[Link]]"
},
{
"name": "cmekKeyName",
"type": "[Link]",
"label": "Key Name",
"toolTip": "Specify the key name from your key vault.",
"defaultValue": "",
"constraints": {
"required": "[steps('configuration').[Link]]",
"regex": ".*",
"validationMessage": "The value must not be empty."
},
"visible": "[steps('configuration').[Link]]"
},
{
"name": "cmekKeyIdentity",
"type": "[Link]",
"label": "Managed Identity Configuration for Key Vault
Access",
"toolTip": {
"systemAssignedIdentity": "Enable system assigned identity
to grant the managed application access to additional existing resources.",
"userAssignedIdentity": "Add user assigned identities to
grant the managed application access to additional existing resources."
},
"defaultValue": {
"systemAssignedIdentity": "Off"
},
"options": {
"hideSystemAssignedIdentity": true,
"hideUserAssignedIdentity": false,
"readOnlySystemAssignedIdentity": true
},
"visible": "[steps('configuration').[Link]]"
}
],
"visible": true
}
]
}
],
"outputs": {
"location": "[location()]",
"managedIdentity": "[steps('managedApplicationSetting').appIdentity]",
"cmekConfig": {
"kvUrl": "[if(empty(steps('configuration').[Link]),
'', steps('configuration').[Link])]",
"keyName": "[if(empty(steps('configuration').[Link]), '',
steps('configuration').[Link])]",
"identityId": "
[if(empty(steps('configuration').[Link]), '',
steps('configuration').[Link])]"
}
}
}
}

Creación de una plantilla [Link]


El siguiente archivo Bicep es el código fuente de [Link]. La plantilla usa la
identidad administrada asignada por el usuario definida en el archivo
[Link] .

1. Cree un nuevo archivo en Visual Studio Code denominado [Link].


2. Copie y pegue el código siguiente en el archivo.
3. Guarde el archivo.

Bicep

param cmekConfig object = {


kvUrl: ''
keyName: ''
identityId: {}
}
@description('Specify the Azure region to place the application
definition.')
param location string = resourceGroup().location
/////////////////////////////////
// Common Resources Configuration
/////////////////////////////////
var commonproperties = {
name: 'cmekdemo'
displayName: 'Common Resources'
storage: {
sku: 'Standard_LRS'
kind: 'StorageV2'
accessTier: 'Hot'
minimumTlsVersion: 'TLS1_2'

}
}
var identity = items([Link])[0].key

resource storage '[Link]/storageAccounts@2022-05-01' = {


name: '${[Link]}${uniqueString(resourceGroup().id)}'
location: location
sku: {
name: [Link]
}
kind: [Link]
identity: [Link]
properties: {
accessTier: [Link]
minimumTlsVersion: [Link]
encryption: {
identity: {
userAssignedIdentity: identity
}
services: {
blob: {
enabled: true
}
table: {
enabled: true
}
file: {
enabled: true
}
}
keySource: '[Link]'
keyvaultproperties: {
keyname: '${[Link]}'
keyvaulturi: '${[Link]}'
}
}
}
}

Use PowerShell o la CLI de Azure para compilar el archivo [Link] . Vaya al


directorio donde guardó el archivo Bicep y ejecute el comando build .

PowerShell

PowerShell

bicep build [Link]


Después de convertir el archivo Bicep en JSON, el archivo [Link] debe
coincidir con el ejemplo siguiente. Puede tener valores diferentes en las propiedades de
metadata para version y templateHash .

JSON

{
"$schema": "[Link]
01/[Link]#",
"contentVersion": "[Link]",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.16.2.56959",
"templateHash": "1234567891234567890"
}
},
"parameters": {
"cmekConfig": {
"type": "object",
"defaultValue": {
"kvUrl": "",
"keyName": "",
"identityId": {}
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Specify the Azure region to place the application
definition."
}
}
},
"variables": {
"commonproperties": {
"name": "cmekdemo",
"displayName": "Common Resources",
"storage": {
"sku": "Standard_LRS",
"kind": "StorageV2",
"accessTier": "Hot",
"minimumTlsVersion": "TLS1_2"
}
},
"identity": "
[items(parameters('cmekConfig').[Link])[0].key]"
},
"resources": [
{
"type": "[Link]/storageAccounts",
"apiVersion": "2022-05-01",
"name": "[format('{0}{1}', variables('commonproperties').name,
uniqueString(resourceGroup().id))]",
"location": "[parameters('location')]",
"sku": {
"name": "[variables('commonproperties').[Link]]"
},
"kind": "[variables('commonproperties').[Link]]",
"identity": "[parameters('cmekConfig').identityId]",
"properties": {
"accessTier": "[variables('commonproperties').[Link]]",
"minimumTlsVersion": "
[variables('commonproperties').[Link]]",
"encryption": {
"identity": {
"userAssignedIdentity": "[variables('identity')]"
},
"services": {
"blob": {
"enabled": true
},
"table": {
"enabled": true
},
"file": {
"enabled": true
}
},
"keySource": "[Link]",
"keyvaultproperties": {
"keyname": "[format('{0}', parameters('cmekConfig').keyName)]",
"keyvaulturi": "[format('{0}', parameters('cmekConfig').kvUrl)]"
}
}
}
}
]
}

Implementación de la aplicación administrada


Una vez creada la definición del catálogo de servicios, puede implementar la aplicación
administrada. Para más información, vaya a Inicio rápido: Implementación de una
aplicación administrada de catálogo de servicios.

Durante la implementación, se usan las identidades administradas asignadas por el


usuario, el nombre del almacén de claves, la dirección URL del almacén de claves, el
nombre de clave del almacén de claves. El archivo [Link] crea la interfaz
usuario.
Por ejemplo, en una implementación del portal, en la pestaña Configuración de la
aplicación, agregue demomanagedappmi.

En la pestaña Configuración, habilite la clave administrada por el cliente y agregue la


identidad administrada asignada por el usuario para el almacén de claves,
demokeyvaultmi. También se especifica la dirección URL del almacén de claves y el
nombre de clave del almacén de claves que ha creado.
Comprobar la implementación
Una vez completada la implementación, puede comprobar la asignación de identidad
de la aplicación administrada. La identidad administrada asignada por el usuario
demomanagedappmi se asigna a la aplicación administrada.

1. Vaya al grupo de recursos donde implementó la aplicación administrada.


2. En Configuración>Identidad seleccione Asignada por el usuario (versión
preliminar).

También puede comprobar la cuenta de almacenamiento que implementó la aplicación


administrada. La pestaña Cifrado muestra la clave demo-cmek-key y el identificador de
recurso de la identidad administrada asignada por el usuario.

1. Vaya al grupo de recursos administrado donde se implementa la cuenta de


almacenamiento de la aplicación administrada.
2. En Seguridad y redes, seleccione Cifrado.

Pasos siguientes
Para más información sobre el cifrado de almacenamiento, vaya a Claves
administradas por el cliente para el cifrado de Azure Storage.
Para más información sobre la identidad administrada asignada por el usuario con
permisos para acceder a la clave en el almacén de claves, vaya a Configuración de
claves administradas por el cliente en el mismo inquilino para una cuenta de
almacenamiento existente.
Aplicaciones administradas de Azure
con notificaciones
Artículo • 23/03/2023

Las notificaciones de aplicaciones administradas de Azure permiten a los publicadores


automatizar acciones basadas en eventos del ciclo de vida de las instancias de la
aplicación administrada. Los publicadores pueden especificar un punto de conexión de
webhook de notificación personalizado para recibir notificaciones de eventos sobre las
instancias de aplicaciones administradas nuevas y existentes. Los publicadores pueden
configurar flujos de trabajo personalizados en el momento del aprovisionamiento, las
actualizaciones y la eliminación de la aplicación.

Introducción
Para empezar a recibir notificaciones de aplicaciones administradas, cree un punto de
conexión HTTPS público. Especifique el punto de conexión al publicar la definición de
aplicación del catálogo de servicios o la oferta de Microsoft Azure Marketplace.

Estos son los pasos recomendados para empezar a usarlas rápidamente:

1. Cree un punto de conexión HTTPS público que registre las solicitudes POST
entrantes y devuelva 200 OK .
2. Agregue el punto de conexión a la definición de aplicación de catálogo de
servicios o a la oferta de Azure Marketplace, como se explica más adelante en este
artículo.
3. Cree una instancia de aplicación administrada que haga referencia a la definición
de la aplicación o a la oferta de Azure Marketplace.
4. Confirme que las notificaciones se reciben.
5. Habilite la autorización tal y como se explica en la sección Autenticación de punto
de conexión de este artículo.
6. Siga las instrucciones de la sección Esquema de notificación de este artículo para
analizar las solicitudes de notificación e implementar la lógica de negocios basada
en la notificación.

Adición de notificaciones de definición de


aplicación del catálogo de servicios
En los ejemplos siguientes se muestra cómo agregar un URI de punto de conexión de
notificación mediante el portal o la API REST.

Portal de Azure
Para comenzar, consulte Inicio rápido: Creación y publicación de una definición de
aplicación administrada de Azure.

API DE REST

7 Nota

Solo puede proporcionar un punto de conexión en la propiedad


notificationEndpoints de la definición de aplicación administrada.

JSON

{
"properties": {
"isEnabled": true,
"lockLevel": "ReadOnly",
"displayName": "Sample Application Definition",
"description": "Notification-enabled application definition.",
"notificationPolicy": {
"notificationEndpoints": [
{
"uri": "[Link]
}
]
},
"authorizations": [
{
"principalId": "d6b7fbd3-4d99-43fe-8a7a-f13aef11dc18",
"roleDefinitionId": "8e3af657-a8ff-443c-a75c-2fe8c4bcb635"
},
...

Adición de notificaciones de aplicaciones


administradas de Azure Marketplace
Para más información, vea Crear una oferta de una aplicación de Azure.

Desencadenadores de eventos
En la tabla siguiente se describen todas las posibles combinaciones de eventType y
provisioningState y sus desencadenadores:
EventType ProvisioningState Desencadenador para la notificación

PUT Accepted Se ha creado y proyectado correctamente un grupo de


recursos administrados después del evento PUT de la
aplicación (antes de que se inicie la implementación en el
grupo de recursos administrados).

PUT Correcto El aprovisionamiento completo de la aplicación administrada


se realizó correctamente después de un PUT.

PUT Con error Error al poner el aprovisionamiento de la instancia de


aplicación en cualquier momento.

PATCH Correcto Después de un evento PATCH correcto de la instancia de la


aplicación administrada para actualizar las etiquetas, la
directiva de acceso JIT o la identidad administrada.

Delete Eliminando En cuanto el usuario inicia una eliminación de una instancia de


la aplicación administrada.

Delete Deleted Después de la eliminación completa y correcta de la aplicación


administrada.

Delete Con error Después de cualquier error durante el proceso de


desaprovisionamiento que bloquea la eliminación.

Esquema de la notificación
Al crear el punto de conexión de webhook para controlar las notificaciones, necesitará
analizar la carga para obtener propiedades importantes y, después, actuar sobre la
notificación. Las notificaciones de aplicaciones administradas del catálogo de servicios y
de Azure Marketplace proporcionan muchas de esas mismas propiedades, pero hay
algunas diferencias. La propiedad applicationDefinitionId solo se aplica al catálogo de
servicios. Las propiedades billingDetails y plan solo se aplican a Azure Marketplace.

Azure anexa /resource al URI del punto de conexión de notificación que proporcionó
en la definición de aplicación administrada. El punto de conexión de webhook debe ser
capaz de controlar las notificaciones en el URI /resource . Por ejemplo, si proporcionó
un URI de punto de conexión de notificación como [Link] , el URI del
punto de conexión de webhook es [Link] .

Esquema de notificación de aplicación de catálogo de


servicios
El ejemplo siguiente muestra una notificación del catálogo de servicios después de un
aprovisionamiento correcto de una instancia de la aplicación administrada.

HTTP

POST [Link]
{optional_parameter_value} HTTP/1.1

{
"eventType": "PUT",
"applicationId":
"/subscriptions/<subId>/resourceGroups/<rgName>/providers/[Link]
s/applications/<applicationName>",
"eventTime": "2019-08-14T[Link].1707163Z",
"provisioningState": "Succeeded",
"applicationDefinitionId":
"/subscriptions/<subId>/resourceGroups/<rgName>/providers/[Link]
s/applicationDefinitions/<appDefName>"
}

Si se produce un error en el aprovisionamiento, se enviará una notificación con los


detalles del error al punto de conexión especificado.

HTTP

POST [Link]
{optional_parameter_value} HTTP/1.1

{
"eventType": "PUT",
"applicationId":
"subscriptions/<subId>/resourceGroups/<rgName>/providers/[Link]
/applications/<applicationName>",
"eventTime": "2019-08-14T[Link].1707163Z",
"provisioningState": "Failed",
"applicationDefinitionId":
"/subscriptions/<subId>/resourceGroups/<rgName>/providers/[Link]
s/applicationDefinitions/<appDefName>",
"error": {
"code": "ErrorCode",
"message": "error message",
"details": [
{
"code": "DetailedErrorCode",
"message": "error message"
}
]
}
}
Esquema de notificación de aplicación de
Azure Marketplace
El ejemplo siguiente muestra una notificación del catálogo de servicios después de un
aprovisionamiento correcto de una instancia de la aplicación administrada.

HTTP

POST [Link]
{optional_parameter_value} HTTP/1.1

{
"eventType": "PUT",
"applicationId":
"/subscriptions/<subId>/resourceGroups/<rgName>/providers/[Link]
s/applications/<applicationName>",
"eventTime": "2019-08-14T[Link].1707163Z",
"provisioningState": "Succeeded",
"billingDetails": {
"resourceUsageId": "<resourceUsageId>"
},
"plan": {
"publisher": "publisherId",
"product": "offer",
"name": "skuName",
"version": "1.0.1"
}
}

Si se produce un error en el aprovisionamiento, se enviará una notificación con los


detalles del error al punto de conexión especificado.

HTTP

POST [Link]
{optional_parameter_value} HTTP/1.1

{
"eventType": "PUT",
"applicationId":
"/subscriptions/<subId>/resourceGroups/<rgName>/providers/[Link]
s/applications/<applicationName>",
"eventTime": "2019-08-14T[Link].1707163Z",
"provisioningState": "Failed",
"billingDetails": {
"resourceUsageId": "<resourceUsageId>"
},
"plan": {
"publisher": "publisherId",
"product": "offer",
"name": "skuName",
"version": "1.0.1"
},
"error": {
"code": "ErrorCode",
"message": "error message",
"details": [
{
"code": "DetailedErrorCode",
"message": "error message"
}
]
}
}

Propiedad Descripción

eventType Tipo de evento que desencadenó la notificación. (Por ejemplo, PUT,


PATCH, DELETE).

applicationId El identificador de recurso completo de la aplicación administrada


para la que se desencadenó la notificación.

eventTime Marca de tiempo del evento que desencadenó la notificación. (Fecha


y hora en formato UTC ISO 8601).

provisioningState El estado de aprovisionamiento de la instancia de la aplicación


administrada. Por ejemplo, Succeeded, Failed, Deleting, Deleted.

applicationDefinitionId Solo se especifica en el caso de las aplicaciones administradas del


catálogo de servicios. Representa el identificador de recurso completo
de la definición de la aplicación para la que se aprovisionó la instancia
de la aplicación administrada.

billingDetails Solo se especifica en el caso de las aplicaciones administradas de


Azure Marketplace. El estado de facturación de la instancia de la
aplicación administrada. Contiene el identificador resourceUsageId ,
que sirve para consultar los detalles de uso de Azure Marketplace.

plan Solo se especifica en el caso de las aplicaciones administradas de


Azure Marketplace. Representa el publicador, la oferta, la SKU y la
versión de la instancia de la aplicación administrada.

error Solo se especifica cuando se produce un error en provisioningState.


Contiene el código de error, el mensaje y los detalles del problema
que causó el error.

Autenticación de punto de conexión


Para proteger el punto de conexión del webhook y garantizar la autenticidad de la
notificación:

1. Proporcione un parámetro de consulta en la parte superior del URI del webhook,


como este: [Link] . Con cada notificación,
compruebe que el parámetro de consulta sig tiene el valor esperado Guid .
2. Emita un evento GET en la instancia de la aplicación administrada con
applicationId . Compruebe que provisioningState coincide con el
provisioningState de la notificación para garantizar la coherencia.

Reintentos de notificación
El servicio de notificaciones de aplicaciones administradas espera una respuesta 200 OK
del punto de conexión de webhook a la notificación. El servicio de notificación volverá a
intentarlo si el punto de conexión de webhook devuelve un código de error HTTP igual
o superior a 500, devuelve un código de error 429 o si el punto de conexión no está
disponible temporalmente. Si el punto de conexión de webhook no está disponible en
10 horas, se quitará el mensaje de notificación y se detendrán los reintentos.
Supervisión de una instancia
implementada de una aplicación
administrada
Artículo • 01/06/2023

Después de haber implementado una aplicación administrada en la suscripción de


Azure, es posible que desee comprobar el estado de la aplicación. Este artículo muestra
las opciones que hay en Azure Portal para comprobar el estado. Puede supervisar la
disponibilidad de los recursos de la aplicación administrada. También puede configurar
y ver las alertas.

Visualizar el estado de los recursos


1. Seleccione la instancia de la aplicación administrada.

2. Seleccione Resource Health.


3. Vea la disponibilidad de los recursos de la aplicación administrada.

Visualización de alertas
1. Seleccione Alertas.
2. Si tiene reglas de alerta configuradas, verá información sobre las alertas que han
surgido.
3. Para agregar reglas de alerta, seleccione + Nueva regla de alertas.

Puede crear alertas para la instancia de aplicación administrada o los recursos de la


aplicación administrada. Para más información sobre la creación de alertas, consulte
Información general sobre las alertas en Microsoft Azure.

Pasos siguientes
Para ver ejemplos de aplicaciones administradas, consulte Sample projects for
Azure managed applications (Ejemplos de proyectos para aplicaciones
administradas de Azure).
Para implementar una aplicación administrada, consulte Implementación de la
aplicación de catálogo de servicio mediante Azure Portal.
Configuración y aprobación del acceso
Just-In-Time para Azure Managed
Applications
Artículo • 25/10/2023

Como consumidor de una aplicación administrada, puede que no se sienta cómodo


proporcionando al editor acceso permanente al grupo de recursos administrado. Para
ofrecer mayor control sobre la concesión de acceso a los recursos administrados, Azure
Managed Applications proporciona una característica denominada acceso Just-In-Time
(JIT). Le permite aprobar cuándo y durante cuánto tiempo el editor tiene acceso al
grupo de recursos. El editor puede realizar las actualizaciones necesarias durante ese
tiempo, tras el cual el acceso del editor expirará.

El flujo de trabajo de concesión de acceso es el siguiente:

1. El editor agrega una aplicación administrada en Marketplace y especifica que el


acceso JIT esté disponible.

2. Durante la implementación, permite el acceso JIT a esa instancia de la aplicación


administrada.

3. Después de la implementación, puede cambiar la configuración del acceso JIT.

4. El editor envía una solicitud de acceso.

5. Usted aprueba la solicitud.

Este artículo se centra en las acciones que los consumidores llevan a cabo para habilitar
el acceso JIT y aprobar solicitudes. Para obtener información sobre la publicación de una
aplicación administrada con acceso JIT, consulte el tema sobre la solicitud de acceso
Just-In-Time en Azure Managed Applications.

7 Nota

Para usar el acceso Just-In-Time, debe tener una licencia de Microsoft Entra ID P2.

Habilitar durante la implementación


1. Inicie sesión en Azure Portal .
2. Busque una entrada de Marketplace para una aplicación administrada con JIT
habilitado. Seleccione Crear.

3. Al proporcionar valores para la nueva aplicación administrada, el paso


Configuración de JIT le permite habilitar o deshabilitar el acceso JIT para la
aplicación administrada. Seleccione Sí en Habilitar el acceso JIT. Esta opción está
seleccionada de forma predeterminada para las aplicaciones administradas que se
han definido con JIT habilitado en Marketplace.

Solo puede habilitar el acceso JIT durante la implementación. Si selecciona No, el


editor obtiene acceso permanente al grupo de recursos administrado. No puede
habilitar el acceso JIT posteriormente.

4. Para cambiar la configuración de aprobación predeterminada, seleccione


Personalizar configuración JIT.
De forma predeterminada, una aplicación administrada con JIT habilitado tiene las
siguientes opciones:

Modo de aprobación: automático


Duración máxima de acceso: 8 horas
Aprobadores: ninguno

Cuando se establece el modo de aprobación en automático, los aprobadores


reciben una notificación de cada solicitud, pero la solicitud se aprueba
automáticamente. Cuando se establece en manual, los aprobadores reciben una
notificación de cada solicitud, y uno de ellos debe aprobarla.

La duración máxima de activación especifica la cantidad máxima de tiempo que un


editor puede solicitar para acceder al grupo de recursos administrado.

La lista de aprobadores contiene los usuarios de Microsoft Entra que pueden


aprobar solicitudes de acceso JIT. Para agregar un aprobador, seleccione Agregar
aprobador y busque el usuario.

Después de actualizar la configuración, seleccione Guardar.

Actualizar después de la implementación


Puede cambiar los valores de aprobación de las solicitudes. Sin embargo, si no habilitó
el acceso JIT durante la implementación, no puede habilitarlo posteriormente.

Para cambiar la configuración de una aplicación administrada implementada:

1. En el portal, seleccione la aplicación administrada.


2. Seleccione Configuración de JIT y cambie las opciones de configuración según sea
necesario.

3. Cuando haya terminado, seleccione Guardar.

Aprobar solicitudes
Cuando el editor solicite acceso, recibirá una notificación de la solicitud. Puede aprobar
las solicitudes de acceso JIT directamente a través de la aplicación administrada, o a
través de todas las aplicaciones administradas a través del servicio de Microsoft Entra
Privileged Identity Management. Para usar el acceso Just-In-Time, debe tener una
licencia de Microsoft Entra ID P2.

Para aprobar las solicitudes a través de la aplicación administrada:

1. Seleccione Acceso de JIT para la aplicación administrada y elija Aprobar


solicitudes.
2. Seleccione la solicitud que quiere aprobar.

3. En el formulario, proporcione el motivo de la aprobación y seleccione Aprobar.

Para aprobar las solicitudes a través de Microsoft Entra Privileged Identity Management:

1. Seleccione Todos los servicios y comience a buscar Microsoft Entra Privileged


Identity Management. Seleccione el servicio entre las opciones disponibles.

2. Seleccione Aprobar solicitudes.

3. Seleccione Aplicaciones administradas de Azure y seleccione la solicitud que


quiere aprobar.
Pasos siguientes
Para obtener información sobre la publicación de una aplicación administrada con
acceso JIT, consulte el tema sobre la solicitud de acceso Just-In-Time en Azure Managed
Applications.
Referencia: Artefacto de elementos de la
interfaz de usuario
Artículo • 01/06/2023

Este artículo es una referencia para un artefacto [Link] en Azure


Managed Applications. Para más información sobre la creación de elementos de interfaz
de usuario, consulte los elementos para crear una interfaz de usuario.

Elementos de la interfaz de usuario


El JSON siguiente muestra un ejemplo de un archivo [Link] para Azure
Managed Applications:

JSON

{
"$schema": "[Link]
preview/[Link]#",
"handler": "[Link]",
"version": "0.1.2-preview",
"parameters": {
"basics": [
{}
],
"steps": [
{
"name": "applicationSettings",
"label": "Application Settings",
"subLabel": {
"preValidation": "Configure your application settings",
"postValidation": "Done"
},
"bladeTitle": "Application Settings",
"elements": [
{
"name": "funcname",
"type": "[Link]",
"label": "Name of the function to be created",
"toolTip": "Name of the function to be created",
"visible": true,
"constraints": {
"required": true
}
},
{
"name": "storagename",
"type": "[Link]",
"label": "Name of the storage to be created",
"toolTip": "Name of the storage to be created",
"visible": true,
"constraints": {
"required": true
}
},
{
"name": "zipFileBlobUri",
"type": "[Link]",
"defaultValue": "[Link]
templates/tree/master/quickstarts/[Link]/custom-rp-with-
function/artifacts/functionzip/[Link]",
"label": "The Uri to the uploaded function zip file",
"toolTip": "The Uri to the uploaded function zip file",
"visible": true
}
]
}
],
"outputs": {
"funcname": "[steps('applicationSettings').funcname]",
"storageName": "[steps('applicationSettings').storagename]",
"zipFileBlobUri": "[steps('applicationSettings').zipFileBlobUri]"
}
}
}

Pasos siguientes
Tutorial: Creación de una aplicación administrada con acciones y recursos
personalizados.
Referencia: Artefacto de plantilla de implementación.
Referencia: Artefacto de definición de vista.
Referencia: Artefacto de plantilla de
implementación
Artículo • 01/06/2023

Este artículo es una referencia para un artefacto [Link] en Azure Managed


Applications. Para más información sobre la creación de plantillas de implementación,
consulte las plantillas de Azure Resource Manager.

Plantilla de implementación
El JSON siguiente muestra un ejemplo de un archivo [Link] para Azure
Managed Applications:

JSON

{
"$schema": "[Link]
preview/[Link]#",
"contentVersion": "[Link]",
"parameters": {
"location": {
"type": "string",
"defaultValue": "eastus",
"allowedValues": [
"australiaeast",
"eastus",
"westeurope"
],
"metadata": {
"description": "Location for the resources."
}
},
"funcname": {
"type": "string",
"metadata": {
"description": "Name of the Azure Function that hosts the code. Must
be globally unique"
},
"defaultValue": ""
},
"storageName": {
"type": "string",
"metadata": {
"description": "Name of the storage account that hosts the function.
Must be globally unique. The field can contain only lowercase letters and
numbers. Name must be between 3 and 24 characters"
},
"defaultValue": ""
},
"zipFileBlobUri": {
"type": "string",
"defaultValue": "[Link]
templates/tree/master/quickstarts/[Link]/custom-rp-with-
function/artifacts/functionzip/[Link]",
"metadata": {
"description": "The Uri to the uploaded function zip file"
}
}
},
"variables": {
"customrpApiversion": "2018-09-01-preview",
"customProviderName": "public",
"serverFarmName": "functionPlan"
},
"resources": [
{
"type": "[Link]/serverfarms",
"apiVersion": "2016-09-01",
"name": "[variables('serverFarmName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Y1",
"tier": "Dynamic",
"size": "Y1",
"family": "Y",
"capacity": 0
},
"kind": "functionapp",
"properties": {
"name": "[variables('serverFarmName')]",
"perSiteScaling": false,
"reserved": false,
"targetWorkerCount": 0,
"targetWorkerSizeId": 0
}
},
{
"type": "[Link]/sites",
"kind": "functionapp",
"name": "[parameters('funcname')]",
"apiVersion": "2018-02-01",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('[Link]/storageAccounts',
parameters('storageName'))]",
"[resourceId('[Link]/serverfarms',
variables('serverFarmName'))]"
],
"identity": {
"type": "SystemAssigned"
},
"properties": {
"name": "[parameters('funcname')]",
"siteConfig": {
"appSettings": [
{
"name": "AzureWebJobsDashboard",
"value": "
[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageNam
e'),';AccountKey=',listKeys(resourceId('[Link]/storageAccounts',
parameters('storageName')), '2015-05-01-preview').key1)]"
},
{
"name": "AzureWebJobsStorage",
"value": "
[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageNam
e'),';AccountKey=',listKeys(resourceId('[Link]/storageAccounts',
parameters('storageName')), '2015-05-01-preview').key1)]"
},
{
"name": "FUNCTIONS_EXTENSION_VERSION",
"value": "~2"
},
{
"name": "AzureWebJobsSecretStorageType",
"value": "Files"
},
{
"name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
"value": "
[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageNam
e'),';AccountKey=',listKeys(resourceId('[Link]/storageAccounts',
parameters('storageName')), '2015-05-01-preview').key1)]"
},
{
"name": "WEBSITE_CONTENTSHARE",
"value": "[concat(toLower(parameters('funcname')), 'b86e')]"
},
{
"name": "WEBSITE_NODE_DEFAULT_VERSION",
"value": "6.5.0"
},
{
"name": "WEBSITE_RUN_FROM_PACKAGE",
"value": "[parameters('zipFileBlobUri')]"
}
]
},
"clientAffinityEnabled": false,
"reserved": false,
"serverFarmId": "[resourceId('[Link]/serverfarms',
variables('serverFarmName'))]"
}
},
{
"type": "[Link]/storageAccounts",
"name": "[parameters('storageName')]",
"apiVersion": "2018-02-01",
"kind": "StorageV2",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
}
},
{
"apiVersion": "[variables('customrpApiversion')]",
"type": "[Link]/resourceProviders",
"name": "[variables('customProviderName')]",
"location": "[parameters('location')]",
"properties": {
"actions": [
{
"name": "ping",
"routingType": "Proxy",
"endpoint": "
[listSecrets(resourceId('[Link]/sites/functions',
parameters('funcname'), 'HttpTrigger1'), '2018-02-01').trigger_url]"
},
{
"name": "users/contextAction",
"routingType": "Proxy",
"endpoint": "
[listSecrets(resourceId('[Link]/sites/functions',
parameters('funcname'), 'HttpTrigger1'), '2018-02-01').trigger_url]"
}
],
"resourceTypes": [
{
"name": "users",
"routingType": "Proxy,Cache",
"endpoint": "
[listSecrets(resourceId('[Link]/sites/functions',
parameters('funcname'), 'HttpTrigger1'), '2018-02-01').trigger_url]"
}
]
},
"dependsOn": [
"[concat('[Link]/sites/',parameters('funcname'))]"
]
}
],
"outputs": {}
}

Pasos siguientes
Tutorial: Creación de una aplicación administrada con acciones y recursos
personalizados.
Referencia: Artefactos de elementos de la interfaz de usuario.
Referencia: Artefacto de definición de vista.
Referencia: Ver definición de artefacto
Artículo • 01/06/2023

Este artículo es una referencia para un artefacto [Link] en Azure Managed


Applications. Para más información sobre cómo crear configuraciones de vistas, consulte
Ver artefacto de definición.

Ver definición
El JSON siguiente muestra un ejemplo de un archivo [Link] para Azure
Managed Applications:

JSON

{
"views": [{
"kind": "Overview",
"properties": {
"header": "Welcome to your Demo Azure Managed Application",
"description": "This Managed application with Custom Provider is for
demo purposes only.",
"commands": [{
"displayName": "Ping Action",
"path": "/customping",
"icon": "LaunchCurrent"
}]
}
},
{
"kind": "CustomResources",
"properties": {
"displayName": "Users",
"version": "[Link]",
"resourceType": "users",
"createUIDefinition": {
"parameters": {
"steps": [{
"name": "add",
"label": "Add user",
"elements": [{
"name": "name",
"label": "User's Full Name",
"type": "[Link]",
"defaultValue": "",
"toolTip": "Provide a full user name.",
"constraints": { "required": true }
},
{
"name": "location",
"label": "User's Location",
"type": "[Link]",
"defaultValue": "",
"toolTip": "Provide a Location.",
"constraints": { "required": true }
}]
}],
"outputs": {
"name": "[steps('add').name]",
"properties": {
"FullName": "[steps('add').name]",
"Location": "[steps('add').location]"
}
}
}
},
"commands": [{
"displayName": "Custom Context Action",
"path": "users/contextAction",
"icon": "Start"
}],
"columns": [
{ "key": "[Link]", "displayName": "Full Name" },
{ "key": "[Link]", "displayName": "Location",
"optional": true }
]
}
}]
}

Pasos siguientes
Tutorial: Creación de una aplicación administrada con acciones y recursos
personalizados.
Referencia: Artefactos de elementos de la interfaz de usuario.
Referencia: Artefacto de plantilla de implementación.
az managedapp
Referencia

Administrar soluciones de plantilla proporcionadas y mantenidas por proveedores de


software independientes (ISV).

Comandos
ノ Expandir tabla

Nombre Description Tipo Estado

az managedapp create Cree una aplicación administrada. Principal GA

az managedapp definition Administración de aplicaciones administradas Principal GA


de Azure.

az managedapp definition Cree una definición de aplicación Principal GA


create administrada.

az managedapp definition Elimine una definición de aplicación Principal GA


delete administrada.

az managedapp definition Enumerar las definiciones de aplicaciones Principal GA


list administradas.

az managedapp definition Obtiene una definición de aplicación Principal GA


show administrada.

az managedapp definition Actualice una definición de aplicación Principal GA


update administrada.

az managedapp delete Elimine una aplicación administrada. Principal GA

az managedapp list Enumera las aplicaciones administradas. Principal GA

az managedapp show Obtiene una aplicación administrada. Principal GA

az managedapp create / Editar

Cree una aplicación administrada.

Azure CLI
az managedapp create --kind
--managed-rg-id
--name
--resource-group
[--location]
[--managedapp-definition-id]
[--parameters]
[--plan-name]
[--plan-product]
[--plan-publisher]
[--plan-version]
[--tags]

Ejemplos
Cree una aplicación administrada de tipo "ServiceCatalog". Esto requiere un
identificador de definición de aplicación administrada válido.

Azure CLI

az managedapp create -g MyResourceGroup -n MyManagedApp -l westcentralus --


kind ServiceCatalog \
-m "/subscriptions/{SubID}/resourceGroups/{ManagedResourceGroup}" \
-d
"/subscriptions/{SubID}/resourceGroups/{ResourceGroup}/providers/Microsoft.S
olutions/applianceDefinitions/{ApplianceDefinition}"

Cree una aplicación administrada de tipo "MarketPlace". Esto requiere un plan válido,
que contiene detalles sobre el paquete de Marketplace existente, como el nombre del
plan, la versión, el publicador y el producto.

Azure CLI

az managedapp create -g MyResourceGroup -n MyManagedApp -l westcentralus --


kind MarketPlace \
-m "/subscriptions/{SubID}/resourceGroups/{ManagedResourceGroup}" \
--plan-name ContosoAppliance --plan-version "1.0" --plan-product
"contoso-appliance" --plan-publisher Contoso

Parámetros requeridos

--kind

Tipo de aplicación administrada. puede ser Marketplace o servicecatalog.


--managed-rg-id -m

El grupo de recursos administrado por la aplicación administrada.

--name -n

Nombre de la aplicación administrada.

--resource-group -g

El grupo de recursos de la aplicación administrada.

Parámetros opcionales

--location -l

Ubicación de la aplicación administrada.

--managedapp-definition-id -d

Id. de definición de aplicación administrada completa.

--parameters

Cadena con formato JSON o una ruta de acceso a un archivo con este contenido.

--plan-name

Nombre del plan de paquete de aplicación administrada.

--plan-product

El producto del plan de paquetes de aplicaciones administradas.

--plan-publisher

Publicador del plan de paquetes de aplicaciones administradas.

--plan-version

Versión del plan de paquete de aplicación administrada.


--tags

Etiquetas separadas por espacios: key[=value] [key[=value] ...]. Use "" para borrar las
etiquetas existentes.

Parámetros globales

--debug

Aumente el nivel de detalle de registro para mostrar todos los registros de


depuración.

--help -h

Muestre este mensaje de ayuda y salga.

--only-show-errors

Mostrar solo los errores y suprimir las advertencias.

--output -o

Formato de salida.
valores aceptados: json, jsonc, none, table, tsv, yaml, yamlc
valor predeterminado: json

--query

Cadena de consulta de JMESPath. Para más información y ejemplos, consulte


[Link] .

--subscription

Nombre o identificador de la suscripción Puede configurar la suscripción


predeterminada mediante az account set -s NAME_OR_ID .

--verbose

Aumente el nivel de detalle de registro. Use --debug para obtener registros de


depuración completos.

az managedapp delete / Editar


Elimine una aplicación administrada.

Azure CLI

az managedapp delete [--ids]


[--name]
[--resource-group]
[--subscription]

Ejemplos
Elimine una aplicación administrada. (generado automáticamente)

Azure CLI

az managedapp delete --name MyManagedApplication --resource-group


MyResourceGroup --subscription MySubscription

Parámetros opcionales

--ids

Uno o varios identificadores de recursos (delimitados por espacios). Debe ser un


identificador de recurso completo que contenga toda la información de los
argumentos "Resource Id". Debe proporcionar argumentos --ids u otros argumentos
"Resource Id".

--name -n

Nombre de la aplicación administrada. Necesario.

--resource-group -g

El grupo de recursos de la aplicación administrada.

--subscription

Nombre o identificador de la suscripción Puede configurar la suscripción


predeterminada mediante az account set -s NAME_OR_ID .

Parámetros globales
--debug

Aumente el nivel de detalle de registro para mostrar todos los registros de


depuración.

--help -h

Muestre este mensaje de ayuda y salga.

--only-show-errors

Mostrar solo los errores y suprimir las advertencias.

--output -o

Formato de salida.
valores aceptados: json, jsonc, none, table, tsv, yaml, yamlc
valor predeterminado: json

--query

Cadena de consulta de JMESPath. Para más información y ejemplos, consulte


[Link] .

--subscription

Nombre o identificador de la suscripción Puede configurar la suscripción


predeterminada mediante az account set -s NAME_OR_ID .

--verbose

Aumente el nivel de detalle de registro. Use --debug para obtener registros de


depuración completos.

az managedapp list / Editar

Enumera las aplicaciones administradas.

Azure CLI

az managedapp list [--resource-group]


Ejemplos
Enumera las aplicaciones administradas. (generado automáticamente)

Azure CLI

az managedapp list --resource-group MyResourceGroup

Parámetros opcionales

--resource-group -g

El grupo de recursos de la aplicación administrada.

Parámetros globales

--debug

Aumente el nivel de detalle de registro para mostrar todos los registros de


depuración.

--help -h

Muestre este mensaje de ayuda y salga.

--only-show-errors

Mostrar solo los errores y suprimir las advertencias.

--output -o

Formato de salida.
valores aceptados: json, jsonc, none, table, tsv, yaml, yamlc
valor predeterminado: json

--query

Cadena de consulta de JMESPath. Para más información y ejemplos, consulte


[Link] .

--subscription
Nombre o identificador de la suscripción Puede configurar la suscripción
predeterminada mediante az account set -s NAME_OR_ID .

--verbose

Aumente el nivel de detalle de registro. Use --debug para obtener registros de


depuración completos.

az managedapp show / Editar

Obtiene una aplicación administrada.

Azure CLI

az managedapp show [--ids]


[--name]
[--resource-group]
[--subscription]

Parámetros opcionales

--ids

Uno o varios identificadores de recursos (delimitados por espacios). Debe ser un


identificador de recurso completo que contenga toda la información de los
argumentos "Resource Id". Debe proporcionar argumentos --ids u otros argumentos
"Resource Id".

--name -n

Nombre de la aplicación administrada.

--resource-group -g

El grupo de recursos de la aplicación administrada.

--subscription

Nombre o identificador de la suscripción Puede configurar la suscripción


predeterminada mediante az account set -s NAME_OR_ID .
Parámetros globales

--debug

Aumente el nivel de detalle de registro para mostrar todos los registros de


depuración.

--help -h

Muestre este mensaje de ayuda y salga.

--only-show-errors

Mostrar solo los errores y suprimir las advertencias.

--output -o

Formato de salida.
valores aceptados: json, jsonc, none, table, tsv, yaml, yamlc
valor predeterminado: json

--query

Cadena de consulta de JMESPath. Para más información y ejemplos, consulte


[Link] .

--subscription

Nombre o identificador de la suscripción Puede configurar la suscripción


predeterminada mediante az account set -s NAME_OR_ID .

--verbose

Aumente el nivel de detalle de registro. Use --debug para obtener registros de


depuración completos.
[Link]
Referencia

En este tema se muestran temas de ayuda para los cmdlets de Azure Resource Manager.

Active Directory
ノ Expandir tabla

Add-AzADAppPermission Adds an API permission.

Add-AzADGroupMember Adds member to group.

Get-AzADAppCredential Lists key credentials and password credentials for an application.

Get-AzADAppFederatedCredential Get federatedIdentityCredentials by Id from applications.

Get-AzADApplication Lists entities from applications or get entity from applications by key

Get-AzADAppPermission Lists API permissions the application has requested.

Get-AzADGroup Lists entities from groups or get entity from groups by key

Get-AzADGroupMember Lists members from group.

Get-AzADGroupOwner The owners of the group. Limited to 100 owners. Nullable. If this property is not specified when creating a Microsoft 365 g
the calling user is automatically assigned as the group owner. Supports $filter (/$count eq 0, /$count ne 0, /$count eq 1,
/$count ne 1). Supports $expand including nested $select. For example, /groups?
$filter=startsWith(displayName,'Role')&$select=id,displayName&$expand=owners($select=id,userPrincipalName,displayN

Get-AzADOrganization Retrieve a list of organization objects.

Get-AzADServicePrincipal Lists entities from service principals or get entity from service principals by key

Get- Get appRoleAssignments from servicePrincipals


AzADServicePrincipalAppRoleAssignment

Get-AzADSpCredential Lists key credentials and password credentials for an service principal.

Get-AzADUser Lists entities from users or get entity from users by key

New-AzADAppCredential Creates key credentials or password credentials for an application.

New-AzADAppFederatedCredential Create federatedIdentityCredential for applications.

New-AzADApplication Adds new entity to applications

New-AzADGroup Adds new entity to groups

New-AzADGroupOwner Create new navigation property ref to owners for groups

New-AzADServicePrincipal Adds new entity to servicePrincipals

New- Create new navigation property to appRoleAssignments for servicePrincipals


AzADServicePrincipalAppRoleAssignment

New-AzADSpCredential Creates key credentials or password credentials for an service principal.

New-AzADUser Adds new entity to users

Remove-AzADAppCredential Removes key credentials or password credentials for an application.

Remove-AzADAppFederatedCredential Delete navigation property federatedIdentityCredentials for applications

Remove-AzADApplication Deletes entity from applications

Remove-AzADAppPermission Removes an API permission.

Remove-AzADGroup Deletes entity from groups.

Remove-AzADGroupMember Deletes member from group Users, contacts, and groups that are members of this group. HTTP Methods: GET (supported f
all groups), POST (supported for security groups and mail-enabled security groups), DELETE (supported only for security
groups) Read-only. Nullable. Supports $expand.

Remove-AzADGroupOwner Delete ref of navigation property owners for groups


Remove-AzADServicePrincipal Deletes entity from service principal.

Remove- Delete navigation property appRoleAssignments for servicePrincipals


AzADServicePrincipalAppRoleAssignment

Remove-AzADSpCredential Removes key credentials or password credentials for an service principal.

Remove-AzADUser Deletes entity from users.

Update-AzADAppFederatedCredential Update the navigation property federatedIdentityCredentials in applications

Update-AzADApplication Updates entity in applications

Update-AzADGroup Update entity in groups

Update-AzADServicePrincipal Updates entity in service principal

Update- Update the navigation property appRoleAssignments in servicePrincipals


AzADServicePrincipalAppRoleAssignment

Update-AzADUser Updates entity in users

Aplicaciones administradas
ノ Expandir tabla

Get-AzManagedApplication Gets managed applications

Get-AzManagedApplicationDefinition Gets managed application definitions

New-AzManagedApplication Creates an Azure managed application.

New-AzManagedApplicationDefinition Creates a managed application definition.

Remove-AzManagedApplication Removes a managed application

Remove-AzManagedApplicationDefinition Removes a managed application definition

Set-AzManagedApplication Updates managed application

Set-AzManagedApplicationDefinition Updates managed application definition

Directiva
ノ Expandir tabla

Get-AzPolicyAlias Get-AzPolicyAlias retrieves and outputs Azure provider resource types that have aliases defined and match the
given parameter values. If no parameters are provided, all provider resource types that contain an alias will be
output. The -ListAvailable switch modifies this behavior by listing all matching resource types including those
without aliases.

Get-AzPolicyAssignment Gets policy assignments.

Get-AzPolicyDefinition Gets policy definitions.

Get-AzPolicyExemption Gets policy exemptions.

Get-AzPolicySetDefinition Gets policy set definitions.

Get-AzRoleManagementPolicy Get the specified role management policy for a resource scope

Get- Get the specified role management policy assignment for a resource scope
AzRoleManagementPolicyAssignment

New-AzPolicyAssignment Creates a policy assignment.

New-AzPolicyDefinition Creates a policy definition.

New-AzPolicyExemption Creates a policy exemption.

New-AzPolicySetDefinition Creates a policy set definition.

New- Create a role management policy assignment


AzRoleManagementPolicyAssignment
Remove-AzPolicyAssignment Removes a policy assignment.

Remove-AzPolicyDefinition Removes a policy definition.

Remove-AzPolicyExemption Removes a policy exemption.

Remove-AzPolicySetDefinition Removes a policy set definition.

Remove-AzRoleManagementPolicy Delete a role management policy

Remove- Delete a role management policy assignment


AzRoleManagementPolicyAssignment

Set-AzPolicyAssignment Modifies a policy assignment.

Set-AzPolicyDefinition Modifies a policy definition.

Set-AzPolicyExemption Modifies a policy exemption.

Set-AzPolicySetDefinition Modifies a policy set definition

Update-AzRoleManagementPolicy Update a role management policy

Recursos
ノ Expandir tabla

Export-AzResourceGroup Captures a resource group as a template and saves it to a file.

Export-AzTemplateSpec Exports a Template Spec to the local filesystem

Get-AzDenyAssignment Lists Azure RBAC deny assignments at the specified scope. By default it lists all deny assignments in the
selected Azure subscription. Use respective parameters to list deny assignments to a specific user, or to
list deny assignments on a specific resource group or resource.

The cmdlet may call below Microsoft Graph API according to input parameters:

GET /directoryObjects/{id}
POST /directoryObjects/getByIds

Get-AzDeployment Get deployment

Get-AzDeploymentOperation Get deployment operation

Get-AzDeploymentScript Gets or lists deployment scripts.

Get-AzDeploymentScriptLog Gets the log of a deployment script execution.

Get-AzDeploymentWhatIfResult Gets a template What-If result for a deployment at subscription scope.

Get-AzLocation Gets all locations and the supported resource providers for each location.

Get-AzManagementGroup Gets Management Group(s)

Get-AzManagementGroupDeployment Get deployment at a management group

Get-AzManagementGroupDeploymentOperation Get deployment operation for management group deployment

Get-AzManagementGroupDeploymentStack Gets Management Group scoped Deployment Stacks.

Get- Gets a template What-If result for a deployment at management group scope.
AzManagementGroupDeploymentWhatIfResult

Get-AzManagementGroupEntity Lists all Entities under the current Tenant

Get-AzManagementGroupHierarchySetting Gets the Hierarchy Settings under the current tenant

Get-AzManagementGroupNameAvailability Checks if the Management Group name is available in the Tenant and a valid name.

Get-AzManagementGroupSubscription Gets the details of Subscription(s) under a Management Group.

Get-AzPrivateLinkAssociation Gets all the Azure Resource Management Private Link Association(s).

Get-AzProviderFeature Gets information about Azure provider features.

Get-AzProviderOperation Gets the operations for an Azure resource provider that are securable using Azure RBAC.
Get-AzProviderPreviewFeature Gets a feature registration in your account.

Get-AzResource Gets resources.

Get-AzResourceGroup Gets resource groups.

Get-AzResourceGroupDeployment Gets the deployments in a resource group.

Get-AzResourceGroupDeploymentOperation Gets the resource group deployment operation

Get-AzResourceGroupDeploymentStack Gets Resource Group scoped Deployment Stacks.

Get-AzResourceGroupDeploymentWhatIfResult Gets a template What-If result for a deployment at resource group scope.

Get-AzResourceLock Gets a resource lock.

Get-AzResourceManagementPrivateLink Gets Azure Resource Management Private Link(s)

Get-AzResourceProvider Gets a resource provider.

Get-AzRoleAssignment Lists Azure RBAC role assignments at the specified scope. By default it lists all role assignments in the
selected Azure subscription. Use respective parameters to list assignments to a specific user, or to list
assignments on a specific resource group or resource.

The cmdlet may call below Microsoft Graph API according to input parameters:

GET /users/{id}
GET /servicePrincipals/{id}
GET /groups/{id}
GET /directoryObjects/{id}
POST /directoryObjects/getByIds

Please notice that this cmdlet will mark ObjectType as Unknown in output if the object of role
assignment is not found or current account has insufficient privileges to get object type.

Get-AzRoleAssignmentSchedule Get the specified role assignment schedule for a resource scope

Get-AzRoleAssignmentScheduleInstance Gets the specified role assignment schedule instance.

Get-AzRoleAssignmentScheduleRequest Get the specified role assignment schedule request.

Get-AzRoleDefinition Lists all Azure RBAC roles that are available for assignment.

Get-AzRoleEligibilitySchedule Get the specified role eligibility schedule for a resource scope

Get-AzRoleEligibilityScheduleInstance Gets the specified role eligibility schedule instance.

Get-AzRoleEligibilityScheduleRequest Get the specified role eligibility schedule request.

Get-AzRoleEligibleChildResource Get the child resources of a resource on which user has eligible access

Get-AzSubscriptionDeploymentStack Gets Subscription scoped Deployment Stacks.

Get-AzTag Gets predefined Azure tags | Gets the entire set of tags on a resource or subscription.

Get-AzTemplateSpec Gets or lists Template Specs

Get-AzTenantBackfillStatus Get the current Tenant Backfill Subscription Status

Get-AzTenantDeployment Get deployment at tenant scope

Get-AzTenantDeploymentOperation Get deployment operation for deployment at tenant scope

Get-AzTenantDeploymentWhatIfResult Gets a template What-If result for a deployment at tenant scope.

Invoke-AzResourceAction Invokes an action on a resource.

Move-AzResource Moves a resource to a different resource group or subscription.

New-AzDeployment Create a deployment at the current subscription scope.

New-AzManagementGroup Creates a Management Group

New-AzManagementGroupDeployment Create a deployment at a management group

New-AzManagementGroupDeploymentStack Creates a new Management Group scoped Deployment Stack.

New-AzManagementGroupHierarchySetting Creates Hierarchy Settings under the current tenant

New-AzManagementGroupSubscription Adds a Subscription to a Management Group.


New-AzPrivateLinkAssociation Creates the Azure Resource Management Private Link Association.

New-AzResource Creates a resource.

New-AzResourceGroup Creates an Azure resource group.

New-AzResourceGroupDeployment Adds an Azure deployment to a resource group.

New-AzResourceGroupDeploymentStack Creates a new Resource Group scoped Deployment Stack.

New-AzResourceLock Creates a resource lock.

New-AzResourceManagementPrivateLink Create Azure Resource Management Private Link

New-AzRoleAssignment Assigns the specified RBAC role to the specified principal, at the specified scope.

The cmdlet may call below Microsoft Graph API according to input parameters:

GET /users/{id}
GET /servicePrincipals/{id}
GET /groups/{id}
GET /directoryObjects/{id}

Please notice that this cmdlet will mark ObjectType as Unknown in output if the object of role
assignment is not found or current account has insufficient privileges to get object type.

New-AzRoleAssignmentScheduleRequest Creates a role assignment schedule request.

New-AzRoleDefinition Creates a custom role in Azure RBAC. Provide either a JSON role definition file or a PSRoleDefinition
object as input. First, use the Get-AzRoleDefinition command to generate a baseline role definition
object. Then, modify its properties as required. Finally, use this command to create a custom role using
role definition.

New-AzRoleEligibilityScheduleRequest Creates a role eligibility schedule request.

New-AzSubscriptionDeploymentStack Creates a new Subscription scoped Deployment Stack.

New-AzTag Creates a predefined Azure tag or adds values to an existing tag | Creates or updates the entire set of
tags on a resource or subscription.

New-AzTemplateSpec Creates a new Template Spec.

New-AzTenantDeployment Create a deployment at tenant scope

Publish-AzBicepModule Publishes a Bicep file to a registry.

Register-AzProviderFeature Registers an Azure provider feature in your current subscription context.

Register-AzProviderPreviewFeature Creates a feature registration in your account.

Register-AzResourceProvider Registers a resource provider.

Remove-AzDeployment Removes a deployment and any associated operations

Remove-AzDeploymentScript Removes a deployment script and its associated resources.

Remove-AzManagementGroup Removes a Management Group

Remove-AzManagementGroupDeployment Removes a deployment at a management group and any associated operations

Remove-AzManagementGroupDeploymentStack Removes a Management Group scoped Deployment Stack.

Remove-AzManagementGroupHierarchySetting Deletes all Hierarchy Settings under the current tenant

Remove-AzManagementGroupSubscription Removes a Subscription from a Management Group.

Remove-AzPrivateLinkAssociation Delete a specific azure private link association.

Remove-AzResource Removes a resource.

Remove-AzResourceGroup Removes a resource group.

Remove-AzResourceGroupDeployment Removes a resource group deployment and any associated operations.

Remove-AzResourceGroupDeploymentStack Removes a Resource Group scoped Deployment Stack.

Remove-AzResourceLock Removes a resource lock.

Remove-AzResourceManagementPrivateLink Deletes the Resource Manangement Private Link.


Remove-AzRoleAssignment Removes a role assignment to the specified principal who is assigned to a particular role at a particular
scope.

The cmdlet may call below Microsoft Graph API according to input parameters:

GET /users/{id}
GET /servicePrincipals/{id}
GET /groups/{id}
GET /directoryObjects/{id}
POST /directoryObjects/getByIds

Please notice that this cmdlet will mark ObjectType as Unknown in output if the object of role
assignment is not found or current account has insufficient privileges to get object type.

Remove-AzRoleDefinition Deletes a custom role in Azure RBAC. The role to be deleted is specified using the Id property of the
role. Delete will fail if there are existing role assignments made to the custom role.

Remove-AzSubscriptionDeploymentStack Removes a Subscription scoped Deployment Stack.

Remove-AzTag Deletes predefined Azure tags or values | Deletes the entire set of tags on a resource or subscription.

Remove-AzTemplateSpec Removes a Template Spec

Remove-AzTenantDeployment Removes a deployment at tenant scope and any associated operations

Save-AzDeploymentScriptLog Saves the log of a deployment script execution to disk.

Save-AzDeploymentTemplate Saves a deployment template to a file.

Save- Saves a Management Group scoped Deployment Stack Template.


AzManagementGroupDeploymentStackTemplate

Save-AzManagementGroupDeploymentTemplate Saves a deployment template to a file.

Save-AzResourceGroupDeploymentStackTemplate Saves a Resource Group scoped Deployment Stack Template.

Save-AzResourceGroupDeploymentTemplate Saves a resource group deployment template to a file.

Save-AzSubscriptionDeploymentStackTemplate Saves a Subscription scoped Deployment Stack Template.

Save-AzTenantDeploymentTemplate Saves a deployment template to a file.

Set-AzManagementGroupDeploymentStack Sets a new Management Group scoped Deployment Stack.

Set-AzResource Modifies a resource.

Set-AzResourceGroup Modifies a resource group.

Set-AzResourceGroupDeploymentStack Sets a new Resource Group scoped Deployment Stack.

Set-AzResourceLock Modifies a resource lock.

Set-AzRoleAssignment Update an existing Role Assignment.

The cmdlet may call below Microsoft Graph API according to input parameters:

GET /users/{id}
GET /servicePrincipals/{id}
GET /groups/{id}
GET /directoryObjects/{id}
POST /directoryObjects/getByIds

Please notice that this cmdlet will mark ObjectType as Unknown in output if the object of role
assignment is not found or current account has insufficient privileges to get object type.

Set-AzRoleDefinition Modifies a custom role in Azure RBAC. Provide the modified role definition either as a JSON file or as a
PSRoleDefinition. First, use the Get-AzRoleDefinition command to retrieve the custom role that you
wish to modify. Then, modify the properties that you wish to change. Finally, save the role definition
using this command.

Set-AzSubscriptionDeploymentStack Sets a new Subscription scoped Deployment Stack.

Set-AzTemplateSpec Modifies a Template Spec.

Start-AzTenantBackfill Starts backfilling subscriptions for the current Tenant

Stop-AzDeployment Cancel a running deployment

Stop-AzManagementGroupDeployment Cancel a running deployment at a management group


Stop-AzResourceGroupDeployment Cancels a resource group deployment.

Stop-AzRoleAssignmentScheduleRequest Cancels a pending role assignment schedule request.

Stop-AzRoleEligibilityScheduleRequest Cancels a pending role eligibility schedule request.

Stop-AzTenantDeployment Cancel a running deployment at tenant scope

Test-AzDeployment Validates a deployment.

Test-AzManagementGroupDeployment Validates a deployment at a management group.

Test-AzResourceGroupDeployment Validates a resource group deployment.

Test-AzTenantDeployment Validates a deployment at tenant scope.

Unregister-AzProviderFeature Unregisters an Azure provider feature in your account.

Unregister-AzProviderPreviewFeature Removes a feature registration from your account.

Unregister-AzResourceProvider Unregisters a resource provider.

Update-AzManagementGroup Updates a Management Group

Update-AzManagementGroupHierarchySetting Updates Hierarchy Settings under the current tenant

Update-AzTag Selectively updates the set of tags on a resource or subscription.

6 Colaborar con nosotros en GitHub


Comentarios de Azure PowerShell
El origen de este contenido se puede
encontrar en GitHub, donde también Azure PowerShell es un proyecto de código abierto. Seleccione un vínculo para
puede crear y revisar problemas y proporcionar comentarios:
solicitudes de incorporación de
cambios. Para más información,  Abrir incidencia con la documentación
consulte nuestra guía para
colaboradores.  Proporcionar comentarios sobre el producto
Managed Applications
Artículo • 03/02/2024

Azure Managed Applications permite ofrecer soluciones en la nube que los


consumidores pueden implementar y utilizar fácilmente. El publicador implementa la
infraestructura y proporciona soporte técnico continuo. Los recursos se implementan en
un grupo de recursos administrado por el publicador de la aplicación.

Consulte también
Introducción a las aplicaciones administradas de Azure
Inicio rápido: Creación y publicación de una definición de aplicación administrada
Habilitación y solicitud de acceso Just-In-Time para Azure Managed Applications
Funciones CreateUiDefinition
Artículo • 01/06/2023

En este artículo se proporciona información general sobre las funciones admitidas en


CreateUiDefinition.

Sintaxis de la función
Para usar una función, encierre la invocación entre corchetes. Por ejemplo:

JSON

"[function()]"

Puede hacerse referencia a cadenas y otras funciones como parámetros para una
función, pero las cadenas deben encerrarse entre comillas simples. Por ejemplo:

JSON

"[fn1(fn2(), 'demo text')]"

Si corresponde, puede hacer referencia a propiedades de la salida de una función


mediante el operador de punto. Por ejemplo:

JSON

"[func().prop1]"

Funciones de colección
Estas funciones se pueden usar con las colecciones, como las cadenas JSON, matrices y
objetos.

contains
empty
filter
first
last
length
map
skip
split
take

Funciones de conversión
Estas funciones se pueden usar para convertir valores entre tipos de datos JSON y
codificaciones.

bool
decodeBase64
decodeUriComponent
encodeBase64
encodeUriComponent
float
int
parse
string

Funciones de fecha
addHours
addMinutes
addSeconds
utcNow

Funciones lógicas
Estas funciones se pueden usar en los condicionales. Algunas funciones pueden no
admitir todos los tipos de datos JSON.

and
coalesce
equals
greater
greaterOrEquals
if
less
lessOrEquals
not
or

Funciones matemáticas
add
ceil
div
floor
max
min
mod
mul
rand
range
sub

Referencias a funciones
basics
ubicación
resourceGroup
steps
suscripción

Funciones de cadena
concat
endsWith
guid
indexOf
lastIndexOf
replace
startsWith
substring
toLower
toUpper

Pasos siguientes
Para ver una introducción a Azure Resource Manager, consulte Información
general sobre Azure Resource Manager.
Funciones de recopilación
CreateUiDefinition
Artículo • 01/06/2023

Estas funciones se pueden usar con las colecciones, como las cadenas JSON, matrices y
objetos.

contains
Devuelve true si una cadena contiene la subcadena especificada, una matriz contiene el
valor especificado o un objeto contiene la clave especificada.

Ejemplo: contenido de string


El siguiente ejemplo devuelve true :

JSON

"[contains('webapp', 'web')]"

Ejemplo: contenido de matriz


Asuma que element1 devuelve [1, 2, 3] . El siguiente ejemplo devuelve false :

JSON

"[contains(steps('demoStep').element1, 4)]"

Ejemplo: contenido de objeto


Asuma que element1 devuelve:

JSON

{
"key1": "Linux",
"key2": "Windows"
}
El siguiente ejemplo devuelve true :

JSON

"[contains(steps('demoStep').element1, 'key1')]"

empty
Devuelve true si la cadena, la matriz o el objeto es nulo o está vacío.

Ejemplo: string vacía


El siguiente ejemplo devuelve true :

JSON

"[empty('')]"

Ejemplo: matriz vacía


Asuma que element1 devuelve [1, 2, 3] . El siguiente ejemplo devuelve false :

JSON

"[empty(steps('demoStep').element1)]"

Ejemplo: objeto vacío


Asuma que element1 devuelve:

JSON

{
"key1": "Linux",
"key2": "Windows"
}

El siguiente ejemplo devuelve false :

JSON
"[empty(steps('demoStep').element1)]"

Ejemplo: NULL y sin definir


Asuma que element1 es null o no está definida. El siguiente ejemplo devuelve true :

JSON

"[empty(steps('demoStep').element1)]"

filter
Devuelve una nueva matriz después de aplicar la lógica de filtrado proporcionada como
una función lambda. El primer parámetro es la matriz que se usará para el filtrado. El
segundo parámetro es la función lambda que especifica la lógica de filtrado.

En el ejemplo siguiente se devuelve la matriz [ { "name": "abc" } ] .

JSON

"[filter(parse('[{\"name\":\"abc\"},{\"name\":\"xyz\"}]'), (item) =>


contains([Link], 'abc'))]"

first
Devuelve el primer carácter de la cadena especificada, el primer valor de la matriz
especificada o la primera clave y valor del objeto especificado.

Ejemplo: primer elemento de string


El siguiente ejemplo devuelve "c" :

JSON

"[first('contoso')]"

Ejemplo: primer elemento de matriz


Asuma que element1 devuelve [1, 2, 3] . El siguiente ejemplo devuelve 1 :
JSON

"[first(steps('demoStep').element1)]"

Ejemplo: primer elemento de objeto


Asuma que element1 devuelve:

JSON

{
"key1": "Linux",
"key2": "Windows"
}

El siguiente ejemplo devuelve {"key1": "Linux"} :

JSON

"[first(steps('demoStep').element1)]"

last
Devuelve el último carácter de la cadena especificada, el último valor de la matriz
especificada o la última clave y valor del objeto especificado.

Ejemplo: último elemento de string


El siguiente ejemplo devuelve "o" :

JSON

"[last('contoso')]"

Ejemplo: último elemento de matriz


Asuma que element1 devuelve [1, 2, 3] . El siguiente ejemplo devuelve 3 :

JSON

"[last(steps('demoStep').element1)]"
Ejemplo: último elemento de objeto
Asuma que element1 devuelve:

JSON

{
"key1": "Linux",
"key2": "Windows"
}

El siguiente ejemplo devuelve {"key2": "Windows"} :

JSON

"[last(steps('demoStep').element1)]"

length
Devuelve el número de caracteres de una cadena, el número de valores de una matriz o
el número de claves en un objeto.

Ejemplo: longitud de string


El siguiente ejemplo devuelve 7 :

JSON

"[length('Contoso')]"

Ejemplo: longitud de matriz


Asuma que element1 devuelve [1, 2, 3] . El siguiente ejemplo devuelve 3 :

JSON

"[length(steps('demoStep').element1)]"

Ejemplo: longitud de objeto


Asuma que element1 devuelve:

JSON

{
"key1": "Linux",
"key2": "Windows"
}

El siguiente ejemplo devuelve 2 :

JSON

"[length(steps('demoStep').element1)]"

map
Devuelve una nueva matriz después de llamar una función lambda en una matriz
específica. El primer parámetro es la matriz que se usará para el la función lambda. El
segundo parámetro es la función lambda.

En el ejemplo siguiente se devuelve una nueva matriz con todos los valores duplicados.
El resultado es [2, 4, 6] .

JSON

"[map(parse('[1, 2, 3]'), (item) => mul(2, item))]"

En el ejemplo siguiente se devuelve una nueva matriz ["abc", "xyz"] .

JSON

"[map(parse('[{\"name\":\"abc\"},{\"name\":\"xyz\"}]'), (item) =>


[Link])]"

skip
Omite un número especificado de elementos de una colección y, a continuación,
devuelve los elementos restantes.

Ejemplo: omisión en string


El siguiente ejemplo devuelve "app" :

JSON

"[skip('webapp', 3)]"

Ejemplo: omisión en matriz


Asuma que element1 devuelve [1, 2, 3] . El siguiente ejemplo devuelve [3] :

JSON

"[skip(steps('demoStep').element1, 2)]"

Ejemplo: omisión en objeto


Asuma que element1 devuelve:

JSON

{
"key1": "Linux",
"key2": "Windows"
}

El siguiente ejemplo devuelve {"key2": "Windows"} :

JSON

"[skip(steps('demoStep').element1, 1)]"

split
Devuelve una matriz de string que contiene los elementos substring de la entrada
delimitada por el separador.

En el ejemplo siguiente se devuelve la matriz [ "555", "867", "5309" ] .

JSON

"[split('555-867-5309', '-')]"
take
Devuelve un número especificado de caracteres contiguos desde el principio de la
cadena, un número especificado de valores contiguos desde el principio de la matriz o
un número de claves y valores contiguos desde el principio del objeto especificado.

Ejemplo: extracción en string


El siguiente ejemplo devuelve "web" :

JSON

"[take('webapp', 3)]"

Ejemplo: extracción en matriz


Asuma que element1 devuelve [1, 2, 3] . El siguiente ejemplo devuelve [1, 2] :

JSON

"[take(steps('demoStep').element1, 2)]"

Ejemplo: extracción en objeto


Asuma que element1 devuelve:

JSON

{
"key1": "Linux",
"key2": "Windows"
}

El siguiente ejemplo devuelve {"key1": "Linux"} :

JSON

"[take(steps('demoStep').element1, 1)]"

Pasos siguientes
Para ver una introducción a Azure Resource Manager, consulte Información
general sobre Azure Resource Manager.
Funciones de conversión
CreateUiDefinition
Artículo • 01/06/2023

Estas funciones se pueden usar para convertir valores entre tipos de datos JSON y
codificaciones.

bool
Convierte el parámetro en un booleano. Esta función admite parámetros de tipo
number, string y booleano. Similar a los booleanos en JavaScript, cualquier valor
excepto 0 o 'false' devuelve true .

El siguiente ejemplo devuelve true :

JSON

"[bool(1)]"

El siguiente ejemplo devuelve false :

JSON

"[bool(0)]"

El siguiente ejemplo devuelve true :

JSON

"[bool(true)]"

El siguiente ejemplo devuelve true :

JSON

"[bool('true')]"

decodeBase64
Decodifica el parámetro de una cadena de codificación Base 64. Esta función admite
parámetros solo de tipo string.

El siguiente ejemplo devuelve "Contoso" :

JSON

"[decodeBase64('Q29udG9zbw==')]"

decodeUriComponent
Decodifica el parámetro de una cadena de codificación con dirección URL. Esta función
admite parámetros solo de tipo string.

El siguiente ejemplo devuelve "[Link] :

JSON

"[decodeUriComponent('https%3A%2F%[Link]%2F')]"

encodeBase64
Codifica el parámetro a una cadena de codificación Base 64. Esta función admite
parámetros solo de tipo string.

El siguiente ejemplo devuelve "Q29udG9zbw==" :

JSON

"[encodeBase64('Contoso')]"

encodeUriComponent
Codifica el parámetro a una cadena de codificación con dirección URL. Esta función
admite parámetros solo de tipo string.

El siguiente ejemplo devuelve "https%3A%2F%[Link]%2F" :

JSON

"[encodeUriComponent('[Link]
FLOAT
Convierte el parámetro en un número de punto flotante. Esta función admite
parámetros de tipo number y string.

El siguiente ejemplo devuelve 1.0 :

JSON

"[float('1.0')]"

El siguiente ejemplo devuelve 2.9 :

JSON

"[float(2.9)]"

int
Convierte el parámetro en un número entero. Esta función admite parámetros de tipo
number y string.

El siguiente ejemplo devuelve 1 :

JSON

"[int('1')]"

El siguiente ejemplo devuelve 2 :

JSON

"[int(2.9)]"

parse
Convierte el parámetro en un tipo nativo. En otras palabras, esta función es el inverso de
string() . Esta función admite parámetros solo de tipo string.

El siguiente ejemplo devuelve 1 :


JSON

"[parse('1')]"

El siguiente ejemplo devuelve true :

JSON

"[parse('true')]"

El siguiente ejemplo devuelve [1,2,3] :

JSON

"[parse('[1,2,3]')]"

El siguiente ejemplo devuelve {"type":"webapp"} :

JSON

"[parse('{\"type\":\"webapp\"}')]"

string
Convierte el parámetro en una cadena. Esta función admite parámetros de todos los
tipos de datos JSON.

El siguiente ejemplo devuelve "1" :

JSON

"[string(1)]"

El siguiente ejemplo devuelve "2.9" :

JSON

"[string(2.9)]"

El siguiente ejemplo devuelve "[1,2,3]" :

JSON
"[string([1,2,3])]"

El siguiente ejemplo devuelve "{"type":"webapp"}" :

JSON

"[string({\"type\":\"webapp\"})]"

Pasos siguientes
Para ver una introducción a Azure Resource Manager, consulte Información
general sobre Azure Resource Manager.
Funciones de fecha CreateUiDefinition
Artículo • 01/06/2023

Las funciones que se van a usar al trabajar con valores de fecha.

addHours
Agrega un número entero de horas a la marca de tiempo especificada.

El siguiente ejemplo devuelve "1991-01-01T[Link].000Z" :

JSON

"[addHours('1990-12-31T[Link]Z', 1)]"

addMinutes
Agrega un número entero de minutos a la marca de tiempo especificada.

El siguiente ejemplo devuelve "1991-01-01T[Link].000Z" :

JSON

"[addMinutes('1990-12-31T[Link]Z', 1)]"

addSeconds
Agrega un número entero de segundos a la marca de tiempo especificada.

El siguiente ejemplo devuelve "1991-01-01T[Link].000Z" :

JSON

"[addSeconds('1990-12-31T[Link]Z', 1)]"

utcNow
Devuelve una cadena en formato ISO 8601 de la fecha y hora actuales en el equipo
local.
El siguiente ejemplo podría devolver "1990-12-31T[Link].000Z" :

JSON

"[utcNow()]"

Pasos siguientes
Para ver una introducción a Azure Resource Manager, consulte Información
general sobre Azure Resource Manager.
Funciones lógicas CreateUiDefinition
Artículo • 01/06/2023

Estas funciones se pueden usar en las expresiones condicionales. Algunas funciones


pueden no admitir todos los tipos de datos JSON.

y
Devuelve true si todos los parámetros se evalúan como true . Esta función admite dos
o más parámetros solo de tipo booleano.

El siguiente ejemplo devuelve true :

JSON

"[and(equals(0, 0), equals('web', 'web'), less(1, 2))]"

El siguiente ejemplo devuelve false :

JSON

"[and(equals(0, 0), greater(1, 2))]"

coalesce
Devuelve el valor del primer parámetro no nulo. Algunas funciones admiten todos los
tipos de datos JSON.

Asuma que element1 y element2 son indefinidos. El siguiente ejemplo devuelve


"Contoso" :

JSON

"[coalesce(steps('demoStep').element1, steps('demoStep').element2,
'Contoso')]"

Esta función es especialmente útil en el contexto de la invocación opcional que se


produce debido a una acción del usuario después de que se carga la página. Un
ejemplo puede ser si las restricciones colocadas en un campo de la interfaz de usuario
dependen del valor seleccionado actualmente en otro campo que no es visible
inicialmente. En este caso, se puede usar coalesce() para permitir que la función sea
sintácticamente válida en el momento de la carga de la página y tenga el efecto
deseado cuando el usuario interactúa con el campo.

Tenga en cuenta este elemento DropDown , que permite al usuario elegir entre varios
tipos de bases de datos diferentes:

{
"name": "databaseType",
"type": "[Link]",
"label": "Choose database type",
"toolTip": "Choose database type",
"defaultValue": "Oracle Database",
"visible": "[bool(steps('section_database').connectToDatabase)]"
"constraints": {
"allowedValues": [
{
"label": "Azure Database for PostgreSQL",
"value": "postgresql"
},
{
"label": "Oracle Database",
"value": "oracle"
},
{
"label": "Azure SQL",
"value": "sqlserver"
}
],
"required": true
},

Para condicionar la acción de otro campo según el valor seleccionado actualmente en


este campo, use coalesce() , como se muestra a continuación:

"regex": "[concat('^jdbc:',
coalesce(steps('section_database').[Link], ''),
'.*$')]",

Esto es necesario porque el campo databaseType no es visible inicialmente y, por lo


tanto, no tiene un valor. Esto hace que toda la expresión no se evalúe correctamente.

equals
Devuelve true si ambos parámetros tienen el mismo tipo y valor. Algunas funciones
admiten todos los tipos de datos JSON.

El siguiente ejemplo devuelve true :

JSON

"[equals(0, 0)]"

El siguiente ejemplo devuelve true :

JSON

"[equals('web', 'web')]"

El siguiente ejemplo devuelve false :

JSON

"[equals('abc', ['a', 'b', 'c'])]"

greater
Devuelve true si el primer parámetro es estrictamente mayor que el segundo
parámetro. Esta función admite parámetros solo de tipo number y string.

El siguiente ejemplo devuelve false :

JSON

"[greater(1, 2)]"

El siguiente ejemplo devuelve true :

JSON

"[greater('9', '10')]"

greaterOrEquals
Devuelve true si el primer parámetro es estrictamente mayor o igual que el segundo
parámetro. Esta función admite parámetros solo de tipo number y string.

El siguiente ejemplo devuelve true :

JSON

"[greaterOrEquals(2, 2)]"

if
Devuelve un valor dependiendo de si una condición es verdadera o falsa. El primer
parámetro es la condición que se va a probar. El segundo, es el valor que se va a
devolver si la condición es verdadera. El tercero, es el valor que se va a devolver si la
condición es falsa.

En el ejemplo siguiente se devuelve yes .

JSON

"[if(equals(42, mul(6, 7)), 'yes', 'no')]"

less
Devuelve true si el primer parámetro es estrictamente menor que el segundo
parámetro. Esta función admite parámetros solo de tipo number y string.

El siguiente ejemplo devuelve true :

JSON

"[less(1, 2)]"

El siguiente ejemplo devuelve false :

JSON

"[less('9', '10')]"

lessOrEquals
Devuelve true si el primer parámetro es estrictamente menor o igual que el segundo
parámetro. Esta función admite parámetros solo de tipo number y string.

El siguiente ejemplo devuelve true :

JSON

"[lessOrEquals(2, 2)]"

not
Devuelve true si el parámetro se evalúa como false . Esta función admite parámetros
solo de tipo booleano.

El siguiente ejemplo devuelve true :

JSON

"[not(false)]"

El siguiente ejemplo devuelve false :

JSON

"[not(equals(0, 0))]"

or
Devuelve true si al menos uno de los parámetros se evalúa como true . Esta función
admite dos o más parámetros solo de tipo booleano.

El siguiente ejemplo devuelve true :

JSON

"[or(equals(0, 0), equals('web', 'web'), less(1, 2))]"

El siguiente ejemplo devuelve true :

JSON

"[or(equals(0, 0), greater(1, 2))]"


Pasos siguientes
Para ver una introducción a Azure Resource Manager, consulte Información
general sobre Azure Resource Manager.
Funciones matemáticas
CreateUiDefinition
Artículo • 01/06/2023

Las funciones permiten realizar operaciones matemáticas.

add
Agrega dos números y devuelve el resultado.

El siguiente ejemplo devuelve 3 :

JSON

"[add(1, 2)]"

ceil
Devuelve el valor entero más grande mayor o igual que el número especificado.

El siguiente ejemplo devuelve 4 :

JSON

"[ceil(3.14)]"

div
Divide el segundo número por el primer número y devuelve el resultado. El resultado es
siempre un número entero.

El siguiente ejemplo devuelve 2 :

JSON

"[div(6, 3)]"

floor
Devuelve el valor entero más grande menor o igual que el número especificado.

El siguiente ejemplo devuelve 3 :

JSON

"[floor(3.14)]"

max
Devuelve el número más grande de los dos.

El siguiente ejemplo devuelve 2 :

JSON

"[max(1, 2)]"

Min
Devuelve el más pequeño de dos números.

El siguiente ejemplo devuelve 1 :

JSON

"[min(1, 2)]"

mod
Divide el primer número por el segundo número y devuelve el resto.

El siguiente ejemplo devuelve 0 :

JSON

"[mod(6, 3)]"

El siguiente ejemplo devuelve 2 :

JSON
"[mod(6, 4)]"

mul
Multiplica dos números y devuelve el resultado.

El siguiente ejemplo devuelve 6 :

JSON

"[mul(2, 3)]"

rand
Genera un número integral aleatorio en el intervalo especificado. Esta función no genera
números aleatorios criptográficamente seguros.

El siguiente ejemplo podría devolver 42 :

JSON

"[rand(-100, 100)]"

range
Genera una secuencia de números enteros en el intervalo especificado.

El siguiente ejemplo devuelve [1,2,3] :

JSON

"[range(1, 3)]"

sub
Resta el segundo número al primer número y devuelve el resultado.

El siguiente ejemplo devuelve 1 :

JSON
"[sub(3, 2)]"

Pasos siguientes
Para ver una introducción a Azure Resource Manager, consulte Información
general sobre Azure Resource Manager.
Funciones de referencia
CreateUiDefinition
Artículo • 01/06/2023

Se trata de las funciones que se van a usar para hacer referencia a salidas de las
propiedades o el contexto de un archivo de CreateUiDefinition.

basics
Devuelve los valores de salida de un elemento que se define en el paso Aspectos
básicos. Pase el nombre del elemento como un parámetro a esta función.

Para obtener los valores de salida de los elementos en otros pasos, utilice la función
steps().

En el ejemplo siguiente, se devuelve el resultado del elemento denominado


clusterName en el paso Basics:

JSON

"[basics('clusterName')]"

Los valores devueltos varían en función del tipo de elemento que se recupera.

ubicación
Devuelve la ubicación seleccionada en el paso Basics o el contexto actual.

El ejemplo siguiente devuelve un valor como "westus" :

JSON

"[location()]"

resourceGroup
Devuelve detalles sobre la instancia de resourceGroup seleccionada en el paso Aspectos
básicos o en el contexto actual.

En el ejemplo siguiente:
JSON

"[resourceGroup()]"

Devuelve las siguientes propiedades:

JSON

{
"mode": "New" or "Existing",
"name": "{resourceGroupName}",
"location": "{resourceGroupLocation}"
}

Puede obtener cualquier valor concreto con la notación de puntos.

JSON

"[resourceGroup().name]"

steps
Devuelve los elementos de un paso especificado. Pase el nombre del paso como un
parámetro a esta función. En los elementos devueltos, puede obtener valores concretos
de propiedad.

Para obtener los valores de salida de los elementos en el paso Aspectos básicos, use la
función basics().

El ejemplo siguiente devuelve el paso denominado vmParameters . En ese paso, es un


elemento denominado adminUsername .

JSON

"[steps('vmParameters').adminUsername]"

subscription
Devuelve propiedades para la suscripción seleccionada en el paso Aspectos básicos o el
contexto actual.

En el ejemplo siguiente:
JSON

"[subscription()]"

Devuelve las siguientes propiedades:

JSON

{
"id": "/subscriptions/{subscription-id}",
"subscriptionId": "{subscription-id}",
"tenantId": "{tenant-id}",
"displayName": "{name-of-subscription}"
}

Pasos siguientes
Para una introducción para desarrollar la interfaz del portal, vea
[Link] para la experiencia de creación de aplicaciones
administradas de Azure.
Funciones de cadena CreateUiDefinition
Artículo • 01/06/2023

Estas funciones se usan con cadenas JSON.

concat
Concatena una o varias cadenas.

Por ejemplo, si el valor de salida de element1 si "Contoso" , a continuación, en este


ejemplo se devuelve la cadena de "Demo Contoso app" :

JSON

"[concat('Demo ', steps('step1').element1, ' app')]"

endsWith
Determina si una cadena termina con un valor.

En el ejemplo siguiente se devuelve true.

JSON

"[endsWith('tuvwxyz', 'xyz')]"

guid
Genera una cadena única global (GUID).

El ejemplo siguiente devuelve un valor como "c7bc8bdc-7252-4a82-ba53-7c468679a511" :

JSON

"[guid()]"

indexOf
Devuelve la primera posición de un valor dentro de una cadena o -1 si no se encuentra.
En el ejemplo siguiente se devuelve 2.

JSON

"[indexOf('abcdef', 'cd')]"

lastIndexOf
Devuelve la última posición de un valor en una cadena o -1 si no se encuentra.

En el ejemplo siguiente se devuelve 3.

JSON

"[lastIndexOf('test', 't')]"

replace
Devuelve una cadena en la que se reemplazan todas las instancias de la cadena
especificada en la cadena actual con otra cadena.

El siguiente ejemplo devuelve "[Link] web app" :

JSON

"[replace('[Link] web app', '.net', '.com')]"

startsWith
Determina si una cadena empieza con un valor.

En el ejemplo siguiente se devuelve true.

JSON

"[startsWith('abcdefg', 'ab')]"

substring
Devuelve la subcadena de la cadena especificada. La subcadena comienza en el índice
especificado y tiene la longitud especificada.

El siguiente ejemplo devuelve "web" :

JSON

"[substring('[Link] web app', 12, 3)]"

toLower
Devuelve una cadena convertida a minúsculas.

El siguiente ejemplo devuelve "contoso" :

JSON

"[toLower('CONTOSO')]"

toUpper
Devuelve una cadena convertida a mayúsculas.

El siguiente ejemplo devuelve "CONTOSO" :

JSON

"[toUpper('contoso')]"

Pasos siguientes
Para ver una introducción a Azure Resource Manager, consulte Información
general sobre Azure Resource Manager.
Elementos CreateUiDefinition
Artículo • 01/06/2023

En este artículo se describen el esquema y las propiedades de todos los elementos


compatibles de CreateUiDefinition.

Schema
El esquema de la mayoría de los elementos es el siguiente:

JSON

{
"name": "element1",
"type": "[Link]",
"label": "Some text box",
"defaultValue": "my value",
"toolTip": "Provide a descriptive name.",
"constraints": {},
"options": {},
"visible": true
}

Propiedad Obligatorio Descripción

name Sí Un identificador interno para hacer referencia a una instancia


específica de un elemento. El uso más común del nombre del
elemento es en outputs , donde se asignan los valores de salida de
los elementos especificados a los parámetros de la plantilla.
También se puede usar para enlazar el valor de salida de un
elemento a defaultValue de otro elemento.

type Sí El control de interfaz de usuario que se representa para el elemento.


Para ver una lista de los tipos admitidos, consulte Elementos.

etiqueta Sí Texto para mostrar del elemento. Algunos tipos de elementos


contienen varias etiquetas, por lo que el valor podría ser un objeto
que contiene varias cadenas.

defaultValue No Valor predeterminado de la propiedad. Algunos tipos de elemento


admiten valores predeterminados complejos, por lo que el valor
podría ser un objeto.
Propiedad Obligatorio Descripción

toolTip No El texto que se muestra en la información sobre herramientas del


elemento. Similar a label , algunos elementos admiten varias
cadenas de información sobre herramientas. Se pueden insertar
vínculos en línea con la sintaxis de Markdown.

constraints No Una o varias propiedades que se utilizan para personalizar el


comportamiento de validación del elemento. Las propiedades que
se admiten para las restricciones varían según el tipo de elemento.
Algunos tipos de elemento no permiten personalizar el
comportamiento de validación y, por tanto, no tienen ninguna
propiedad constraints.

opciones No Propiedades adicionales que personalizan el comportamiento del


elemento. De forma similar a constraints , las propiedades que se
admiten varían según el tipo de elemento.

visible No Indica si se muestra el elemento. Si true , se muestran el elemento y


los elementos secundarios aplicables. El valor predeterminado es
true . Use funciones lógicas para controlar dinámicamente el valor
de esta propiedad.

Elementos
La documentación de cada elemento contiene un ejemplo de interfaz de usuario, un
esquema, comentarios sobre el comportamiento del elemento (normalmente sobre la
validación y personalización compatibles) y una salida de ejemplo.

[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Elemento de interfaz de usuario
[Link]
Artículo • 01/06/2023

El control CheckBox permite que los usuarios activen o desactiven una opción. El control
devuelve true cuando el control se activa o false, cuando no se activa.

Ejemplo de interfaz de usuario

Schema
JSON

{
"name": "legalAccept",
"type": "[Link]",
"label": "I agree to the terms and conditions.",
"constraints": {
"required": true,
"validationMessage": "Please acknowledge the legal conditions."
}
}

Salida de ejemplo
JSON

true

Observaciones
Cuando establece required en true, el usuario debe activar la casilla. Si el usuario no
activa la casilla, se muestra el mensaje de validación.
Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de interfaz de usuario
[Link]
Artículo • 25/03/2023

Control de selección con una lista desplegable. Puede permitir la selección de un solo
elemento o de varios. De forma opcional, también puede incluir una descripción con los
elementos.

Ejemplo de interfaz de usuario


El elemento DropDown tiene distintas opciones que determinan su apariencia en el
portal.

Cuando solo se permite la selección de un elemento, el control aparece como:

Cuando se incluyen descripciones, el control aparece como:

Cuando la selección múltiple está habilitada, el control agrega una opción Seleccionar
todo y casillas para activar más de un elemento:
Se pueden incluir descripciones con la selección múltiple habilitada.

Cuando el filtrado está habilitado, el control incluye un cuadro de texto para agregar el
valor de filtrado.

Schema
JSON

{
"name": "element1",
"type": "[Link]",
"label": "Example drop down",
"placeholder": "",
"defaultValue": ["Value two"],
"toolTip": "",
"multiselect": true,
"selectAll": true,
"filter": true,
"filterPlaceholder": "Filter items ...",
"multiLine": true,
"defaultDescription": "A value for selection",
"constraints": {
"allowedValues": [
{
"label": "Value one",
"description": "The value to select for option 1.",
"value": "one"
},
{
"label": "Value two",
"description": "The value to select for option 2.",
"value": "two"
}
],
"required": true
},
"visible": true
}

Salida de ejemplo
JSON

"two"

Observaciones
Use multiselect para especificar si los usuarios pueden seleccionar más de un
elemento.
De forma predeterminada, selectAll es true cuando la selección múltiple está
habilitada.
La propiedad filter permite a los usuarios buscar en una larga lista de opciones.
La etiqueta de [Link] es el texto para mostrar de un
elemento, y su valor es el valor de salida del elemento cuando se selecciona.
Si se especifica, el valor predeterminado debe ser una etiqueta presente en
[Link] . Si no se especifica, se selecciona el primer elemento
de [Link] . El valor predeterminado es null.
[Link] debe tener al menos un elemento.
Para emular un valor que no es obligatorio, agregue un elemento con una etiqueta
y el valor "" (cadena vacía) a [Link] .
La propiedad defaultDescription se usa para los elementos que no tienen una
descripción.
La propiedad placeholder es el texto de ayuda que desaparece cuando el usuario
comienza a editar. Si se definen tanto placeholder como defaultValue ,
defaultValue tiene prioridad y se muestra.

Ejemplo
En el ejemplo siguiente, defaultValue se define mediante los valores de allowedValues
en lugar de las etiquetas. El valor predeterminado puede contener varios valores cuando
multiselect está habilitado.

JSON

{
"name": "element1",
"type": "[Link]",
"label": "Example drop down",
"placeholder": "",
"defaultValue": [{"value": "one"}, {"value": "two"}],
"toolTip": "Multiple values can be selected",
"multiselect": true,
"selectAll": true,
"filter": true,
"filterPlaceholder": "Filter items ...",
"multiLine": true,
"defaultDescription": "A value for selection",
"constraints": {
"allowedValues": [
{
"label": "Value one",
"description": "The value to select for option 1.",
"value": "one"
},
{
"label": "Value two",
"description": "The value to select for option 2.",
"value": "two"
}
],
"required": true
},
"visible": true
}

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de la interfaz de usuario
[Link]
Artículo • 01/06/2023

Se trata de un control para recopilar datos tabulares. Todos los campos de la cuadrícula
son editables y el número de filas puede variar.

Ejemplo de interfaz de usuario

Schema
JSON

{
"name": "people",
"type": "[Link]",
"ariaLabel": "Enter information per person",
"label": "People",
"constraints": {
"width": "Full",
"rows": {
"count": {
"min": 1,
"max": 10
}
},
"columns": [
{
"id": "colName",
"header": "Name",
"width": "1fr",
"element": {
"type": "[Link]",
"placeholder": "Full name",
"constraints": {
"required": true,
"validations": [
{
"isValid": "[startsWith(last(take(steps('grid').people,
$rowIndex)).colName, 'contoso')]",
"message": "Must start with 'contoso'."
},
{
"regex": "^[a-z0-9A-Z]{1,30}$",
"message": "Only alphanumeric characters are allowed, and
the value must be 1-30 characters long."
}
]
}
}
},
{
"id": "colGender",
"header": "Gender",
"width": "1fr",
"element": {
"name": "dropDown1",
"type": "[Link]",
"placeholder": "Select a gender...",
"constraints": {
"allowedValues": [
{
"label": "Female",
"value": "female"
},
{
"label": "Male",
"value": "male"
},
{
"label": "Other",
"value": "other"
}
],
"required": true
}
}
},
{
"id": "colContactPreference",
"header": "Contact preference",
"width": "1fr",
"element": {
"type": "[Link]",
"constraints": {
"allowedValues": [
{
"label": "Email",
"value": "email"
},
{
"label": "Text",
"value": "text"
}
],
"required": true
}
}
}
]
}
}

Salida de ejemplo
JSON

{
"colName": "contoso",
"colGender": "female",
"colContactPreference": "email"
}

Observaciones
Los únicos controles válidos dentro de la matriz de columnas son TextBox,
OptionsGroupy DropDown.

La variable $rowIndex solo es válida en expresiones incluidas en elementos


secundarios de las columnas de la cuadrícula. Se trata de un entero que representa
el índice de fila relativa del elemento; y el recuento comienza en uno y se
incrementa en uno. Tal como se muestra en la sección "columns": del esquema, el
valor $rowIndex se utiliza con fines de validación.

Cuando las validaciones se realizan mediante la variable $rowIndex , es posible


obtener el valor de la fila actual mediante la combinación de los comandos last()
y take() .

Por ejemplo:

last(take(<reference_to_grid>, $rowIndex))

La propiedad label no aparece como parte del control, pero se muestra en el


resumen de la pestaña final.
La propiedad ariaLabel es la etiqueta de accesibilidad de la cuadrícula.
Especifique texto útil para los usuarios que utilizan lectores de pantalla.

La propiedad [Link] se utiliza para establecer el ancho global de la


cuadrícula. Las opciones son Full (Completa), Medium (Media) y Small (Pequeña). El
valor predeterminado es Full (Completa).

La propiedad width de los elementos secundarios de las columnas determina el


ancho de columna. Los anchos se especifican mediante unidades fraccionarias,
como 3fr; y el espacio total se asigna a las columnas de forma proporcional con
respecto a las unidades. Si no se especifica un ancho de columna, el valor
predeterminado es 1fr.

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de interfaz de usuario
[Link]
Artículo • 01/06/2023

Control que permite al usuario especificar uno o varios archivos para cargar.

Ejemplo de interfaz de usuario

Schema
JSON

{
"name": "element1",
"type": "[Link]",
"label": "Some file upload",
"toolTip": "",
"constraints": {
"required": true,
"accept": ".doc,.docx,.xml,application/msword"
},
"options": {
"multiple": false,
"uploadMode": "file",
"openMode": "text",
"encoding": "UTF-8"
},
"visible": true
}

Salida de ejemplo
Si [Link] es false y [Link] es file, la salida tiene el contenido del
archivo como una cadena JSON:

JSON

"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua."
Si [Link] es true y [Link] es file, la salida incluye el contenido
del archivo como una matriz JSON:

JSON

[
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.",
"Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi
ut aliquip ex ea commodo consequat.",
"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
dolore eu fugiat nulla pariatur.",
"Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum."
]

Si [Link] es false y [Link] es url, la salida incluye una dirección


URL como una cadena JSON:

JSON

"[Link]
15&st=2013-08-16&se=2013-08-17&sr=c&sp=r&rscd=file;%20attachment&rsct=binary
&sig=YWJjZGVmZw%3d%3d&sig=a39%2BYozJhGp6miujGymjRpN8tsrQfLo9Z3i8IRyIpnQ%3d"

Si [Link] es true y [Link] es url, la salida incluye una lista de


direcciones URL como una matriz JSON:

JSON

[
"[Link]
15&st=2013-08-16&se=2013-08-17&sr=c&sp=r&rscd=file;%20attachment&rsct=binary
&sig=YWJjZGVmZw%3d%3d&sig=a39%2BYozJhGp6miujGymjRpN8tsrQfLo9Z3i8IRyIpnQ%3d",
"[Link]
15&st=2013-08-16&se=2013-08-17&sr=c&sp=r&rscd=file;%20attachment&rsct=binary
&sig=YWJjZGVmZw%3d%3d&sig=a39%2BYozJhGp6miujGymjRpN8tsrQfLo9Z3i8IRyIpnQ%3d",
"[Link]
15&st=2013-08-16&se=2013-08-17&sr=c&sp=r&rscd=file;%20attachment&rsct=binary
&sig=YWJjZGVmZw%3d%3d&sig=a39%2BYozJhGp6miujGymjRpN8tsrQfLo9Z3i8IRyIpnQ%3d"
]

Cuando se prueba una definición CreateUiDefinition, algunos exploradores (como


Google Chrome) truncan las direcciones URL generadas por el elemento
[Link] en la consola del explorador. Puede que tenga que hacer
clic en cada vínculo individual para copiar las direcciones URL completas.
Observaciones
[Link] especifica los tipos de archivos que se muestran en el cuadro

de diálogo de archivo del explorador. Consulte la especificación HTML5 para ver


los valores permitidos. El valor predeterminado es null.
Si [Link] se establece en true, el usuario puede seleccionar más de un
archivo en el cuadro de diálogo del explorador. El valor predeterminado es false.
Este elemento permite cargar archivos de dos modos, en función del valor de
[Link] . Si se especifica file, la salida incluye el contenido del archivo

como un blob. Si se especifica url, el archivo se carga en una ubicación temporal y


la salida tiene la dirección URL del blob. Los blobs temporales se eliminan después
de 24 horas. El valor predeterminado es File.
Un archivo cargado está protegido. La dirección URL de salida incluye un token de
SAS para acceder al archivo durante la implementación.
El valor de [Link] determina cómo se lee el archivo. Si se espera que el
archivo sea de texto sin formato, especifique text; en caso contrario, especifique
binary. El valor predeterminado es text.
Si [Link] está establecido en file y [Link] está establecido
en binary, la salida estará codificada en base64.
[Link] especifica la codificación que se utilizará al leer el archivo. El
valor predeterminado es UTF-8, y se usa solo cuando [Link] está
establecido en text.

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de interfaz de usuario
[Link]
Artículo • 01/06/2023

Un control que agrega un cuadro de información. El cuadro contiene texto importante o


advertencias que explican a los usuarios los valores que se están proporcionando.
También puede vincular a un URI para ampliar la información.

Ejemplo de interfaz de usuario

Schema
JSON

{
"name": "text1",
"type": "[Link]",
"visible": true,
"options": {
"icon": "None",
"text": "Nullam eros mi, mollis in sollicitudin non, tincidunt sed enim.
Sed et felis metus, rhoncus ornare nibh. Ut at magna leo.",
"uri": "[Link]
}
}

Salida de ejemplo
JSON

"Nullam eros mi, mollis in sollicitudin non, tincidunt sed enim. Sed et
felis metus, rhoncus ornare nibh. Ut at magna leo."
Observaciones
Para icon , use Ninguno, Información, Advertencia o Error.
La propiedad uri es opcional.

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de interfaz de usuario
[Link]
Artículo • 01/06/2023

El control OptionsGroup permite a los usuarios seleccionar una opción de dos o más
opciones. Un usuario solo puede seleccionar una opción.

7 Nota

En el pasado, este control representaba las opciones en horizontal. Ahora, el


control presenta las opciones en vertical como botones de radio.

Ejemplo de interfaz de usuario

Schema
JSON

{
"name": "element1",
"type": "[Link]",
"label": "Some options group",
"defaultValue": "Value two",
"toolTip": "",
"constraints": {
"allowedValues": [
{
"label": "Value one",
"value": "one"
},
{
"label": "Value two",
"value": "two"
}
],
"required": true
},
"visible": true
}
Salida de ejemplo
JSON

"two"

Observaciones
La etiqueta de [Link] es el texto para mostrar de un
elemento, y su valor es el valor de salida del elemento cuando se selecciona.
Si se especifica, el valor predeterminado debe ser una etiqueta presente en
[Link] . Si no se especifica, se selecciona el primer elemento
de [Link] de forma predeterminada. El valor predeterminado
es null.
[Link] debe tener al menos un elemento.

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de interfaz de usuario
[Link]
Artículo • 01/06/2023

Control que puede usarse para proporcionar una contraseña y confirmarla.

Ejemplo de interfaz de usuario

Schema
JSON

{
"name": "element1",
"type": "[Link]",
"label": {
"password": "Password",
"confirmPassword": "Confirm password"
},
"toolTip": "",
"constraints": {
"required": true,
"regex": "^[a-zA-Z0-9]{8,}$",
"validationMessage": "Password must be at least 8 characters long,
contain only numbers and letters"
},
"options": {
"hideConfirmation": false
},
"visible": true
}

Salida de ejemplo
JSON
"p4ssw0rd"

Observaciones
Este elemento no admite la propiedad defaultValue .
Para más detalles sobre la implementación de constraints , consulte
[Link].
Si [Link] está establecido en true, se oculta el segundo cuadro
de texto para confirmar la contraseña del usuario. El valor predeterminado es false.

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de interfaz de usuario
[Link]
Artículo • 01/06/2023

Control que agrupa uno o varios elementos en un encabezado.

Ejemplo de interfaz de usuario

Schema
JSON

{
"name": "section1",
"type": "[Link]",
"label": "Example section",
"elements": [
{
"name": "text1",
"type": "[Link]",
"label": "Example text box 1"
},
{
"name": "text2",
"type": "[Link]",
"label": "Example text box 2"
}
],
"visible": true
}

Observaciones
elements debe tener al menos un elemento y puede tener todos los tipos de

elementos, excepto [Link] .


Este elemento no admite la propiedad toolTip .

Salida de ejemplo
Para obtener acceso a los valores de salida de los elementos en elements , use las
funciones basics() o steps() y la notación de puntos:

JSON

steps('configuration').section1.text1

Los elementos del tipo [Link] no tienen valores de salida por sí


mismos.

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de interfaz de usuario
[Link].
ServicePrincipalSelector
Artículo • 01/06/2023

Control que permite a los usuarios seleccionar una entidad de servicio o registrar una
aplicación nueva. Al seleccionar Crear nuevo, se recorren los pasos para registrar una
nueva aplicación. Al seleccionar una aplicación existente, el control proporciona un
cuadro de texto para escribir una contraseña o una huella digital de certificado.

Ejemplos de interfaz de usuario


Puede usar una aplicación predeterminada, crear una nueva aplicación o utilizar una
aplicación existente.

Uso de una aplicación predeterminada o creación de una


nueva
La vista predeterminada la definen los valores de la propiedad defaultValue y el tipo de
entidad de servicio se establece en Crear nueva. Si la propiedad principalId contiene
un identificador único global (GUID) válido, el control busca el elemento objectId de la
aplicación. El valor predeterminado se aplica si el usuario no realiza una selección en el
control.

Si quiere registrar una nueva aplicación, seleccione Cambiar selección y se mostrará el


cuadro de diálogo Registrar una aplicación. Escriba el nombre, el tipo de cuenta
admitida y pulse el botón Registrar.

Después de registrar una nueva aplicación, use el Tipo de autenticación para escribir
una contraseña o una huella digital de certificado.
Uso de la aplicación existente
Para usar una aplicación existente, pulse Seleccionar existentes y, a continuación, Hacer
la selección. Use el cuadro de diálogo Seleccionar una aplicación para buscar el
nombre de la aplicación. En los resultados, seleccione la aplicación y, a continuación, el
botón Seleccionar. Después de seleccionar una aplicación, el control muestra el tipo de
autenticación para escribir una contraseña o una huella digital de certificado.

Schema
JSON

{
"name": "ServicePrincipal",
"type": "[Link]",
"label": {
"password": "Password",
"certificateThumbprint": "Certificate thumbprint",
"authenticationType": "Authentication Type",
"sectionHeader": "Service Principal"
},
"toolTip": {
"password": "Password",
"certificateThumbprint": "Certificate thumbprint",
"authenticationType": "Authentication Type"
},
"defaultValue": {
"principalId": "<default guid>",
"name": "(New) default App Id"
},
"constraints": {
"required": true,
"regex": "^[a-zA-Z0-9]{8,}$",
"validationMessage": "Password must be at least 8 characters long,
contain only numbers and letters"
},
"options": {
"hideCertificate": false
},
"visible": true
}

Observaciones
Las propiedades necesarias son las siguientes:
name

type
label

defaultValue : especifica los valores de principalId y name predeterminados.

Las propiedades opcionales son las siguientes:


toolTip : Adjunta una información sobre herramientas infoBalloon a cada
etiqueta.
visible : Oculte o muestre el control.

options : Especifica si la opción de huella digital del certificado debe estar


disponible.
constraints : Restricciones regex para la validación de contraseñas.

Ejemplo
A continuación se muestra un ejemplo del control
[Link] . La propiedad defaultValue establece
principalId en <default guid> como un marcador de posición para un GUID de

identificador de aplicación predeterminado.

JSON

{
"$schema": "[Link]
preview/[Link]#",
"handler": "[Link]",
"version": "0.1.2-preview",
"parameters": {
"basics": [],
"steps": [
{
"name": "SPNcontrol",
"label": "SPNcontrol",
"elements": [
{
"name": "ServicePrincipal",
"type": "[Link]",
"label": {
"password": "Password",
"certificateThumbprint": "Certificate thumbprint",
"authenticationType": "Authentication Type",
"sectionHeader": "Service Principal"
},
"toolTip": {
"password": "Password",
"certificateThumbprint": "Certificate thumbprint",
"authenticationType": "Authentication Type"
},
"defaultValue": {
"principalId": "<default guid>",
"name": "(New) default App Id"
},
"constraints": {
"required": true,
"regex": "^[a-zA-Z0-9]{8,}$",
"validationMessage": "Password must be at least 8 characters
long, contain only numbers and letters"
},
"options": {
"hideCertificate": false
},
"visible": true
}
]
}
],
"outputs": {
"appId": "[steps('SPNcontrol').[Link]]",
"objectId": "[steps('SPNcontrol').[Link]]",
"password": "[steps('SPNcontrol').[Link]]",
"certificateThumbprint": "
[steps('SPNcontrol').[Link]]",
"newOrExisting": "
[steps('SPNcontrol').[Link]]",
"authenticationType": "
[steps('SPNcontrol').[Link]]"
}
}
}

Salida de ejemplo
appId es el identificador del registro de la aplicación que ha seleccionado o creado.

objectId es una matriz de los id. de objeto correspondientes a las entidades de servicio
configuradas para el registro de la aplicación seleccionada.

Cuando no se realiza ninguna selección desde el control, el valor de la propiedad


newOrExisting es nuevo:

JSON

{
"appId": {
"value": "<default guid>"
},
"objectId": {
"value": ["<default guid>"]
},
"password": {
"value": "<password>"
},
"certificateThumbprint": {
"value": ""
},
"newOrExisting": {
"value": "new"
},
"authenticationType": {
"value": "password"
}
}

Cuando se selecciona Crear nueva o una aplicación existente en el control, el valor de la


propiedad newOrExisting es existente:

JSON

{
"appId": {
"value": "<guid>"
},
"objectId": {
"value": ["<guid>"]
},
"password": {
"value": "<password>"
},
"certificateThumbprint": {
"value": ""
},
"newOrExisting": {
"value": "existing"
},
"authenticationType": {
"value": "password"
}
}

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de la interfaz de usuario
[Link]
Artículo • 01/06/2023

El control Slider permite a los usuarios seleccionar en un intervalo de valores permitidos.

Ejemplo de interfaz de usuario

Schema
JSON

{
"name": "memorySize",
"type": "[Link]",
"min": 1,
"max": 64,
"label": "Memory",
"subLabel": "MB",
"defaultValue": 24,
"showStepMarkers": false,
"toolTip": "Pick the size in MB",
"constraints": {
"required": false
},
"visible": true
}

Salida de ejemplo
JSON

26

Observaciones
Los valores min y max son obligatorios. Establecen los puntos inicial y final para el
control deslizante.
El valor predeterminado de la propiedad showStepMarkers es true. Los marcadores
de paso solo se muestran cuando el intervalo de mínimo a máximo es 100 o
menos.

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de la interfaz de usuario
[Link]
Artículo • 01/06/2023

Un control para asociar etiquetas a los recursos de una implementación.

Ejemplo de interfaz de usuario

Schema
JSON

{
"name": "element1",
"type": "[Link]",
"resources": [
"[Link]/storageAccounts",
"[Link]/virtualMachines"
]
}

Salida de ejemplo
JSON

{
"[Link]/storageAccounts": {
"Dept": "Finance",
"Environment": "Production"
},
"[Link]/virtualMachines": {
"Dept": "Finance"
}
}

Observaciones
Como mínimo, se debe especificar un elemento de la matriz resources .

Cada elemento de resources debe ser un tipo de recurso completo. Estos


elementos aparecen en la lista desplegable Recurso y el usuario los puede
etiquetar.

A la salida del control se le ha dado un formato para facilitar la asignación de


valores de etiqueta en una plantilla de Azure Resource Manager. Para recibir la
salida del control en una plantilla, incluya un parámetro en ella tal como se
muestra en el ejemplo siguiente:

JSON

"parameters": {
"tagsByResource": { "type": "object", "defaultValue": {} }
}

Para cada recurso que se pueda etiquetar, asigne la propiedad "tags" al valor del
parámetro para ese tipo de recurso:

JSON

{
"name": "saName1",
"type": "[Link]/storageAccounts",
"tags": "[ if(contains(parameters('tagsByResource'),
'[Link]/storageAccounts'), parameters('tagsByResource')
['[Link]/storageAccounts'], json('{}')) ]",
...

Utilice la función if cuando acceda al parámetro tagsByResource. Le permite


asignar un objeto vacío cuando no hay ninguna etiqueta asignada al tipo de
recurso especificado.

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de interfaz de usuario
[Link]
Artículo • 01/06/2023

Un control que se puede usar para agregar texto a la interfaz del portal.

Ejemplo de interfaz de usuario

Schema
JSON

{
"name": "text1",
"type": "[Link]",
"visible": true,
"options": {
"text": "Please provide the configuration values for your application.",
"link": {
"label": "Learn more",
"uri": "[Link]
}
}
}

Salida de ejemplo
JSON

"Please provide the configuration values for your application. Learn more"

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de interfaz de usuario
[Link]
Artículo • 01/06/2023

El elemento de interfaz de usuario (UI) TextBox se puede usar para agregar texto sin
formato. El elemento es un campo de entrada de una sola línea, pero admite la entrada
de varias líneas con la propiedad multiLine .

Ejemplo de interfaz de usuario


El elemento TextBox utiliza un cuadro de texto de una o varias líneas.

Ejemplo de cuadro de texto de una sola línea.

Ejemplo de cuadro de texto de varias líneas.

Schema
JSON

{
"name": "nameInstance",
"type": "[Link]",
"label": "Name",
"defaultValue": "contoso123",
"toolTip": "Use only allowed characters",
"placeholder": "",
"multiLine": false,
"constraints": {
"required": true,
"validations": [
{
"regex": "^[a-z0-9A-Z]{1,30}$",
"message": "Only alphanumeric characters are allowed, and the value
must be 1-30 characters long."
},
{
"isValid": "[startsWith(steps('resourceConfig').nameInstance,
'contoso')]",
"message": "Must start with 'contoso'."
}
]
},
"visible": true
}

Salida de ejemplo
JSON

"contoso123"

Observaciones
Utilice la propiedad toolTip para mostrar texto encima del elemento cuando el
cursor del mouse se desplaza sobre el símbolo de información.
La propiedad placeholder es el texto de ayuda que desaparece cuando el usuario
comienza a editar. Si se definen tanto placeholder como defaultValue ,
defaultValue tiene prioridad y se muestra.

La propiedad multiLine es un valor booleano, true o false . Para usar un cuadro


de texto de varias líneas, establezca la propiedad en true . Si no se requiere un
cuadro de texto de varias líneas, establezca la propiedad en false o exclúyala. En
el caso de las nuevas líneas, la salida JSON muestra \n para el avance de línea. El
cuadro de texto de varias líneas acepta \r para un retorno de carro (CR) y \n para
un avance de línea (LF). Por ejemplo, un valor predeterminado puede incluir \r\n
para especificar CRLF.
Si [Link] está establecido en true , el cuadro de texto debe
contener un valor para que la validación sea correcta. El valor predeterminado es
false .

La propiedad validations es una matriz en la que se agregan condiciones para


comprobar el valor proporcionado en el cuadro de texto.
La propiedad regex es un patrón de expresión regular de JavaScript. Si se
especifica, el valor del cuadro de texto debe coincidir con el patrón para que la
validación sea correcta. El valor predeterminado es null . Para obtener más
información sobre la sintaxis de regex, consulte la Referencia rápida de
expresiones regulares.
La propiedad isValid contiene una expresión que se evalúa como true o false .
Dentro de la expresión, se define la condición que determina si el cuadro de texto
es válido.
La propiedad message es una cadena que se muestra cuando el valor del cuadro
de texto no supera la validación.
Es posible especificar un valor para regex cuando required está establecido en
false . En este escenario, no se requiere un valor para que la validación del cuadro
de texto sea correcta. Si se especifica uno, debe coincidir con el patrón de
expresión regular.

Ejemplos
En los ejemplos se muestra cómo usar un cuadro de texto de una sola línea y uno de
varias líneas.

Una línea
En el ejemplo siguiente se usa un cuadro de texto con el control
[Link] para comprobar la disponibilidad de un nombre de
recurso.

En este ejemplo, al escribir un nombre de cuenta de almacenamiento y salir del cuadro


de texto, el control comprueba si el nombre es válido y si está disponible. Si el nombre
no es válido o ya existe, se muestra un mensaje de error. En la salida se muestra un
nombre de cuenta de almacenamiento válido y disponible.

JSON

{
"$schema": "[Link]
preview/[Link]#",
"handler": "[Link]",
"version": "0.1.2-preview",
"parameters": {
"basics": [
{
"name": "nameApi",
"type": "[Link]",
"request": {
"method": "POST",
"path": "[concat(subscription().id,
'/providers/[Link]/checkNameAvailability?api-version=2021-09-
01')]",
"body": {
"name": "[basics('txtStorageName')]",
"type": "[Link]/storageAccounts"
}
}
},
{
"name": "txtStorageName",
"type": "[Link]",
"label": "Storage account name",
"constraints": {
"validations": [
{
"isValid": "[basics('nameApi').nameAvailable]",
"message": "[basics('nameApi').message]"
}
]
}
}
],
"steps": [],
"outputs": {
"textBox": "[basics('txtStorageName')]"
}
}
}

Varias líneas
En este ejemplo se usa la propiedad multiLine para crear un cuadro de texto de varias
líneas con texto de marcador de posición.

JSON

{
"$schema": "[Link]
preview/[Link]#",
"handler": "[Link]",
"version": "0.1.2-preview",
"parameters": {
"basics": [
{
"name": "demoTextBox",
"type": "[Link]",
"label": "Multi-line text box",
"defaultValue": "",
"toolTip": "Use 1-60 alphanumeric characters, hyphens, spaces,
periods, and colons.",
"placeholder": "This is a multi-line text box:\nLine 1.\nLine
2.\nLine 3.",
"multiLine": true,
"constraints": {
"required": true,
"validations": [
{
"regex": "^[a-z0-9A-Z -.:\n]{1,60}$",
"message": "Only 1-60 alphanumeric characters, hyphens,
spaces, periods, and colons are allowed."
}
]
},
"visible": true
}
],
"steps": [],
"outputs": {
"textBox": "[basics('demoTextBox')]"
}
}
}

Pasos siguientes
Para ver una introducción sobre cómo crear definiciones de UI, consulte
[Link] para la experiencia de creación de aplicaciones
administradas de Azure.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Para más información sobre las funciones, consulte Funciones CreateUiDefinition.
Elemento de interfaz de usuario
[Link]
Artículo • 01/06/2023

El elemento CredentialsCombo es un grupo de controles con validación integrada para


las contraseñas de Windows y Linux o las claves públicas de SSH.

Ejemplo de interfaz de usuario


Para Windows, se muestra el control de contraseña.

Para Linux con una contraseña seleccionada, se muestra el control de contraseña:

Para Linux con una clave pública SSH seleccionada, se muestra el control de clave SSH:

El origen de la clave pública SSH tiene tres opciones:

Generar un par de claves nuevo: proporcione un nombre para crear un nuevo par
de claves SSH en Azure.
Usar la clave existente almacenada en Azure: seleccione una clave pública SSH
existente almacenada en Azure.
Usar la clave pública existente: use una clave pública SSH que ya haya creado. Por
ejemplo, una clave pública SSH que se creó en un equipo local.

En el caso de la opción Generación de un nuevo par de claves, las claves se generan en


la pestaña Revisar y crear después de seleccionar Crear y Descargar clave privada y
crear recurso.

Schema
Para Windows, use el esquema siguiente:

JSON

{
"name": "element1",
"type": "[Link]",
"label": {
"password": "Password",
"confirmPassword": "Confirm password"
},
"toolTip": {
"password": ""
},
"constraints": {
"required": true,
"customPasswordRegex": "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{12,}$",
"customValidationMessage": "The password must be alphanumeric, contain
at least 12 characters, and have at least 1 letter and 1 number."
},
"options": {
"hideConfirmation": false
},
"osPlatform": "Windows",
"visible": true
}

Para Linux, use el esquema siguiente:

JSON

{
"name": "element1",
"type": "[Link]",
"label": {
"authenticationType": "Authentication type",
"password": "Password",
"confirmPassword": "Confirm password",
"sshPublicKey": "SSH public key"
},
"toolTip": {
"authenticationType": "",
"password": "",
"sshPublicKey": ""
},
"constraints": {
"required": true,
"customPasswordRegex": "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{12,}$",
"customValidationMessage": "The password must be alphanumeric, contain
at least 12 characters, and have at least 1 letter and 1 number."
},
"options": {
"hideConfirmation": false,
"hidePassword": false
},
"osPlatform": "Linux",
"visible": true
}

Salida de ejemplo
Si osPlatform es Windows o osPlatform es Linux y el usuario proporcionó una
contraseña en lugar de una clave pública SSH, el control devuelve la siguiente salida:

JSON

{
"authenticationType": "password",
"password": "p4ssw0rddem0",
}

Si osPlatform es Linux y el usuario proporcionó una clave pública SSH, el control


devuelve la siguiente salida:

JSON

{
"authenticationType": "sshPublicKey",
"sshPublicKey":
"AAAAB3NzaC1yc2EAAAABIwAAAIEA1on8gxCGJJWSRT4uOrR13mUaUk0hRf4RzxSZ1zRbYYFw8pf
GesIFoEuVth4HKyF8k1y4mRUnYHP1XNMNMJl1JcEArC2asV8sHf6zSPVffozZ5TT4SfsUu/iKy9l
UcCfXzwre4WWZSXXcPff+EHtWshahu3WzBdnGxm5Xoi89zcE=",
"sshKeyName": "demo-public-key-name",
"generateNewSshKey": false
}

Cuando se selecciona Generar un par de claves nuevo, la propiedad sshPublicKey


está vacía. El motivo es que las claves se generan después de seleccionar Crear y
Descargar clave privada y crear recurso en la pestaña Revisar y crear.
La propiedad sshKeyName contiene un nombre solo cuando se genera un nuevo
par de claves SSH en Azure o para una clave que ya está almacenada en Azure.
El generateNewSshKey es false cuando se usa una clave existente. Cuando se genera
un nuevo par de claves, el valor es true.

Observaciones
osPlatform debe especificarse y puede ser Windows o Linux.
Si [Link] está establecido en true, los cuadros de texto de clave
pública SSH o contraseña deben contener valores para que la validación sea
correcta. El valor predeterminado es true.
Si [Link] está establecido en true, se oculta el segundo cuadro
de texto para confirmar la contraseña del usuario. El valor predeterminado es false.
Si [Link] está establecido en true, se oculta la opción para utilizar
la autenticación de contraseña. Se puede utilizar solo cuando osPlatform es Linux.
El valor predeterminado es false.
Se pueden implementar restricciones adicionales en las contraseñas permitidas
con la propiedad customPasswordRegex . La cadena de customValidationMessage se
muestra cuando se produce un error de validación personalizada en una
contraseña. El valor predeterminado para ambas propiedades es null. El esquema
muestra un ejemplo de cada propiedad.

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de interfaz de usuario
[Link]
Artículo • 01/06/2023

Control para seleccionar un tamaño para una o varias instancias de máquina virtual.

Ejemplo de interfaz de usuario


El usuario ve un selector con los valores predeterminados de la definición del elemento.

Después de seleccionar el control, el usuario ve una vista expandida de los tamaños


disponibles.

Schema
JSON

{
"name": "element1",
"type": "[Link]",
"label": "Size",
"toolTip": "",
"recommendedSizes": [
"Standard_D1",
"Standard_D2",
"Standard_D3"
],
"constraints": {
"allowedSizes": [],
"excludedSizes": [],
"numAvailabilityZonesRequired": 3,
"zone": "3"
},
"options": {
"hideDiskTypeFilter": false
},
"osPlatform": "Windows",
"imageReference": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "2012-R2-Datacenter"
},
"count": 2,
"visible": true
}

Salida de ejemplo
JSON

"Standard_D1"

Observaciones
recommendedSizes debe tener al menos un tamaño. El primer tamaño

recomendado se utiliza como valor predeterminado. La lista de los tamaños


disponibles no se ordena por el estado recomendado. El usuario puede seleccionar
esa columna para ordenar por estado recomendado.
Si no hay un tamaño recomendado en la ubicación seleccionada, el tamaño se
omite automáticamente. En su lugar, se utiliza el siguiente tamaño recomendado.
Tanto [Link] como [Link] son opcionales,
pero no se pueden usar simultáneamente. Para determinar la lista de los tamaños
disponibles, consulte la lista de tamaños de máquina virtual disponibles para una
suscripción. Los tipos no especificados en [Link] se ocultan,
mientras que los tipos no especificados en [Link] se
muestran.
osPlatform debe especificarse y puede ser Windows o Linux. Se usa para
determinar los costos de hardware de las máquinas virtuales.
imageReference se omite para las imágenes propias, pero se proporciona para las
imágenes de terceros. Se usa para determinar los costos de software de las
máquinas virtuales.
count se usa para establecer el multiplicador apropiado para el elemento. Admite
un valor estático, como 2, o un valor dinámico de otro elemento, como
[steps('step1').vmCount] . El valor predeterminado es 1.
numAvailabilityZonesRequired puede ser 1, 2 o 3.

De forma predeterminada, hideDiskTypeFilter es false. El filtro de tipo de disco


permite al usuario ver todos los tipos de disco o solo SSD.

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de interfaz de usuario
[Link]
Artículo • 01/06/2023

Control de cuadro de texto con validación integrada para nombres de usuario de


Windows y Linux.

Ejemplo de interfaz de usuario

Schema
JSON

{
"name": "element1",
"type": "[Link]",
"label": "User name",
"defaultValue": "",
"toolTip": "",
"constraints": {
"required": true,
"regex": "^[a-z0-9A-Z]{1,30}$",
"validationMessage": "Only alphanumeric characters are allowed, and the
value must be 1-30 characters long."
},
"osPlatform": "Windows",
"visible": true
}

Salida de ejemplo
JSON

"Example name"

Observaciones
Si [Link] está establecido en true, el cuadro de texto debe
contener un valor para que la validación sea correcta. El valor predeterminado es
true.
osPlatform debe especificarse y puede ser Windows o Linux.
[Link] es un patrón de expresión regular de JavaScript. Si se

especifica, el valor del cuadro de texto debe coincidir con el patrón para que la
validación sea correcta. El valor predeterminado es null.
[Link] es una cadena que se muestra cuando el valor del

cuadro de texto produce un error en la validación especificada por


[Link] . Si no se especifica, se utilizan los mensajes de validación

integrados del cuadro de texto. El valor predeterminado es null.


Este elemento tiene validación integrada que se basa en el valor especificado para
osPlatform . La validación integrada puede usarse junto con una expresión regular

personalizada. Si se especifica un valor para [Link] , se activan las


validaciones integradas y personalizadas.

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de interfaz de usuario
[Link]
elector
Artículo • 01/06/2023

Un control para seleccionar el certificado de un almacén de claves.

Ejemplo de interfaz de usuario


Al usuario se le presenta la opción de seleccionar un certificado disponible.

Después de seleccionar la opción Seleccionar un certificado, el usuario puede


especificar un almacén de claves y un certificado del almacén de claves.

El control se actualiza para mostrar el nombre del almacén de claves y el certificado


seleccionados.
Schema
JSON

{
"name": "keyVaultCertificateSelection",
"type": "[Link]",
"visible": true,
"toolTip": "Select certificate",
"label": "KeyVault certificates selection"
}

Salida de ejemplo
JSON

{
"keyVaultName": "azuretestkeyvault1",
"keyVaultId": "/subscriptions/{subscription-
id}/resourceGroups/resourcegroup1/providers/[Link]/vaults/azuret
estkeyvault1",
"certificateName": "certificate1",
"certificateUrl":
"[Link]
"certificateThumbprint": "1B721E84DDDD1BB69282B4A54F18C6ADB1C174F2"
}

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de la interfaz de usuario
[Link]
ctor
Artículo • 01/06/2023

Control para asignar identidades administradas para un recurso en una implementación.

Ejemplo de interfaz de usuario


El control está formado por los siguientes elementos:

Cuando el usuario selecciona Agregar, se abre el formulario siguiente. El usuario puede


seleccionar una o varias identidades asignadas por el usuario para el recurso.
Las identidades seleccionadas se muestran en la tabla. El usuario puede agregar o
eliminar elementos de esta tabla.
Schema
JSON

{
"name": "identity",
"type": "[Link]",
"label": "Managed Identity Configuration",
"toolTip": {
"systemAssignedIdentity": "Enable system assigned identity to grant the
resource access to other existing resources.",
"userAssignedIdentity": "Add user assigned identities to grant the
resource access to other existing resources."
},
"defaultValue": {
"systemAssignedIdentity": "Off"
},
"options": {
"hideSystemAssignedIdentity": false,
"hideUserAssignedIdentity": false
},
"visible": true
}

Salida de ejemplo
JSON

{
"identity": {
"value": {
"type": "UserAssigned",
"userAssignedIdentities": {

"/subscriptions/xxxx/resourceGroups/TestResourceGroup/providers/[Link]
nagedIdentity/userAssignedIdentities/TestUserIdentity1": {}
}
}
}
}

Observaciones
Use [Link] para establecer un valor inicial para el
control de opciones de la identidad asignada por el sistema. El valor
predeterminado es Off. Se admiten los valores siguientes:
On: se asigna una identidad asignada por el sistema al recurso.
Off: no se asigna una identidad asignada por el sistema al recurso.
OnOnly: se asigna una identidad asignada por el sistema al recurso. Los
usuarios no pueden editar este valor durante la implementación.
OffOnly: no se asigna una identidad asignada por el sistema al recurso. Los
usuarios no pueden editar este valor durante la implementación.

Si [Link] está establecido en true, no se muestra la


interfaz de usuario para configurar la identidad asignada por el sistema. El valor
predeterminado de esta opción es false.

Si [Link] está establecido en true, no se muestra la


interfaz de usuario para configurar la identidad asignada por el usuario. No se
asigna una identidad asignada por el usuario al recurso. El valor predeterminado
de esta opción es false.

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de interfaz de usuario
[Link]
bo
Artículo • 01/06/2023

Grupo de controles para seleccionar una dirección IP pública nueva o existente.

Ejemplo de interfaz de usuario

Si el usuario selecciona “None” para la dirección IP pública, se oculta el cuadro de


texto de la etiqueta de nombre de dominio.
Si el usuario selecciona una dirección IP pública, se deshabilita el cuadro de texto
de la etiqueta de nombre de dominio. Su valor es la etiqueta de nombre de
dominio de la dirección IP seleccionada.
El sufijo de nombre de dominio (por ejemplo, [Link]) se
actualiza automáticamente en función de la ubicación seleccionada.

Schema
JSON

{
"name": "element1",
"type": "[Link]",
"label": {
"publicIpAddress": "Public IP address",
"domainNameLabel": "Domain name label"
},
"toolTip": {
"publicIpAddress": "",
"domainNameLabel": ""
},
"defaultValue": {
"publicIpAddressName": "ip01",
"domainNameLabel": "mydomain"
},
"constraints": {
"required": {
"domainNameLabel": true
}
},
"options": {
"hideNone": false,
"hideDomainNameLabel": false,
"hideExisting": false,
"zone": 3
},
"visible": true
}

Salida de ejemplo
Si el usuario no selecciona ninguna dirección IP pública, el control devuelve la siguiente
salida:

JSON

{
"newOrExistingOrNone": "none"
}

Si el usuario selecciona una dirección IP pública nueva o existente, el control devuelve la


siguiente salida:

JSON

{
"name": "ip01",
"resourceGroup": "rg01",
"domainNameLabel": "mydomain",
"publicIPAllocationMethod": "Dynamic",
"sku": "Basic",
"newOrExistingOrNone": "new"
}

Cuando [Link] se especifica como true, newOrExistingOrNone solo


tendrá un valor de nuevo o existente.
Cuando [Link] se especifica como verdadero,
domainNameLabel no se declara.
Observaciones
Si [Link] está establecido en true, el usuario debe
proporcionar una etiqueta de nombre de dominio al crear una dirección IP pública
nueva. Las direcciones IP públicas existentes sin una etiqueta no están disponibles
para la selección.
Si [Link] está establecido en true, la opción para seleccionar None
como dirección IP pública está oculta. El valor predeterminado es false.
Si [Link] está establecido en true, se oculta el cuadro de
texto de la etiqueta de nombre de dominio. El valor predeterminado es false.
Si [Link] es true, el usuario no puede elegir una dirección IP
pública existente. El valor predeterminado es false.
Para zone , solo están disponibles las direcciones IP pública para la zona
especificada o direcciones IP públicas resistentes al uso de zonas.

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de la interfaz de usuario
[Link]
bo
Artículo • 01/06/2023

Un grupo de controles para seleccionar una red virtual nueva o existente.

Ejemplo de interfaz de usuario


Cuando el usuario selecciona una nueva red virtual, puede personalizar el nombre y el
prefijo de dirección de cada subred. La configuración de subredes es opcional.

Cuando el usuario selecciona una red virtual existente, debe asignar cada subred que
requiere la plantilla de implementación a una subred existente. En este caso, la
configuración de subredes es obligatoria.

Schema
JSON

{
"name": "element1",
"type": "[Link]",
"label": {
"virtualNetwork": "Virtual network",
"subnets": "Subnets"
},
"toolTip": {
"virtualNetwork": "",
"subnets": ""
},
"defaultValue": {
"name": "vnet01",
"addressPrefixSize": "/16"
},
"constraints": {
"minAddressPrefixSize": "/16"
},
"options": {
"hideExisting": false
},
"subnets": {
"subnet1": {
"label": "First subnet",
"defaultValue": {
"name": "subnet-1",
"addressPrefixSize": "/24"
},
"constraints": {
"minAddressPrefixSize": "/24",
"minAddressCount": 12,
"requireContiguousAddresses": true
}
},
"subnet2": {
"label": "Second subnet",
"defaultValue": {
"name": "subnet-2",
"addressPrefixSize": "/26"
},
"constraints": {
"minAddressPrefixSize": "/26",
"minAddressCount": 8,
"requireContiguousAddresses": true
}
}
},
"visible": true
}
Salida de ejemplo
JSON

{
"name": "vnet01",
"resourceGroup": "demoRG",
"addressPrefixes": [
"[Link]/16"
],
"addressPrefix": "[Link]/16",
"newOrExisting": "new",
"subnets": {
"subnet1": {
"name": "subnet-1",
"addressPrefix": "[Link]/24",
"startAddress": "[Link]"
},
"subnet2": {
"name": "subnet-2",
"addressPrefix": "[Link]/26",
"startAddress": "[Link]"
}
}
}

Observaciones
Si se ha especificado, el primer prefijo de dirección que no se superponga del
tamaño [Link] se determina automáticamente en
función de las redes virtuales existentes en la suscripción del usuario.
El valor predeterminado de [Link] y [Link]
es null.
[Link] debe especificarse. Las redes virtuales
existentes con un espacio de direcciones menor que el valor especificado no se
pueden seleccionar.
subnets debe especificarse y [Link] debe

especificarse para cada subred.


Al crear una nueva red virtual, el prefijo de dirección de cada subred se calcula
automáticamente basándose en el prefijo de dirección de la red virtual y en los
respectivos addressPrefixSize .
Si se usa una red virtual existente, las subredes menores que la
[Link] respectiva no están disponibles para la

selección. Además, si se especifica, las subredes que no tienen al menos


minAddressCount direcciones disponibles no se podrán seleccionar. El valor

predeterminado es 0. Para asegurarse de que las direcciones disponibles son


contiguas, especifique true en requireContiguousAddresses . El valor
predeterminado es true.
No se admite la creación de subredes en una red virtual existente.
Si el valor de [Link] es true, el usuario no puede elegir una red
virtual existente. El valor predeterminado es false.

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de UI
[Link]
Artículo • 01/06/2023

ArmApiControl Obtiene los resultados de una operación de API de Azure Resource


Manager mediante GET o POST. Puede usar los resultados para rellenar el contenido
dinámico en otros controles.

Ejemplo de interfaz de usuario


No hay ninguna interfaz de usuario para ArmApiControl .

Schema
En el ejemplo siguiente se muestra el esquema del control.

JSON

{
"name": "testApi",
"type": "[Link]",
"request": {
"method": "{HTTP-method}",
"path": "{path-for-the-URL}",
"body": {
"key1": "value1",
"key2": "value2"
}
}
}

Salida de ejemplo
La salida del control no se muestra al usuario. En su lugar, los resultados de la operación
se usan en otros controles.

Observaciones
La propiedad [Link] especifica el método HTTP. Solo se permiten GET o
POST.
La propiedad [Link] especifica una dirección URL que debe ser una ruta de
acceso relativa a un punto de conexión de Azure Resource Manager. Puede ser una
ruta de acceso estática o se puede crear dinámicamente mediante la referencia a
los valores de salida de los demás controles.

Por ejemplo, una llamada de Azure Resource Manager al proveedor de recursos


[Link]/expressRouteCircuits .

JSON

"path":
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/pro
viders/[Link]/expressRouteCircuits/{circuitName}?api-
version=2022-01-01"

La propiedad [Link] es opcional. Úsela para especificar un cuerpo JSON


que se enviará con la solicitud. Puede ser un cuerpo estático o se puede crear
dinámicamente si se hace referencia a los valores de salida de otros controles.

Ejemplo
En el ejemplo siguiente, el elemento providersApi usa ArmApiControl y llama a una API
para obtener una matriz de objetos de proveedor.

La propiedad allowedValues del elemento providersDropDown está configurada para


usar la matriz y obtener los nombres de proveedor. Los nombres de proveedor se
muestran en la lista desplegable.

La propiedad providerName de output muestra el nombre del proveedor seleccionado


en la lista desplegable. La salida se puede usar para pasar el valor a un parámetro en
una plantilla de Azure Resource Manager.

JSON

{
"$schema": "[Link]
preview/[Link]#",
"handler": "[Link]",
"version": "0.1.2-preview",
"parameters": {
"basics": [
{
"name": "providersApi",
"type": "[Link]",
"request": {
"method": "GET",
"path": "[concat(subscription().id,
'/providers/[Link]/expressRouteServiceProviders?api-version=2022-
01-01')]"
}
},
{
"name": "providerDropDown",
"type": "[Link]",
"label": "Provider",
"toolTip": "The provider that offers the express route connection.",
"constraints": {
"allowedValues": "[map(basics('providersApi').value, (item) =>
parse(concat('{\"label\":\"', [Link], '\",\"value\":\"', [Link],
'\"}')))]",
"required": true
},
"visible": true
}
],
"steps": [],
"outputs": {
"providerName": "[basics('providerDropDown')]"
}
}
}

Para ver un ejemplo del objeto ArmApiControl que usa la propiedad [Link] ,
consulte el ejemplo de línea única [Link]. En ese ejemplo se
comprueba la disponibilidad de un nombre de cuenta de almacenamiento y se devuelve
un mensaje si el nombre no está disponible.

Pasos siguientes
Para ver una introducción sobre cómo crear definiciones de UI, consulte
[Link] para la experiencia de creación de aplicaciones
administradas de Azure.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Para obtener más información sobre funciones como map , basics y parse ,
consulte Funciones CreateUiDefinition.
Elemento de la interfaz de usuario
[Link]
Artículo • 01/06/2023

El elemento de interfaz de usuario (IU) ResourceSelector permite a los usuarios


seleccionar un recurso de Azure existente de una suscripción. Especifique el espacio de
nombres del proveedor de recursos y el tipo de recurso, como
[Link]/storageAccounts , en el JSON del elemento. Puede usar el elemento
para filtrar la lista por suscripción o por ubicación. En la interfaz de usuario del
elemento, para buscar en el contenido de la lista, puede escribir un filtro como, por
ejemplo, un nombre de grupo de recursos, un nombre de recurso o un nombre parcial.

Ejemplo de interfaz de usuario


En este ejemplo, la ubicación del elemento se establece en all . En la lista se muestran
todas las cuentas de almacenamiento de la suscripción. Puede usar el cuadro de filtro
para buscar en la lista.
En este ejemplo, la ubicación del elemento se establece en onBasics . En la lista se
muestran las cuentas de almacenamiento que hay en la ubicación seleccionada en la
pestaña Básico. Puede usar el cuadro de filtro para buscar en la lista.

Cuando se usa el elemento para restringir la suscripción a onBasics , la interfaz de


usuario no muestra el nombre de la suscripción en la lista. Puede usar el cuadro de filtro
para buscar en la lista.

Schema
JSON

{
"name": "storageSelector",
"type": "[Link]",
"label": "Select storage accounts",
"resourceType": "[Link]/storageAccounts",
"options": {
"filter": {
"subscription": "onBasics",
"location": "onBasics"
}
}
}

Salida de ejemplo
JSON

"id": "/subscriptions/{subscription-id}/resourceGroups/{resource-
group}/providers/{resource-provider-namespace}/{resource-type}/{resource-
name}",
"location": "{deployed-location}",
"name": "{resource-name}"

Observaciones
En la propiedad resourceType , proporcione el espacio de nombres del proveedor
de recursos y el nombre del tipo de recurso que quiere mostrar en la lista. Para
obtener más información, vea la documentación de referencia sobre proveedores
de recursos.
La propiedad filter restringe las opciones disponibles para los recursos. Puede
restringir los resultados por ubicación o suscripción.
all : muestra todos los recursos. Es el valor predeterminado.

onBasics : muestra solo los recursos que coinciden con lo seleccionado en la

pestaña Básico.
Si omite la propiedad filter del archivo [Link], se muestran en
la lista todos los recursos del tipo de recurso especificado.

Pasos siguientes
Para ver una introducción sobre cómo crear definiciones de UI, consulte
[Link] para la experiencia de creación de aplicaciones
administradas de Azure.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de la interfaz de usuario
[Link]
Combo
Artículo • 01/06/2023

Un grupo de controles para crear varias cuentas de almacenamiento con nombres que
comienzan con un prefijo común.

Ejemplo de interfaz de usuario

Schema
JSON

{
"name": "element1",
"type": "[Link]",
"label": {
"prefix": "Storage account prefix",
"type": "Storage account type"
},
"toolTip": {
"prefix": "",
"type": ""
},
"defaultValue": {
"prefix": "sa",
"type": "Premium_LRS"
},
"constraints": {
"allowedTypes": [],
"excludedTypes": []
},
"count": 2,
"visible": true
}
Salida de ejemplo
JSON

{
"prefix": "sa",
"count": 2,
"resourceGroup": "rg01",
"type": "Premium_LRS"
}

Observaciones
El valor de [Link] se concatena con uno o varios números enteros
para generar la secuencia de nombres de cuenta de almacenamiento. Por ejemplo,
si [Link] es sa y count es 2, se generan los nombres de cuenta de
almacenamiento sa1 y sa2. La unicidad de los nombres de cuenta de
almacenamiento generados se valida automáticamente.
Los nombres de cuenta de almacenamiento se generan lexicográficamente en
función de count . Por ejemplo, si count es 10, los nombres de cuenta de
almacenamiento terminan en enteros de dos dígitos (01, 02, 03).
El valor predeterminado de [Link] es null, mientras que el de
[Link] es Premium_LRS.

Los tipos no especificados en [Link] está oculto, mientras que


los tipos no especificado en [Link] se muestran. Tanto
[Link] como [Link] son opcionales, pero

no se pueden usar simultáneamente.


Además de para generar nombres de cuenta de almacenamiento, count se usa
para establecer el multiplicador apropiado para el elemento. Admite un valor
estático, como 2, o un valor dinámico de otro elemento, como
[steps('step1').storageAccountCount] . El valor predeterminado es 1.

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de interfaz de usuario
[Link]
or
Artículo • 21/03/2023

Control que se usa para seleccionar una cuenta de almacenamiento nueva o existente.

Los nombres de cuenta de almacenamiento deben ser únicos globalmente en Azure con
una longitud de 3 a 24 caracteres e incluir solo letras en minúsculas o números.

Ejemplo de interfaz de usuario


El control StorageAccountSelector muestra el nombre predeterminado de una cuenta
de almacenamiento. El valor predeterminado se establece en el código.

El control StorageAccountSelector permite crear una cuenta de almacenamiento o


seleccionar una cuenta de almacenamiento existente.
Schema
JSON

{
"name": "element1",
"type": "[Link]",
"label": "Storage account selector",
"toolTip": "",
"defaultValue": {
"name": "storageaccount01",
"type": "Premium_LRS"
},
"constraints": {
"allowedTypes": [],
"excludedTypes": []
},
"options": {
"hideExisting": false
},
"visible": true
}

Salida de ejemplo
JSON

{
"name": "storageaccount01",
"resourceGroup": "demoRG",
"type": "Standard_LRS",
"newOrExisting": "new",
"kind": "StorageV2"
}

Observaciones
El elemento [Link] es necesario y el valor se valida automáticamente
para la unicidad. Si el nombre de la cuenta de almacenamiento no es único, el
usuario debe especificar otro nombre o elegir una cuenta de almacenamiento
existente.
El valor predeterminado de [Link] es Premium_LRS. Puede establecer
cualquier tipo de cuenta de almacenamiento como valor predeterminado. Por
ejemplo, Standard_LRS o Standard_GRS.
Los tipos no especificados en [Link] está oculto, mientras que
los tipos no especificado en [Link] se muestran. Tanto
[Link] como [Link] son opcionales, pero

no se pueden usar simultáneamente.


Si el valor de [Link] es true, el usuario no puede elegir una cuenta
de almacenamiento existente. El valor predeterminado es false. El control solo
muestra las cuentas de almacenamiento como existentes si están en el mismo
grupo de recursos y región que las selecciones realizadas en la pestaña Aspectos
básicos.
La propiedad kind muestra el valor si se creó una nueva cuenta de
almacenamiento o el valor de una cuenta de almacenamiento existente.

Ejemplo
Los valores predeterminados para el nombre y el tipo de la cuenta de almacenamiento
son ejemplos. Puede establecer sus propios valores predeterminados para su entorno.

En la sección outputs , la salida de storageSelector incluye todos los valores de una


cuenta de almacenamiento. storageKind y storageName son ejemplos de cómo generar
valores específicos.

JSON

{
"$schema": "[Link]
preview/[Link]#",
"handler": "[Link]",
"version": "0.1.2-preview",
"parameters": {
"basics": [
{}
],
"steps": [
{
"name": "StorageAccountSelector",
"label": "Storage account selector",
"elements": [
{
"name": "storageSelectorElement",
"type": "[Link]",
"label": "Storage account name",
"toolTip": "",
"defaultValue": {
"name": "storageaccount01",
"type": "Premium_LRS"
},
"options": {
"hideExisting": false
},
"visible": true
}
]
}
],
"outputs": {
"location": "[location()]",
"storageSelector": "
[steps('StorageAccountSelector').storageSelectorElement]",
"storageKind": "
[steps('StorageAccountSelector').[Link]]",
"storageName": "
[steps('StorageAccountSelector').[Link]]"
}
}
}

Salida de ejemplo
Salida de una nueva cuenta de almacenamiento.

JSON

{
"location": {
"value": "westus3"
},
"storageSelector": {
"value": {
"name": "demostorageaccount01",
"resourceGroup": "demoRG",
"type": "Standard_GRS",
"newOrExisting": "new",
"kind": "StorageV2"
}
},
"storageKind": {
"value": "StorageV2"
},
"storageName": {
"value": "demostorageaccount01"
}
}

Salida de una cuenta de almacenamiento existente.

JSON
{
"location": {
"value": "westus3"
},
"storageSelector": {
"value": {
"name": "demostorage99",
"resourceGroup": "demoRG",
"type": "Standard_LRS",
"newOrExisting": "existing",
"kind": "StorageV2"
}
},
"storageKind": {
"value": "StorageV2"
},
"storageName": {
"value": "demostorage99"
}
}

Pasos siguientes
Para ver una introducción sobre cómo crear definiciones de UI, consulte
[Link] para la experiencia de creación de aplicaciones
administradas de Azure.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Elemento de interfaz de usuario
[Link]
Artículo • 01/06/2023

Un control para seleccionar un blob de una cuenta de Azure Storage.

Ejemplo de interfaz de usuario


Al usuario se le presenta la opción de buscar blobs de almacenamiento disponibles.

Después de seleccionar Examinar, el usuario puede seleccionar una cuenta de


almacenamiento.

El usuario verá los contenedores en la cuenta de almacenamiento y podrá seleccionar


uno.

En el contenedor, el usuario puede seleccionar un archivo.


El control se actualiza para mostrar el nombre del archivo seleccionado.

Schema
JSON

{
"name": "storageBlobSelection",
"type": "[Link]",
"visible": true,
"toolTip": "Select storage blob",
"label": "Package (.zip, .cspkg)",
"options": {
"text": "Select Package"
},
"constraints": {
"allowedFileExtensions": [ "zip", "cspkg" ]
}
}

Salida de ejemplo
JSON
{
"blobName": "[Link]",
"sasUri":
"[Link]
sp=r&se=2020-10-10T[Link]Z&sv=2019-12-
12&sr=b&sig=X4EL8ZsRmiP1TVxkVfTcGyMj2sHg1zCbFBXsDmnNOyg%3D"
}

Observaciones
La propiedad [Link] especifica los tipos de archivo
permitidos.

Pasos siguientes
Para ver una introducción sobre la creación de definiciones de interfaz de usuario,
consulte Introducción a CreateUiDefinition.
Para ver una descripción de las propiedades comunes de los elementos de interfaz
de usuario, consulte Elementos CreateUiDefinition.
Definiciones integradas de Azure Policy
para Azure Managed Applications
Artículo • 06/02/2024

Esta página es un índice de las definiciones de directivas integradas de Azure Policy para
Azure Managed Applications. Puede encontrar elementos integrados adicionales de
Azure Policy para otros servicios en Definiciones de elementos integrados de Azure
Policy.

El nombre de cada definición de directiva integrada se vincula a la definición de


directiva en Azure Portal. Use el vínculo de la columna Versión para ver el origen en el
repositorio de GitHub de Azure Policy .

Azure Managed Applications


ノ Expandir tabla

Nombre Descripción Efectos Versión


(Azure Portal) (GitHub)

La definición de Use su propia cuenta de audit, Audit, deny, 1.1.0


aplicación para la almacenamiento para controlar los Deny, disabled,
aplicación datos de definición de la aplicación Disabled
administrada debe cuando se trate de un requisito de
usar la cuenta de cumplimiento normativo. Puede optar
almacenamiento por almacenar la definición de
proporcionada por el aplicación administrada en la cuenta de
cliente . almacenamiento que ha proporcionado
durante la creación para que pueda
administrar totalmente su ubicación y
acceso para cumplir con los requisitos
de cumplimiento normativo.

Implementación de Implementa un recurso de asociación deployIfNotExists 1.0.0


asociaciones para que asocia los tipos de recursos
aplicaciones seleccionados con la aplicación
administradas administrada especificada. Esta
implementación de directiva no admite
los tipos de recursos anidados.

Pasos siguientes
Los elementos integrados se pueden encontrar en el repositorio de GitHub de
Azure Policy .
Revise la estructura de definición de Azure Policy.
Vea la Descripción de los efectos de directivas.

También podría gustarte