Einführung
Ein privater Export muss vor der Speicherung verschlüsselt werden. Du verschlüsselst eine kleine fiktive Datei, lässt einen Leser die ursprünglichen Bytes wiederherstellen, diagnostizierst fehlgeschlagene Entschlüsselungen und planst die Bereinigung deines Schlüssels.
Schließe zuerst Erste Schritte mit AWS auf LabEx, Einem Berichtsleser minimale Berechtigungen geben und Temporäre Zugangsdaten mit einer IAM-Rolle verwenden ab. Diese neue VM stellt eine eigene Datei, eine Sitzung für die Leserrolle und einen Referenzschlüssel bereit.
Bezug zu Zertifizierungen
Dieses Lab bietet praktische Übungen zu den folgenden Prüfungsthemen.
- Cloud Practitioner (CLF-C02) · Aufgabe 2.2: KMS-Verschlüsselung, Entschlüsselungsberechtigungen und Schlüsselzustände.
- Solutions Architect – Associate (SAA-C03) · Aufgabe 1.3: KMS-Verschlüsselung, Entschlüsselungsberechtigungen und Schlüsselzustände.
- Developer – Associate (DVA-C02) · Aufgabe 2.2: KMS-Verschlüsselung, Entschlüsselungsberechtigungen und Schlüsselzustände.
- CloudOps Engineer – Associate (SOA-C03) · Aufgabe 4.2: KMS-Verschlüsselung, Entschlüsselungsberechtigungen und Schlüsselzustände.
- Security – Specialty (SCS-C03) · Aufgabe 5.3: Grundlagenübung: KMS-Verschlüsselung, Entschlüsselungsberechtigungen und Schlüsselzustände.
- Data Engineer – Associate (DEA-C01) · Aufgabe 4.3: Grundlagenübung: KMS-Verschlüsselung, Entschlüsselungsberechtigungen und Schlüsselzustände.
- DevOps Engineer – Professional (DOP-C02) · Aufgabe 6.2: Grundlagenübung: KMS-Verschlüsselung, Entschlüsselungsberechtigungen und Schlüsselzustände.
- Solutions Architect – Professional (SAP-C02) · Aufgabe 2.3: Grundlagenübung: KMS-Verschlüsselung, Entschlüsselungsberechtigungen und Schlüsselzustände.
Den privaten Export verschlüsseln
In diesem Schritt erstellst du einen Schlüssel in AWS Key Management Service (KMS) und wandelst den bereitgestellten Export in Chiffretext um. Verwende die bereitgestellte fiktive Datei private-export.json statt persönlicher Daten. Das Profil export-reader verwendet eine temporäre Sitzung für die vorbereitete Leserrolle, zunächst ohne KMS-Berechtigung. Erhalte alias/labex-sec01-reference.
Öffne AWS View neben Terminal, um Schlüsselzustand, Leserberechtigungen und Ergebnisse kryptografischer Anfragen zu vergleichen. Die Byte-Hashes ermöglichen den Vergleich von Ergebnissen, ohne private Daten anzuzeigen.
Ein symmetrischer Schlüssel verwendet dasselbe geschützte Schlüsselmaterial zum Verschlüsseln und Entschlüsseln; KMS hält dieses Schlüsselmaterial innerhalb des Dienstes. Ein Alias gibt einem Schlüssel einen lesbaren Namen, ohne dessen eindeutige Schlüssel-ARN zu ersetzen.
Beginne im bereitgestellten Projektverzeichnis. cd wechselt dein aktuelles Verzeichnis; die Abfrage des Aufrufers bestätigt die vorbereitete Operatoridentität, ohne Zugangsdaten auszugeben.
cd /home/labex/project
aws sts get-caller-identity --query Arn --output text
Erwarte die Benutzer-ARN von labex-sec01-operator. Erstelle deinen eigenen Schlüssel. --query wählt ein Feld aus der Antwort aus, --output text entfernt die JSON-Anführungszeichen, und $(...) speichert dieses Ergebnis in einer Shellvariable für spätere Befehle.
KEY_ARN=$(aws kms create-key --description labex-sec01-owned-export --query KeyMetadata.Arn --output text)
aws kms create-alias --alias-name alias/labex-sec01-private-export --target-key-id "$KEY_ARN"
aws kms describe-key --key-id "$KEY_ARN" --query 'KeyMetadata.[KeyState,KeySpec]' --output text
Erwarte Enabled und SYMMETRIC_DEFAULT. Verwende oder ändere den Referenzschlüssel nicht.

