Návrh pracovních postupů pro Azure Policy jako kód

Při procházení zásad správného řízení v cloudu budete chtít přejít z ruční správy jednotlivých přiřazení zásad na webu Azure Portal nebo prostřednictvím různých sad SDK na něco, co je možné spravovat a opakovat v podnikovém měřítku. Dva z převládajících přístupů ke správě systémů ve velkém v cloudu jsou:

  • Infrastruktura jako kód: Postup nakládání s obsahem, který definuje vaše prostředí, vše od šablon Azure Resource Manageru (šablon ARM) až po definice Azure Policy do Služby Azure Blueprints jako zdrojový kód.
  • DevOps: Sjednocení lidí, procesů a produktů za účelem zajištění průběžného doručování hodnot koncovým uživatelům.

Azure Policy jako kód je kombinací těchto nápadů. V podstatě udržujte definice zásad ve správě zdrojového kódu a při každé změně proveďte test a ověřte tuto změnu. To by ale nemělo být rozsahem zapojení zásad do infrastruktury jako kódu nebo DevOps.

Ověřovací krok by měl být také součástí jiných pracovních postupů kontinuální integrace nebo průběžného nasazování (CI/CD), jako je nasazení aplikačního prostředí nebo virtuální infrastruktury. Díky ověření Služby Azure Policy v rané fázi procesu sestavení a nasazení týmy pro aplikace a operace zjistí, jestli se jejich změny chovají očekávaným způsobem, než je příliš pozdě a pokusí se nasadit v produkčním prostředí.

Definice a základní informace

Než se seznámíte s podrobnostmi o službě Azure Policy jako pracovním postupu kódu, je důležité pochopit některé základní koncepty, jako je vytváření definic zásad a definic iniciativ a jak využívat výjimky při přiřazování těchto definic:

Názvy souborů odpovídají určitým částem definic zásad nebo iniciativ a dalším prostředkům zásad:

File format Obsah souboru
policy.json Celá definice zásady
policyset.json Definice celé iniciativy
policy.parameters.json Část properties.parameters definice zásady
policyset.parameters.json Část properties.parameters definice iniciativy
policy.rules.json Část properties.policyRule definice zásady
policyset.definitions.json Část properties.policyDefinitions definice iniciativy
exemptionName.json Výjimka ze zásad, která cílí na konkrétní prostředek nebo obor

Příklady těchto formátů souborů jsou k dispozici v úložišti Azure Policy na GitHubu .

Přehled pracovního postupu

Doporučený obecný pracovní postup služby Azure Policy jako kód vypadá takto:

Diagram showing Azure Policy as Code workflow boxes from Create to Test to Deploy.

Diagram znázorňující pole pracovního postupu Kódu ve službě Azure Policy Vytváření zahrnuje vytváření definic zásad a iniciativ. Test popisuje přiřazení se zakázaným režimem vynucení. Po kontrole stavu dodržování předpisů následuje udělení oprávnění M S I přiřazení a náprava prostředků. Nasazení zahrnuje aktualizaci přiřazení s povoleným režimem vynucení.

Zdrojový ovládací prvek

Existující definice zásad a iniciativ je možné exportovat různými způsoby, jako jsou dotazy PowerShellu, rozhraní příkazového řádku nebo Azure Resource Graphu (ARG ). Prostředí správy zdrojového kódu, které je možné zvolit k uložení těchto definic, může být jednou z mnoha možností, včetně GitHubu nebo Azure DevOps.

Vytváření a aktualizace definic zásad

Definice zásad se vytvářejí pomocí JSON a ukládají se ve správě zdrojového kódu. Každá zásada má vlastní sadu souborů, jako jsou parametry, pravidla a parametry prostředí, které by se měly ukládat do stejné složky. Následující struktura představuje doporučený způsob uchovávání definic zásad ve správě zdrojového kódu.

.
|
|- policies/  ________________________ # Root folder for policy resources
|  |- policy1/  ______________________ # Subfolder for a policy
|     |- policy.json _________________ # Policy definition
|     |- policy.parameters.json ______ # Policy definition of parameters
|     |- policy.rules.json ___________ # Policy rule
|     |- assign.<name1>.json _________ # Assignment 1 for this policy definition
|     |- assign.<name2>.json _________ # Assignment 2 for this policy definition
|     |- exemptions.<name1>/__________ # Subfolder for exemptions on assignment 1
        | - exemptionName.json________ # Exemption for this particular assignment
      |- exemptions.<name2>/__________ # Subfolder for exemptions on assignment 2
        | - exemptionName.json________ # Exemption for this particular assignment
