UITROL · CI/CD EN IAC

CI/CD en uitrol van infrastructure-as-code op STACKIT

Rol de gemigreerde infrastructuur uit vanuit een pipeline, niet vanaf een laptop: beoordeel met een strikte gate, bewaar het gegenereerde pakket als buildartefact, authenticeer de STACKIT-provider met een kortlevend OIDC-token in plaats van een opgeslagen sleutel, zet de state in een backend die u beschermt en pas alleen een planbestand toe dat iemand heeft beoordeeld. Deze gids volgt een kleine AWS-omgeving door die keten en markeert welke onderdelen uit een StackToIT-run komen en welke uit de documentatie van de STACKIT-provider.

De uitrolketen, in volgorde

  1. 1. Beoordelen in de pipeline

    Voer het assessment uit met --strict en --format json. Het rapport wordt ook geschreven als de gate faalt, dus de job bewaart de uitvoermap als artefact en legt de exitcode ernaast vast.

  2. 2. De map verifiëren

    stacktoit verify controleert de run aan de hand van het manifest en controleert of de gegenereerde bestanden met elkaar overeenkomen. Het is geen bewijs dat er iets in een cloud is uitgevoerd, en geen handtekening.

  3. 3. De open verzoeken beantwoorden in bestanden

    De run schrijft inputs-template.yaml en decisions-template.yaml in zijn uitvoermap. Kopieer ze buiten de gegenereerde map, vul ze in, commit ze en voer opnieuw uit met --inputs en --decisions. Een vastgelegde review alleen herschrijft het concept niet.

  4. 4. Het beoordeelde concept committen

    De terraform-map zet de provider vast op één versie en vereist Terraform of OpenTofu 1.11 of hoger. Behandel het concept als voorstel: het gaat door een gewone pull request.

  5. 5. Authenticeren zonder opgeslagen sleutel

    Maak een serviceaccount aan, koppel een gefedereerde identity provider voor uw CI-systeem en laat de provider het OIDC-token van de pipeline inwisselen. Houd de assertions zo smal als het token toestaat.

  6. 6. De state kiezen en beschermen

    Het concept declareert geen backend. Een S3-backend op Object Storage werkt met overgeslagen AWS-specifieke controles, maar locking werkt niet; en de state bevat enkele secrets in leesbare tekst.

  7. 7. Plannen, beoordelen, het planbestand toepassen

    Voer init, validate en plan -out uit als afzonderlijke stappen, laat een persoon het plan lezen en pas dan exact dat bestand toe.

  8. 8. Na elke wijziging opnieuw uitvoeren

    Nieuwe inputs of beslissingen wijzigen het concept en het uitvoeringsplan. Beoordeel opnieuw en bekijk het nieuwe plan in plaats van het oude te patchen.

De gate, zoals de run die meldt

Een omgeving van vijf resources voor deze pagina, op 4 november 2026 beoordeeld door StackToIT met --strict en --format json, met --no-validate, dus de OpenTofu-validatie is overgeslagen. Eerst: de twee commando's die de StackToIT-automatiseringsdocumentatie voor een gate geeft, elk letterlijk uit zijn eigen codeblok. Daarna: het verificatie-event en het samenvattingsrecord dat de run afdrukte, opgemaakt, met alleen de hier besproken velden (de records bevatten meer, zoals run-id, bestandslijst en aantallen stappen).

Pipelinestap: strikte gateStackToIT docs: CLI automation
stacktoit assess ./terraform --strict --format json > assessment-events.jsonl
Pipelinestap: verifyStackToIT docs: CLI automation
stacktoit verify ./terraform-stacktoit --output json
Consoleuitvoer van de runassessment-events.jsonl
{
  "type": "event",
  "event_code": "RUN_VERIFIED",
  "phase": "publish",
  "severity": "INFO",
  "human_summary": "The package passed the checks of stacktoit verify (7 checks, PASSED) before it was published; the record is in run_verification of manifest.json."
}
{
  "type": "summary",
  "exit_code": 7,
  "exit_reasons": [
    {
      "code": 7,
      "reason": "PACKAGE_NOT_EXECUTION_READY",
      "detail": "package PARTIALLY_EXECUTABLE"
    }
  ],
  "run_status": "COMPLETE",
  "package": "FULL",
  "verification": "PASSED",
  "summary": {
    "package_state": "PARTIALLY_EXECUTABLE",
    "architect_approval": "NOT_PROVIDED",
    "safe_to_apply": "NOT_ASSERTED"
  }
}
  • Exit 7 is de strikte gate die werkt

    Het pakket was compleet en geverifieerd, maar de exitcode is 7 met als reden dat het pakket niet gereed is voor uitvoering: het is gedeeltelijk uitvoerbaar. Van de 12 geautomatiseerde stappen wacht er één op een ontwerpbeslissing (het bootimage) en geen enkele kan draaien zoals geschreven zolang project_id geen waarde heeft. Een eerste assessment faalt normaal gesproken op een strikte gate; daar is de gate voor.

  • Code en artefact samen behandelen

    De documentatie vraagt de automatisering om de exitcode vast te leggen en de gegenereerde bestanden te bewaren waar ze bestaan. Andere codes: 3 betekent dat de validatie de bron of het concept afwees, 4 een onvolledige bron, 5 een vergrendelde uitvoermap, 6 een mislukte verificatie.

  • Goedkeuring blijft een veld voor mensen

    De samenvatting toont goedkeuring van de architect als niet opgegeven en safe-to-apply als niet vastgesteld. Een pipeline vult die niet in; een persoon doet dat, via het beslissingsbestand.

