Tutorial: Implementieren von Azure Policy-as-Code mit GitHub

Mit einem Azure Policy-as-Code-Workflow können Sie Ihre Richtliniendefinitionen und -zuweisungen als Code verwalten, den Lebenszyklus der Aktualisierung dieser Definitionen steuern und die Überprüfung von Complianceergebnissen automatisieren. In diesem Tutorial erfahren Sie, wie Sie Azure Policy-Funktionen mit GitHub verwenden, um einen Lebenszyklusprozess zu erstellen. Zu diesen Aufgaben zählt Folgendes:

  • Exportieren von Richtliniendefinitionen und -zuweisungen nach GitHub
  • Pushen von in GitHub aktualisierten Richtlinienobjekten zu Azure
  • Auslösen einer Complianceüberprüfung über GitHub Actions

Lesen Sie die Schnellstartartikel, wenn Sie eine Richtlinie zum Ermitteln des aktuellen Konformitätszustands Ihrer vorhandenen Ressourcen zuweisen möchten.

Voraussetzungen

  • Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
  • Lesen Sie Entwerfen eines Azure Policy-as-Code-Workflows, um ein Verständnis für die in diesem Tutorial verwendeten Entwurfsmuster zu bekommen.
  • Ihrem Konto muss die Rolle Besitzer im Umfang der Verwaltungsgruppe oder des Abonnements zugewiesen werden. Weitere Informationen zu Azure RBAC-Berechtigungen in Azure Policy finden Sie unter Übersicht über Azure Policy.

Exportieren von Azure Policy-Objekten aus dem Azure-Portal

Hinweis

Besitzerberechtigungen sind im Bereich der Richtlinienobjekte erforderlich, die in GitHub exportiert werden.

Führen Sie die folgenden Schritte aus, um eine Richtliniendefinition aus dem Azure-Portal zu exportieren:

  1. Starten Sie den Azure Policy-Dienst über das Azure-Portal, indem Sie auf Alle Dienste klicken und dann nach Richtlinie suchen und die entsprechende Option auswählen.

  2. Wählen Sie links auf der Seite „Azure Policy“ die Option Definitionen aus.

  3. Verwenden Sie die Schaltfläche Definitionen exportieren, oder wählen Sie die Auslassungspunkte in der Zeile einer Richtliniendefinition und dann Definition exportieren aus.

  4. Wählen Sie die Schaltfläche Mit GitHub anmelden aus. Wenn Sie sich noch nicht bei GitHub authentifiziert haben, um Azure Policy zum Exportieren der Ressource zu autorisieren, überprüfen Sie in dem neuen Fenster, das geöffnet wird, welchen Zugriff GitHub Actions benötigt, und wählen Sie AzureGitHubActions autorisieren aus, um mit dem Exportvorgang fortzufahren. Sobald der Vorgang abgeschlossen ist, wird das neue Fenster automatisch geschlossen.

  5. Legen Sie auf der Registerkarte Grundlagen die folgenden Optionen fest, und wählen Sie dann die Registerkarte Richtlinien oder die Schaltfläche Weiter: Richtlinien unten auf der Seite aus.

    • Repositoryfilter: Legen Sie dies auf Meine Repositorys fest, um nur die Repositorys in Ihrem Besitz anzuzeigen, oder auf Alle Repositorys, um alle Repositorys anzuzeigen, denen Sie den Zugriff auf GitHub Actions gewährt haben.
    • Repository: Legen Sie hierfür das Repository fest, in das Sie die Azure Policy-Ressourcen exportieren möchten.
    • Branch: Legen Sie den Branch im Repository fest. Die Verwendung eines anderen Branches als des standardmäßigen ist eine gute Möglichkeit, Ihre Updates zu validieren, bevor Sie sie in den Quellcode einbringen.
    • Verzeichnis: Der Ordner auf Stammebene, in den die Azure Policy-Ressourcen exportiert werden sollen. Die Unterordner in diesem Verzeichnis werden auf Basis der exportierten Ressourcen erstellt.
  6. Legen Sie auf der Registerkarte Richtlinien den Suchbereich fest, indem Sie die Auslassungspunkte und dann eine Kombination von Verwaltungsgruppen, Abonnements oder Ressourcengruppen auswählen.

  7. Suchen Sie mit der Schaltfläche Richtliniendefinition(en) hinzufügen den Bereich, für den Objekte exportiert werden sollen. Wählen Sie im daraufhin geöffneten seitlichen Fenster die einzelnen zu exportierenden Objekte aus. Filtern Sie die Auswahl nach Suchfeld oder Typ. Nachdem Sie alle zu exportierenden Objekte ausgewählt haben, verwenden Sie die Schaltfläche Hinzufügen am unteren Rand der Seite.

  8. Wählen Sie für jedes ausgewählte Objekt die gewünschten Exportoptionen für eine Richtliniendefinition aus, z. B. Nur Definition oder Definition und Zuweisung(en) . Wählen Sie dann die Registerkarte Überprüfen + exportieren oder die Schaltfläche Weiter: Überprüfen + exportieren am unteren Rand der Seite aus.

    Hinweis

    Wenn die Option Definition und Zuweisung(en) ausgewählt wird, werden nur die Richtlinienzuweisungen exportiert, die innerhalb des Bereichs liegen, der beim Hinzufügen der Richtliniendefinition vom Filter festgelegt wird.

  9. Überprüfen Sie auf der Registerkarte Überprüfen + exportieren die Übereinstimmung im Detail, und verwenden Sie dann die Schaltfläche Exportieren unten auf der Seite.

  10. Überprüfen Sie das GitHub-Repository, den Branch und den Ordner auf Stammebene, um zu sehen, dass die ausgewählten Ressourcen nun in die Quellcodeverwaltung exportiert werden.

