Exercice – Autoriser votre principal de service pour les déploiements

Effectué

Dans l’exercice précédent, vous avez créé un principal de service pour le pipeline de déploiement de votre site web. Vous l’avez testé pour vérifier que vous pouviez vous connecter à l’aide de sa clé. Vous êtes maintenant prêt à permettre l’accès à votre environnement Azure au principal de service. Dans cet exercice, vous allez créer une attribution de rôle pour le principal de service, puis déployer un fichier Bicep à l’aide du principal de service.

Pendant ce processus, vous allez :

  • Connectez-vous avec votre propre compte d’utilisateur.
  • Créez un groupe de ressources pour le site web de votre entreprise.
  • Créez une attribution de rôle pour permettre au principal de service de déployer des ressources dans le groupe de ressources.
  • Connectez-vous en tant que principal de service et déployez le fichier Bicep qui crée les ressources du site web de votre entreprise.
  • Vérifier le déploiement
  • Nettoyez le groupe de ressources et le principal de service.

Se connecter avec le compte d’utilisateur

Dans l’exercice précédent, vous vous êtes connecté à l’aide du principal de service, puis vous vous êtes déconnecté. Vous devez vous connecter à nouveau avec votre propre compte d’utilisateur pour pouvoir suivre les étapes suivantes de cet exercice.

  1. Dans le terminal Azure Cloud Shell (bash) de Visual Studio Code, connectez-vous à Azure en exécutant la commande suivante :

    az login
    
  2. Dans le navigateur qui s’ouvre, connectez-vous à votre compte Azure.

  1. Dans le terminal Azure Cloud Shell (PowerShell) de Visual Studio Code, connectez-vous à Azure en exécutant la commande suivante :

    Connect-AzAccount
    
  2. Dans le navigateur qui s’ouvre, connectez-vous à votre compte Azure.

Créer un groupe de ressources

Vous allez maintenant créer un groupe de ressources pour contenir les ressources du site web de l’entreprise de jouets.

  1. Exécutez cette commande Azure CLI dans le terminal Visual Studio Code pour créer un groupe de ressources :

    az group create --name ToyWebsite --location eastus
    
  2. Examinez la sortie JSON de la commande précédente. Elle comprend une propriété nommée id qui est l’ID du groupe de ressources. Copiez ces informations dans un endroit sûr. Vous en aurez bientôt besoin.

  1. Exécutez cette commande Azure PowerShell dans le terminal Visual Studio Code pour créer un groupe de ressources :

    New-AzResourceGroup -Name ToyWebsite -Location eastus
    
  2. Examinez la sortie de la commande précédente. Elle comprend une propriété nommée ResourceId qui est l’ID du groupe de ressources. Copiez ces informations dans un endroit sûr. Vous en aurez bientôt besoin.

Création d'une affectation de rôle

Pour le pipeline de déploiement de votre site web, vous décidez de créer une attribution de rôle avec les détails suivants :

  • Destinataire : le principal de service que vous avez créé dans l’exercice précédent.
  • Rôle : rôle intégré Contributeur.
  • Étendue : le groupe de ressources que vous avez créé à l’étape précédente.

Exécutez la commande Azure CLI suivante dans le terminal Visual Studio Code pour créer l’attribution de rôle. Remplacez les espaces réservés par les valeurs que vous avez copiées précédemment.

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."

Exécutez la commande Azure CLI suivante dans le terminal Visual Studio Code pour créer l’attribution de rôle. Remplacez les espaces réservés par les valeurs que vous avez copiées précédemment.

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."

Créer un fichier Bicep

Vous avez créé précédemment un fichier Bicep qui déploie les ressources de votre site web. Vous enregistrez ici ce fichier afin de pouvoir le tester à l’aide du principal de service.

  1. Créez un fichier nommé main.bicep.

  2. Ajoutez le contenu suivant au fichier main.bicep. Vous allez bientôt déployer le modèle.

    @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. Enregistrez les modifications du fichier. Vous pouvez soit sélectionner Fichier>Enregistrer sous, soit Ctrl+S dans Windows (⌘+S sur macOS). Veillez à mémoriser l’emplacement où vous avez enregistré le fichier. Vous pouvez par exemple créer un dossier scripts pour l’y enregistrer.

Déployer le fichier Bicep à l’aide du principal de service

