Einführung
Das anonyme Datenleck ist in dieser frischen Umgebung geschlossen, doch das Portal nutzt noch die Zugangsdaten des Speicheradministrators. Es darf viel mehr als nur seine zugewiesene Abrechnung lesen. Du erstellst eine eigene Identität, erlaubst nur die notwendigen Objektlesezugriffe und stellst die Anwendung darauf um.
Verwende Storage Admin für Konten und Richtlinien, Portal App für die private Zugangsdaten-Datei und Document Portal für echte Anwendungsanfragen. Die synthetischen Daten laufen auf lokalem VersityGW 1.10.0 mit integrierten Benutzer-Principals, nicht vollständigem AWS IAM. Die Umgebung startet unabhängig vom vorherigen Lab.
Eine eigene Portalidentität erstellen
In diesem Schritt ersetzt du die Abhängigkeit vom Administrator durch eine separate Anwendungsidentität.
Wähle zu Beginn dieses Schritts den Tab Document Portal in der Lab-Oberfläche aus.
Wechsle zum Tab Document Portal, klicke auf Open assigned document und beachte Identity: storage-admin. Die Abrechnung funktioniert, Administratorrechte sind jedoch unnötig. Eine Identität benennt den Aufrufer; ihr geheimer Schlüssel ermöglicht dem Client signierte Anfragen als Identitätsnachweis. Authentifizierung belegt den Aufrufer; Autorisierung entscheidet über dessen erlaubte Aktionen.
Wechsle zum Tab Storage Admin. Lade die Administrator-Zugangsdaten dieser VM:
Wechsle zum Tab Storage Admin, bevor du den folgenden Befehl ausführst.
source admin.env
VersityGW enthält einen Verwaltungsclient. -a wählt den Zugriffsschlüsselnamen, -s sein Geheimnis und -er den Endpunkt. Vor create-user benennen diese Optionen den Administrator, danach das neue Konto. Die Rolle user besitzt keine administrative Umgehung. Erstelle das synthetische Konto:
/opt/c14/versitygw admin -a storage-admin -s storage-admin-secret -er http://127.0.0.1:7070 create-user -a portal-reader -s portal-reader-secret -r user
Bei Erfolg erscheint kein Fehler. Falls das Konto nach einem wiederholten Befehl schon existiert, verwende es weiter. Gib ihm niemals admin und mache es nicht zum Bucket-Eigentümer: Diese Rechte umgehen die gewünschte enge Richtlinie.
Teste seine Authentifizierung an der öffentlichen Hilfe. Vorangestellte Zuweisungen wählen Zugangsdaten nur für diesen Befehl:
AWS_ACCESS_KEY_ID=portal-reader AWS_SECRET_ACCESS_KEY=portal-reader-secret aws --endpoint-url http://127.0.0.1:7070 s3api get-object --bucket documents --key public/help.txt help.txt
Objektmetadaten bestätigen eine authentifizierte Anfrage. Die Hilfe ist für alle erlaubt; interne Abrechnungslesezugriffe sind dadurch noch nicht freigegeben. InvalidAccessKeyId bedeutet einen fehlenden Benutzer und SignatureDoesNotMatch ein falsches Geheimnis; beides ist kein Autorisierungsergebnis.
Nur das erforderliche Präfix zum Lesen freigeben
In diesem Schritt autorisierst du die eigene Identität ohne Schreibrechte oder fremde Lesezugriffe.
Wähle zu Beginn dieses Schritts den Tab Storage Admin in der Lab-Oberfläche aus.
Das Portal benötigt portal/statement.txt; sein erlaubter Bereich ist portal/. Ein Präfix passt zum Anfang eines Objektschlüssels. portal/* umfasst nicht finance/budget.txt. Lesen verwendet s3:GetObject; Hochladen und Löschen verwenden s3:PutObject und s3:DeleteObject. Vermeide s3:*, das alle Aktionen einschließt.
Lies die wirksame Richtlinie in Storage Admin:
Wechsle zum Tab Storage Admin, bevor du den folgenden Befehl ausführst.
aws --endpoint-url http://127.0.0.1:7070 s3api get-bucket-policy --bucket documents --query Policy --output text
Nur die Erlaubnis für öffentliche Hilfe existiert. Öffne die lokale Kopie:
nano policy.json
Ersetze sie durch dieses vollständige JSON. Behalte die öffentliche Anweisung und ergänze eine eigene Erlaubnis für den benannten Leser. Integrierte VersityGW-Principals sind Benutzernamen; AWS verwendet andere Formate.
{
"Version": "2012-10-17",
"Statement": [
{"Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::documents/public/*"},
{"Effect": "Allow", "Principal": "portal-reader", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::documents/portal/*"}
]
}
Speichere in nano mit Ctrl+O, Enter und beende mit Ctrl+X. Wende die Datei mit file:// an:
aws --endpoint-url http://127.0.0.1:7070 s3api put-bucket-policy --bucket documents --policy file://policy.json
Keine Ausgabe bedeutet Erfolg; Syntaxfehler lassen die vorherige Richtlinie wirksam. Korrigiere und wiederhole bei Bedarf. Teste den erlaubten Lesezugriff:
AWS_ACCESS_KEY_ID=portal-reader AWS_SECRET_ACCESS_KEY=portal-reader-secret aws --endpoint-url http://127.0.0.1:7070 s3api get-object --bucket documents --key portal/statement.txt statement.txt
Teste jetzt einen fremden Lesezugriff. Das erwartete AccessDenied ist beabsichtigt; fahre danach fort:
AWS_ACCESS_KEY_ID=portal-reader AWS_SECRET_ACCESS_KEY=portal-reader-secret aws --endpoint-url http://127.0.0.1:7070 s3api get-object --bucket documents --key finance/budget.txt budget.txt
Die Prüfung testet auch tatsächliche Schreib- und Löschanfragen in gleichwertigem temporärem Speicher und bewahrt die Live-Dokumente. Eine ungültige Identität würde bereits die positive Leseprobe nicht bestehen; ein kaputter Login kann daher keine minimalen Rechte vortäuschen.
Die Zugangsdaten der Anwendung umstellen
In diesem Schritt stellst du das echte Portal auf die eigene Identität um.
Wähle zu Beginn dieses Schritts den Tab Portal App in der Lab-Oberfläche aus.
Wechsle zum Tab Portal App. Dieses separate lokale Konto besitzt die private Anwendungskonfiguration ohne die Zugangsdaten der Storage Admin-Shell. Lies die aktuelle Datei:
Wechsle zum Tab Portal App, bevor du den folgenden Befehl ausführst.
cat credentials.json
Die Felder access_key und secret_key benennen derzeit storage-admin. Bearbeite die Datei:
nano credentials.json
Verwende die eigenen synthetischen Zugangsdaten:
{
"access_key": "portal-reader",
"secret_key": "portal-reader-secret"
}
Speichere mit Ctrl+O, Enter und beende mit Ctrl+X. Das Portal liest diese Datei bei jeder Anfrage; ein Neustart ist unnötig. Wechsle zurück zum Tab Document Portal, klicke auf Open assigned document oder lade die Seite neu. Erwarte Identity: portal-reader und die ursprüngliche Abrechnung. Falls das Portal nicht lesen kann, korrigiere JSON oder Zugangsdaten und prüfe anschließend die Richtlinie im Tab Storage Admin.

Wechsle abschließend zum Tab Storage Admin. Teste eine anonyme interne Anfrage und die öffentliche Hilfe. -sS zeigt Fehler ohne Fortschrittsanzeige; -w ergänzt den Antwortcode:
Wechsle zum Tab Storage Admin, bevor du den folgenden Befehl ausführst.
curl -sS -w '\nHTTP %{http_code}\n' http://127.0.0.1:7070/documents/portal/statement.txt
Erwarte AccessDenied und HTTP 403.
curl -sS http://127.0.0.1:7070/documents/public/help.txt
Erwarte den ursprünglichen Hilfetext. Anwendungsidentität und anonymer Zugriff sind separate Grenzen; die Sicherung einer Grenze sichert die andere nicht automatisch.
Zusammenfassung
Du hast eine gewöhnliche Anwendungsidentität erstellt, nur das benötigte Präfix zum Lesen freigegeben und das funktionierende Portal von Administrator-Zugangsdaten gelöst. Authentifizierung, Autorisierung, öffentlicher Zugriff und Anwendungsverfügbarkeit hast du getrennt geprüft.