Die Azure Policy-Ressourcen werden in die folgende Struktur innerhalb des ausgewählten GitHub-Repositorys und des Ordners auf Stammebene exportiert:

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

Pushen von in GitHub aktualisierten Richtlinienobjekten zu Azure

  1. Wenn Richtlinienobjekte exportiert werden, wird ebenfalls eine GitHub-Workflowdatei namens .github/workflows/manage-azure-policy-<randomLetters>.yml erstellt, um Ihnen den Einstieg zu erleichtern.

    Hinweis

    Die GitHub-Workflowdatei wird jedes Mal erstellt, wenn der Export verwendet wird. Jede Instanz der Datei ist für die während dieser Exportaktion verwendeten Optionen spezifisch.

  2. Diese Workflowdatei verwendet die Azure Policy verwalten-Aktion, um Änderungen, die an den exportierten Richtlinienobjekten im GitHub-Repository vorgenommen wurden, an Azure Policy zurückzuleiten. Standardmäßig berücksichtigt und synchronisiert die Aktion nur die Dateien, die sich von den in Azure vorhandenen Dateien unterscheiden. Sie können auch den Parameter assignments in der Aktion verwenden, um nur Änderungen zu synchronisieren, die an bestimmten Zuweisungsdateien vorgenommen wurden. Dieser Parameter kann verwendet werden, um Richtlinienzuweisungen nur für eine bestimmte Umgebung anzuwenden. Weitere Informationen finden Sie in der Repository-Infodatei zu „Azure Policy verwalten“.

  3. Standardmäßig muss der Workflow manuell ausgelöst werden. Verwenden Sie hierzu die Aktionen in GitHub, wählen Sie den Workflow manage-azure-policy-<randomLetters> aus, wählen Sie Workflow ausführen aus und dann noch mal Workflow ausführen.

    Screenshot der Registerkarte „Aktion“ sowie der Schaltflächen „Workflow“ und „Workflow ausführen“ in der GitHub-Webschnittstelle.

    Hinweis

    Die Workflowdatei muss sich im Standardbranch befinden, damit sie erkannt und manuell ausgeführt werden muss.

  4. Der Workflow synchronisiert die an Richtlinienobjekten vorgenommenen Änderungen mit Azure und gibt den Status in die Protokolle aus.

    Screenshot des Workflows in Aktion sowie protokollierte Details in den Protokollen.

  5. Der Workflow fügt außerdem Details zu properties.metadata von Azure Policy-Objekten hinzu, die Sie nachverfolgen können.

    Screenshot der Azure Policy-Definition im Azure-Portal, aktualisiert mit für die GitHub-Aktion spezifischen Metadaten

Auslösen einer Complianceüberprüfung mithilfe von GitHub Actions

Mithilfe der Aktion „Azure Policy-Complianceüberprüfung“ können Sie von Ihrem GitHub-Workflow aus für eine oder mehrere Ressourcen, Ressourcengruppen oder Abonnements bei Bedarf eine Compliancebewertungsprüfung auslösen und den Workflowpfad basierend auf dem Compliancestatus dieser Ressourcen ändern. Sie können den Workflow auch so konfigurieren, dass er zu einer geplanten Zeit abläuft, um zu einem geeigneten Zeitpunkt den neuesten Konformitätsstatus zu erhalten. Optional können Sie mit diesen GitHub Actions auch einen Bericht über den Konformitätsstatus der überprüften Ressourcen zur weiteren Analyse oder zur Archivierung erstellen.

Im folgenden Beispiel wird eine Konformitätsprüfung für ein Abonnement ausgeführt.


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

Überprüfung

In diesem Tutorial haben Sie folgende Aufgaben durchgeführt:

  • Exportieren von Richtliniendefinitionen und -zuweisungen nach GitHub
  • Pushen von in GitHub aktualisierten Richtlinienobjekten zu Azure
  • Auslösen einer Complianceüberprüfung über GitHub Actions

Nächste Schritte

Weitere Informationen zu den Strukturen von Richtliniendefinitionen finden Sie im folgenden Artikel: