Esercizio - Autorizzare l'entità servizio per le distribuzioni

Completato

Nell'esercizio precedente è stata creata un'entità servizio per la pipeline di distribuzione del sito Web ed è stato verificato che fosse possibile accedere usando la relativa chiave. A questo punto è possibile concedere all'entità servizio l'accesso all'ambiente Azure. In questo esercizio si creerà un'assegnazione di ruolo per l'entità servizio e quindi si distribuirà un file Bicep usando l'entità servizio.

Durante il processo, si eseguiranno queste operazioni:

  • Accedere con il proprio account utente.
  • Creare un gruppo di risorse per il sito Web dell'azienda.
  • Creare un'assegnazione di ruolo per consentire all'entità servizio di distribuire le risorse nel gruppo di risorse.
  • Accedere come entità servizio e distribuire il file Bicep che crea le risorse del sito Web dell'azienda.
  • Verificare la distribuzione.
  • Pulire il gruppo di risorse e l'entità servizio.

Accedere con il proprio account utente

Nell'esercizio precedente è stato eseguito l'accesso usando l'entità servizio e quindi ci si è disconnessi. Per poter eseguire i passaggi successivi di questo esercizio, è necessario accedere di nuovo con il proprio account utente.

  1. Nel terminale Azure Cloud Shell (bash) di Visual Studio Code, accedi ad Azure eseguendo il comando seguente:

    az login
    
  2. Nel browser visualizzato accedere al proprio account Azure.

  1. Nel terminale Azure Cloud Shell (PowerShell) di Visual Studio Code, accedi ad Azure eseguendo il comando seguente:

    Connect-AzAccount
    
  2. Nel browser visualizzato accedere al proprio account Azure.

Creare un gruppo di risorse

A questo punto si creerà un gruppo di risorse che conterrà le risorse del sito Web dell'azienda di giocattoli.

  1. Eseguire questo comando dell'interfaccia della riga di comando di Azure nel terminale di Visual Studio Code per creare un gruppo di risorse:

    az group create --name ToyWebsite --location eastus
    
  2. Esaminare l'output JSON del comando precedente, che include una proprietà denominata id, indicante l'ID del gruppo di risorse. Copiarlo e riporlo in un luogo sicuro. Verrà usato tra poco.

  1. Eseguire questo comando di Azure PowerShell nel terminale di Visual Studio Code per creare un gruppo di risorse:

    New-AzResourceGroup -Name ToyWebsite -Location eastus
    
  2. Esaminare l'output del comando precedente, che include una proprietà denominata ResourceId, indicante l'ID del gruppo di risorse. Copiarlo e riporlo in un luogo sicuro. Verrà usato tra poco.

Creare un'assegnazione di ruolo

Per la pipeline di distribuzione del sito Web, si decide di creare un'assegnazione di ruolo con i dettagli seguenti:

  • Assegnatario: l'entità servizio creata nell'esercizio precedente.
  • Ruolo: il ruolo Collaboratore predefinito.
  • Ambito: il gruppo di risorse creato nel passaggio precedente.

Eseguire il comando dell'interfaccia della riga di comando di Azure seguente nel terminale di Visual Studio Code per creare l'assegnazione di ruolo. Sostituire i segnaposto con i valori copiati in precedenza.

az role assignment create \
  --assignee APPLICATION_ID \
  --role Contributor \
  --scope RESOURCE_GROUP_ID \
  --description "The deployment pipeline for the company's website needs to be able to create resources within the resource group."

Eseguire il comando dell'interfaccia della riga di comando di Azure seguente nel terminale di Visual Studio Code per creare l'assegnazione di ruolo. Sostituire i segnaposto con i valori copiati in precedenza.

New-AzRoleAssignment `
  -ApplicationId APPLICATION_ID `
  -RoleDefinitionName Contributor `
  -Scope RESOURCE_GROUP_ID `
  -Description "The deployment pipeline for the company's website needs to be able to create resources within the resource group."

Creare un file Bicep

In precedenza si è creato un file Bicep che distribuisce le risorse del sito Web. Ora si salverà il file per poterlo testare usando l'entità servizio.

  1. Creare un nuovo file denominato main.bicep.

  2. Aggiungere il contenuto seguente al file main.bicep. Il modello verrà distribuito a breve.

    @description('The Azure region into which the resources should be deployed.')
    param location string = resourceGroup().location
    
    @description('The name of the App Service app.')
    param appServiceAppName string = 'toywebsite${uniqueString(resourceGroup().id)}'
    
    @description('The name of the App Service plan SKU.')
    param appServicePlanSkuName string = 'F1'
    
    var appServicePlanName = 'toy-website-plan'
    var applicationInsightsInstanceName = 'toy-website-insights'
    
    resource appServicePlan 'Microsoft.Web/serverFarms@2020-06-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: appServicePlanSkuName
      }
    }
    
    resource applicationInsightsInstance 'Microsoft.Insights/components@2018-05-01-preview' = {
      name: applicationInsightsInstanceName
      location: location
      kind: 'web'
      properties: {
        Application_Type: 'web'
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2020-06-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          appSettings: [
            {
              name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
              value: applicationInsightsInstance.properties.InstrumentationKey
            }
            {
              name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
              value: applicationInsightsInstance.properties.ConnectionString
            }
          ]
        }
      }
    }
    
  3. Salvare le modifiche apportate al file. È possibile selezionare File>Salva con nome oppure premere CTRL+S in Windows (⌘+S in macOS). Assicurarsi di ricordare dove è stato salvato il file. Ad esempio, è possibile creare una cartella scripts in cui salvarlo.

