Självstudie: Implementera Azure Policy som kod med GitHub

Ett Azure Policy med kodarbetsflöde gör det möjligt att hantera principdefinitioner och tilldelningar som kod, kontrollera livscykeln för uppdatering av dessa definitioner och automatisera valideringen av efterlevnadsresultat. I den här självstudien lär du dig att använda Azure Policy funktioner med GitHub för att skapa en livscykelprocess. Aktiviteterna är bland annat följande:

  • Exportera principdefinitioner och tilldelningar till GitHub
  • Skicka principobjekt uppdaterade i GitHub till Azure
  • Utlösa en efterlevnadssökning från GitHub åtgärden

Om du vill tilldela en princip för att identifiera det aktuella efterlevnadstillståndet för dina befintliga resurser förklarar snabbstartsartiklarna hur du gör det.

Krav

Exportera Azure Policy objekt från Azure Portal

Följ dessa steg om du Azure Portal exportera en principdefinition från en Azure Portal:

  1. Starta Azure Policy-tjänsten i Azure Portal genom att klicka på Alla tjänster och sedan söka efter och välja Princip.

  2. Välj Definitioner till vänster på Azure Policy sidan.

  3. Använd knappen Exportera definitioner eller välj ellipsen på raden för en principdefinition och välj sedan Exportera definition.

  4. Välj knappen Logga in GitHub inloggning. Om du ännu inte har autentiserats med GitHub för att ge Azure Policy behörighet att exportera resursen granskar du åtkomsten till GitHub-åtgärdsbehoven i det nya fönstret som öppnas och väljer Auktorisera AzureGitHubActions för att fortsätta med exportprocessen. När det är klart stängs det nya fönstret.

  5. fliken Grundläggande inställningar anger du följande alternativ och väljer sedan fliken Principer eller knappen Nästa: Principer längst ned på sidan.

    • Lagringsplatsfilter: Ställ in på Mina lagringslager om du bara vill se de lagringslager som du äger eller Alla lagringsplatsen för att se allt du har beviljat åtkomst GitHub-åtgärden.
    • Lagringsplats: Ange till den lagringsplats som du vill exportera Azure Policy resurser till.
    • Gren: Ange -grenen i lagringsplatsen. Att använda en annan gren än standard är ett bra sätt att verifiera dina uppdateringar innan du sammanfogar ytterligare i källkoden.
    • Katalog: Mappen på rotnivå som resurserna ska exporteras Azure Policy till. Undermappar under den här katalogen skapas baserat på vilka resurser som exporteras.
  6. På fliken Principer anger du sökomfånget genom att välja ellipsen och välja en kombination av hanteringsgrupper, prenumerationer eller resursgrupper.

  7. Använd knappen Lägg till principdefinitioner för att söka i omfånget för vilka objekt som ska exporteras. I sidofönstret som öppnas väljer du de objekt som ska exporteras. Filtrera markeringen efter sökrutan eller typen. När du har valt alla objekt som ska exporteras använder du knappen Lägg till längst ned på sidan.

  8. För varje valt objekt väljer du önskade exportalternativ, till exempel Endast definition eller Definition och Tilldelningar för en principdefinition. Välj sedan fliken Granska + exportera eller Nästa: Granska + exportera längst ned på sidan.

    Anteckning

    Om alternativet Definition och Tilldelningar väljs exporteras endast principtilldelningar inom det omfång som anges av filtret när principdefinitionen läggs till.

  9. På fliken Granska + exportera kontrollerar du informationen och använder sedan knappen Exportera längst ned på sidan.

  10. Kontrollera GitHub lagringsplatsen, grenen och rotnivåmappen för att se att de valda resurserna nu exporteras till din källkontroll.

Resurserna Azure Policy exporteras till följande struktur i den valda GitHub och rotnivåmappen:

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

Skicka principobjekt uppdaterade i GitHub till Azure

  1. När principobjekt exporteras skapas även en GitHub arbetsflödesfil .github/workflows/manage-azure-policy-<randomLetters>.yml med namnet för att komma igång.

    Anteckning

    Den GitHub arbetsflödesfilen skapas varje gång exporten används. Varje instans av filen är specifik för alternativen under exportåtgärden.

  2. Den här arbetsflödesfilen använder åtgärden Hantera Azure Policy för att skicka ändringar som gjorts till de exporterade principobjekten på GitHub-lagringsplatsen tillbaka till Azure Policy. Som standard tar åtgärden hänsyn till och synkroniserar endast de filer som skiljer sig från de som finns i Azure. Du kan också använda assignments parametern i åtgärden för att bara synkronisera ändringar som gjorts till specifika tilldelningsfiler. Den här parametern kan endast användas för att tillämpa principtilldelningar för en viss miljö. Mer information finns i readme (Hantera Azure Policy lagringsplats).

  3. Som standard måste arbetsflödet utlösas manuellt. Det gör du med hjälp av GitHub, väljer manage-azure-policy-<randomLetters> arbetsflödet, väljer Kör arbetsflöde och kör sedan arbetsflödet igen.

    Skärmbild av knapparna Åtgärd, Arbetsflöde och Kör arbetsflöde i GitHub webbgränssnittet.

    Anteckning

    Arbetsflödesfilen måste vara i standardgrenen för att kunna identifieras och köras manuellt.

  4. Arbetsflödet synkroniserar de ändringar som görs av principobjekt med Azure och ger dig statusen i loggarna.

    Skärmbild av arbetsflödet i praktiken och loggad information i loggarna.

  5. Arbetsflödet lägger också till information i Azure Policy objekt properties.metadata som du kan spåra.

    Skärmbild av den Azure Policy definitionen i Azure Portal med metadata som är specifika för GitHub åtgärden.

Utlösa efterlevnadsgenomsökningar med GitHub åtgärd

Med hjälp av Azure Policy Compliance Scan-åtgärden kan du utlösa en utvärderingsgenomsökning av efterlevnad på begäran från ditt GitHub-arbetsflöde på en eller flera resurser, resursgrupper eller prenumerationer och ändra arbetsflödets sökväg baserat på kompatibilitetstillståndet för dessa resurser. Du kan också konfigurera arbetsflödet så att det körs vid en schemalagd tidpunkt för att få den senaste kompatibilitetsstatusen vid en lämplig tidpunkt. Den här GitHub också generera en rapport om kompatibilitetstillståndet för skannade resurser för ytterligare analys eller arkivering.

I följande exempel körs en kompatibilitetssökning för en prenumeration.


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

Genomgång

I den här självstudien har du genomfört följande uppgifter:

  • Exporterade principdefinitioner och tilldelningar till GitHub
  • Push-principobjekt uppdaterades i GitHub till Azure
  • Utlöste en efterlevnadssökning från GitHub åtgärden

Nästa steg

Mer information om principdefinitionernas strukturer finns i den här artikeln: