AWS → STACKIT · ARCHITECTUUR
Van een AWS landing zone naar een STACKIT-organisatie
Een AWS landing zone bestaat uit accounts, organisatie-eenheden, service control policies, een gedeeld netwerk en een audittrail. STACKIT biedt een organisatie, folders, projecten en een network area, maar geen laag om policies aan te koppelen. StackToIT beoordeelde een compacte landing zone: de helft kon naar Terraform worden vertaald, de andere helft kwam terug als ontwerpwerk voor uw architecten.
Drie manieren om de organisatie in te richten
De vraag is hoeveel van de accountgrens u wilt behouden. De run behandelt de AWS-organisatie, de organisatie-eenheden en de accounts als ontwerpwerk, niet als resources om te kopiëren.
| Indeling | Zo wordt het gekoppeld | Afweging |
|---|---|---|
| Eén organisatie, folders, één project per account | Een organisatie-eenheid wordt een folder; een account wordt een project. Dit is de vergelijkbare groepering die de run voorstelt. | Het dichtst bij de AWS-opzet. De run merkt op dat een project geen aparte grens voor account, facturatie en IAM is. Het toegangsbeleid richt u daarom opnieuw in; het wordt niet overgenomen. |
| Een aparte organisatie voor accounts die harde isolatie nodig hebben | De run noemt dit voor accounts die echt geïsoleerd moeten zijn van de rest. | Sterkste scheiding, maar een tweede organisatie betekent eigen rollen, een eigen network area en een tweede plek om te beheren. |
| Eén project met meerdere netwerken | Elk subnet wordt een netwerk in één project; het project is de grens van de VPC. | Het eenvoudigst voor een omgeving met één VPC. Security groups gelden voor het hele project. De scheiding tussen lagen houdt u dus in stand met groepen, niet met accounts. |
Resource Manager-rollen beheren de hiërarchie en geven volgens de documentatie van STACKIT geen toegang tot cloudresources binnen een project. Plan de rolbindingen per project expliciet.
Wat de run van elke landing zone-resource maakte
Elf eenheden: 1 DIRECT, 5 RECONFIGURE, 5 REDESIGN. Vijf zijn als Terraform opgesteld, één heeft geen resource nodig en vijf zijn overgelaten aan een architect.
| AWS-resource | STACKIT-doel | Klasse en zekerheidsniveau |
|---|---|---|
| aws_organizations_organization | Geen: de organisatie wordt niet door de provider aangemaakt; rollen worden ontworpen op organisatie, folders en projecten | REDESIGN, MEDIUM |
| aws_organizations_organizational_unit | Resource Manager-folder, een groeperingsniveau zonder policykoppeling | REDESIGN, LOW |
| aws_organizations_account | Resource Manager-project, een vergelijkbaar containerniveau | REDESIGN, LOW |
| aws_organizations_policy (service control) | Niet beheerd: policy as code in de deliverypipeline | REDESIGN, LOW |
| aws_vpc en aws_subnet | Netwerken in het project | RECONFIGURE, MEDIUM |
| aws_ec2_transit_gateway | Network area en network area region | RECONFIGURE, MEDIUM |
| aws_kms_key | KMS-keyring en -sleutel | RECONFIGURE, MEDIUM |
| aws_s3_bucket (trail) | Object Storage-bucket | DIRECT, MEDIUM |
| aws_cloudtrail (organisatietrail) | Telemetry Router-instance met een Object Storage-bestemming | RECONFIGURE, MEDIUM |
| aws_guardduty_detector | Geen: detectie wordt opnieuw ontworpen op Audit Log en Logs, met een SIEM of een tool van een derde partij | REDESIGN, MEDIUM |
De koppeling noemt Resource Manager-folders en -projecten, maar het concept schrijft er geen blok voor. Het bestand met landing zone-vereisten van de run vermeldt beide als gekoppeld en niet aangemaakt.
Hubnetwerk en transit gateway
Invoer die voor deze pagina is geschreven en op 4 november 2026 is beoordeeld. Links: een VPC, een subnet en een transit gateway. Rechts: de network area, de regio-instellingen en het netwerk dat de engine heeft opgesteld, zonder de reviewcommentaren boven elk blok.
resource "aws_vpc" "hub" {
cidr_block = "10.0.0.0/16"
}
resource "aws_subnet" "hub_a" {
vpc_id = aws_vpc.hub.id
cidr_block = "10.0.1.0/24"
availability_zone = "eu-central-1a"
}
resource "aws_ec2_transit_gateway" "hub" {
description = "shared hub"
}
resource "aws_ec2_transit_gateway_vpc_attachment" "hub" {
transit_gateway_id = aws_ec2_transit_gateway.hub.id
vpc_id = aws_vpc.hub.id
subnet_ids = [aws_subnet.hub_a.id]
}resource "stackit_network" "hub_a" {
project_id = var.project_id
name = "hub-a"
ipv4_prefix = "10.0.1.0/24"
ipv4_nameservers = var.default_ipv4_nameservers
}
resource "stackit_network_area" "migrated" {
organization_id = var.organization_id
name = "migrated-network-area"
}
resource "stackit_network_area_region" "migrated" {
organization_id = var.organization_id
network_area_id = stackit_network_area.migrated.network_area_id
ipv4 = {
network_ranges = [for p in var.network_area_ranges : { prefix = p }]
transfer_network = var.network_area_transfer_network
}
}Het project is de VPC-grens
Er is geen VPC-container. Het subnet werd een netwerk in het project en de transit gateway werd een network area die privé routeert tussen netwerken van de organisatie.
Voor scheiding zijn security groups nodig
Netwerken in één area bereiken elkaar en de area kent geen object per koppeling. Een VPC die in AWS niet was verbonden, kan zijn buur bereiken zodra beide in de area zitten.
Waarden die u aanlevert
De adresbereiken van de area en het transfernetwerk zijn variabelen, omdat de bron ze niet vermeldt.
Encryptiesleutel en organisatietrail
De sleutel en de trail zijn opgesteld; de aansluiting van de auditstream niet. Eerste paneel: de sleutel, de trailbucket en de trail. Daarna het sleutelblok uit terraform/security.tf en de routerblokken uit terraform/observability.tf, zonder de reviewcommentaren boven elk blok. De S3-bestemming neemt zijn endpoint en toegangssleutel als variabelen.
resource "aws_kms_key" "logs" {
description = "log archive key"
enable_key_rotation = true
}
resource "aws_s3_bucket" "trail" {
bucket = "acme-org-trail"
}
resource "aws_cloudtrail" "org" {
name = "org-trail"
s3_bucket_name = aws_s3_bucket.trail.id
is_organization_trail = true
kms_key_id = aws_kms_key.logs.arn
}resource "stackit_kms_key" "logs" {
project_id = var.project_id
keyring_id = stackit_kms_keyring.migrated.keyring_id
display_name = "log-archive-key"
algorithm = "aes_256_gcm"
purpose = "symmetric_encrypt_decrypt"
protection = var.kms_protection
access_scope = var.kms_access_scope == "SNA" ? "SNA" : null
}resource "stackit_telemetryrouter_instance" "migrated" {
project_id = var.project_id
display_name = "migrated-telemetry-router"
}
resource "stackit_telemetryrouter_destination" "org" {
project_id = var.project_id
instance_id = stackit_telemetryrouter_instance.migrated.instance_id
display_name = "org-trail"
config = {
config_type = "S3"
s3 = {
bucket = stackit_objectstorage_bucket.trail.name
endpoint = var.trail_org_s3_endpoint
access_key = {
id = var.trail_org_s3_access_key_id
secret = var.trail_org_s3_secret_access_key
}
}
}
}Rotatie wordt niet overgenomen
De providerdocumentatie noemt geen rotatieattribuut voor stackit_kms_key, dus rotatie wordt een operationeel proces.
De scope van de trail is een koppeling, geen vlag
is_organization_trail heeft geen tegenhanger. Een medewerker koppelt de STACKIT-organisatie, folder of het project met een aparte resource aan de router; het concept schrijft die resource niet.
De router verwerkt het Audit Log van STACKIT
Hij levert de auditgebeurtenissen van STACKIT-producten. Volgens de documentatie van STACKIT wordt beheeractiviteit standaard vastgelegd en 90 dagen in het portaal getoond; via routering bewaart u die langer.
De scope van de sleutel bepaalt u zelf
access_scope komt uit een variabele zonder standaardwaarde. De providerdocumentatie geeft PUBLIC als standaard van het attribuut, waardoor de sleutel bereikbaar is op het publieke KMS-endpoint; SNA houdt hem alleen bereikbaar via de network area.
De structuur die het concept aan u overlaat
Deze blokken leverden geen Terraform op. De organisatie-eenheid, het account en de policy kwamen elk terug als REDESIGN met een reden, omdat hun werking in beleid en mensen zit, niet in een resource. De policykoppeling wordt beoordeeld als onderdeel van de policy-eenheid.
resource "aws_organizations_organizational_unit" "workloads" {
name = "workloads"
parent_id = aws_organizations_organization.main.roots[0].id
}
resource "aws_organizations_account" "prod" {
name = "acme-prod"
email = "aws-prod@example.com"
parent_id = aws_organizations_organizational_unit.workloads.id
}
resource "aws_organizations_policy" "deny_regions" {
name = "deny-non-eu-regions"
type = "SERVICE_CONTROL_POLICY"
content = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Deny"
Action = "*"
Resource = "*"
Condition = { StringNotEquals = { "aws:RequestedRegion" = ["eu-central-1", "eu-west-1"] } }
}]
})
}
resource "aws_organizations_policy_attachment" "workloads" {
policy_id = aws_organizations_policy.deny_regions.id
target_id = aws_organizations_organizational_unit.workloads.id
}Zo beslist u
Tel de echte grenzen
Som de accounts op en vraag wat elk ervan scheidt: facturatie, identiteit, de reikwijdte van een incident of een toezichthouder. Een project dekt een deel hiervan; een aparte organisatie dekt meer.
Verplaats guardrails naar de pipeline
Een AWS service control policy beperkt wat rollen mogen doen en verleent niets. Op STACKIT wordt dezelfde bedoeling een reeks controles in de pipeline die Terraform toepast, plus zorgvuldig rolontwerp.
Beslis vroeg over de network area
Bereiken en het transfernetwerk mogen geen bijzaak zijn. Volgens de documentatie van de STACKIT-provider maakt u een project in een network area aan door het label networkArea in te stellen, en is dit niet meer te wijzigen nadat het project is aangemaakt.
Leg de auditscope expliciet vast
Noteer of de trail één account, alle regio's of de hele organisatie dekte en koppel dan de overeenkomende STACKIT-scope aan de router.
Plan detectie apart
GuardDuty heeft geen managed tegenhanger in de provider die de run gebruikte. Bepaal welke tool Audit Log en Logs uitleest.
Vragen van architecten
Is een STACKIT-project gelijk aan een AWS-account?
Niet precies. De run koppelt een account aan een project als vergelijkbaar containerniveau en meldt dat een project geen gelijkwaardige grens voor account, facturatie en IAM is. Toegang wordt per project gebonden.
Kan ik mijn service control policies behouden?
In de gebruikte providerversie is er geen managed policylaag. De run stelt policy as code in de pipeline voor, plus rolontwerp op de organisatie, folders en projecten.
Wat vervangt de transit gateway?
Een network area. Projecten in de area zijn verbonden via een intern transfernetwerk en routeringstabellen worden automatisch bijgewerkt. Verkeer tussen regio's gaat volgens de documentatie van STACKIT momenteel over het publieke internet.
Maakt StackToIT de folders en projecten aan?
Nee. De run vermeldt ze als gekoppelde doelen zonder blok in het concept. Uw team maakt ze aan en stelt op elk project het area-label in.
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
Hartelijk dank.
Uw verzoek is bij ons binnengekomen. Onze specialisten nemen contact met u op.