Compartir a través de


Creación e implementación de conjuntos de implementación de Azure en Bicep

Una pila de implementación de Azure es un recurso que permite gestionar un grupo de recursos de Azure como una unidad única y cohesiva. Al enviar un archivo de Bicep o una plantilla JSON de Azure Resource Manager (plantilla JSON de ARM) a una pila de implementación, se definen los recursos que administra la pila. Si quita un recurso de la plantilla, se puede desasociar o eliminar en función del comportamiento actionOnUnmanageespecificado de la pila de implementación. Puede restringir el acceso a la pila de implementación mediante el control de acceso basado en roles de Azure (Azure RBAC), de forma similar a otros recursos de Azure.

Para crear y actualizar una pila de implementación, use la CLI de Azure, Azure PowerShell o Azure Portal con los archivos de Bicep. La pila transpila estos archivos de Bicep en plantillas JSON de ARM y los implementa como un objeto de despliegue. La pila de implementación ofrece funcionalidades adicionales más allá de los recursos de implementación conocidos y es un superconjunto de esas funcionalidades.

Microsoft.Resources/deploymentStacks es el tipo de recurso para las pilas de implementación. Consta de una plantilla principal que puede realizar actualizaciones de 1 a varios entre ámbitos en los recursos que describe y bloquear los cambios no deseados en esos recursos.

Al planear la implementación y determinar qué grupos de recursos deben formar parte de la misma pila, tenga en cuenta el ciclo de vida de administración de esos recursos, que incluye la creación, actualización y eliminación. Por ejemplo, es posible que tenga que aprovisionar algunas máquinas virtuales de prueba para varios equipos de aplicaciones en distintos ámbitos de grupo de recursos. Puede usar una pila de implementación para crear estos entornos de prueba y actualizar las configuraciones de máquina virtual de prueba a través de las actualizaciones posteriores de la pila de implementación. Después de completar el proyecto, es posible que tenga que quitar o eliminar los recursos que haya creado, como las máquinas virtuales de prueba. Use una pila de implementación y especifique la marca de eliminación adecuada para quitar los recursos administrados. Este enfoque simplificado ahorra tiempo durante la limpieza del entorno, ya que implica una única actualización del recurso de pila en lugar de modificar o quitar individualmente cada máquina virtual de prueba en varios ámbitos de grupo de recursos.

Las pilas de implementación requieren Azure PowerShell versión 12.0.0 o posterior o la CLI de Azure versión 2.61.0 o posterior.

Para crear la primera pila de implementación, consulte Inicio rápido: creación de una pila de implementación.

¿Por qué usar conjuntos de implementación?

Las pilas de implementación proporcionan las siguientes ventajas:

  • Aprovisionamiento y gestión racionalizados de recursos en diferentes ámbitos como una entidad unificada.
  • Prevención de modificaciones no deseadas en los recursos gestionados mediante la configuración de denegación.
  • Limpieza eficaz del entorno mediante banderas de borrado durante las actualizaciones de la pila de despliegue.
  • Uso de plantillas estándar como Bicep, ARM templates o especificaciones de plantillas para sus conjuntos de implementación.

Restricciones conocidas

  • Hay un límite de 800 pilas de implementación que se pueden crear dentro de un único ámbito.
  • Un máximo de 2 000 asignaciones de denegación puede existir en cualquier ámbito determinado.
  • La pila de implementación no administra los recursos creados implícitamente. Por lo tanto, no puede usar asignaciones de denegación ni limpieza para estos recursos.
  • Las asignaciones de denegación no admiten etiquetas.
  • Las asignaciones de denegación no se admiten en el ámbito del grupo de gestión. Sin embargo, se admiten en una pila de grupos de gestión si el despliegue apunta al ámbito de la suscripción.
  • Las pilas de implementación no pueden borrar los secretos del almacén de claves. Si va a quitar secretos del almacén de claves de una plantilla, asegúrese de ejecutar también el comando update/delete de la pila de implementación con el modo de desasociación.

