Azure Policy tervezése kódmunkafolyamatokként

A felhőszabályozással való haladás során érdemes az azure portalon vagy a különböző SDK-kon keresztül az egyes szabályzat-hozzárendelések manuális felügyeletéről egy nagyvállalati szinten kezelhetőbb és megismételhetőbbre áttérni. A felhőben lévő nagy léptékű rendszerek felügyeletének két fő megközelítése a következő:

  • Infrastruktúra kódként: A környezeteket meghatározó tartalom, az Azure Resource Manager-sablonoktól (ARM-sablonoktól) az Azure Policy-definíciókon át az Azure Blueprintsig, forráskódként történő kezelésének gyakorlata.
  • DevOps: Az emberek, a folyamatok és a termékek egyesülése, hogy lehetővé tegye a végfelhasználók számára az érték folyamatos átadását.

Az Azure Policy as Code ezeknek az ötleteknek a kombinációja. A szabályzatdefiníciókat lényegében a forráskontrollban tarthatja, és amikor módosítást végez, tesztelje és ellenőrizze a módosítást. Ez azonban nem lehet a szabályzatok kódként vagy DevOpsként való bevonásának mértéke.

Az érvényesítési lépésnek más folyamatos integrációs vagy folyamatos üzembe helyezési (CI/CD) munkafolyamatok, például egy alkalmazáskörnyezet vagy virtuális infrastruktúra üzembe helyezésének is hozzá kell tartoznia. Azáltal, hogy az Azure Policy érvényesítése a buildelési és üzembe helyezési folyamat korai összetevőjévé válik, az alkalmazás- és üzemeltetési csapatok felfedezik, hogy a módosítások a várt módon működnek-e, mielőtt túl késő lenne, és éles környezetben próbálják-e üzembe helyezni őket.

Definíciók és alapinformációk

Mielőtt megismerkednénk az Azure Policy mint Kód munkafolyamat részleteivel, fontos tisztában lenni néhány alapvető fogalomkal, például a szabályzatdefiníciók és a kezdeményezési definíciók készítésével, valamint a definíciók hozzárendelései alóli kivételek kihasználásával:

A fájlnevek megfelelnek a szabályzat- vagy kezdeményezésdefiníciók bizonyos részeinek és más szabályzaterőforrásoknak:

Fájlformátum Fájl tartalma
policy.json A teljes szabályzatdefiníció
policyset.json A kezdeményezés teljes definíciója
policy.parameters.json A properties.parameters szabályzatdefiníció része
policyset.parameters.json A properties.parameters kezdeményezés definíciójának része
policy.rules.json A properties.policyRule szabályzatdefiníció része
policyset.definitions.json A properties.policyDefinitions kezdeményezés definíciójának része
exemptionName.json Egy adott erőforrást vagy hatókört célzó szabályzat kivétele

Példák ezekre a fájlformátumokra az Azure Policy GitHub-adattárban

Munkafolyamat áttekintése

Az Azure Policy ajánlott általános munkafolyamata a Code-ként az alábbi diagramhoz hasonlóan néz ki:

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

Az Azure Policy mint Kód munkafolyamat-mezőket bemutató diagram. A szabályzat- és kezdeményezésdefiníciók létrehozását ismerteti. A teszt le van tiltva a kényszerítési móddal való hozzárendelésre. A megfelelőségi állapot átjáró-ellenőrzését az M S I-engedélyek megadása és az erőforrások szervizelése követi. Az üzembe helyezés magában foglalja a hozzárendelés frissítését úgy, hogy engedélyezve van a kényszerítési mód.

Verziókövetés

A meglévő szabályzat- és kezdeményezésdefiníciók különböző módokon exportálhatók, például PowerShell-, PARANCSSOR- vagy Azure Resource Graph-lekérdezésekkel. A definíciók tárolására választott forrásvezérlési felügyeleti környezet számos lehetőség egyike lehet, beleértve a GitHubot vagy az Azure DevOpsot is.

Szabályzatdefiníciók létrehozása és frissítése

A szabályzatdefiníciók JSON használatával jönnek létre, és a forráskövetésben vannak tárolva. Minden szabályzat saját fájlkészlettel rendelkezik, például azokat a paramétereket, szabályokat és környezeti paramétereket, amelyeket ugyanabban a mappában kell tárolni. Az alábbi struktúra ajánlott módszer a szabályzatdefiníciók forráskontrollban tartására.

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

