Tutoriel : Implémenter Azure Policy en tant que code avec GitHub

Un workflow Azure Policy sous forme de code permet de gérer vos définitions et affectations de stratégies en tant que code, de contrôler le cycle de vie de la mise à jour de ces définitions, et d’automatiser la validation des résultats de conformité. Dans ce tutoriel, vous allez apprendre à utiliser les fonctionnalités Azure Policy avec GitHub pour créer un processus de cycle de vie. Il s’agit notamment des tâches suivantes :

  • Exporter les définitions et les affectations de stratégie vers GitHub
  • Pousser vers Azure les objets de stratégie mis à jour dans GitHub
  • Déclencher une analyse de conformité depuis GitHub Actions

Si vous souhaitez affecter une stratégie pour identifier l’état de conformité actuel de vos ressources existantes, les articles de démarrage rapide vous expliquent la marche à suivre.

Prérequis

Exporter les objets Azure Policy à partir du portail Azure

Notes

Des autorisations de propriétaire sont requises au niveau des objets de stratégie exportés vers GitHub.

Pour exporter une définition de stratégie à partir du Portail Azure, procédez comme suit :

  1. Lancez le service Azure Policy dans le portail Azure en cliquant sur Tous les services, puis en recherchant et en cliquant sur Stratégie.

  2. Sélectionnez Définitions sur le côté gauche de la page Azure Policy.

  3. Utilisez le bouton Exporter les définitions ou sélectionnez les points de suspension sur la ligne d’une définition de stratégie, puis sélectionnez Exporter la définition.

  4. Sélectionnez le bouton Sign in with GitHub (Se connecter avec GitHub). Si vous n’avez pas encore été authentifié avec GitHub pour autoriser Azure Policy à exporter la ressource, passez en revue les besoins GitHub Actions dans la nouvelle fenêtre qui s’ouvre, puis sélectionnez Autoriser AzureGitHubActions pour poursuivre le processus d’exportation. Une fois l’opération terminée, la nouvelle fenêtre se ferme automatiquement.

  5. Sous l’onglet Général, définissez les options suivantes, puis sélectionnez l’onglet Stratégies ou Suivant : Stratégies en bas de la page.

    • Filtre de référentiel : affectez la valeur Mes référentiels pour afficher uniquement les référentiels que vous possédez, ou Tous les référentiels pour voir tous les référentiels auxquels vous avez accordé l’accès à GitHub Action.
    • Référentiel : Définissez sur le référentiel dans lequel vous souhaitez exporter les ressources Azure Policy.
    • Branche : Définissez la branche dans le référentiel. L’utilisation d’une autre branche que la branche par défaut est un bon moyen de valider vos mises à jour avant de les fusionner dans votre code source.
    • Répertoire : Le dossier racine vers lequel exporter les ressources Azure Policy. Les sous-dossiers de ce répertoire sont créés en fonction des ressources exportées.
  6. Sous l’onglet Stratégies, définissez l’étendue à rechercher en sélectionnant les points de suspension et en choisissant une combinaison de groupes d’administration, d’abonnements ou de groupes de ressources.

  7. Utilisez le bouton Ajouter une ou plusieurs définitions de stratégie pour rechercher l’étendue des objets à exporter. Dans la fenêtre latérale qui s’ouvre, sélectionnez chaque objet à exporter. Filtrez la sélection avec la zone de recherche ou en sélectionnant un type. Une fois que vous avez sélectionné tous les objets à exporter, utilisez le bouton Ajouter au bas de la page.

  8. Pour chaque objet sélectionné, sélectionnez les options d’exportation souhaitées, par exemple Définition seulement ou Définition et affectation(s) pour une définition de stratégie. Sélectionnez ensuite l’onglet Vérifier + exporter ou le bouton Suivant : Vérifier + exporter en bas de la page.

    Notes

    Si vous avez choisi l’option Définition et affectation(s) , seules les affectations de stratégie au sein de l’étendue définie par le filtre lors de l’ajout de la définition de stratégie sont exportées.

  9. Sous l’onglet Vérifier + exporter, vérifiez que les détails correspondent, puis utilisez le bouton Exporter au bas de la page.

  10. Vérifiez votre référentiel, votre branche et votre dossier de niveau racine GitHub pour vérifier que les ressources sélectionnées sont désormais exportées vers votre contrôle de code source.

Les ressources Azure Policy sont exportées dans la structure suivante dans le référentiel et le dossier de niveau racine GitHub sélectionnés :

|
|- <root level folder>/  ________________ # Root level folder set by Directory property
|  |- policies/  ________________________ # Subfolder for policy objects
|     |- <displayName>_<name>____________ # Subfolder based on policy displayName and name properties
|        |- policy.json _________________ # Policy definition
|        |- assign.<displayName>_<name>__ # Each assignment (if selected) based on displayName and name properties
|

Pousser vers Azure les objets de stratégie mis à jour dans GitHub

  1. Lorsque des objets de stratégie sont exportés, un fichier de workflow GitHub nommé .github/workflows/manage-azure-policy-<randomLetters>.yml est également créé pour vous aider à démarrer.

    Notes

    Le fichier de workflow GitHub est créé chaque fois que l’exportation est utilisée. Chaque instance du fichier est spécifique aux options utilisées durant cette action d’exportation.

  2. Ce fichier de workflow utilise l’action Gérer Azure Policy pour transmettre à Azure Policy les modifications apportées aux objets de stratégie exportés dans le dépôt GitHub. Par défaut, l’action prend en compte et synchronise uniquement les fichiers qui sont différents de ceux existants dans Azure. Vous pouvez également utiliser le paramètre assignments dans l’action pour synchroniser uniquement les modifications apportées à des fichiers d’affectation spécifiques. Ce paramètre peut être utilisé pour appliquer des affectations de stratégie uniquement pour un environnement particulier. Pour plus d’informations, consultez le fichier readme du dépôt Manage Azure Policy.

  3. Par défaut, le workflow doit être déclenché manuellement. Pour ce faire, utilisez les Actions dans GitHub, sélectionnez le workflow manage-azure-policy-<randomLetters>, puis sélectionnez Exécuter le workflow et de nouveau Exécuter le workflow.

    Capture d’écran de l’onglet Action, du workflow et des boutons Exécuter le workflow dans l’interface web GitHub.

    Notes

    Le fichier de workflow doit se trouver dans la branche par défaut pour être détecté et exécuté manuellement.

  4. Le workflow synchronise avec Azure les modifications apportées aux objets de stratégie, et vous donne l’état dans les journaux.

    Capture d’écran du workflow en action et des détails enregistrés dans les journaux.

  5. Le workflow ajoute également des détails dans les objets Azure Policy properties.metadata pour vous permettre le suivi.

    Capture d’écran de la définition Azure Policy, dans le portail Azure, qui est mise à jour avec des métadonnées propres à GitHub Actions.

Déclencher des analyses de conformité avec GitHub Actions

En utilisant l’action Analyse de conformité Azure Policy, vous pouvez déclencher une analyse d’évaluation de conformité à la demande depuis votre workflow GitHub sur un nombre quelconque de ressources, de groupes de ressources ou d’abonnements, et contrôler le chemin de workflow en fonction de l’état de conformité de ces ressources. Vous pouvez également configurer le workflow pour qu’il s’exécute à une heure planifiée afin d’obtenir l’état de conformité le plus récent au moment opportun. Si vous le souhaitez, ces actions GitHub peuvent également générer un rapport sur l’état de conformité des ressources analysées en vue d’une analyse plus poussée ou de l’archivage.

L’exemple suivant exécute une analyse de conformité pour un abonnement.


on:
  schedule:
    - cron:  '0 8 * * *'  # runs every morning 8am
jobs:
  assess-policy-compliance:
    runs-on: ubuntu-latest
    steps:
    - name: Login to Azure
      uses: azure/login@v1
      with:
        creds: ${{secrets.AZURE_CREDENTIALS}}

    - name: Check for resource compliance
      uses: azure/policy-compliance-scan@v0
      with:
        scopes: |
          /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Révision

Dans ce didacticiel, vous avez effectué avec succès les tâches suivantes :

  • Exportation des définitions et des affectations de stratégie vers GitHub
  • Envoi vers Azure d’objets de stratégie mis à jour dans GitHub
  • Déclenchement d’une analyse de conformité depuis GitHub Actions

Étapes suivantes

Pour plus d’informations sur les structures des définitions de stratégie, consultez cet article :