Problemas conocidos

  • Actualmente, la eliminación de grupos de recursos pasa por alto las asignaciones denegadas. Al crear una pila de implementación en el ámbito del grupo de recursos, el archivo de Bicep no contiene la definición del grupo de recursos. A pesar de la configuración de denegación de asignación, puede eliminar el grupo de recursos y la pila que contiene. Sin embargo, si un bloqueo está activo en cualquier recurso del grupo, se producirá un error en la operación de eliminación.
  • La compatibilidad con what-if aún no está disponible.
  • Una pila de ámbito de grupo de administración no se puede implementar en otro grupo de administración. Solo se puede implementar en el grupo de administración de la propia pila o en una suscripción secundaria.
  • La ayuda de comandos de Azure PowerShell muestra un valor DeleteResourcesAndResourcesGroups para el conmutador ActionOnUnmanage. Cuando se usa este valor, el comando desasocia los recursos administrados y los grupos de recursos. Este valor se quita en la siguiente actualización. No use este valor.
  • En algunos casos, los cmdlets New y Set Azure PowerShell podrían devolver un error de validación de plantilla genérico que no es claramente accionable. Este error se corregirá en la próxima versión. Si el error no está claro, ejecute el cmdlet en modo de depuración para ver un error más detallado en la respuesta sin procesar.
  • El proveedor de Microsoft Graph no admite conjuntos de despliegue.

Roles integrados

Advertencia

El cumplimiento del permiso de RBAC Microsoft.Resources/deploymentStacks/manageDenySetting/action se está implementando en regiones, incluidas las nubes gubernamentales.

Hay dos roles integrados para la pila de implementación:

  • Azure Deployment Stack Contributor: Los usuarios pueden administrar stacks de implementación, pero no pueden crear ni eliminar asignaciones de denegación dentro de los stacks de implementación.
  • Propietario de la pila de implementación de Azure: los usuarios pueden administrar pilas de implementación, incluidos los usuarios con asignaciones de denegación.

Creación de pilas de implementación

Puede crear un conjunto de recursos de implementación en el ámbito de grupo de recursos, suscripción o grupo de administración. La plantilla que proporciona con una pila de implementación define los recursos para crear o actualizar en el ámbito de destino.

  • Una pila en el ámbito del grupo de recursos puede implementar la plantilla en el mismo grupo de recursos donde existe la pila de implementación.
  • Una pila en el ámbito de la suscripción puede implementar la plantilla en un grupo de recursos o en la misma suscripción en la que existe la pila de implementación.
  • Una pila en el ámbito del grupo de administración puede implementar la plantilla en la suscripción.

Es importante tener en cuenta que donde existe una pila de implementación, también existe la asignación de denegación creada con la funcionalidad de configuración de denegación. Por ejemplo, creando un stack de implementación en el ámbito de la suscripción que despliega la plantilla en el ámbito del grupo de recursos y con el modo DenyDelete de configuración de denegación, puede aprovisionar fácilmente recursos administrados en el grupo de recursos especificado y bloquear los intentos de eliminación de esos recursos. Este enfoque le ayuda a mejorar la seguridad de la pila de implementación separandola en el nivel de suscripción en lugar de en el nivel de grupo de recursos. Esta separación garantiza que los equipos de desarrolladores que utilizan los recursos aprovisionados solo tengan acceso de visualización y escritura a los grupos de recursos. La pila de implementación permanece aislada en un nivel superior. Esta configuración minimiza el número de usuarios que pueden editar una pila de implementación y realizar cambios en su asignación de denegación. Para obtener más información, consulte Protección de recursos administrados frente a la eliminación.

También puede usar los comandos create-stack para actualizar las pilas de implementación.

Para crear un stack de implementación en el ámbito del grupo de recursos:

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

Para crear una pila de implementación en el ámbito de la suscripción:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentResourceGroupName "<resource-group-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