Ha új szabályzatot ad hozzá, vagy egy meglévőt frissít, a munkafolyamatnak automatikusan frissítenie kell a szabályzatdefiníciót az Azure-ban. Az új vagy frissített szabályzatdefiníció tesztelése egy későbbi lépésben érkezik.

Kezdeményezési definíciók létrehozása és frissítése

A kezdeményezési definíciók JSON-fájlok használatával is létrejönnek, amelyeket ugyanabban a mappában kell tárolni, mint a szabályzatdefiníciókat. A kezdeményezés definíciójához a szabályzatdefiníciónak már léteznie kell, ezért csak akkor hozható létre vagy frissíthető, ha a szabályzat forrását a forráskövetésben frissítették, majd az Azure-ban frissítették. Az alábbi struktúra ajánlott módszer a kezdeményezési definíciók forráskontrollban tartására:

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

A szabályzatdefiníciókhoz hasonlóan a munkafolyamatnak automatikusan frissítenie kell a kezdeményezés definícióját az Azure-ban egy meglévő kezdeményezés hozzáadásakor vagy frissítésekor. Az új vagy frissített kezdeményezésdefiníció tesztelése egy későbbi lépésben érkezik.

Megjegyzés:

Javasoljuk, hogy a szabályzatok üzembe helyezéséhez olyan központosított üzembehelyezési mechanizmust használjon, mint a GitHub-munkafolyamatok vagy az Azure Pipelines. Ez segít biztosítani, hogy csak a áttekintett szabályzaterőforrások legyenek üzembe helyezve a környezetben, és hogy fokozatos és központi üzembe helyezési mechanizmust használjon. A szabályzaterőforrások írási engedélyei az üzembe helyezés során használt identitásra korlátozhatók.

A frissített definíció tesztelése és ellenőrzése

Miután az automatizálás végrehajtotta az újonnan létrehozott vagy frissített szabályzat- vagy kezdeményezésdefiníciókat, és frissítette az objektumot az Azure-ban, ideje tesztelni a végrehajtott módosításokat. A szabályzatot vagy a kezdeményezés(ek)et, amelynek része, az éles környezet erőforrásaihoz kell hozzárendelni. Ez a környezet általában Dev.

Megjegyzés:

Ebben a lépésben a szabályzatdefiníció integrálási tesztelését végezzük az Azure-környezetben, ez nem azonos a szabályzatdefiníció azon funkcióival, amelyeknek a definíciókészítési folyamat során kell történniük.

A hozzárendelésnek a letiltott kényszerítő eszközt kell használnia, hogy az erőforrások létrehozása és frissítése ne legyen letiltva, de a meglévő erőforrások továbbra is naplózásra kerülnek a frissített szabályzatdefiníciónak való megfelelés érdekében. Még a enforcementMode esetén is ajánlott, hogy a hozzárendelés hatóköre egy erőforráscsoport vagy egy előfizetés, amely kifejezetten a szabályzatok érvényesítésére alkalmas.

Megjegyzés:

Bár a kényszerítési mód hasznos, nem helyettesíti a szabályzatdefiníciók alapos tesztelését különböző feltételek mellett. A szabályzatdefiníciót rest API-hívásokkal, megfelelő és nem megfelelő erőforrásokkal, valamint peremhálózati esetekkel, például az erőforrásból hiányzó tulajdonsággal PUTPATCH kell tesztelni.

A hozzárendelés üzembe helyezése után használja az Azure Policy SDK-t, az Azure Pipelines biztonsági és megfelelőségi felmérési feladatát vagy az Azure Resource Graph -lekérdezéseket (lásd a mintákat) az új hozzárendelés megfelelőségi adatainak lekéréséhez. A szabályzatok és hozzárendelések teszteléséhez használt környezetnek különböző megfelelőségi állapotú erőforrásokkal kell rendelkeznie. A kód egy jó egységtesztjeként azt szeretné tesztelni, hogy az erőforrások kiértékelése a várt módon történik-e hamis pozitív vagy hamis negatív értékek nélkül. Ha csak a várt eredményt teszteli és ellenőrzi, a szabályzat váratlan és azonosítatlan hatással lehet. További információ: Egy új Azure Policy-definíció hatásának értékelése.

