Konten, Umgebungen und IAM-Grenzen
Prüfungsbezug: Domain 1.1 und 1.4: sichere Pipelines und Deployment-Strategien über Umgebungen und Konten hinweg implementieren.
Lernziel
Einen kontenübergreifenden Deployment-Pfad mit AWS-Konten, IAM-Rollen, Trust Policies, Berechtigungsrichtlinien, temporären STS-Zugangsdaten, S3-Artefaktzugriff, KMS-Key-Policies und Organisationsleitplanken entwerfen und untersuchen.
| Schwierigkeitsgrad | Mittel |
| Lernzeit | 180 Minuten |
| Voraussetzungen | IAM-Rollen und -Richtlinien, AWS-Organizations-Grundlagen und Pipeline-Artefakte |
Berufliches Szenario
Entwicklung und Produktion teilen ein AWS-Konto und eine Administratorrolle. Entwickler können Produktionsressourcen verändern, und die Pipeline verwendet dieselben Rechte wie die Anwendung zur Laufzeit. Artefakte werden vor einem Release manuell kopiert.
Die Organisation möchte ein zentrales Bereitstellungskonto, getrennte Entwicklungs- und Produktionskonten, verschlüsselte Artefakte, keine gespeicherten Deployment-Schlüssel und einen Nachweis jeder Produktionssitzung.
„Mehrere Konten verwenden“ löst das Problem noch nicht. Die vollständige Anfrage muss an jeder überschrittenen Grenze autorisiert werden.
Warum Konten Umgebungsgrenzen sind
Ein AWS-Konto bildet eine starke Grenze für Identitäten, Quotas, Abrechnung, Dienstkonfiguration und Ressourceneigentum. Getrennte Produktions- und Nichtproduktionskonten verringern die Wahrscheinlichkeit, dass eine Entwicklungsidentität, ein Automatisierungsfehler, ein Quota-Ereignis oder ein kompromittierter Workload Produktion beeinträchtigt.
Eine häufige Struktur sieht so aus:
Organisation
|
+-- Tooling-Konto
| +-- Source-Verbindung
| +-- CodePipeline
| +-- CodeBuild
| +-- verschlüsselter Artefakt-Bucket
|
+-- Entwicklungskonto
| +-- Deployment-Rolle
| +-- Entwicklungs-Workload
|
+-- Produktionskonto
+-- Deployment-Rolle
+-- Produktions-Workload
Das Tooling-Konto orchestriert. Die Zielkonten besitzen ihre Ressourcen und bestimmen, was die Tooling-Pipeline ausführen darf. Die Pipeline erhält keine dauerhaften Zugangsdaten für die Zielkonten.
Die kontenübergreifende Autorisierungskette
Damit ein Principal aus dem Tooling-Konto eine Deployment-Rolle in Produktion verwenden kann, müssen beide Seiten zustimmen.
- Die Pipeline- oder Action-Rolle im Tooling-Konto benötigt die Erlaubnis,
sts:AssumeRolefür die Zielrolle aufzurufen. - Die Trust Policy der Zielrolle muss dem genau festgelegten Tooling-Principal vertrauen.
- AWS STS liefert temporäre Zugangsdaten für eine angenommene Rollensitzung.
- Die Berechtigungsrichtlinie der Zielrolle muss die erforderlichen Deployment-Actions erlauben.
- Resource Policies müssen den Zugriff erlauben, wenn der Zieldienst sie verwendet.
- KMS-Key-Policy und IAM-Berechtigung müssen kryptografische Operationen für verschlüsselte Daten zulassen.
- SCPs, Permissions Boundaries, Session Policies und ausdrückliche Denies dürfen die Anfrage nicht blockieren.
Ein Allow in einer Ebene hebt niemals ein ausdrückliches Deny in einer anderen Ebene auf. AdministratorAccess an der Zielrolle behebt weder ein SCP-Deny noch eine KMS-Key-Policy, die die Rolle nicht autorisiert.
Trust Policy und Berechtigungsrichtlinie
Die Trust Policy beantwortet: Wer darf eine Sitzung für diese Rolle erhalten? Die Berechtigungsrichtlinie der Rolle beantwortet: Was darf diese Sitzung nach der Rollenannahme ausführen?
Beispiel für die Trust Policy einer Produktions-Deployment-Rolle:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:role/CodePipelineActionRole"
},
"Action": "sts:AssumeRole"
}
]
}
Die Tooling-Action-Rolle benötigt außerdem eine Identity Policy, die den Aufruf erlaubt:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::222222222222:role/ProductionDeploymentRole"
}
]
}
Diese Richtlinien ermöglichen die Rollenannahme, gewähren aber noch keine Deployment-Rechte. Eine getrennte Richtlinie an ProductionDeploymentRole sollte nur die Dienste, Actions und Ressourcen erlauben, die der gewählte Deployment-Mechanismus benötigt.
Vertraue nicht einem vollständigen Konto, wenn eine bestimmte Rolle genügt. Verwende auch keine breite Zielrichtlinie, nur weil die Pipeline vertrauenswürdig ist. Vertrauen und Autorisierung sind zwei getrennte Least-Privilege-Entscheidungen.
Temporäre Zugangsdaten und Sitzungsnachweise
AssumeRole liefert Access Key ID, Secret Access Key und Session Token mit begrenzter Gültigkeit. Die Pipeline verwendet diese Zugangsdaten für die Ziel-Action und verwirft sie nach Ende der Sitzung.
CloudTrail protokolliert die Rollenannahme und nachfolgende API-Aufrufe der angenommenen Rollensitzung. Ein aussagekräftiger Sitzungsname und konsistente Pipeline-Metadaten verbessern die Nachvollziehbarkeit. Nachweise sollten Folgendes verbinden:
- Pipeline- und Ausführungs-ID
- Quellcodeversion und Artefakt-Digest
- ursprüngliche Action-Rolle
- Zielrolle und Sitzung
- Zielkonto und Region
- Deployment-API-Aufrufe und Ergebnis
Temporäre Zugangsdaten senken das Risiko eines offengelegten Langzeitschlüssels, gleichen aber keine überprivilegierte Rolle aus. Sitzungsdauer und Rechte müssen zur Aufgabe passen.
Verschlüsselte kontenübergreifende Artefakte
Kontenübergreifende Deployments scheitern häufig am Artefaktpfad und nicht an AssumeRole.
Für ein verschlüsseltes Artefakt im Tooling-Konto sind alle Autorisierungspunkte zu betrachten:
- Pipeline-Action-Rolle: Darf die Ziel-Deployment-Rolle annehmen.
- Ziel-Deployment-Rolle: Darf die erforderlichen S3-Actions für Artefaktobjekt und gegebenenfalls Bucket ausführen.
- S3-Bucket-Policy: Erlaubt den festgelegten Ziel-Principal und enthält kein widersprechendes Deny.
- KMS-IAM-Berechtigung: Erlaubt erforderliche Operationen wie
kms:Decryptfür den Schlüssel. - KMS-Key-Policy: Erkennt die Zielrolle oder delegiert Berechtigungen passend.
- Verschlüsselungskontext und Bedingungen: Stimmen mit der Anfrage überein, falls die Richtlinien sie einschränken.
- Organisationsleitplanken: Verweigern S3-, KMS-, STS- oder Deployment-Actions nicht.
Für kontenübergreifende CodePipeline-Actions sollte der Artefaktspeicher einen kundenverwalteten KMS-Schlüssel verwenden, der je nach Design über Key ID oder ARN angegeben wird. Ein KMS-Alias ist nur im besitzenden Konto eindeutig und darf nicht als universeller kontenübergreifender Bezeichner betrachtet werden.
Identitäten für Menschen, Pipeline, Deployment und Laufzeit
Identitäten dürfen nicht zusammengelegt werden, nur weil sie auf dieselbe Anwendung zugreifen.
| Identität | Zweck | Typische Rechte |
|---|---|---|
| Föderierte menschliche Rolle | Untersuchung oder genehmigte Betriebsaktion | Lesezugriff plus eng begrenzte Betriebsaktionen |
| Pipeline-Service-Rolle | Pipeline-Actions orchestrieren | Actions starten, genehmigte Rollen weitergeben, Pipeline-Artefakte lesen |
| Kontenübergreifende Deployment-Rolle | Ressourcen über einen Deployment-Mechanismus ändern | Begrenzte Deployment-APIs und Artefaktzugriff |
| Workload-Rolle zur Laufzeit | Abhängigkeiten der Anwendung aufrufen | Nur APIs, die die Anwendung zur Laufzeit benötigt |
| Notfallrolle | Wiederherstellung unter außergewöhnlicher Kontrolle | Zeitlich begrenzt, überwacht und getrennt freigegeben |
Wird die Deployment-Rolle zur Laufzeit verwendet, kann eine kompromittierte Anwendung Infrastrukturänderungsrechte erhalten. Verwenden Entwickler die Pipeline-Rolle interaktiv, bildet der Audit Trail automatisierte Bereitstellung nicht mehr zuverlässig ab.
Durchgängiger Anfragepfad
CodePipeline im Konto 111111111111 deployt ein verschlüsseltes Artefakt in Produktionskonto 222222222222.
- CodePipeline ruft eine Action mit
CodePipelineActionRoleauf. - Diese Rolle ruft
sts:AssumeRolefürProductionDeploymentRoleauf. - STS bewertet die Berechtigung des Aufrufers und die Trust Policy der Zielrolle.
- Die angenommene Zielrolle fordert das Artefakt aus dem Tooling-S3-Bucket an.
- S3 bewertet IAM- und Bucket-Policy.
- KMS bewertet IAM-Berechtigung und Key Policy vor der Entschlüsselung.
- Der Ziel-Deployment-Dienst bewertet Rechte und Ressourcenbedingungen der Zielrolle.
- CloudTrail in den beteiligten Konten zeichnet Rollensitzung und Dienstaufrufe auf.
Bei einem Fehler muss der erste fehlerhafte Pfeil gefunden werden. Beginne nicht damit, alle Richtlinien zu erweitern.
Systematische Untersuchung von AccessDenied
- Exakte API, Ressourcen-ARN, Konto, Region, Principal-ARN und Fehlerzeit erfassen.
- Prüfen, ob der Aufrufer die erwartete angenommene Rollensitzung und nicht eine ähnlich benannte menschliche oder Service-Rolle ist.
- Bei Rollenannahme sowohl Aufruferberechtigung als auch Ziel-Trust-Policy prüfen.
- Für die Ziel-Action Rollenrichtlinie sowie Permissions Boundary und Session Policy prüfen.
- Resource Policy für S3, KMS, ECR, Secrets Manager oder einen anderen ressourcenbasierten Dienst prüfen.
- Bei verschlüsselten Daten die KMS-Key-Policy getrennt prüfen.
- SCPs und ausdrückliche Deny-Bedingungen prüfen.
- Condition Keys wie Konto, ARN, Region, Tag, Source ARN, Verschlüsselungskontext und VPC Endpoint prüfen.
- Mit CloudTrail und Dienstereignissen die erste verweigerte Anfrage finden.
- Nur die engste fehlerhafte Aussage korrigieren und erneut testen; keine breite Administratorrichtlinie als Diagnoseabkürzung anhängen.
Entscheidungsmatrix
| Anforderung | Bevorzugte Richtung | Begründung |
|---|---|---|
| Starke Umgebungsisolation | Getrennte Konten | Reduziert Blast Radius und klärt Eigentum |
| Kontenübergreifendes Deployment | STS AssumeRole | Liefert temporäre begrenzte Sitzungen |
| Menschlicher Produktionszugriff | Föderation in eine eigene Rolle | Zentrale Verwaltung und Sitzungsnachweise |
| Verschlüsselte gemeinsame Artefakte | S3 plus kundenverwalteter KMS-Schlüssel und ausdrückliche Richtlinien | Ermöglicht kontrollierte kontenübergreifende Autorisierung |
| Unabhängige Anwendungslaufzeit | Getrennte Workload-Rolle | Verhindert Deployment-Rechte zur Laufzeit |
| Notfallzugriff | Überwachte Notfallrolle | Trennt Ausnahmezugriff vom normalen Bereitstellungsweg |
Fehlerbilder und Fehlersuche
| Symptom | Wahrscheinlich fehlende Grenze |
|---|---|
AssumeRole wird verweigert | Aufruferrichtlinie, Ziel-Trust-Policy, Boundary oder SCP |
S3 GetObject wird verweigert | Rollenrichtlinie, Bucket-Policy, Objekt-ARN oder ausdrückliches Deny |
| S3 erfolgreich, Entschlüsselung fehlerhaft | KMS-IAM-Berechtigung, Key Policy, Schlüsselbezeichner oder Verschlüsselungskontext |
| Deployment kann fremde Ressourcen ändern | Zielrollenrichtlinie ist zu breit |
| Pipeline funktioniert, Audit-Verantwortung ist unklar | Rollen werden geteilt oder Sitzungsmetadaten sind schwach |
| Deployment-Dienst kann Artefakt nicht lesen | Service-Rolle, Deployment-Rolle oder Artefakteigentum ist falsch |
Sicherheit und Betrieb
- Wenn möglich exakten Rollen-ARNs statt vollständigen Konten vertrauen.
- Zielrechte nach Action, Ressource, Region und Bedingungen begrenzen.
- Getrennte Deployment-Rollen für Produktion und Nichtproduktion verwenden.
- Direkte menschliche Annahme von Automatisierungsrollen verhindern, sofern sie nicht ausdrücklich erforderlich und kontrolliert ist.
- Artefaktlöschung und KMS-Schlüsselverwaltung getrennt vom Deployment schützen.
- Fehlgeschlagene und ungewöhnliche Rollenannahmen überwachen.
- Unbenutzte Rechte prüfen und Sitzungsdauer an den Betriebsbedarf anpassen.
Praxislabor: Vertrauensmodell für zwei Konten
Ziel: Einen vollständigen Autorisierungsentwurf für Tooling- und Produktionskonto erstellen.
Aufgaben
- Tooling- und Produktionskonto, Artefakt-Bucket, KMS-Schlüssel, Action-Rolle, Deployment-Rolle und Zieldienst zeichnen.
- Die Aufruferrichtlinie schreiben, die nur die Annahme der Produktionsrolle erlaubt.
- Die Trust Policy der Zielrolle für die genaue Tooling-Rolle schreiben.
- Least-Privilege-Rechte für das Ziel-Deployment definieren.
- Erforderliche S3-Bucket-, Objekt- und KMS-Berechtigungen auflisten.
- Annahmen zu SCP und Permissions Boundary im Diagramm ergänzen.
- CloudTrail-Nachweise für Rollenannahme, Artefaktzugriff, Entschlüsselung und Deployment definieren.
- Diese Fehler getrennt testen oder simulieren: falscher vertrauenswürdiger Principal, fehlendes S3-Objektrecht, fehlende KMS-Key-Policy-Berechtigung und SCP-Deny.
- Für jeden Fehler die erste fehlgeschlagene API und die engste Richtlinienkorrektur festhalten.
- Prüfen, dass Entwickleridentität und Workload-Rolle die Deployment-Rolle nicht annehmen können.
Validierungscheckliste
- Die Pipeline kann nur die vorgesehene Zielrolle annehmen.
- Die Trust Policy gewährt selbst keine Deployment-Actions.
- Die Zielrolle kann nur vorgesehene Ressourcen verändern.
- Artefakt- und KMS-Autorisierung sind beide ausdrücklich definiert.
- Menschliche, Pipeline-, Deployment- und Laufzeitidentität bleiben getrennt.
- CloudTrail-Nachweise identifizieren Sitzung und resultierende Aufrufe.
- Ein ausdrückliches Organisations-Deny wird nicht mit einem breiteren IAM-Allow „behoben“.
Kostenkontrolle: Richtlinienentwurf und IAM-Simulation sind kostenlos. Bei echten Ressourcen ein leeres verschlüsseltes S3-Objekt verwenden und Testrollen, Richtlinien, Bucket-Objekte sowie Schlüssel nach ihren Löschregeln entfernen.
Aufräumen
- Inline- und angehängte Testrichtlinien entfernen.
- Testrollen löschen, nachdem geprüft wurde, dass keine Pipeline sie verwendet.
- Einen ausschließlich für das Labor verwendeten Artefakt-Bucket leeren und löschen.
- Löschung eines Test-KMS-Schlüssels erst nach Prüfung abhängiger verschlüsselter Daten planen.
- Audit-Nachweise nur entsprechend der vorgesehenen Aufbewahrungsrichtlinie erhalten oder exportieren.
Prüfungsfallen
AccessDeniedmitAdministratorAccessbeheben.- Annehmen, die Trust Policy gewähre auch Rechte für den Zieldienst.
- Aufruferseitige
sts:AssumeRole-Berechtigung vergessen. - S3-Zugriff erlauben, aber KMS-Autorisierung vergessen.
- Ein SCP als zugriffsgewährende Richtlinie betrachten.
- Gespeicherte Access Keys für kontenübergreifendes Deployment verwenden.
- Deployment-Rolle als Workload-Rolle zur Laufzeit wiederverwenden.
Wichtigste Erkenntnisse
- Konten isolieren Umgebungen, doch jede kontenübergreifende Anfrage benötigt eine vollständige Autorisierung.
- Rollenannahme erfordert Aufruferberechtigung und Zielvertrauen.
- Die Berechtigungen der angenommenen Rolle bestimmen die Ziel-Actions.
- Verschlüsselte Artefakte ergänzen unabhängige S3- und KMS-Autorisierungsebenen.
- Ausdrückliche Denies und Organisationsleitplanken überstimmen sonst gültige Allows.
- Getrennte Identitäten erhalten Least Privilege und zuverlässige Audit-Nachweise.
Wiederholungsfragen
- Was steuert die Trust Policy einer Rolle?
- Warum benötigt auch der Aufrufer
sts:AssumeRole-Berechtigung? - Welche Rechte erhält eine angenommene Sitzung?
- Warum kann S3-Zugriff erfolgreich sein, während die Artefaktentschlüsselung scheitert?
- Warum löst
AdministratorAccessnicht jedes kontenübergreifende Deny? - Welche Gefahr entsteht, wenn die Deployment-Rolle als Laufzeitrolle verwendet wird?
- Welche Nachweise verbinden eine Pipeline-Ausführung mit Produktions-API-Aufrufen?
- In welcher Reihenfolge sollte eine
AccessDenied-Antwort untersucht werden?
Modellantworten
- Sie definiert, welche Principals die Rolle unter welchen Bedingungen annehmen dürfen.
- Kontenübergreifende Rollenannahme ist eine Vereinbarung beider Konten. Der vertrauenswürdige Aufrufer muss die Rolle anfordern dürfen, und die vertrauende Rolle muss diesen Aufrufer akzeptieren.
- Temporäre Zugangsdaten erhalten die Rechte der angenommenen Rolle, weiter begrenzt durch Session Policy, Permissions Boundary, SCPs, Resource Policies und ausdrückliche Denies.
- S3 und KMS autorisieren getrennt. Rolle und Bucket können
GetObjecterlauben, während KMS-Key-Policy oder IAM-RichtlinieDecryptverweigert. - SCP, Resource Policy, KMS-Key-Policy, Permissions Boundary, Session Policy oder ausdrückliches Deny können die Anfrage weiterhin blockieren. Ein breites Identity-Allow hebt ein ausdrückliches Deny nicht auf.
- Ein kompromittierter Workload könnte Infrastrukturänderungsrechte erhalten, und Laufzeitaktivität lässt sich nur schwer von Deployment-Aktivität unterscheiden.
- CloudTrail-Ereignisse für Rollenannahme und APIs zusammen mit Pipeline-Ausführungs-ID, Quellcodeversion, Sitzungsname, Artefakt-Digest, Konto und Region.
- Exakte fehlerhafte Anfrage erfassen, tatsächlichen Principal prüfen und danach Aufruferberechtigung, Trust Policy, Zielrechte, Resource Policy, KMS-Policy, Boundaries, SCPs und Bedingungen bis zum ersten Deny untersuchen.