AWS → STACKIT · ARCHITEKTUR
Von der AWS Landing Zone zur STACKIT-Organisation
Eine AWS Landing Zone besteht aus Accounts, Organizational Units, Service Control Policies, einem gemeinsamen Netzwerk und einem Audit-Trail. STACKIT bietet Organisation, Ordner, Projekte und eine Network Area, aber keine Schicht für angehängte Richtlinien. StackToIT hat eine kompakte Landing Zone bewertet: Die Hälfte ließ sich auf Terraform abbilden, die andere Hälfte kam als Designarbeit für Ihre Architekten zurück.
Drei Wege, die Organisation zu gliedern
Die Frage ist, wie viel der Account-Grenze Sie erhalten müssen. Der Lauf behandelt die AWS-Organisation, ihre Organizational Units und ihre Accounts als Designarbeit, nicht als Ressourcen zum Kopieren.
| Aufbau | Zuordnung | Abwägung |
|---|---|---|
| Eine Organisation, Ordner, ein Projekt je Account | Eine Organizational Unit wird zum Ordner, ein Account zum Projekt. Das ist die vergleichbare Gruppierung, die der Lauf vorschlägt. | Kommt dem AWS-Aufbau am nächsten. Der Lauf hält fest, dass ein Projekt keine eigene Account-, Abrechnungs- und IAM-Grenze ist; daher wird die Zugriffsrichtlinie neu angelegt, nicht kopiert. |
| Eigene Organisation für Accounts mit harter Isolation | Der Lauf nennt diese Option für Accounts, die echte Trennung vom Rest brauchen. | Stärkste Trennung, aber eine zweite Organisation bedeutet eigene Rollen, eine eigene Network Area und einen zweiten Ort zur Administration. |
| Ein Projekt mit mehreren Netzwerken | Jedes Subnetz wird zu einem Netzwerk in einem Projekt; das Projekt ist die Grenze der VPC. | Am einfachsten für eine Umgebung mit einer VPC. Security Groups gelten projektweit; daher wird die Trennung zwischen Schichten über Gruppen gehalten, nicht über Accounts. |
Rollen des Resource Managers verwalten die Hierarchie und gewähren laut STACKIT-Dokumentation keinen Zugriff auf Cloud-Ressourcen im Projekt. Planen Sie die Rollenbindungen je Projekt ausdrücklich.
Was der Lauf aus jeder Landing-Zone-Ressource machte
Elf Einheiten: 1 DIRECT, 5 RECONFIGURE, 5 REDESIGN. Fünf wurden in Terraform entworfen, eine braucht keine Ressource, fünf bleiben Ihren Architekten überlassen.
| AWS-Ressource | STACKIT-Ziel | Klasse und Konfidenz |
|---|---|---|
| aws_organizations_organization | Keines: Die Organisation legt der Provider nicht an; Rollen werden auf Organisation, Ordnern und Projekten entworfen | REDESIGN, MEDIUM |
| aws_organizations_organizational_unit | Resource-Manager-Ordner, eine Gruppierungsebene ohne angehängte Richtlinien | REDESIGN, LOW |
| aws_organizations_account | Resource-Manager-Projekt, eine vergleichbare Container-Ebene | REDESIGN, LOW |
| aws_organizations_policy (Service Control) | Keines verwaltet: Policy as Code in der Delivery-Pipeline | REDESIGN, LOW |
| aws_vpc und aws_subnet | Netzwerke im Projekt | RECONFIGURE, MEDIUM |
| aws_ec2_transit_gateway | Network Area und Network-Area-Region | RECONFIGURE, MEDIUM |
| aws_kms_key | KMS-Keyring und Schlüssel | RECONFIGURE, MEDIUM |
| aws_s3_bucket (Trail) | Object-Storage-Bucket | DIRECT, MEDIUM |
| aws_cloudtrail (Organisations-Trail) | Telemetry-Router-Instanz mit Object-Storage-Ziel | RECONFIGURE, MEDIUM |
| aws_guardduty_detector | Keines: Die Bedrohungserkennung wird auf Audit Log und Logs mit SIEM oder Drittwerkzeug neu entworfen | REDESIGN, MEDIUM |
Die Zuordnung nennt Resource-Manager-Ordner und -Projekte, doch der Entwurf schreibt dafür keinen Block. Die Datei mit den Landing-Zone-Anforderungen des Laufs führt beide als zugeordnet und nicht angelegt.
Hub-Netzwerk und Transit Gateway
Eingabe für diese Seite geschrieben und am 4. November 2026 bewertet. Links VPC, Subnetz und Transit Gateway, rechts Network Area, deren Regionseinstellungen und das Netzwerk, das die Engine entwarf, ohne die Prüfkommentare über den Blöcken.
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
}
}Das Projekt ist die VPC-Grenze
Einen VPC-Container gibt es nicht. Das Subnetz wurde zu einem Netzwerk im Projekt, das Transit Gateway zu einer Network Area, die zwischen Netzwerken der Organisation privat routet.
Trennung braucht Security Groups
Netzwerke einer Area erreichen einander, und die Area hat kein eigenes Objekt je Anbindung. Eine VPC, die in AWS nicht verbunden war, erreicht ihren Nachbarn, sobald beide in der Area liegen.
Werte, die Sie liefern
Adressbereiche der Area und Transfernetz sind Variablen, weil die Quelle sie nicht nennt.
Verschlüsselungsschlüssel und Organisations-Trail
Schlüssel und Trail werden entworfen, die Anbindung des Audit-Stroms nicht. Erster Bereich: Schlüssel, Trail-Bucket und Trail. Danach der Schlüsselblock aus terraform/security.tf und die Router-Blöcke aus terraform/observability.tf, jeweils ohne die Prüfkommentare über den Blöcken. Das S3-Ziel erhält Endpunkt und Zugriffsschlüssel als Variablen.
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
}
}
}
}Rotation wird nicht übernommen
Die Provider-Dokumentation nennt für stackit_kms_key kein Rotationsattribut; daher wird Rotation zum betrieblichen Prozess.
Der Trail-Umfang ist ein Link, kein Schalter
is_organization_trail hat kein Gegenstück. Eine Person verbindet Organisation, Ordner oder Projekt von STACKIT mit dem Router über eine eigene Ressource, die der Entwurf nicht schreibt.
Der Router bedient das Audit Log von STACKIT
Er liefert die Audit-Ereignisse von STACKIT-Produkten. Laut STACKIT-Dokumentation wird Admin-Aktivität standardmäßig aufgezeichnet und 90 Tage im Portal angezeigt; wer länger aufbewahren will, routet sie weiter.
Den Schlüsselzugriff wählen Sie
access_scope stammt aus einer Variablen ohne Standardwert. Laut Provider-Dokumentation ist PUBLIC der Standardwert des Attributs, womit der Schlüssel über den öffentlichen KMS-Endpunkt erreichbar ist; mit SNA bleibt er nur über die Network Area erreichbar.
Die Struktur, die der Entwurf Ihnen überlässt
Diese Blöcke erzeugten kein Terraform. Organizational Unit, Account und Richtlinie kamen jeweils als REDESIGN mit Begründung zurück, weil ihre Wirkung in Richtlinien und Zuständigkeiten liegt, nicht in einer Ressource. Das Anhängen der Richtlinie bewertet der Lauf als Teil der Richtlinien-Einheit.
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
}So entscheiden Sie
Echte Grenzen zählen
Listen Sie die Accounts und fragen Sie, was jeder trennt: Abrechnung, Identität, Auswirkungsradius, regulatorische Vorgaben. Ein Projekt deckt manches davon ab, eine eigene Organisation mehr.
Leitplanken in die Pipeline verlegen
Eine AWS Service Control Policy begrenzt, was Rollen dürfen, und gewährt nichts. Auf STACKIT wird dieselbe Absicht zu Prüfungen in der Pipeline, die Terraform anwendet, ergänzt um ein sorgfältiges Rollenkonzept.
Network Area früh festlegen
Adressbereiche und Transfernetz sind kein Nachgedanke: Laut Dokumentation des STACKIT-Providers wird ein Projekt über das Label networkArea in einer Network Area angelegt, und das lässt sich nach dem Anlegen des Projekts nicht mehr ändern.
Audit-Umfang explizit halten
Notieren Sie, ob der Trail einen Account, alle Regionen oder die ganze Organisation abdeckte, und verbinden Sie den passenden STACKIT-Umfang mit dem Router.
Bedrohungserkennung getrennt planen
GuardDuty hat im Provider des Laufs kein verwaltetes Gegenstück. Entscheiden Sie, welches Werkzeug Audit Log und Logs liest.
Fragen, die Architekten stellen
Entspricht ein STACKIT-Projekt einem AWS-Account?
Nicht genau. Der Lauf ordnet einen Account einem Projekt als vergleichbarer Container-Ebene zu und hält fest, dass ein Projekt keine gleichwertige Account-, Abrechnungs- und IAM-Grenze ist. Zugriff wird je Projekt gebunden.
Kann ich meine Service Control Policies behalten?
Im verwendeten Providerstand gibt es keine verwaltete Richtlinienschicht. Der Lauf schlägt Policy as Code in der Pipeline und Rollendesign auf Organisation, Ordnern und Projekten vor.
Was ersetzt das Transit Gateway?
Eine Network Area. Projekte der Area verbinden sich über ein internes Transfernetz, Routingtabellen aktualisieren sich automatisch. Verkehr zwischen Regionen läuft laut STACKIT-Dokumentation derzeit über das öffentliche Internet.
Legt StackToIT Ordner und Projekte an?
Nein. Der Lauf führt sie als zugeordnete Ziele ohne Block im Entwurf. Ihr Team legt sie an und setzt das Area-Label je Projekt.
Quellen
Ihr nächster Schritt: STACKIT.
Erzählen Sie uns von Ihrer Umgebung. Wir zeigen Ihnen, was StackToIT dafür liefert: Zielarchitektur, Terraform-Artefakte und einen strukturierten Migrationsplan.