El parámetro DeploymentResourceGroupName especifica el grupo de recursos usado para almacenar los recursos administrados. Si no especifica el parámetro , los recursos administrados se almacenan en el ámbito de la suscripción.

Para crear una pila de implementación en el ámbito del grupo de administración:

New-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

El parámetro deploymentSubscriptionId especifica la suscripción usada para almacenar los recursos administrados. Si no especifica el parámetro , los recursos administrados se almacenan en el ámbito del grupo de administración.

Enumeración de las pilas de implementación

Para enumerar los recursos de pila de implementación en el ámbito del grupo de recursos:

Get-AzResourceGroupDeploymentStack `
  -ResourceGroupName "<resource-group-name>"

Para enumerar los recursos de la pila de implementación en el ámbito de la suscripción:

Get-AzSubscriptionDeploymentStack

Para enumerar los recursos de pila de implementación en el ámbito del grupo de administración:

Get-AzManagementGroupDeploymentStack `
  -ManagementGroupId "<management-group-id>"

Actualizar pilas de implementación

Para actualizar una pila de implementación, que puede implicar agregar o eliminar un recurso administrado, debe realizar cambios en los archivos de Bicep subyacentes. Una vez realizadas las modificaciones, puede actualizar la pila de implementación ejecutando el comando update o volviendo a ejecutar el comando create.

El patrón de diseño de infraestructura como código proporciona control total sobre la lista de recursos administrados.

Uso del comando Set

Para actualizar una pila de implementación en el ámbito del grupo de recursos:

Set-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

Para crear una pila de implementación en el ámbito de la suscripción:

Set-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentResourceGroupName "<resource-group-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

El parámetro DeploymentResourceGroupName especifica el grupo de recursos usado para almacenar los recursos de la pila de implementación. Si no especifica un nombre de grupo de recursos, el servicio de la pila de implementación creará automáticamente un nuevo grupo de recursos.

Para actualizar una pila de implementación en el ámbito del grupo de administración:

Set-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "none"

Uso del comando New

Recibirá una advertencia similar a la siguiente:

The deployment stack 'myStack' you're trying to create already exists in the current subscription/management group/resource group. Do you want to overwrite it? Detaching: resources, resourceGroups (Y/N)

Para obtener más información, consulte Crear pilas de implementación.

Control de la desasociación y la eliminación

Un recurso desasociado (o recurso no administrado) hace referencia a un recurso que la pila de implementación no realiza un seguimiento ni administra, pero sigue existiendo en Azure.

Para indicar a Azure que elimine recursos no administrados, actualice la pila con el comando create stack e incluya el modificador ActionOnUnmanage. Para obtener más información, consulte Creación de pilas de implementación.

Utilice el interruptor ActionOnUnmanage para definir qué pasa con los recursos que ya no están gestionados después de que se actualice o elimine una pila. Los valores permitidos son:

  • deleteAll: use delete en lugar de detach para los recursos administrados y los grupos de recursos.
  • deleteResources: use delete en lugar de detach para los recursos administrados solamente.
  • detachAll: desasocie los recursos administrados y los grupos de recursos.

Por ejemplo:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none" `
  -ActionOnUnmanage "deleteAll" 

Advertencia

Al eliminar grupos de recursos con el modificador action-on-unmanage establecido en deleteAll, se eliminan los grupos de recursos administrados y todos los recursos contenidos en ellos.

Control del error de pila fuera de sincronización

Al actualizar o eliminar una pila de implementación, es posible que encuentre el siguiente error de pila fuera de sincronización, lo que indica que la lista de recursos de pila no está sincronizada correctamente.

The deployment stack '{0}' might not have an accurate list of managed resources. To prevent resources from being accidentally deleted, check that the managed resource list doesn't have any additional values. If there is any uncertainty, it's recommended to redeploy the stack with the same template and parameters as the current iteration. To bypass this warning, specify the 'BypassStackOutOfSyncError' flag.

