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
- Om du inte har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
- Granska Designa ett Azure Policy som kodarbetsflöde för att förstå de designmönster som används i den här självstudien.
Exportera Azure Policy objekt från Azure Portal
Följ dessa steg om du Azure Portal exportera en principdefinition från en Azure Portal:
Starta Azure Policy-tjänsten i Azure Portal genom att klicka på Alla tjänster och sedan söka efter och välja Princip.
Välj Definitioner till vänster på Azure Policy sidan.
Använd knappen Exportera definitioner eller välj ellipsen på raden för en principdefinition och välj sedan Exportera definition.
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.
På 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.
På fliken Principer anger du sökomfånget genom att välja ellipsen och välja en kombination av hanteringsgrupper, prenumerationer eller resursgrupper.
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.
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.
På fliken Granska + exportera kontrollerar du informationen och använder sedan knappen Exportera längst ned på sidan.
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
När principobjekt exporteras skapas även en GitHub arbetsflödesfil
.github/workflows/manage-azure-policy-<randomLetters>.ymlmed 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.
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
assignmentsparametern 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).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.
Anteckning
Arbetsflödesfilen måste vara i standardgrenen för att kunna identifieras och köras manuellt.
Arbetsflödet synkroniserar de ändringar som görs av principobjekt med Azure och ger dig statusen i loggarna.
Arbetsflödet lägger också till information i Azure Policy objekt
properties.metadatasom du kan spåra.
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: