Ejercicio: Implementación de recursos en un grupo de administración

Completado

El proyecto Project Teddybear fue un éxito, y ahora el departamento de I+D de su empresa de juguetes está listo para investigar aún más juguetes nuevos de manera secreta. El equipo ha empezado a pedirle nuevas suscripciones casi a diario y debe aplicar sus directivas en todas ellas.

En lugar de duplicar las definiciones de directiva y las asignaciones de cada suscripción, ha decidido colocar todas las suscripciones del equipo dentro de un grupo de administración. Así, puede aplicar la directiva a todo el grupo de administración en lugar de a cada suscripción individualmente.

En este ejercicio, creará una plantilla de Bicep para aplicar definiciones de directiva y asignaciones a un grupo de administración.

Durante el proceso, hará lo siguiente:

  • Crear un nuevo módulo de administración.
  • Crear un nuevo archivo Bicep con ámbito de grupo de administración.
  • Agregar los recursos de Azure Policy al archivo.
  • Vincular la asignación de directivas a la definición de directiva mediante la construcción manual del identificador de recurso.
  • Implemente la plantilla y compruebe el resultado.

Este ejercicio cuenta con los siguientes requisitos previos:

Si no puede cumplir estos requisitos con su cuenta de Azure actual, puede obtener una evaluación gratuita y crear una suscripción y un inquilino nuebvos de Azure. Como alternativa, puede omitir los pasos de implementación de este ejercicio.

Creación de un grupo de administración

En este ejercicio, creará un nuevo grupo de administración para que no afecte accidentalmente a ningún recurso de otra parte del entorno de Azure.

En el terminal de Visual Studio Code, ejecute el comando de la CLI de Azure siguiente:

az account management-group create \
  --name SecretRND \
  --display-name "Secret R&D Projects"

De forma predeterminada, el nuevo grupo de administración se crea como un elemento secundario directo del grupo de administración raíz del inquilino. Si necesita colocar el grupo de administración en un lugar específico de la jerarquía de grupos de administración existente, use el parámetro --parent-id y especifique el nombre del grupo de administración que se usará como elemento primario.

En el terminal de Visual Studio Code, ejecute los siguientes comandos de Azure PowerShell:

New-AzManagementGroup `
  -GroupId 'SecretRND' `
  -DisplayName 'Secret R&D Projects'

De forma predeterminada, el nuevo grupo de administración se crea como un elemento secundario del grupo de administración raíz del inquilino. Si necesita colocar el grupo de administración en un lugar específico de la jerarquía de grupos de administración existente, use el parámetro -ParentId y especifique el nombre del grupo de administración que se usará como elemento primario.

En una implementación real, movería las suscripciones del equipo de I+D al grupo de administración. En este ejercicio, implementará las directivas aunque el grupo de administración no contenga suscripciones. El mismo proceso de implementación se aplica tanto si el grupo de administración está vacío como si contiene suscripciones.

Creación de un archivo de Bicep para implementarlo en un grupo de administración

  1. Abra Visual Studio Code.

  2. Elimine el archivo main.bicep y, a continuación, cree un nuevo archivo vacío con el mismo nombre.

  3. Guarde el archivo vacío.

  4. Agregue el siguiente contenido al archivo.

    targetScope = 'managementGroup'
    

    Tenga en cuenta que esta línea de código indica a Bicep que la plantilla se implementará en el ámbito del grupo de administración.

Adición de una definición de directiva

Como hizo anteriormente, cree una definición de directiva en el archivo de Bicep.

  1. Debajo de la línea que acaba de agregar, agregue la siguiente definición de variable:

    var policyDefinitionName = 'DenyFandGSeriesVMs'
    
  2. En la parte inferior del archivo, agregue la siguiente definición de Azure Policy:

    resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2020-03-01' = {
      name: policyDefinitionName
      properties: {
        policyType: 'Custom'
        mode: 'All'
        parameters: {}
        policyRule: {
          if: {
            allOf: [
              {
                field: 'type'
                equals: 'Microsoft.Compute/virtualMachines'
              }
              {
                anyOf: [
                  {
                    field: 'Microsoft.Compute/virtualMachines/sku.name'
                    like: 'Standard_F*'
                  }
                  {
                    field: 'Microsoft.Compute/virtualMachines/sku.name'
                    like: 'Standard_G*'
                  }
                ]
              }
            ]
          }
          then: {
            effect: 'deny'
          }
        }
      }
    }
    

    La definición de directiva es la misma que la que aplicó anteriormente a la suscripción. Sin embargo, esta vez la va a implementar en un grupo de administración.