Wat het concept aan de pipeline overdraagt

Dezelfde run. Links: terraform/terraform.tf, dat de STACKIT-provider vastzet. Rechts: de commando's die execution/terraform/apply.md noemt. De run past niets toe; het bestand zegt dat niets in deze map is uitgevoerd.

STACKIT-Terraform van StackToITterraform/terraform.tf
terraform {
  # Write-only attributes (e.g. a VPN pre-shared key) need Terraform/OpenTofu 1.11 or later.
  required_version = ">= 1.11.0"

  required_providers {
    stackit = {
      source  = "stackitcloud/stackit"
      version = "0.121.0"
    }
  }
}

provider "stackit" {
  default_region = var.region
}
Commando's in het pakketexecution/terraform/apply.md
cd terraform
tofu init
tofu validate
tofu plan -out=stackit.tfplan
tofu apply stackit.tfplan
  • Eén providerversie

    Het concept zet de provider vast op één versie, zodat elke pipelinerun plant tegen hetzelfde schema. Verhoog de vastgezette versie bewust, in een pull request.

  • Variabelen zonder standaardwaarde blijven open

    Het project-ID, het image, het machinetype en de grootte van het bootvolume hebben geen standaardwaarde. Lever ze aan via een variabelenbestand of TF_VAR-omgevingsvariabelen, nooit in een gecommit bestand als ze gevoelig zijn.

  • Handmatige stappen en een apply in twee runs

    apply.md opent met "Do not apply yet": één OpenTofu-stap wacht op een beslissing. Het bestand heeft een onderdeel voor handmatige stappen die klaar moeten zijn vóór tofu apply (geen in deze run), omdat OpenTofu het hele concept in één keer toepast en ze niet afdwingt. Hier splitst het bestand de apply in twee runs: eerst de twee security groups, dan twee STACKIT API-aanroepen die standaard egress-regels verwijderen, dan de rest.

Authenticatie met workload identity federation

Letterlijk uit de Workload Identity Federation-gids van de STACKIT-provider, niet door een run voortgebracht. Links: de gefedereerde identity provider die de gids op het serviceaccount voor zijn eigen repository configureert (vervang repository en branch in sub door die van u). Rechts: de plan- en apply-stappen van het GitHub Actions-voorbeeld; de job heeft ook de permissie id-token: write nodig.

Gefedereerde identity provider (GitHub)Provider guide: Workload Identity Federation
- **Provider Name**: GitHub # This is just an example, you can choose any name you want
- **Issuer URL**: https://token.actions.githubusercontent.com # This is the public issuer for GitHub Actions OIDC tokens
- **Assertions**:
  - **sub**->equals->repo:stackitcloud/terraform-provider-stackit:ref:refs/heads/main # This is the repository and branch where the action will run
  - **aud**->equals->sts.accounts.stackit.cloud # Mandatory value
WorkflowstappenProvider guide: GitHub Actions workflow
      - name: Terraform Plan
        run: |
          terraform plan -out=tfplan
        env:
          STACKIT_USE_OIDC: "1"
          STACKIT_SERVICE_ACCOUNT_EMAIL: "terraform-example@sa.stackit.cloud"

      - name: Terraform Apply
        run: terraform apply -auto-approve tfplan
        env:
          STACKIT_USE_OIDC: "1"
          STACKIT_SERVICE_ACCOUNT_EMAIL: "terraform-example@sa.stackit.cloud"
  • Geen statisch secret

    De provider documenteert deze flow als de manier die langlevende secrets in CI/CD overbodig maakt. De provider zoekt de OIDC-instelling in het providerblok, dan in omgevingsvariabelen en dan in een bestand met inloggegevens. Het voorbeeld van de gids draait Terraform en past toe met -auto-approve in dezelfde job; het pakket van de run gebruikt tofu, en deze pagina heeft de flow niet onder OpenTofu gecontroleerd. Zet de planreview tussen de twee stappen.

  • De audience is verplicht

    De STACKIT-documentatie vereist een assertion op de audience; alleen de gelijkheidsoperator wordt ondersteund en een token wordt alleen geaccepteerd als elke assertion klopt. De gids adviseert de meest beperkende beschikbare assertions.

  • Andere CI-systemen

    De gids behandelt GitHub Actions en Azure DevOps en zegt dat de principes ook kunnen gelden voor andere CI/CD-platforms die OIDC ondersteunen.

