Sdílet prostřednictvím


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

  1. V ukázkovém adresáři přejděte do src adresáře.

  2. Spuštěním příkazu terraform init inicializujete pracovní adresář.

    terraform init
    
  3. 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á.
  4. Spuštěním plánu terraformu vytvořte plán provádění.

    terraform plan -out main.tfplan
    
  5. 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
    
  6. Spuštěním příkazu docker pull stáhněte image terraform-compliance.

    docker pull eerkunt/terraform-compliance
    
  7. 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 a Creator značky.

    Příklad neúspěšného testu

  8. Opravte chybu tak, že ji upravíte následujícím způsobem main.tf (kde Role se přidá značka a Creator 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.

  1. Znovu spusťte terraform validate a ověřte syntaxi.

    terraform validate
    
  2. Znovu spusťte terraform plan a vytvořte nový plán provádění.

    terraform plan -out main.tfplan
    
  3. 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
    
  4. 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
    

    Příklad úspěšného testu

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

Řešení potíží s Terraformem v Azure

Řešení běžných problémů při používání Terraformu v Azure

Další kroky