Implementace testování dodržování předpisů pomocí Terraformu a Azure
Terraform umožňuje definici, verzi Preview a nasazení cloudové infrastruktury. Pomocí Terraformu vytvoříte konfigurační soubory pomocí syntaxe HCL. Syntaxe seznamu HCL umožňuje zadat poskytovatele cloudu , například Azure, a prvky, které tvoří vaši cloudovou infrastrukturu. Po vytvoření konfiguračních souborů vytvoříte plán provádění, který vám umožní zobrazit náhled změn infrastruktury před jejich nasazením. Jakmile ověříte změny, použijete plán provádění k nasazení infrastruktury.
Testování dodržování předpisů je často součástí procesu kontinuální integrace a používá se k zajištění dodržování uživatelem definovaných zásad. 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žina imagí. Testování dodržování předpisů by se použilo k vynucení pravidel v těchto a mnoha dalších scénářích.
V tomto článku získáte informace o těchto tématech:
- Vysvětlení, kdy použít testování dodržování předpisů
- Zjistěte, jak provést test dodržování předpisů.
- Zobrazení a spuštění ukázkového testu dodržování předpisů
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.
Nakonfigurujte Terraform: Pokud jste to ještě neudělali, nakonfigurujte Terraform pomocí jedné z následujících možností:
Docker: Nainstalujte Docker.
Python: Nainstalujte Python.
Nástroj pro dodržování předpisů Terraformu: Nainstalujte nástroj pro dodržování předpisů Terraform spuštěním následujícího příkazu:
pip install terraform-compliance
.Příklad kódu a prostředků: Pomocí nástroje DownGit stáhněte z GitHubu projekt pro testování dodržování předpisů a rozbalte ho do nového adresáře, který bude obsahovat ukázkový kód. Tento adresář se označuje jako ukázkový adresář.
2. Pochopení testování dodržování předpisů a kontrol
Testování dodržování předpisů je nefunkční technika testování, která určuje, jestli 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ě vynucované a implementované. Často pracuje současně na zlepšení standardů, které následně vedou ke zvýšení kvality.
Při testování dodržování předpisů je potřeba vzít v úvahu dva důležité koncepty: testování dodržování předpisů a kontroly dodržování předpisů.
- Testování dodržování předpisů zajišťuje, že výstup každé fáze životního cyklu vývoje odpovídá dohodnutý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 se stává čím dál obtížnější, když samotný požadavek není dostatečně zdokumentovaný.
Provádění kontrol dodržování předpisů je jednoduché. Sada standardů a postupů je vyvinuta a zdokumentovaná pro každou fázi životního cyklu vývoje. Výstup každé fáze se porovná s zdokumentovanými požadavky. Výsledky testu jsou jakékoli "mezery" v souladu s předem určenými standardy. Testování dodržování předpisů se provádí prostřednictvím procesu kontroly a výsledek procesu kontroly by měl být zdokumentován.
Podívejme se na konkrétní příklad.
Běžným problémem jsou prostředí, která přeruší, když více vývojářů použije nekompatibilní změny. Řekněme, že jedna osoba pracuje na změně a používá 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 zde potřeba, je dohled nad tím, aby se zajistila shoda se stanovený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 například značky role
a creator
značky. Po definování zásad se k zajištění dodržování zásad použije nástroj, jako je dodržování předpisů Terraformu.
Dodržování předpisů Terraformu se zaměřuje na negativní testování. Negativní testování je proces zajištění, že systém dokáže řádně zpracovat neočekávané vstupy nebo nežádoucí chování. Fuzzing je příkladem negativního testování. Při fuzzingu se systém, který přijímá vstup, testuje, aby zajistil, že dokáže bezpečně zpracovat neočekávaný vstup.
Terraform je naštěstí abstraktní vrstva pro jakékoli rozhraní API, které vytváří, aktualizuje nebo zničí entity cloudové infrastruktury. Terraform také zajišťuje synchronizaci místní konfigurace a vzdálených odpovědí rozhraní API. Vzhledem k tomu, že Terraform se většinou používá pro cloudová rozhraní API, stále potřebujeme způsob, jak zajistit, aby kód nasazený v infrastruktuře používal konkrétní zásady. Dodržování předpisů Terraformu – bezplatný a opensourcový nástroj – poskytuje tuto funkci pro konfigurace Terraformu.
Při použití 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 pro dodržování předpisů Terraform poskytuje testovací architekturu, ve které vytváříte zásady, jako je příklad. Tyto zásady pak spustíte proti plánu provádění Terraformu.
Dodržování předpisů Terraform umožňuje použít principy vývoje řízeného chováním nebo BDD. BDD je proces spolupráce, kdy všichni účastníci spolupracují na definování toho, co má systém dělat. Mezi tyto zúčastněné strany obecně patří vývojáři, testeři a všichni, kdo mají zájem o vestu, nebo kteří budou ovlivněni vývojem systému. Cílem BDD je povzbuzovat týmy, aby vytvořily konkrétní příklady, které vyjadřují společný přehled o chování systému.
3. Prozkoumání příkladu testu 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í. Tato část ukazuje, jak tento příklad přeložit do funkce a scénáře BDD. Pravidlo je nejprve vyjádřeno pomocí zeleniny, což je nástroj používaný k podpoře BDD.
when creating Azure resources, every new resource should have a tag
Předchozí pravidlo se přeloží takto:
If the resource supports tags
Then it must contain a tag
And its value must not be null
Kód Terraform HCL pak bude dodržovat následující pravidlo.
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ásada může být napsána jako scénář funkce 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 určitou 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í příkladu testu dodržování předpisů
V této části si stáhnete a otestujete příklad.
V ukázkovém adresáři přejděte do
src
adresáře.Spuštěním příkazu terraform init inicializujete pracovní adresář.
terraform init
Spusťte terraform a ověřte syntaxi konfiguračních souborů.
terraform validate
Klíčové body:
- Zobrazí se zpráva oznamující, že konfigurace Terraformu je platná.
Spuštěním plánu terraformu vytvořte plán provádění.
terraform plan -out main.tfplan
Spuštěním příkazu terraform show převeďte plán provádění na JSON pro krok dodržování předpisů.
terraform show -json main.tfplan > main.tfplan.json
Spuštěním příkazu docker pull stáhněte image terraform-compliance.
docker pull eerkunt/terraform-compliance
Spuštěním dockeru spusťte testy v kontejneru Dockeru.
docker run --rm -v $PWD:/target -it eerkunt/terraform-compliance -f features -p main.tfplan.json
Klíčové body:
- Test selže, protože zatímco první pravidlo vyžadující existenci značek bude úspěšné, druhé pravidlo selže v tom, že
Role
chybí značky aCreator
značky.
- Test selže, protože zatímco první pravidlo vyžadující existenci značek bude úspěšné, druhé pravidlo selže v tom, že
Opravte chybu tak, že ji upravíte následujícím způsobem
main.tf
(kdeRole
se přidá značka aCreator
značka).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.
Znovu spusťte
terraform validate
a ověřte syntaxi.terraform validate
Znovu spusťte
terraform plan
a vytvořte nový plán provádění.terraform plan -out main.tfplan
Spuštěním příkazu terraform show převeďte plán provádění na JSON pro krok dodržování předpisů.
terraform show -json main.tfplan > main.tfplan.json
Spusťte znovu spuštění Dockeru a otestujte konfiguraci. Pokud je implementována úplná specifikace, test bude úspěšný.
docker run --rm -v $PWD:/target -it eerkunt/terraform-compliance -f features -p main.tfplan.json
Spuštění terraformu platí pro použití plánu provádění.
terraform apply main.tfplan -target=random_uuid.uuid
Klíčové body:
- Vytvoří se skupina prostředků s názvem následujícím vzorem:
rg-hello-tf-<random_number>
.
- Vytvoří se skupina prostředků s názvem následujícím vzorem:
Řešení potíží s Terraformem v Azure
Řešení běžných problémů při používání Terraformu v Azure