Fasen, instellingen en gates

FaseCommando of instellingGate en wat u bewaart
Beoordelenstacktoit assess ./terraform --strict --format jsonExit 0 is een gepubliceerd rapport; 7 is een strikte fout. Bewaar de uitvoermap in beide gevallen.
Verifiërenstacktoit verify RUN_DIRExit 0 slaagt, 6 meldt bevindingen. Vergelijk twee runs met --same-as.
Inputs beoordelen--inputs- en --decisions-bestanden in versiebeheerReviews die aan een andere bron zijn gekoppeld, kunnen als verouderd worden gemeld.
AuthenticerenSTACKIT_USE_OIDC en STACKIT_SERVICE_ACCOUNT_EMAILDe sleutelflow blijft beschikbaar via STACKIT_SERVICE_ACCOUNT_KEY_PATH.
StateS3-backend op Object Storage, of een PostgreSQL-backenduse_lockfile heeft geen effect op STACKIT Object Storage: laat één apply-job tegelijk draaien.
Plannen en toepassentofu plan -out, daarna tofu apply op het planbestandBewaar het plan; een persoon keurt goed vóór de apply.

De run heeft locking op geen enkele backend getest en zegt dat. De state bevat ook de geheime toegangssleutel van Object Storage in leesbare tekst, dus de state is zelf een secret.

Beslissingen van de architect

  • Wie het plan goedkeurt

    Een reviewer van het eigenaarsteam, met het planbestand bij de wijziging. De run legt goedkeuring vast als niet opgegeven tot een persoon antwoordt.

  • Locatie en versleuteling van de state

    De run adviseert de state te versleutelen en het leesrecht te beperken tot de pipeline, en verwijst naar OpenTofu state encryption of een versleutelde backend.

  • Eén job tegelijk

    Zonder werkende locks serialiseert u applies in de pipelineconfiguratie.

  • Rechten van het serviceaccount

    Het serviceaccount heeft de rollen nodig van de diensten die het concept gebruikt; het requirements-bestand noemt geen rol, dus zoek per dienst het minimum op.

  • Strikte of adviserende gate

    Bepaal of exit 7 de merge blokkeert of alleen labelt. Gangbare praktijk: adviserend voor een eerste assessment, strikt voor de applyfase.

Vragen over de uitrol

Past StackToIT iets toe vanuit de pipeline?

Nee. Assess leest en schrijft bestanden. Terraform of OpenTofu past toe, gestart door uw pipeline of een persoon.

Waarom faalt mijn strikte gate op een schoon assessment?

Omdat de strikte modus gedeeltelijke en niet-geverifieerde uitkomsten tot fouten maakt. Een pakket dat gedeeltelijk uitvoerbaar is, met beslissingen die openstaan, geeft exit 7 terwijl rapport en verificatie in orde zijn.

Kan ik state op Object Storage vergrendelen?

Niet met het lockbestand van de S3-backend: de providerdocumentatie meldt dat het geen effect heeft op STACKIT Object Storage en verwijst voor locking naar een PostgreSQL-backend.

Moet de pipeline een serviceaccountsleutel bevatten?

Geef de voorkeur aan workload identity federation. De sleutelflow bestaat, vereist een sleutelbestand van het serviceaccount, en die sleutel is een langlevend secret.

Waar komen secrets in de state vandaan?

De vastgezette provider schrijft sommige attributen, zoals de geheime toegangssleutel van een Object Storage-credential, in de state. sensitive verbergt ze alleen in de uitvoer van het plan.

Bronnen

Uw volgende stap: STACKIT.

Vertel ons over uw omgeving, dan laten wij zien wat StackToIT daarvoor oplevert: doelarchitectuur, Terraform-artefacten en een gestructureerd migratieplan.

Laat uw gegevens achter, onze specialisten nemen contact met u op.

Liever zelf een e-mail sturen? connect@stacktoit.com

Wij gebruiken uw gegevens alleen om dit verzoek te beantwoorden en een mogelijke pilot te bespreken. Privacyverklaring