Szervizelési feladatok engedélyezése

Ha a hozzárendelés érvényesítése megfelel az elvárásoknak, a következő lépés a szervizelés ellenőrzése. A deployIfNotExists vagy a módosítást használó szabályzatok egy kapcsolódó szervizelési feladatot aktiválhatnak a nem megfelelő állapotból származó erőforrások kijavítása és megfelelőségük biztosítása érdekében.

Az erőforrások szervizelésének első lépése az, hogy a szabályzat-hozzárendelésnek megadja a szabályzatdefinícióban meghatározott szerepkör-hozzárendelést. Ez a szerepkör-hozzárendelés elegendő jogosultságot biztosít a szabályzat-hozzárendelés felügyelt identitásának az erőforrás megfelelővé tétele érdekében szükséges módosítások elvégzéséhez.

Ha a szabályzat-hozzárendelés megfelelő jogosultságokkal rendelkezik, a Policy SDK-val szervizelési feladatokat indíthat el olyan erőforrásokon, amelyekről ismert, hogy nem megfelelőek. Három tesztet kell elvégezni a szervizelt feladatokon a folytatás előtt:

  • Ellenőrizze, hogy a szervizelési feladat sikeresen befejeződött-e
  • Szabályzatértékelés futtatása annak megtekintéséhez, hogy a szabályzatmegfelelőségi eredmények a várt módon frissülnek-e
  • A környezeti egység tesztjének futtatása közvetlenül az erőforrásokon annak ellenőrzéséhez, hogy megváltoztak-e a tulajdonságaik

A frissített szabályzatértékelési eredmények és a környezet tesztelése közvetlenül megerősíti, hogy a szervizelési feladatok megváltoztatták a várt eredményt, és hogy a szabályzatdefiníció a vártnak megfelelően módosította a megfelelőséget.

Frissítés kényszerített hozzárendelésekre

Miután az összes érvényesítési kapu befejeződött, frissítse a hozzárendelést, hogy az engedélyezve legyen a enforcementMode használata. Javasoljuk, hogy ezt a módosítást kezdetben ugyanabban a környezetben végezze el, távol az éles környezettől. Ellenőrizze, hogy a kívánt hatások érvényesülnek-e az erőforrás létrehozása és az erőforrás frissítése során. Ha a környezet a várt módon működik, a módosítás hatóköre a következő környezetre is kiterjed, és így tovább, amíg a szabályzat éles erőforrásokra nem lesz üzembe helyezve.

Integrált kiértékelések feldolgozása

Az Azure Policy as Code általános munkafolyamata szabályzatok és kezdeményezések nagy léptékű környezetbe történő fejlesztésére és üzembe helyezésére szolgál. A szabályzatok kiértékelésének azonban részt kell vennie az azure-ban erőforrásokat üzembe helyező vagy létrehozó munkafolyamatok üzembe helyezésének folyamatában, például alkalmazások üzembe helyezésében vagy ARM-sablonok futtatásában az infrastruktúra létrehozásához.

Ezekben az esetekben, miután az alkalmazás vagy az infrastruktúra üzembe helyezése egy teszt-előfizetésben vagy erőforráscsoportban megtörtént, az adott hatókörre vonatkozó szabályzatértékelést kell végezni az összes meglévő szabályzat és kezdeményezés ellenőrzésének ellenőrzéséhez. Bár ezek konfigurálhatók egy ilyen környezetben letiltott kényszerítési módként, érdemes korán tudni, hogy egy alkalmazás vagy infrastruktúra üzembe helyezése megsérti-e a szabályzatdefiníciókat. Ennek a szabályzatértékelésnek ezért a munkafolyamatok egyik lépésének kell lennie, és nem megfelelő erőforrásokat létrehozó sikertelen üzembe helyezésnek kell lennie.

Review

Ez a cikk az Azure Policy mint Kód általános munkafolyamatát ismerteti, valamint azt is, hogy a szabályzatok kiértékelésének más üzembehelyezési munkafolyamatok részét kell képeznie. Ez a munkafolyamat bármely olyan környezetben használható, amely támogatja a szkriptelt lépéseket és az eseményindítókon alapuló automatizálást.

Következő lépések