Vous ne disposez actuellement d’aucun pipeline de déploiement. Vous allez donc simuler le comportement d’un pipeline qui déploie votre fichier Bicep.

  1. Exécutez la commande Azure CLI suivante dans le terminal Visual Studio Code pour vous connecter à l’aide des informations d’identification du principal de service. Remplacez les espaces réservés par les valeurs que vous avez copiées lors de l’exercice précédent.

    az login --service-principal \
      --username APPLICATION_ID \
      --password SERVICE_PRINCIPAL_KEY \
      --tenant TENANT_ID
    
  2. Déployez le fichier Bicep en exécutant la commande Azure CLI suivante :

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

    Le déploiement peut prendre une ou deux minutes. Une notification de déploiement réussi s’affiche ensuite.

  1. Exécutez la commande Azure PowerShell suivante dans le terminal Visual Studio Code pour être invité en toute sécurité à renseigner les informations d’identification du principal de service. Utilisez la clé et l’ID d’application du principal de service de l’exercice précédent, respectivement en tant que nom d’utilisateur et mot de passe.

    $credential = Get-Credential
    
  2. Exécutez la commande Azure PowerShell suivante dans le terminal Visual Studio Code pour vous connecter à l’aide des informations d’identification du principal de service. Remplacez l’espace réservé TENANT_ID par la valeur que vous avez copiée précédemment.

    Connect-AzAccount -ServicePrincipal `
      -Credential $credential `
      -Tenant TENANT_ID
    
  3. Déployez le fichier Bicep en exécutant la commande Azure PowerShell suivante :

    New-AzResourceGroupDeployment -ResourceGroupName ToyWebsite -TemplateFile main.bicep
    

    Le déploiement peut prendre une ou deux minutes. Une notification de déploiement réussi s’affiche ensuite.

Vérifier le déploiement

Utilisez le portail Azure pour inspecter les ressources que vous avez déployées et pour inspecter les résultats du déploiement.

  1. Accédez au portail Azure.

  2. Dans le volet gauche, sélectionnez Groupes de ressources.

  3. Sélectionnez ToyWebsite.

  4. Sélectionnez Déploiements pour voir le déploiement réussi.

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

    Vous pouvez également voir un déploiement nommé Failure-Anomalies-Alert-Rule-Deployment. Application Insights crée ce déploiement automatiquement.

  5. Sélectionnez le déploiement principal appelé pour voir quelles ressources ont été déployées, puis développez Détails du déploiement.

    Dans ce cas, le plan App Service, l’application et l’instance Application Insights sont répertoriés.

    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.

    Notez que ce déploiement ne présente aucune particularité. Même si c’est un principal de service qui l’a initié, c’est un déploiement Bicep comme n’importe quel autre.

Nettoyer le groupe de ressources et le principal de service

Vous avez créé un principal de service et une attribution de rôle avec succès, puis vous avez déployé les ressources de votre site web à l’aide d’un fichier Bicep. Vous pouvez maintenant supprimer les ressources que vous avez créées.

  1. Déconnectez-vous du compte du principal de service à l’aide de la commande suivante :

    az logout
    
  2. Reconnectez-vous à Azure avec votre propre compte d’utilisateur en exécutant la commande suivante :

    az login
    
  3. Dans le navigateur qui s’ouvre, connectez-vous à votre compte Azure.

  4. Exécutez la commande Azure CLI suivante pour supprimer le groupe de ressources, son contenu et l’attribution de rôle :

    az group delete --name ToyWebsite
    

    Quand vous êtes invité à confirmer, entrez y.

  5. Exécutez la commande suivante pour supprimer le principal de service. Remplacez l’espace réservé APPLICATION_ID par l’ID d’application que vous avez copié dans l’exercice précédent :

    az ad sp delete --id APPLICATION_ID
    
  1. Déconnectez-vous du compte du principal de service à l’aide de la commande suivante :

    Logout-AzAccount
    
  2. Reconnectez-vous à Azure avec votre propre compte d’utilisateur en exécutant la commande suivante :

    Connect-AzAccount
    
  3. Dans le navigateur qui s’ouvre, connectez-vous à votre compte Azure.

  4. Exécutez la commande Azure PowerShell suivante pour supprimer le groupe de ressources, son contenu et l’attribution de rôle :

    Remove-AzResourceGroup -Name ToyWebsite
    

    Quand vous êtes invité à confirmer, entrez y.

  5. Exécutez la commande suivante pour supprimer le principal de service. Remplacez l’espace réservé APPLICATION_ID par l’ID d’application que vous avez copié dans l’exercice précédent :

    Remove-AzADServicePrincipal -ApplicationId APPLICATION_ID
    

    Quand vous êtes invité à confirmer, entrez y.