Esercizio - Distribuire risorse in un gruppo di gestione

Completato

Il progetto Teddybear è stato un successo e ora il team segreto di ricerca e sviluppo dell'azienda di giocattoli è pronto per avviare la ricerca di altri nuovi giocattoli. Il team inizia a chiedere nuove sottoscrizioni quasi ogni giorno e deve applicare i propri criteri a tutte.

Invece di duplicare le definizioni e le assegnazioni di criteri in ogni sottoscrizione, si decide di inserire tutte le sottoscrizioni del team in un gruppo di gestione. È quindi possibile applicare i criteri all'intero gruppo di gestione invece che a ogni sottoscrizione singolarmente.

In questo esercizio si creerà un nuovo modello Bicep per applicare definizioni e assegnazioni di criteri a un gruppo di gestione.

Durante il processo, si eseguiranno queste operazioni:

  • Creare un nuovo gruppo di gestione.
  • Creare un nuovo file Bicep con ambito gruppo di gestione.
  • Aggiungere le risorse di Criteri di Azure al file.
  • Collegare l'assegnazione di criteri alla definizione di criteri creando manualmente l'ID risorsa.
  • Distribuire il modello e verificare il risultato.

Per completare questo esercizio, è necessario soddisfare i prerequisiti seguenti:

  • I gruppi di gestione devono essere abilitati nel tenant di Azure.
  • Sono necessarie autorizzazioni per la creazione di un nuovo gruppo di gestione all'interno della gerarchia.
  • Sono necessarie autorizzazioni per la distribuzione di risorse di Criteri di Azure nel gruppo di gestione.

Se non è possibile soddisfare questi requisiti con l'account Azure corrente, è possibile ottenere una versione di valutazione gratuita e creare una nuova sottoscrizione e un nuovo tenant di Azure. In alternativa, è possibile ignorare i passaggi di distribuzione in questo esercizio.

Creare un gruppo di gestione

In questo esercizio si creerà un nuovo gruppo di gestione in modo da non influire accidentalmente sulle risorse in un'altra parte dell'ambiente di Azure.

Nel terminale di Visual Studio Code eseguire i comandi dell'interfaccia della riga di comando di Azure seguenti:

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

Per impostazione predefinita, il nuovo gruppo di gestione viene creato come elemento figlio diretto del gruppo di gestione radice del tenant. Se è necessario inserire il gruppo di gestione in una posizione specifica nella gerarchia di gruppi di gestione esistente, usare il parametro --parent-id e specificare il nome del gruppo di gestione da usare come elemento padre.

Nel terminale di Visual Studio Code eseguire i comandi di Azure PowerShell seguenti:

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

Per impostazione predefinita, il nuovo gruppo di gestione viene creato come elemento figlio del gruppo di gestione radice del tenant. Se è necessario inserire il gruppo di gestione in una posizione specifica nella gerarchia di gruppi di gestione esistente, usare il parametro -ParentId e specificare il nome del gruppo di gestione da usare come elemento padre.

In una distribuzione reale si spostano le sottoscrizioni del team R&D nel gruppo di gestione. Per questo esercizio, si distribuiranno i criteri anche se il gruppo di gestione non contiene sottoscrizioni. Sia che il gruppo di gestione sia vuoto o contenga sottoscrizioni si applica lo stesso processo di distribuzione.

Creare un file Bicep da distribuire in un gruppo di gestione

  1. Aprire Visual Studio Code.

  2. Eliminare il file main.bicep e quindi creare un nuovo file vuoto con lo stesso nome.

  3. Salvare il file vuoto.

  4. Aggiungere il contenuto seguente al file.

    targetScope = 'managementGroup'
    

    Si noti che questa riga di codice indica a Bicep che il modello verrà distribuito nell'ambito del gruppo di gestione.

Aggiungere una definizione di criteri

Come è stato fatto in precedenza, creare una definizione di criteri nel file Bicep.

  1. Sotto la riga appena aggiunta, inserire la definizione di variabile seguente:

    var policyDefinitionName = 'DenyFandGSeriesVMs'
    
  2. Alla fine del file aggiungere la definizione di Criteri di Azure seguente:

    resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2024-05-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 definizione di criteri è uguale a quella applicata in precedenza alla sottoscrizione. Questa volta, tuttavia, viene distribuita in un gruppo di gestione.

Aggiungere un'assegnazione di criteri

Applicare ora i criteri al gruppo di gestione. Questo significa che i criteri verranno applicati a tutte le sottoscrizioni figlio di questo gruppo di gestione.

  1. Sotto la definizione di variabile policyDefinitionName aggiungere variabile seguente:

    var policyAssignmentName = 'DenyFandGSeriesVMs'
    
  2. Alla fine del file, sotto la risorsa di definizione di criteri, aggiungere l'assegnazione di criteri seguente:

    resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-05-01' = {
      name: policyAssignmentName
      properties: {
        policyDefinitionId: policyDefinition.id
      }
    }
    
  3. Salvare le modifiche apportate al file.

Verificare il modello

Il modello sarà simile al seguente:

targetScope = 'managementGroup'

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

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2024-05-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@2024-05-01' = {
  name: policyAssignmentName
  properties: {
    policyDefinitionId: policyDefinition.id
  }
}

In caso contrario, copiare l'esempio oppure modificare il modello in modo che corrisponda all'esempio.

Distribuire il modello in Azure

Distribuire il modello usando i comandi dell'interfaccia della riga di comando di Azure seguenti nel terminale di Visual Studio Code:

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

Distribuire il modello usando i comandi di Azure PowerShell nel terminale.

$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

Si noti anche che, come per le distribuzioni di sottoscrizioni, si specificano in modo esplicito un nome e una località per i metadati della distribuzione. Si usa inoltre la data odierna per ridurre la possibilità che venga usato un nome di distribuzione esistente.

La distribuzione può richiedere uno o due minuti e al termine verrà visualizzato un messaggio di operazione completata.

Verificare la distribuzione

Come per le distribuzioni con ambito sottoscrizione, è possibile visualizzare le distribuzioni con ambito gruppo di gestione nel portale di Azure.

  1. Vai al portale di Azure.

  2. Nel riquadro sinistro selezionare Tutti i servizi.

  3. Nella casella Cerca immettere il gruppo di gestione e quindi selezionare Gruppi di gestione nell'elenco dei risultati.

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

  4. Selezionare il gruppo di gestione Secret R&D Projects.Select the Secret R&D Projects management group.

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

  5. Nel riquadro sinistro immettere Distribuzioni nella casella Di ricerca e quindi selezionare Distribuzioni in Governance.

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

  6. Selezionare la distribuzione che inizia con mg-scope per visualizzare le risorse distribuite.

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

  7. Nel riquadro Panoramica per la distribuzione selezionata selezionare Dettagli distribuzione per espandere la sezione. Vengono elencate due risorse di Criteri di Azure.

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

Pulire le risorse

Le risorse con ambito gruppo di gestione sono state distribuite correttamente. È possibile rimuovere le risorse dei criteri e il gruppo di gestione creati.

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