Offizielle Console-Referenz: Alias, Status Enabled und ARN entsprechen der Schlüsselidentität und dem Zustand, die du gerade abgefragt hast. Dies sind AWS-Beispielwerte; verwende in Terminal weiterhin deine eigene KEY_ARN.
Quelle: AWS KMS.
Ein Verschlüsselungskontext ist eine Menge nicht geheimer Kennzeichnungen, die an den Chiffretext gebunden sind. Die Entschlüsselung muss dieselben Kennzeichnungen angeben. Hier bezeichnet Purpose=private-export den vorgesehenen Zweck dieses Exports. Kontextwerte sind kein Ort für Passwörter oder persönliche Daten.
KMS Encrypt verarbeitet kleine Klartexte; dieser vorbereitete Export liegt deutlich unter der Grenze von 4 KiB. fileb:// liest die Eingabe als binäre Bytes. Die CLI stellt den zurückgegebenen Chiffretext als Base64 dar; base64 --decode wandelt ihn wieder in eine Binärdatei um. Die Pipe sendet die Ausgabe an den nächsten Befehl, und > schreibt das Ergebnis in die benannte Datei.
aws kms encrypt --key-id "$KEY_ARN" --plaintext fileb://private-export.json --encryption-context Purpose=private-export --query CiphertextBlob --output text | base64 --decode > private-export.kms
Vergleiche die Byte-Hashes mit sha256sum. Unterschiedliche Hashes zeigen, dass sich der Chiffretext von den ursprünglichen Daten unterscheidet; dies allein belegt keine Berechtigung.
sha256sum private-export.json private-export.kms
Öffne AWS View. Customer key inventory sollte deinen aktivierten Schlüssel zeigen, während Cryptographic requests eine erlaubte Encrypt-Anfrage des Operators zeigt, deren Eingabe dem Export entspricht.
Einer Leserrolle Zugriff gewähren
In diesem Schritt erlaubst du dem Anwendungsleser, nur mit deinem Exportschlüssel zu entschlüsseln. Eine Berechtigung für eine IAM-Rolle legt sowohl eine Aktion als auch die Ressource fest, für die sie gilt. kms:Decrypt erlaubt die Wiederherstellung von Bytes; es gewährt weder Verschlüsselung noch Schlüsselverwaltung.