|
|  |- policy2/  ______________________ # Subfolder for a policy
|     |- policy.json _________________ # Policy definition
|     |- policy.parameters.json ______ # Policy definition of parameters
|     |- policy.rules.json ___________ # Policy rule
|     |- assign.<name1>.json _________ # Assignment 1 for this policy definition
|     |- exemptions.<name1>/__________ # Subfolder for exemptions on assignment 1
        | - exemptionName.json________ # Exemption for this particular assignment
|

Při přidání nové zásady nebo aktualizaci existující zásady by měl pracovní postup automaticky aktualizovat definici zásad v Azure. Testování nové nebo aktualizované definice zásady se dodává v pozdějším kroku.

Vytváření a aktualizace definic iniciativ

Definice iniciativ se také vytvářejí pomocí souborů JSON, které by měly být uložené ve stejné složce jako definice zásad. Definice iniciativy vyžaduje, aby definice zásady už existuje, takže ji nelze vytvořit ani aktualizovat, dokud se zdroj zásady neaktualizuje ve správě zdrojového kódu a pak se aktualizuje v Azure. Následující struktura představuje doporučený způsob uchovávání definic iniciativ ve správě zdrojového kódu:

.
|
|- initiatives/ ______________________ # Root folder for initiatives
|  |- init1/ _________________________ # Subfolder for an initiative
|     |- policyset.json ______________ # Initiative definition
|     |- policyset.definitions.json __ # Initiative list of policies
|     |- policyset.parameters.json ___ # Initiative definition of parameters
|     |- assign.<name1>.json _________ # Assignment 1 for this policy initiative
|     |- assign.<name2>.json _________ # Assignment 2 for this policy initiative
|     |- exemptions.<name1>/__________ # Subfolder for exemptions on assignment 1
        | - exemptionName.json________ # Exemption for this particular assignment
      |- exemptions.<name2>/__________ # Subfolder for exemptions on assignment 2
        | - exemptionName.json________ # Exemption for this particular assignment
|
|  |- init2/ _________________________ # Subfolder for an initiative
|     |- policyset.json ______________ # Initiative definition
|     |- policyset.definitions.json __ # Initiative list of policies
|     |- policyset.parameters.json ___ # Initiative definition of parameters
|     |- assign.<name1>.json _________ # Assignment 1 for this policy initiative
|     |- exemptions.<name1>/__________ # Subfolder for exemptions on assignment 1
        | - exemptionName.json________ # Exemption for this particular assignment
|

Stejně jako u definic zásad by měl pracovní postup při přidání nebo aktualizaci existující iniciativy automaticky aktualizovat definici iniciativy v Azure. Testování nové nebo aktualizované definice iniciativy přichází v pozdějším kroku.

Poznámka:

K nasazení zásad se doporučuje použít centralizovaný mechanismus nasazení, jako jsou pracovní postupy GitHubu nebo Azure Pipelines. To pomáhá zajistit, aby se do vašeho prostředí nasazovaly jenom prostředky zásad kontrolované a aby se používal mechanismus postupného a centrálního nasazení. Oprávnění k zápisu k prostředkům zásad je možné omezit na identitu použitou v nasazení.

Testování a ověření aktualizované definice

Jakmile automatizace převezme nově vytvořené nebo aktualizované definice zásad nebo iniciativ a provede aktualizaci objektu v Azure, je čas otestovat provedené změny. Zásady nebo iniciativy, které jsou součástí, by se pak měly přiřazovat k prostředkům v prostředí, které jsou od produkčního prostředí daleko. Toto prostředí je obvykle dev.

Poznámka:

V tomto kroku provádíme testování integrace definice zásad v rámci vašeho prostředí Azure, to je oddělené od omezení funkčnosti definice zásady, ke které by mělo dojít během procesu vytváření definice.

Přiřazení by mělo používat režim vynucení zakázaného, aby vytváření a aktualizace prostředků nebylo blokováno, ale stávající prostředky jsou stále auditovány kvůli dodržování předpisů s aktualizovanou definicí zásad. I v případě vynuceníMode se doporučuje, aby byl obor přiřazení buď skupina prostředků, nebo předplatné, které je určené speciálně pro ověřování zásad.

Poznámka:

I když je režim vynucování užitečný, není náhradou za důkladné testování definice zásad za různých podmínek. Definice zásady by se měla testovat s voláními rozhraní REST API, vyhovujícími a nevyhovujícími PUTPATCH prostředky a hraničními případy, jako je vlastnost, která v prostředku chybí.

Po nasazení přiřazení použijte sadu Azure Policy SDK, úlohu posouzení zabezpečení a dodržování předpisů služby Azure Pipelines nebo dotazy Azure Resource Graphu (viz ukázky) k získání dat dodržování předpisů pro nové přiřazení. Prostředí použité k otestování zásad a přiřazení by mělo mít prostředky s různými stavy dodržování předpisů. Stejně jako dobrý test jednotek pro kód chcete otestovat, že se prostředky vyhodnotí podle očekávání bez falešně pozitivních nebo falešně negativních výsledků. Pokud testujete a ověřujete jenom to, co očekáváte, může dojít k neočekávanému a neidentifikovanému dopadu zásad. Další informace najdete v tématu Vyhodnocení dopadu nové definice služby Azure Policy.

Povolení úloh nápravy

Pokud ověření přiřazení splňuje očekávání, dalším krokem je ověření nápravy. Zásady, které používají buď deployIfNotExists , nebo upravit , můžou mít přidruženou úlohu nápravy aktivovanou tak, aby opravovala prostředky ze stavu nedodržování předpisů a přinesla je do souladu.

Prvním krokem k nápravě prostředků je udělení přiřazení zásady přiřazení role definované v definici zásady. Toto přiřazení role dává spravované identitě přiřazení zásad dostatečná práva k provedení potřebných změn, aby prostředky dodržovaly předpisy.

Jakmile má přiřazení zásady příslušná práva, pomocí sady SDK zásad aktivujte úlohu nápravy pro sadu prostředků, o kterých je známo, že nedodržují předpisy. Před pokračováním by měly být dokončeny tři testy s těmito nápravnými úlohami:

  • Ověřte, že úloha nápravy byla úspěšně dokončena.
  • Spuštěním vyhodnocení zásad zjistíte, že výsledky dodržování předpisů zásad se aktualizují podle očekávání.
  • Spusťte test jednotek prostředí s prostředky přímo a ověřte, že se změnily jejich vlastnosti.

Testování aktualizovaných výsledků vyhodnocení zásad i prostředí přímo potvrzuje, že úlohy nápravy změnily očekávané výsledky a že definice zásady viděla změnu dodržování předpisů podle očekávání.

Aktualizace na vynucená přiřazení

Po dokončení všech ověřovacích bran aktualizujte přiřazení tak, aby používalo režim vynucení povolenou. Tuto změnu doporučujeme provést na začátku ve stejném prostředí daleko od produkčního prostředí. Ověřte, že se při vytváření prostředků a aktualizaci prostředků použijí požadované efekty. Jakmile se toto prostředí ověří podle očekávání, měla by být změna vymezena tak, aby zahrnovala další prostředí a tak dále, dokud se zásada nenasadí do produkčních prostředků.

Zpracování integrovaných hodnocení

Obecný pracovní postup pro Azure Policy jako kód je určen pro vývoj a nasazování zásad a iniciativ do prostředí ve velkém měřítku. Vyhodnocení zásad by ale mělo být součástí procesu nasazení pro jakýkoli pracovní postup, který nasazuje nebo vytváří prostředky v Azure, například nasazení aplikací nebo spouštění šablon ARM pro vytvoření infrastruktury.

V těchto případech by se po nasazení aplikace nebo infrastruktury do testovacího předplatného nebo skupiny prostředků mělo provést vyhodnocení zásad pro kontrolu rozsahu u všech existujících zásad a iniciativ. I když se můžou v takovém prostředí nakonfigurovat jako vynucovacímodezakázané , je užitečné včas zjistit, jestli nasazení aplikace nebo infrastruktury není v rozporu s definicemi zásad. Toto vyhodnocení zásad by proto mělo být krokem v těchto pracovních postupech a neúspěšná nasazení, která vytvářejí nevyhovující prostředky.

Přehled

Tento článek se zabývá obecným pracovním postupem pro Azure Policy jako kódem a také tam, kde by mělo být vyhodnocení zásad součástí jiných pracovních postupů nasazení. Tento pracovní postup lze použít v libovolném prostředí, které podporuje skriptované kroky a automatizaci na základě triggerů.

Další kroky