Adición de una asignación de directiva

Ahora aplicará la directiva al grupo de administración. Esto significa que la directiva se aplicará a todas las suscripciones que son secundarias de este grupo de administración.

  1. Debajo de la definición de variable policyDefinitionName, agregue la siguiente variable:

    var policyAssignmentName = 'DenyFandGSeriesVMs'
    
  2. En la parte inferior del archivo, en el recurso de definición de directiva, agregue la siguiente asignación de directiva:

    resource policyAssignment 'Microsoft.Authorization/policyAssignments@2020-03-01' = {
      name: policyAssignmentName
      properties: {
        policyDefinitionId: policyDefinition.id
      }
    }
    
  3. Guarde los cambios en el archivo.

Comprobación de la plantilla

La plantilla debe tener un aspecto parecido al siguiente:

targetScope = 'managementGroup'

var policyDefinitionName = 'DenyFandGSeriesVMs'
var policyAssignmentName = 'DenyFandGSeriesVMs'

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2020-03-01' = {
  name: policyDefinitionName
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        allOf: [
          {
            field: 'type'
            equals: 'Microsoft.Compute/virtualMachines'
          }
          {
            anyOf: [
              {
                field: 'Microsoft.Compute/virtualMachines/sku.name'
                like: 'Standard_F*'
              }
              {
                field: 'Microsoft.Compute/virtualMachines/sku.name'
                like: 'Standard_G*'
              }
            ]
          }
        ]
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2020-03-01' = {
  name: policyAssignmentName
  properties: {
    policyDefinitionId: policyDefinition.id
  }
}

Si no es así, copie el ejemplo o ajuste la plantilla para que coincida con él.

Implementación de la plantilla en Azure

En el terminal de Visual Studio Code, implemente la plantilla mediante los siguientes comandos de la CLI de Azure:

managementGroupId="SecretRND"
templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="mg-scope-"$today

az deployment mg create \
  --management-group-id $managementGroupId \
  --name $deploymentName \
  --location westus \
  --template-file $templateFile

Implemente la plantilla mediante comandos de Azure PowerShell en el terminal.

$managementGroupId = 'SecretRND'
$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "mg-scope-$today"

New-AzManagementGroupDeployment `
  -ManagementGroupId $managementGroupId `
  -Name $deploymentName `
  -Location westus `
  -TemplateFile $templateFile

Asimismo, observe que, al igual que con las implementaciones de suscripciones, está especificando explícitamente un nombre y una ubicación para los metadatos de implementación. Y está usando la fecha de hoy para reducir la posibilidad de usar el nombre de una implementación existente.

La implementación puede tardar un par de minutos en completarse; después, verá que la implementación se ha realizado correctamente.

Comprobación de la implementación

Al igual que con las implementaciones con ámbito de suscripción, puede ver las implementaciones con ámbito de grupo de administración en Azure Portal.

  1. Vaya a Azure Portal.

  2. En el panel izquierdo, seleccione Todos los servicios.

  3. En el cuadro Buscar, escriba grupo de administración y, a continuación, en la lista de resultados, seleccione Grupos de administración.

    Screenshot of the Azure portal interface showing the service list with 'Management groups' highlighted.

  4. Seleccione el grupo de administración de Proyectos secretos de I+D.

    Screenshot of the Azure portal interface, highlighting 'Secret R&D Projects' in the list of management groups.

  5. En el panel izquierdo, en el cuadro Buscar, escriba Implementaciones y, a continuación, en Gobernanza, seleccione Implementaciones.

    Screenshot of the Azure portal interface, showing the management group details.

  6. Seleccione la implementación que empieza por mg-scope para ver qué recursos se implementaron.

    Screenshot of the Azure portal Deployments pane, highlighting the 'mg-scope-*' deployment in the list of deployments.

  7. En el panel Información general de la implementación seleccionada, seleccione Detalles de implementación para expandirlo. Se presentan los dos recursos de Azure Policy.

    Screenshot of the Azure portal 'Overview' pane for the selected deployment.

Limpiar los recursos

Ha implementado correctamente los recursos con ámbito de grupo de administración. Puede quitar los recursos de directiva y el grupo de administración que ha creado.

az account management-group delete --name SecretRND
Remove-AzManagementGroup -GroupId SecretRND