Distribuire il file Bicep usando l'entità servizio

Non è attualmente disponibile una pipeline di distribuzione, quindi si simuleranno le operazioni eseguite da una pipeline per distribuire il file Bicep.

  1. Eseguire il comando dell'interfaccia della riga di comando di Azure seguente nel terminale di Visual Studio Code per accedere usando le credenziali dell'entità servizio. Sostituire i segnaposto con i valori copiati nell'esercizio precedente.

    az login --service-principal \
      --username APPLICATION_ID \
      --password SERVICE_PRINCIPAL_KEY \
      --tenant TENANT_ID
    
  2. Distribuire il file Bicep eseguendo il comando dell'interfaccia della riga di comando di Azure seguente:

    az deployment group create \
      --resource-group ToyWebsite \
      --template-file main.bicep
    

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

  1. Eseguire il comando di Azure PowerShell seguente nel terminale di Visual Studio Code per chiedere in modo sicuro le credenziali dell'entità servizio. Usare l'ID applicazione e la chiave dell'entità servizio dell'esercizio precedente, rispettivamente come nome utente e password.

    $credential = Get-Credential
    
  2. Eseguire il comando di Azure PowerShell seguente nel terminale di Visual Studio Code per accedere usando le credenziali dell'entità servizio. Sostituire il segnaposto TENANT_ID con il valore copiato in precedenza.

    Connect-AzAccount -ServicePrincipal `
      -Credential $credential `
      -Tenant TENANT_ID
    
  3. Distribuire il file Bicep eseguendo il comando di Azure PowerShell seguente:

    New-AzResourceGroupDeployment -ResourceGroupName ToyWebsite -TemplateFile main.bicep
    

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

Verificare la distribuzione

Usare il portale di Azure per esaminare le risorse distribuite e i risultati della distribuzione.

  1. Vai al portale di Azure.

  2. Nel riquadro sinistro selezionare Gruppi di risorse.

  3. Selezionare ToyWebsite.

  4. Seleziona Distribuzioni per visualizzare la corretta distribuzione.

    Screenshot of the Azure portal resource group Deployments pane, displaying the successful deployment.

    Si potrebbe notare anche una distribuzione denominata Failure-Anomalies-Alert-Rule-Deployment. Application Insights crea automaticamente questa distribuzione.

  5. Seleziona la distribuzione principale per visualizzare le risorse distribuite e quindi seleziona Dettagli della distribuzione per espanderla.

    In questo caso, sono elencati il piano di servizio app, l'app e l'istanza di Application Insights.

    Screenshot of the Azure portal deployments overview pane for the main deployment, with an App Service plan and app, and an Application Insights instance listed.

    Si noti che questa distribuzione non ha niente di insolito. Anche se è stata avviata da un'entità servizio, è analoga a qualsiasi altra distribuzione di Bicep.

Pulire il gruppo di risorse e l'entità servizio

Sono state create un'entità servizio e un'assegnazione di ruolo e le risorse del sito Web sono state distribuite usando un file Bicep. È ora possibile rimuovere le risorse create.

  1. Disconnettersi dall'account dell'entità servizio usando il comando seguente:

    az logout
    
  2. Accedere di nuovo ad Azure con il proprio account utente eseguendo il comando seguente:

    az login
    
  3. Nel browser visualizzato accedere al proprio account Azure.

  4. Eseguire il comando dell'interfaccia della riga di comando di Azure seguente per eliminare il gruppo di risorse, il contenuto e l'assegnazione di ruolo:

    az group delete --name ToyWebsite
    

    Quando viene chiesta conferma, immettere y.

  5. Eseguire il comando seguente per eliminare l'entità servizio. Sostituire il segnaposto APPLICATION_ID con l'ID applicazione copiato nell'esercizio precedente:

    az ad sp delete --id APPLICATION_ID
    
  1. Disconnettersi dall'account dell'entità servizio usando il comando seguente:

    Logout-AzAccount
    
  2. Accedere di nuovo ad Azure con il proprio account utente eseguendo il comando seguente:

    Connect-AzAccount
    
  3. Nel browser visualizzato accedere al proprio account Azure.

  4. Eseguire il comando di Azure PowerShell seguente per eliminare il gruppo di risorse, il contenuto e l'assegnazione di ruolo:

    Remove-AzResourceGroup -Name ToyWebsite
    

    Quando viene chiesta conferma, immettere y.

  5. Eseguire il comando seguente per eliminare l'entità servizio. Sostituire il segnaposto APPLICATION_ID con l'ID applicazione copiato nell'esercizio precedente:

    Remove-AzADServicePrincipal -ApplicationId APPLICATION_ID
    

    Quando viene chiesta conferma, immettere y.