Implementaciones de inquilino con el archivo Bicep

A medida que crece la organización, es posible que necesite definir y asignar directivas o el control de acceso basado en rol (RBAC de Azure) en el inquilino de Microsoft Entra. Con las plantillas de nivel de inquilino, puede aplicar directivas y asignar roles a nivel global de forma declarativa.

Recursos de aprendizaje

Para más información sobre los ámbitos de implementación con una guía paso a paso, consulte Implementación de recursos en suscripciones, grupos de administración e inquilinos mediante Bicep.

Recursos compatibles

No todos los tipos de recursos se pueden implementar a nivel de inquilino. En esta sección se enumeran los tipos de recursos que se admiten.

Para el control de acceso basado en rol de Azure (Azure RBAC), use:

Para plantillas anidadas que se implementan en grupos de administración, suscripciones o grupos de recursos, use:

Para crear grupos de administración, use:

Para crear suscripciones, use:

Para la administración de costos, use:

Para configurar el portal, use:

Las definiciones de directiva integradas son recursos de nivel de inquilino, pero no se pueden implementar definiciones de directiva personalizadas en un inquilino. Para obtener un ejemplo de asignación de una definición de directiva integrada a un recurso, consulte el ejemplo tenantResourceId.

Ámbito de conjunto

Para establecer el ámbito en el inquilino, use:

targetScope = 'tenant'

Acceso necesario

La entidad de seguridad que implementa la plantilla debe tener permisos para crear recursos en el ámbito del inquilino. La entidad de seguridad debe tener permiso para ejecutar las acciones de implementación (Microsoft.Resources/deployments/*) y para crear los recursos definidos en la plantilla. Por ejemplo, para crear un grupo de administración, la entidad de seguridad debe tener permiso de colaborador en el ámbito del inquilino. Para crear asignaciones de roles, la entidad de seguridad debe tener permiso de propietario.

El administrador global de Microsoft Entra ID no tiene permiso para asignar roles de forma automática. Para habilitar las implementaciones de plantilla en el ámbito del inquilino, el administrador global debe realizar los siguientes pasos:

  1. Eleve el acceso a la cuenta para que el administrador global pueda asignar roles. Para más información, consulte Elevación de los privilegios de acceso para administrar todas las suscripciones y los grupos de administración de Azure.

  2. Asigne el rol de propietario o colaborador a la entidad de seguridad que necesita implementar las plantillas.

    New-AzRoleAssignment -SignInName "[userId]" -Scope "/" -RoleDefinitionName "Owner"
    
    az role assignment create --assignee "[userId]" --scope "/" --role "Owner"
    

La entidad de seguridad tiene ahora los permisos necesarios para implementar la plantilla.

Comandos de implementación

Los comandos para las implementaciones de inquilino son diferentes de los comandos para las implementaciones de grupos de recursos.

Para la CLI de Azure, use az deployment tenant create:

az deployment tenant create \
  --name demoTenantDeployment \
  --location WestUS \
  --template-file main.bicep

Para obtener información más detallada sobre los comandos de implementación y las opciones para implementar plantillas de Resource Manager, consulte:

Ubicación y nombre de la implementación

En el caso de las implementaciones de nivel de inquilino, 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 suscripción y grupo de administración 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 un archivo denominado main.bicep 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 inquilino 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

Al implementar en un inquilino, puede implementar los recursos en:

  • el inquilino
  • grupos de administración dentro del inquilino
  • subscriptions
  • grupos de recursos

Un recurso de extensión se puede limitar a un destino distinto del destino de implementación.

El usuario que implementa la plantilla debe tener acceso al ámbito especificado.

En esta sección se muestra cómo especificar distintos ámbitos. Puede combinar estos distintos ámbitos en una sola plantilla.

Ámbito del inquilino

Los recursos definidos dentro del archivo de Bicep se aplican al inquilino.

targetScope = 'tenant'

// create resource at tenant
resource mgName_resource 'Microsoft.Management/managementGroups@2021-04-01' = {
  ...
}

Ámbito del grupo de administración

Para establecer como destino un grupo de administración dentro del inquilino, agregue un módulo. Use la función managementGroup para establecer su propiedad scope. Proporcione el nombre del grupo de administración.

targetScope = 'tenant'

param managementGroupName string

// create resources at management group level
module  'module.bicep' = {
  name: 'deployToMG'
  scope: managementGroup(managementGroupName)
}

Ámbito de la suscripción

Para establecer como destino una suscripción dentro del inquilino, agregue un módulo. Use la función de suscripción para establecer su propiedad scope. Proporcione el identificador de la suscripción.

targetScope = 'tenant'

param subscriptionID string

// create resources at subscription level
module  'module.bicep' = {
  name: 'deployToSub'
  scope: subscription(subscriptionID)
}

Ámbito del grupo de recursos

Para establecer como destino un grupo de recursos dentro del inquilino, agregue un módulo. Use la función resourceGroup para establecer su propiedad scope. Proporcione el identificador de suscripción y el nombre del grupo de recursos.

targetScope = 'tenant'

param resourceGroupName string
param subscriptionID string

// create resources at resource group level
module  'module.bicep' = {
  name: 'deployToRG'
  scope: resourceGroup(subscriptionID, resourceGroupName)
}

Creación de un grupo de administración

La siguiente plantilla crea un grupo de administración.

targetScope = 'tenant'
param mgName string = 'mg-${uniqueString(newGuid())}'

resource mgName_resource 'Microsoft.Management/managementGroups@2021-04-01' = {
  name: mgName
  properties: {}
}

Si su cuenta no tiene permiso para la implementación en el inquilino, puede crear grupos de administración mediante la implementación en otro ámbito. Para más información, consulte Grupo de administración.

Asignación de un rol

La siguiente plantilla asigna un rol en el ámbito del inquilino.

targetScope = 'tenant'

@description('principalId of the user that will be given contributor access to the resourceGroup')
param principalId string

@description('roleDefinition for the assignment - default is owner')
param roleDefinitionId string = '8e3af657-a8ff-443c-a75c-2fe8c4bcb635'

var roleAssignmentName = guid(principalId, roleDefinitionId)

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: roleAssignmentName
  properties: {
    roleDefinitionId: tenantResourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId)
    principalId: principalId
  }
}

Pasos siguientes

Para obtener más información sobre otros ámbitos, consulte: