Eine private Datei mit einem temporären Link teilen

AWSBeginner
Jetzt üben

Einführung

Ein Kollege benötigt vorübergehend einen Download eines privaten Berichts. Du erzeugst und testest einen signierten Link, prüfst seine Zugriffsgrenzen und entfernst die Übungsressourcen, ohne die Datei öffentlich zu machen.

Schließe zuerst Dokumente mit Schlüsseln und Metadaten organisieren ab, um Schlüssel, Downloads und Bereinigung kennenzulernen. Der private Bucket und eine eingeschränkte Identität sind in dieser neuen VM vorbereitet; du benötigst keine persönliche Anmeldung und musst keine IAM-Richtlinien schreiben. Verwende Terminal und den Tab AWS View daneben. Halte vollständige Download-Links vertraulich.

Bezug zu Zertifizierungen

Dieses Lab bietet praktische Übungen zu den folgenden Prüfungsthemen.

Lies den Bericht mit deiner konfigurierten Identität

In diesem Schritt rufst du den erlaubten Bericht ab und siehst, dass ein anderes privates Objekt außerhalb der Berechtigungen deiner Identität bleibt.

Eine Berechtigung legt fest, was eine Identität mit einer Ressource tun darf. Dein vorbereiteter Leser kann diesen Bucket auflisten und shared/report.txt lesen, aber weder private/payroll.txt lesen noch den Speicher ändern. Du nutzt diese Berechtigungen und schreibst keine Richtlinien; das vermittelt später der IAM-Kurs.

Wechsle mit cd (change directory, Verzeichnis wechseln) in den Arbeitsbereich:

cd /home/labex/project

Liste das gemeinsame Präfix des vorbereiteten Buckets auf:

aws s3 ls s3://labex-private-documents/shared/

Die Liste enthält eine Zeile, die mit report.txt endet; unter diesem Präfix bezeichnet sie den vollständigen Schlüssel shared/report.txt. Das Präfix organisiert den Schlüssel; sein Name macht das Objekt nicht öffentlich. Deine AWS-CLI-Anfrage ist erfolgreich, weil die konfigurierte Identität den Bucket auflisten darf.

Lade den Bericht mit einer authentifizierten AWS-CLI-Anfrage herunter:

aws s3 cp s3://labex-private-documents/shared/report.txt authorized-report.txt

Untersuche diesen synthetischen Bericht mit cat, das eine lokale Textdatei ausgibt:

cat authorized-report.txt
Monthly report: 42000 revenue

Öffne shared/report.txt in AWS View. Die Vorschau zeigt mit dem erlaubten Zugriff des Lesers denselben gespeicherten Inhalt.

Beispiel: Der Leser kann den gemeinsamen Bericht in der Vorschau ansehen.

Dieses Beispiel zeigt den Bericht, der für den konfigurierten Leser verfügbar ist. Die Download-Befehle im nächsten Schritt prüfen den temporären Link selbst.

Versuche, das separate Gehaltsobjekt zu lesen:

aws s3 cp s3://labex-private-documents/private/payroll.txt denied-payroll.txt

Dieser Befehl soll fehlschlagen, mit einem Fehler 403 oder AccessDenied. Das Objekt existiert, aber dieser Leser darf es nicht abrufen. Der Zugriff einer Identität auf einen Bericht gibt ihr nicht Zugriff auf jedes Objekt im Bucket. Du teilst nur den erlaubten Bericht.

In diesem Schritt erzeugst du einen signierten Link und lädst den Bericht mit einem HTTP-Client herunter, statt bei der empfangenen Anfrage eine AWS-Identität zu verwenden.

Ein temporärer Link ermöglicht den erlaubten Download, bis seine Zeitgrenze endet.

Temporärer Download-Link

Eine vorsignierte URL ist ein Link, der eine Signatur und eine Ablaufzeit enthält. Sie erlaubt einem Empfänger einen berechtigten Download, ohne dass er deine AWS-Zugangsdaten erhält. Die Linkdateien sind mit eingeschränkten Berechtigungen vorbereitet; halte ihren vollständigen Inhalt vertraulich.

aws s3 presign erzeugt eine URL, die einen Download des angegebenen Objekts autorisiert. --expires-in setzt die angeforderte Gültigkeitsdauer in Sekunden; 600 bedeutet zehn Minuten ab der Erzeugung. Dies ändert die Zugriffsberechtigungen des Objekts nicht. Das > der Shell schreibt die Ausgabe in die bereits geschützte lokale Datei, statt den vollständigen Link anzuzeigen:

aws s3 presign s3://labex-private-documents/shared/report.txt --expires-in 600 > download-link.txt

Der Befehl gibt nichts aus, weil seine Ausgabe in die Datei geschrieben wurde. Jeder, der diese URL besitzt, kann ihren delegierten Zugriff nutzen, solange sie gültig bleibt. Halte deshalb den vollständigen Link aus Screenshots und öffentlichen Nachrichten heraus.

Lies den Link in eine Shell-Variable ein, ohne ihn auszugeben. $(...) erfasst die Ausgabe eines Befehls; cat liest die Datei und DOWNLOAD_URL=... weist den erfassten Text zu. Um das = der Zuweisung stehen keine Leerzeichen:

DOWNLOAD_URL=$(cat download-link.txt)

curl stellt eine HTTP-Anfrage. -f meldet HTTP-Fehlerantworten als Fehler, -sS verbirgt die Fortschrittsanzeige und erhält Fehlermeldungen, und -o schreibt den Antwortinhalt in eine lokale Datei. Doppelte Anführungszeichen halten die gesamte URL einschließlich ihrer Abfrageparameter in einem Argument zusammen:

curl -fsS "$DOWNLOAD_URL" -o shared-download.txt

Curl erhält keine AWS-Zugangsdaten und kein Profil; die URL selbst enthält die für diesen Download benötigte Signatur. Lies das Ergebnis:

cat shared-download.txt
Monthly report: 42000 revenue

cmp vergleicht zwei Dateien Byte für Byte. && gibt die Meldung nur aus, wenn der Vergleich erfolgreich ist:

cmp authorized-report.txt shared-download.txt && echo 'Temporary-link download matches'

Die Meldung bestätigt, dass der HTTP-Download denselben Bericht enthält. Allein das Erzeugen eines Links beweist nicht, dass er funktioniert; diese Anfrage testet die tatsächliche Berechtigung, Signatur und gespeicherten Bytes. Wenn du vor dem Download mehr als zehn Minuten benötigst, erzeuge einen neuen Link und lade die Variable mit den zwei obigen Befehlen erneut.

In diesem Schritt beobachtest du die Zeitgrenze eines geteilten Links. Der Zehn-Minuten-Link war zum Testen eines erfolgreichen Downloads nützlich; ein separater kurzlebiger Link macht den Ablauf schnell beobachtbar.

Erzeuge einen weiteren Link mit einer bewusst kurzen Gültigkeitsdauer von fünfzehn Sekunden und speichere ihn in der zweiten geschützten Datei:

aws s3 presign s3://labex-private-documents/shared/report.txt --expires-in 15 > short-link.txt

Erfasse ihn, ohne ihn anzuzeigen:

SHORT_URL=$(cat short-link.txt)

sleep wartet die angegebene Anzahl von Sekunden. Warte sechzehn Sekunden, um die angeforderte Gültigkeitsdauer dieses kurzen Links zu überschreiten:

sleep 16

Verwende den ursprünglichen kurzen Link erneut, ohne einen Ersatz zu erzeugen. Hier verbirgt -s die Fortschrittsanzeige, -o speichert den Antwortinhalt und -w gibt nur den HTTP-Status aus. %{http_code} ist das Statusfeld von curl und \n beendet die Zeile. Wir lassen -f weg, damit du die Ablehnung untersuchen kannst:

curl -s -o expired-response.xml -w '%{http_code}\n' "$SHORT_URL"

Erwarteter Status: 403. Die Datei existiert weiterhin und deine Identität kann sie weiterhin lesen, aber das Zeitfenster der delegierten URL ist beendet. Der XML-Antwortinhalt erklärt die abgelaufene Anfrage; du kannst diese Antwort sicher untersuchen, weil sie den Link nicht enthält:

cat expired-response.xml

Ihr Code lautet AccessDenied und ihre Message lautet Request has expired.. Dies belegt den Grund der Ablehnung; ein Verbindungsfehler würde keinen Ablauf beweisen.

Räume mit der vorbereiteten Wartungsidentität auf

In diesem Schritt entfernst du die Objekte und den Bucket des Labs mit der vorbereiteten Wartungsidentität.

Dein Standardleser hat bewusst keine Löschberechtigungen. Ein AWS-CLI-Profil ist eine benannte Konfiguration, die eine Identität und Diensteinstellungen auswählt. Das vorbereitete Profil cleanup darf diese Übungsressourcen löschen. --profile cleanup wählt es für die folgenden Befehle aus; du gibst keine Zugangsdaten ein und untersuchst sie nicht.

Entferne den gemeinsamen Bericht anhand seines genauen Schlüssels:

aws --profile cleanup s3 rm s3://labex-private-documents/shared/report.txt

Entferne die andere entbehrliche Übungsressource ebenfalls anhand ihres genauen Schlüssels:

aws --profile cleanup s3 rm s3://labex-private-documents/private/payroll.txt

Beide Löschmeldungen nennen die vorgesehenen Objekte. Bestätige mit einer authentifizierten Auflistung, dass der Bucket leer ist:

aws --profile cleanup s3 ls s3://labex-private-documents/ --recursive

Der erfolgreiche Befehl gibt keine Objektzeilen aus. Entferne den leeren Bucket:

aws --profile cleanup s3 rb s3://labex-private-documents

Die Ausgabe lautet remove_bucket: labex-private-documents. Bestätige die verbleibenden Buckets:

aws --profile cleanup s3 ls

Es bleiben keine Bucket-Zeilen übrig und AWS View zeigt No buckets. Ein Download-Link kann keine entfernte Datei liefern. Die geschützten lokalen URL-Dateien können ebenfalls mit dem lokalen rm entfernt werden, weil du sie nicht mehr benötigst:

rm download-link.txt short-link.txt

Deine heruntergeladenen Berichtskopien bleiben zur Prüfung erhalten. Speicherlöschung, Linkablauf und lokale Dateibereinigung sind unterschiedliche Operationen; du hast jeden passenden Teil dieser Übung abgeschlossen.

Zusammenfassung

Du hast einen erlaubten privaten Bericht abgerufen, einen verweigerten Objektlesezugriff beobachtet, eine temporäre Download-URL erzeugt und den HTTP-Download mit der authentifizierten Kopie verglichen. Anschließend hast du geprüft, dass ein kurzlebiger Link nach seinem Ablauf abgelehnt wurde.

Eine vorsignierte URL delegiert eine Operation, die ihrer signierenden Identität bereits erlaubt ist; sie macht das Objekt nicht öffentlich und umgeht keine Berechtigungen. Behandle den vollständigen Link wie ein temporäres Zugriffsgeheimnis. Zum Abschluss hast du ein separates Wartungsprofil verwendet, um die Objekte des Labs, den Bucket und lokale URL-Dateien zu entfernen.