Puede obtener una lista de los recursos en el Portal de Azure o volver a implementar el archivo Bicep desplegado actualmente con los mismos parámetros. La salida muestra los recursos administrados.

...
Resources: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/demoRg/providers/Microsoft.Network/virtualNetworks/vnetthmimleef5fwk
           /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/demoRg/providers/Microsoft.Storage/storageAccounts/storethmimleef5fwk

Después de revisar y comprobar la lista de recursos de la pila, vuelva a ejecutar el comando con el modificador BypassStackOutOfSyncError en Azure PowerShell (o bypass-stack-out-of-sync-error en la CLI de Azure). Use este modificador solo después de revisar exhaustivamente la lista de recursos de la pila. No se debe usar este interruptor por defecto.

Eliminación de implementación

El interruptor ActionOnUnmanage define la acción para los recursos que ya no están gestionados. El modificador tiene los siguientes valores:

  • DeleteAll: Elimina recursos y grupos de recursos.
  • DeleteResources: elimine solo los recursos.
  • DetachAll: desasociar los recursos.

Incluso si especifica el comando delete-all, los recursos no administrados dentro del grupo de recursos donde se encuentra la pila de implementación impiden la eliminación tanto de los recursos no administrados como del grupo de recursos.

Para eliminar los recursos de pila de implementación en el ámbito del grupo de recursos:

Remove-AzResourceGroupDeploymentStack `
  -name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"

Para eliminar los recursos de la pila de implementación en el ámbito de la suscripción:

Remove-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"

Para eliminar los recursos de pila de implementación en el ámbito del grupo de administración:

Remove-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ManagementGroupId "<management-group-id>" `
  -ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"

Visualización de recursos administrados en la pila de implementación

El servicio de pila de implementación aún no tiene una interfaz gráfica de usuario (GUI) de Azure Portal. Para ver los recursos administrados dentro de una pila de implementación, use los siguientes comandos de Azure PowerShell o la CLI de Azure:

Para ver los recursos administrados en el ámbito del grupo de recursos:

(Get-AzResourceGroupDeploymentStack -Name "<deployment-stack-name>" -ResourceGroupName "<resource-group-name>").Resources

Para ver los recursos administrados en el ámbito de la suscripción:

(Get-AzSubscriptionDeploymentStack -Name "<deployment-stack-name>").Resources

Para ver los recursos administrados en el ámbito del grupo de administración:

(Get-AzManagementGroupDeploymentStack -Name "<deployment-stack-name>" -ManagementGroupId "<management-group-id>").Resources

Adición de recursos a la pila de implementación

Para agregar un recurso administrado, agregue la definición de recurso a los archivos de Bicep subyacentes y, a continuación, ejecute el comando update o vuelva a ejecutar el comando create. Para obtener más información, consulte Actualización de las pilas de implementación.

Eliminación de recursos administrados de la pila de implementación

Para eliminar un recurso administrado, quite la definición de recurso de los archivos de Bicep subyacentes y, a continuación, ejecute el comando update o vuelva a ejecutar el comando create. Para obtener más información, consulte Actualización de las pilas de implementación.

Protección de recursos administrados

Puede asignar permisos específicos a los recursos administrados de una pila de implementación para evitar que las entidades de seguridad no autorizadas los eliminen o actualicen. Estos permisos se conocen como configuración de denegación. Almacenar pilas en el ámbito primario. Por ejemplo, para proteger los recursos de una suscripción, coloque la pila en el ámbito primario, que es el grupo de administración primario inmediato.

La configuración de denegación solo se aplica a las operaciones del plano de control y no a las operaciones del plano de datos. Por ejemplo, puede crear cuentas de almacenamiento y almacenes de claves a través del plano de control, lo que significa que la pila de implementación los administra. Sin embargo, puede crear recursos secundarios como secretos o contenedores de blobs a través del plano de datos, lo que significa que la pila de implementación no puede administrarlos.

