Implementaciones de suscripción con archivos de Bicep
Artículo
Para simplificar la administración de recursos, puede implementar recursos en el nivel de la suscripción de Azure. Por ejemplo, puede implementar directivas y el control de acceso basado en rol (RBAC de Azure) en su suscripción, y se aplicarán a ella en su totalidad.
En este artículo se describe cómo establecer el ámbito de implementación en una suscripción en un archivo de Bicep. Para obtener más información, consulte Comprender el ámbito.
Nota
Puede implementar en 800 grupos de recursos distintos en una implementación de nivel de suscripción.
Para la CLI de Azure, use az deployment sub create. El ejemplo siguiente implementa una plantilla para crear un grupo de recursos:
Azure CLI
az deployment sub create \
--name demoSubDeployment \
--location centralus \
--template-file main.bicep \
--parametersrgName=demoResourceGroup rgLocation=centralus
Para el comando de implementación de PowerShell, use New-AzDeployment o su alias New-AzSubscriptionDeployment. El ejemplo siguiente implementa una plantilla para crear un grupo de recursos:
Para obtener información más detallada sobre los comandos y las opciones de implementación para la implementación de plantillas de Resource Manager, vea:
En el caso de las implementaciones de nivel de suscripción, debe proporcionar una ubicación para la implementación. La ubicación de la implementación es independiente de la ubicación de los recursos que se implementan. La ubicación de implementación especifica dónde se almacenarán los datos de la implementación. Las implementaciones de grupo de administración e inquilino también requieren una ubicación. En las implementaciones de grupo de recursos, la ubicación del grupo de recursos se usa para almacenar los datos de implementación.
Puede proporcionar un nombre para la implementación o usar el nombre de implementación predeterminado. El nombre predeterminado es el nombre del archivo de plantilla. Por ejemplo, la implementación de una plantilla denominada main.json crea un nombre de implementación predeterminado de main.
Para cada nombre de implementación, la ubicación es inmutable. No se puede crear una implementación en una ubicación si ya existe una implementación con el mismo nombre en otra ubicación. Por ejemplo, si crea una implementación de suscripción con el nombre deployment1 en centralus, no podrá crear otra implementación con el nombre deployment1, sino una ubicación de westus. Si recibe el código de error InvalidDeploymentLocation, use un nombre diferente o utilice la ubicación de la implementación anterior que tenía ese mismo nombre.
Ámbitos de implementación
En un archivo de Bicep, todos los recursos declarados con la palabra clave resource deben implementarse en el mismo ámbito que la implementación. Para una implementación de suscripción, esto significa que todas las declaraciones de resource en el archivo de Bicep deben implementarse en la misma suscripción o como un recurso secundario o de extensión de un recurso de la misma suscripción que la implementación.
Sin embargo, esta restricción no se aplica a los recursos existing. Puede hacer referencia a los recursos existentes en un ámbito diferente al de la implementación.
Para implementar recursos en varios ámbitos dentro de una sola implementación, use módulos. La implementación de un módulo desencadena una "implementación anidada", lo que le permite tener como destino distintos ámbitos. El usuario que implementa el archivo primario de Bicep debe tener los permisos necesarios para iniciar implementaciones en esos ámbitos.
Puede implementar un recurso desde un archivo de Bicep de ámbito de suscripción en los siguientes ámbitos:
Para implementar recursos en la suscripción de destino, agregue esos recursos con la palabra clave resource.
Bicep
targetScope = 'subscription'// resource group created in target subscriptionresourceexampleResource'Microsoft.Resources/resourceGroups@2024-11-01' = {
...
}
Para implementar recursos en una suscripción diferente de la suscripción de la operación, agregue un módulo. Use la función de suscripción para establecer la propiedad scope. Proporcione la propiedad subscriptionId en el id. de la suscripción en la que quiere realizar la implementación.
Bicep
targetScope = 'subscription'paramotherSubscriptionIDstring// module deployed at subscription level but in a different subscriptionmoduleexampleModule'module.bicep' = {
name: 'deployToDifferentSub'scope: subscription(otherSubscriptionID)
}
Ámbito del grupo de recursos
Para implementar recursos en un grupo de recursos dentro de la suscripción, agregue un módulo y establezca su propiedad scope. Si el grupo de recursos ya existe, use la función resourceGroup para establecer el valor de ámbito. Proporcione el nombre del grupo de recursos.
Si el grupo de recursos se crea en el mismo archivo de Bicep, use el nombre simbólico del grupo de recursos para establecer el valor de ámbito. Para un ejemplo de cómo establecer el ámbito en el nombre simbólico, consulte Creación del grupo de recursos con Bicep.
Ámbito del inquilino
Para crear recursos en el inquilino, agregue un módulo. Use la función tenant para establecer su propiedad scope.
En lugar de usar un módulo, puede establecer el ámbito en tenant() para algunos tipos de recursos. En el ejemplo siguiente se implementa un grupo de administración en el inquilino.
Bicep
targetScope = 'subscription'parammgNamestring = 'mg-${uniqueString(newGuid())}'// management group created at tenantresourcemanagementGroup'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()name: mgNameproperties: {}
}
outputoutputstring = mgName
En el ejemplo siguiente se asigna una definición de directiva existente a la suscripción. Si la definición de directiva toma parámetros, proporciónelos como un objeto. Si la definición de directiva no toma parámetros, use el objeto vacío predeterminado.
En el ejemplo siguiente, se crea un grupo de recursos, se le aplica un bloqueo y se asigna un rol a una entidad de seguridad.
Bicep
targetScope = 'subscription'
@description('Name of the resourceGroup to create')paramresourceGroupNamestring
@description('Location for the resourceGroup')paramresourceGroupLocationstring
@description('principalId of the user that will be given contributor access to the resourceGroup')paramprincipalIdstring
@description('roleDefinition to apply to the resourceGroup - default is contributor')paramroleDefinitionIdstring = 'b24988ac-6180-42a0-ab88-20f7382dd24c'
@description('Unique name for the roleAssignment in the format of a guid')paramroleAssignmentNamestring = guid(principalId, roleDefinitionId, resourceGroupName)varroleID = '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/${roleDefinitionId}'resourcenewResourceGroup'Microsoft.Resources/resourceGroups@2024-03-01' = {
name: resourceGroupNamelocation: resourceGroupLocationproperties: {}
}
moduleapplyLock'lock.bicep' = {
name: 'applyLock'scope: newResourceGroup
}
moduleassignRole'role.bicep' = {
name: 'assignRBACRole'scope: newResourceGroupparams: {
principalId: principalIdroleNameGuid: roleAssignmentNameroleDefinitionId: roleID
}
}
En el ejemplo siguiente se muestra el módulo para aplicar el bloqueo:
Bicep
resourcecreateRgLock'Microsoft.Authorization/locks@2020-05-01' = {
name: 'rgLock'properties: {
level: 'CanNotDelete'notes: 'Resource group should not be deleted.'
}
}
En el ejemplo siguiente se muestra el módulo para asignar el rol:
Bicep
@description('The principal to assign the role to')paramprincipalIdstring
@description('A GUID used to identify the role assignment')paramroleNameGuidstring = newGuid()paramroleDefinitionIdstringresourceroleNameGuid_resource'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: roleNameGuidproperties: {
roleDefinitionId: roleDefinitionIdprincipalId: principalId
}
}
Pasos siguientes
Para obtener más información sobre otros ámbitos, consulte:
Muestre las características de Microsoft Entra ID para modernizar las soluciones de identidad, implementar soluciones híbridas e implementar la gobernanza de identidades.