Implementace testování dodržování předpisů pomocí Terraformu a Azure
Testování dodržování předpisů je mnohokrát součástí procesu nepřetržité integrace a slouží k zajištění toho, aby byly dodrženy zásady definované uživatelem. Můžete například definovat geopolitické zásady vytváření názvů pro prostředky Azure. Dalším běžným příkladem je vytváření virtuálních počítačů z definované podmnožiny imagí. K vymáhání pravidel v těchto a mnoha dalších scénářích se použije testování dodržování předpisů.
V tomto článku získáte informace o těchto tématech:
- Vysvětlení použití testování dodržování předpisů
- Informace o tom, jak provést test dodržování předpisů
- Podívejte se na ukázkový test dodržování předpisů a spusťte ho.
1. konfigurace prostředí
- Předplatné Azure: Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
Konfigurace terraformu: Pokud jste to ještě neudělali, nakonfigurujte Terraformu pomocí jedné z následujících možností:
Docker:instalace Docker.
Python:nainstalujte Python.
Terraformu – Nástroj pro dodržování předpisů: Nainstalujte nástroj Terraformu dodržování předpisů spuštěním následujícího příkazu: .
Příklad kódu a prostředků: pomocí nástroje DownGit stáhněte z GitHub projekt pro testování dodržování předpisů a rozbalte do nového adresáře, který obsahuje vzorový kód. Tento adresář je označován jako Příklad adresáře.
2. pochopení testování a kontrol dodržování předpisů
Testování dodržování předpisů je nefunkční technika testování, aby bylo možné zjistit, zda systém splňuje předepsané standardy. Testování dodržování předpisů se také označuje jako testováníshody.
Většina softwarových týmů provádí analýzu a kontroluje, jestli jsou standardy správně vynutily a implementovány. Často pracují současně, aby se zlepšily standardy, které zase vede ke zvýšení kvality.
Při testování dodržování předpisů je třeba zvážit dva důležité koncepty: testování dodržování předpisů a kontroly dodržování předpisů.
- Při testování dodržování předpisů je zajištěno, že výstup každé fáze životního cyklu vývoje odpovídá schváleným požadavkům.
- Kontroly dodržování předpisů by měly být integrovány do vývojového cyklu na začátku projektů. Pokus o přidání kontrol dodržování předpisů v pozdější fázi bude stále obtížnější, pokud samotný požadavek nebude dostatečně zdokumentován.
Kontroly dodržování předpisů jsou přímo dopředné. Sada standardů a postupů je vyvíjena a dokumentována pro každou fázi životního cyklu vývoje. Výstup každé fáze se porovná s dokumentovanými požadavky. Výsledky testu jsou jakékoli "mezery" v nevyhovující předem určeným standardům. Testování dodržování předpisů se provádí prostřednictvím kontrolního procesu a je třeba zdokumentovat výsledek procesu kontroly.
Pojďme se podívat na konkrétní příklad.
Běžným problémem je prostředí, která přeruší, když více vývojářů uplatní nekompatibilní změny. Řekněme, že jedna osoba pracuje na změně a použije prostředky, jako je vytvoření virtuálního počítače v testovacím prostředí. Jiná osoba pak použije jinou verzi kódu, která zřídí jinou verzi tohoto virtuálního počítače. Co je potřeba, je přehledný postup pro zajištění shody s uvedenými pravidly.
Jedním ze způsobů, jak tento problém vyřešit, je definovat zásadu označování prostředků, jako jsou rolecreator značky a. Po definování zásad se k zajištění dodržování zásad používá nástroj, jako je terraformu .
Terraformu – dodržování předpisů se zaměřuje na negativní testování. Negativní testování je proces, který zajišťuje, že systém může řádně zpracovat neočekávané vstupní nebo nežádoucí chování. Fuzzy je příkladem negativního testování. S fuzzy je testován systém, který přijímá vstup, aby bylo zajištěno, že dokáže bezpečně zpracovat Neočekávaný vstup.
Naštěstí je Terraformu vrstva abstrakce pro jakékoli rozhraní API, které vytváří, aktualizuje nebo ničí entity cloudové infrastruktury. Terraformu také zajišťuje synchronizaci místních konfigurací a odpovědí vzdáleného rozhraní API. Vzhledem k tomu, že Terraformu se většinou používá u cloudových rozhraní API, stále potřebujeme způsob, jak zajistit, aby kód nasazený v infrastruktuře používal konkrétní zásady. Terraformu – dodržování předpisů – bezplatný a open source nástroj – poskytuje tuto funkci pro konfigurace Terraformu.
Pomocí příkladu virtuálního počítače může být zásada dodržování předpisů následující: "Pokud vytváříte prostředek Azure, musí obsahovat značku".
Nástroj Terraformu-dodržování předpisů poskytuje testovací rozhraní, ve kterém vytvoříte zásady jako příklad. Pak tyto zásady spustíte na základě plánu spuštění Terraformu.
Terraformu – dodržování předpisů umožňuje aplikovat BDD a vývoj na základě chování, principy. BDD je proces spolupráce, ve kterém všichni účastníci spolupracují, aby definovali, co by měl systém dělat. Mezi tyto zúčastněné strany patří i vývojáři, testeri a kdokoli s svěřeným zájmem, který bude mít za následek vývoj systému. Cílem BDD je podpořit týmy, které sestavují konkrétní příklady, které vyjadřují běžné znalosti toho, jak by se měl systém chovat.
3. Projděte si příklad ověření dodržování předpisů
Dříve v tomto článku jste si přečetli příklad testování dodržování předpisů při vytváření virtuálního počítače pro testovací prostředí. V této části se dozvíte, jak tento příklad přeložit do BDD funkce a scénáře. Pravidlo je nejprve vyjádřeno pomocí okurky, což je nástroj, který slouží k podpoře BDD.
when creating Azure resources, every new resource should have a tag
Předchozí pravidlo je přeloženo následujícím způsobem:
If the resource supports tags
Then it must contain a tag
And its value must not be null
Kód HCL Terraformu by pak měl dodržovat pravidlo, jak je znázorněno níže.
resource "random_uuid" "uuid" {}
resource "azurerm_resource_group" "rg" {
name = "rg-hello-tf-${random_uuid.uuid.result}"
location = var.location
tags = {
environment = "dev"
application = "Azure Compliance"
}
}
První zásadu můžete zapsat jako scénář funkcí BDD následujícím způsobem:
Feature: Test tagging compliance # /target/src/features/tagging.feature
Scenario: Ensure all resources have tags
If the resource supports tags
Then it must contain a tag
And its value must not be null
Následující kód ukazuje test pro konkrétní značku:
Scenario Outline: Ensure that specific tags are defined
If the resource supports tags
Then it must contain a tag <tags>
And its value must match the "<value>" regex
Examples:
| tags | value |
| Creator | .+ |
| Application | .+ |
| Role | .+ |
| Environment | ^(prod\|uat\|dev)$ |
4. spuštění testu kompatibility – příklad
V této části si stáhnete a otestujete příklad.
V rámci tohoto ukázkového adresáře přejděte do
srcadresáře.Spusťte terraformu init pro inicializaci pracovního adresáře.
terraform initSpusťte příkaz terraformu Validate a ověřte syntaxi konfiguračních souborů.
terraform validateKlíčové body:
- Zobrazí se zpráva oznamující, že je konfigurace Terraformu platná.
Spuštěním plánu terraformu vytvořte plán spuštění.
terraform plan -out main.tfplanSpuštěním terraformu show převeďte plán spouštění do formátu JSON pro krok dodržování předpisů.
terraform show -json main.tfplan > main.tfplan.jsonSpusťte terraformu použít pro použití plánu spuštění.
terraform apply main.tfplan -target=random_uuid.uuidKlíčové body:
- Vytvoří se skupina prostředků s názvem, který následuje za vzorem:
rg-hello-tf-<random_number>.
- Vytvoří se skupina prostředků s názvem, který následuje za vzorem:
Spusťte Docker Pull a stáhněte image s kompatibilitou terraformu.
docker pull eerkunt/terraform-complianceSpusťte příkaz Docker Run a spusťte testy v kontejneru Docker.
docker run --rm -v $PWD:/target -it eerkunt/terraform-compliance -f features -p main.tfplan.jsonKlíčové body:
- Test se nezdaří, protože-zatímco první pravidlo, které vyžaduje existenci značek, je úspěšné – druhé pravidlo selže v tom,
RoležeCreatorznačky a chybí.

- Test se nezdaří, protože-zatímco první pravidlo, které vyžaduje existenci značek, je úspěšné – druhé pravidlo selže v tom,
Opravte chybu úpravou
main.tfnásledujícího postupu (kdeRoleCreatorje přidána značka a).tags = { Environment = "dev" Application = "Azure Compliance" Creator = "Azure Compliance" Role = "Azure Compliance" }Klíčové body:
- Konfigurace je teď v souladu se zásadami.
5. Ověřte výsledky.
Spusťte
terraform validateznovu a ověřte syntaxi.terraform validateSpusťte
terraform planznovu a vytvořte nový plán spuštění.terraform plan -out main.tfplanSpuštěním terraformu show převeďte plán spouštění do formátu JSON pro krok dodržování předpisů.
terraform show -json main.tfplan > main.tfplan.jsonSpusťte znovu příkaz Docker pro otestování konfigurace. Pokud byla provedena úplná specifikace, test bude úspěšný.
docker run --rm -v $PWD:/target -it eerkunt/terraform-compliance -f features -p main.tfplan.json
Řešení potíží s Terraformu v Azure
Řešení běžných problémů při použití Terraformu v Azure