Der Leser benötigt den richtigen Kontext, eine Decrypt-Berechtigung und einen aktivierten Schlüssel, um den Export wiederherzustellen.
Probiere zuerst das Leserprofil aus, bevor du eine Berechtigung hinzufügst. --profile export-reader wählt die vorbereitete temporäre Rollensitzung statt des Operators aus. Der Befehl muss mit einer Zugriffsverweigerung fehlschlagen und darf keinen Klartext zurückgeben.
aws kms decrypt --profile export-reader --key-id "$KEY_ARN" --ciphertext-blob fileb://private-export.kms --encryption-context Purpose=private-export --query KeyId --output text
Erstelle ein Richtliniendokument. Das Here-Dokument schreibt die Zeilen zwischen <<EOF und EOF in read-export.json; die Shell ersetzt $KEY_ARN durch die genaue Schlüssel-ARN. Diese Berechtigung verwendet weder eine Aktion mit Platzhalter noch eine Ressource mit Platzhalter.
cat > read-export.json <<EOF
{
"Version": "2012-10-17",
"Statement": [{"Effect": "Allow", "Action": "kms:Decrypt", "Resource": "$KEY_ARN"}]
}
EOF
Hänge diese Inline-Richtlinie an die Leserrolle an. Eine Inline-Richtlinie gehört zu dieser Rolle und kann bei der Bereinigung unabhängig entfernt werden. Der bereitgestellte Schlüssel verwendet seine standardmäßige Schlüsselrichtlinie für dasselbe Konto, die IAM-Berechtigungen zur Autorisierung dieser Rolle zulässt.
aws iam put-role-policy --role-name labex-sec01-export-reader --policy-name ReadPrivateExport --policy-document file://read-export.json
Stelle nun die verschlüsselten Bytes mit der Lesersitzung wieder her. Der Befehl wählt das Base64-Klartextfeld aus, decodiert es und schreibt den wiederhergestellten Export, ohne dessen Inhalt anzuzeigen.
aws kms decrypt --profile export-reader --key-id "$KEY_ARN" --ciphertext-blob fileb://private-export.kms --encryption-context Purpose=private-export --query Plaintext --output text | base64 --decode > restored-export.json
cmp vergleicht die tatsächlichen Dateibytes. Mit && wird die Meldung nur ausgegeben, wenn dieser Vergleich erfolgreich ist.
cmp private-export.json restored-export.json && echo "Original export bytes recovered"
Erwarte Original export bytes recovered. AWS View sollte die auf den genauen Schlüssel begrenzte Leserrichtlinie und eine erlaubte Decrypt-Anfrage der Leserrolle zeigen, deren wiederhergestellte Bytes dem Export entsprechen. Beschränke diese Rolle weiterhin auf Decrypt für deinen Schlüssel.

Drei Entschlüsselungsfehler diagnostizieren
In diesem Schritt unterscheidest du Fehler durch Kontext, Berechtigung und Schlüsselzustand. Behalte währenddessen denselben Chiffretext bei, damit jedes Ergebnis eine klare Ursache hat. Die folgenden fehlgeschlagenen Befehle wählen absichtlich nur eine Schlüsselkennung aus, niemals Klartext.
Ändere zuerst nur den Kontextwert. Selbst ein berechtigter Leser kann Chiffretext mit einem falschen Kontext nicht entschlüsseln.
aws kms decrypt --profile export-reader --key-id "$KEY_ARN" --ciphertext-blob fileb://private-export.kms --encryption-context Purpose=wrong-context --query KeyId --output text
Erwarte InvalidCiphertextException. Schlüssel und Rollenberechtigung sind weiterhin vorhanden, aber der Kontext stimmt nicht mit dem für Encrypt verwendeten Kontext überein.
Entferne als Nächstes die Berechtigung der Rolle und wiederhole die Anfrage mit dem richtigen Kontext. Das Entfernen einer Inline-Richtlinie ändert die Autorisierung, ohne Schlüssel oder Chiffretext zu verändern.
aws iam delete-role-policy --role-name labex-sec01-export-reader --policy-name ReadPrivateExport
aws kms decrypt --profile export-reader --key-id "$KEY_ARN" --ciphertext-blob fileb://private-export.kms --encryption-context Purpose=private-export --query KeyId --output text
Erwarte eine Zugriffsverweigerung. Stelle die eng begrenzte Berechtigung vor dem nächsten Test wieder her.
aws iam put-role-policy --role-name labex-sec01-export-reader --policy-name ReadPrivateExport --policy-document file://read-export.json
Deaktiviere schließlich den Schlüssel. Ein deaktivierter Schlüssel bleibt im Bestand, kann aber keine kryptografischen Operationen durchführen. Verwende das Operatorprofil, das die Berechtigung besitzt, um den Fehler durch den Schlüsselzustand zu isolieren.
aws kms disable-key --key-id "$KEY_ARN"
aws kms decrypt --key-id "$KEY_ARN" --ciphertext-blob fileb://private-export.kms --encryption-context Purpose=private-export --query KeyId --output text
Erwarte DisabledException. Aktiviere den Schlüssel und wiederhole die erfolgreiche Wiederherstellung durch den Leser, um zu bestätigen, dass das normale Verhalten zurückkehrt.
aws kms enable-key --key-id "$KEY_ARN"
aws kms decrypt --profile export-reader --key-id "$KEY_ARN" --ciphertext-blob fileb://private-export.kms --encryption-context Purpose=private-export --query Plaintext --output text | base64 --decode > restored-export.json
cmp private-export.json restored-export.json && echo "Reader access restored"
Untersuche die Tabelle Cryptographic requests in AWS View. Vergleiche Aufrufer, Kontext und Ergebnis der verweigerten Anfragen. Eine Rollenberechtigung kann weder einen nicht passenden Kontext noch einen deaktivierten Schlüssel beheben.