La configuración de denegación solo se aplica a los recursos creados explícitamente, no a los creados implícitamente. Por ejemplo, un clúster de AKS administrado crea otros servicios múltiples para admitirlo, como una máquina virtual. En este caso, dado que la máquina virtual no está definida en el archivo de Bicep y es un recurso creado implícitamente, no está sujeto a la configuración de denegación de la pila de implementación.

Nota

La última versión requiere permisos específicos en el ámbito del stack para:

  • Cree o actualice una pila de implementación y configurar la configuración de denegación en un valor distinto de None.
  • Actualizar o eliminar una pila de implementación con una configuración de denegación existente de un valor distinto de None.

Use los roles integrados de la pila de implementación para conceder permisos.

Azure PowerShell incluye estos parámetros para personalizar la asignación de denegaciones:

  • DenySettingsMode: define las operaciones prohibidas en los recursos administrados para proteger contra entidades de seguridad no autorizadas que intentan eliminarlos o actualizarlos. Esta restricción se aplica a todos a menos que conceda explícitamente acceso. Estos valores incluyen: None, DenyDelete y DenyWriteAndDelete.
  • DenySettingsApplyToChildScopes: cuando se especifica, la configuración del modo de configuración de denegación también se aplica al ámbito secundario de los recursos administrados. Por ejemplo, un archivo de Bicep define un recurso Microsoft.Sql/servers (primario) y un recurso Microsoft.Sql/servers/databases (secundario). Si crea un stack de implementación mediante el archivo de Bicep con la configuración DenySettingsApplyToChildScopes habilitada y la configuración DenySettingsMode establecida en DenyWriteAndDelete, no puede agregar recursos secundarios adicionales al recurso Microsoft.Sql/servers o al recurso Microsoft.Sql/servers/databases.
  • DenySettingsExcludedAction: lista de operaciones de administración basadas en roles que se excluyen de la configuración de denegación. Se permiten hasta 200 acciones.
  • DenySettingsExcludedPrincipal: Lista de identificadores principales de Microsoft Entra excluidos del bloqueo. Se permiten hasta cinco entidades de seguridad.

Para aplicar la configuración de denegación en el ámbito del grupo de recursos:

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "denyDelete" `
  -DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Para aplicar la configuración de denegación en el ámbito de la suscripción:

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "denyDelete" `
  -DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Use el parámetro DeploymentResourceGroupName para especificar el nombre del grupo de recursos en el que se creará la pila de implementación. Si no se especifica un ámbito, se usa el ámbito de la pila de implementación.

Para aplicar la configuración de denegación en el ámbito del grupo de administración:

New-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -ActionOnUnmanage "detachAll" `
  -DenySettingsMode "denyDelete" `
  -DenySettingsExcludedActions "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Use el parámetro DeploymentSubscriptionId para especificar el id. de suscripción en el que se creará la pila de implementación. Si no se especifica un ámbito, se usa el ámbito de la pila de implementación.

Desasociación de recursos administrados de la pila de implementación

De forma predeterminada, las pilas de implementación desasocian y no eliminan los recursos no administrados cuando ya no están incluidos en el ámbito de administración de la pila. Para obtener más información, consulte Actualización de las pilas de implementación.

Exportación de plantillas desde pilas de implementación

Puede exportar los recursos de una pila de implementación a una salida JSON. Puede canalizar la salida a un archivo.

Para exportar una pila de implementación en el ámbito del grupo de recursos:

Save-AzResourceGroupDeploymentStack `
   -Name "<deployment-stack-name>" `
   -ResourceGroupName "<resource-group-name>" `

Para exportar una pila de implementación en el ámbito de la suscripción:

Save-AzSubscriptionDeploymentStack `
  -name "<deployment-stack-name>"

Para exportar una pila de implementación en el ámbito del grupo de administración:

Save-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ManagementGroupId "<management-group-id>"

Pasos siguientes

Para comenzar con una guía de inicio rápido sobre la implementación de Bicep, consulte Inicio rápido: Crear e implementar una pila de recursos con Bicep.