Den eigenen Schlüssel sicher außer Betrieb nehmen
In diesem Schritt entfernst du die Leserberechtigung und den Alias und planst dann nur die Löschung deines Exportschlüssels. Die Löschung eines KMS-Schlüssels hat eine Wartefrist: PendingDeletion ist der erwartete unmittelbare Zustand und kein Beleg dafür, dass ein Schlüssel bereits verschwunden ist. Während dieser Frist kann der Schlüssel nicht entschlüsseln.
Bestätige vor dem Planen der Löschung, dass die ARN weiterhin zu deinem eigenen Exportschlüssel gehört.
aws kms describe-key --key-id "$KEY_ARN" --query 'KeyMetadata.[Description,KeyState]' --output text
Erwarte labex-sec01-owned-export und Enabled. Entferne nur die Rollenberechtigung, die du hinzugefügt hast, und den Alias, den du erstellt hast.
aws iam delete-role-policy --role-name labex-sec01-export-reader --policy-name ReadPrivateExport
aws kms delete-alias --alias-name alias/labex-sec01-private-export
Plane die Löschung des Schlüssels mit der Mindestwartefrist von sieben Tagen.
aws kms schedule-key-deletion --key-id "$KEY_ARN" --pending-window-in-days 7 --query DeletionDate --output text
Der Befehl gibt das geplante Löschdatum zurück. Bestätige den tatsächlichen Schlüsselzustand mit einer getrennten Leseabfrage und erhalte den unbeteiligten Referenzschlüssel.
aws kms describe-key --key-id "$KEY_ARN" --query KeyMetadata.KeyState --output text
aws kms describe-key --key-id alias/labex-sec01-reference --query KeyMetadata.KeyState --output text
Erwarte PendingDeletion für deinen Schlüssel und Enabled für die Referenz. AWS View sollte keine Leserberechtigung mehr sowie Reference preserved zeigen. Verwende rm -f, um nur die benannten lokalen Exportartefakte zu entfernen; der Befehl toleriert eine fehlende Datei, ohne andere Projektdateien zu löschen.
rm -f private-export.json private-export.kms restored-export.json read-export.json
Führe die Verifikation dieses Schritts aus, solange das Operatorprofil noch verfügbar ist. Entferne nach erfolgreicher Prüfung die temporären CLI-Profile dieser VM und lösche die Schlüsselvariable aus der Shell. Dies entfernt lokale Sitzungszugangsdaten; es hebt die geplante Löschung des Schlüssels in der Cloud nicht auf.
rm -f /home/labex/.aws/credentials /home/labex/.aws/config
unset KEY_ARN
Zusammenfassung
Du hast tatsächliche Exportbytes mit einem kundenseitig verwalteten KMS-Schlüssel und einem nicht geheimen Kontext verschlüsselt, einer Leserrolle Decrypt für den genauen Schlüssel gewährt und die ursprünglichen Bytes wiederhergestellt. Ein falscher Kontext, eine entfernte Berechtigung und ein deaktivierter Schlüssel verursachten unterschiedliche Fehler. Anschließend hast du den eigenen Schlüssel über seine Löschwartefrist außer Betrieb genommen und dabei die unbeteiligte Referenz erhalten.



