App benötigt sicheren Cloud-Dateispeicher? Blob Storage und widerrufbaren SAS-Zugriff erstellen
CloudTrips benötigt Objektspeicher für eine Anwendungsdatei. Die Datei soll privat bleiben, aber ein externer Client benötigt vorübergehenden Lesezugriff, den CloudTrips vor dem geplanten Ablauf widerrufen kann.
Storage Account → Azure-Speichernamespace und Sicherheitsgrenze
Blob-Container → gruppiert zusammengehörige Objekte im Account
Blob → hochgeladenes Objekt wie Dokument, Bild oder Backup
SAS → signierte URL mit begrenztem Zugriff ohne Freigabe eines Account Keys
Storage Account erstellen
Suche nach Storage accounts, wähle Create und trage ein:
Subscription: CloudTrips TEST
Resource group: Create new → rg-cloudtrips-storage-test-weu
Storage account name: stctblobdmytrotestweu
Region: West Europe
Performance: Standard
Redundancy: Locally-redundant storage (LRS)
Der Storage-Account-Name muss global eindeutig, 3–24 Zeichen lang sein und darf
nur Kleinbuchstaben und Zahlen verwenden. Ist dieser Name vergeben, ändere nur
den eindeutigen Teil dmytro und verwende den neuen Namen im gesamten Trip.
Lasse Secure Transfer erforderlich und öffentlichen Blobzugriff deaktiviert. Lasse Allow storage account key access aktiviert, weil eine Stored Access Policy nur einen Service SAS steuern kann und dieser mit einem Account Key signiert wird. Wähle Review + create > Create.

Privaten Blob-Container erstellen
Öffne den Storage Account und wähle Data storage > Containers > + Container:
Name: app-files
Anonymous access level: Private (no anonymous access)
Ein Container ist kein klassischer Dateisystemordner. Er ist der oberste Bereich, der Blobs enthält und Zugriffsrichtlinien tragen kann. Erstelle den Container.
Blob hochladen
Erstelle eine kleine lokale Testdatei:
printf 'CloudTrips private blob\n' > cloudtrips-storage-test.txt
Öffne app-files, wähle Upload, dann cloudtrips-storage-test.txt und
Upload. Behalte den Standardtyp Block Blob; Block Blobs eignen sich für
gewöhnliche Dateien, die als Objekte hoch- und heruntergeladen werden.

Kopiere die URL des Blobs und teste sie ohne Anmeldedaten:
curl --include '<BLOB_URL>'
Die Anfrage darf den Dateiinhalt nicht liefern. Eine Antwort 401, 403 oder
bewusst undurchsichtige 404 bestätigt, dass die normale URL allein keinen
Zugriff gewährt.
Temporären Ad-hoc-SAS-Zugriff erzeugen
Aktiviere in der Containerliste das Kontrollkästchen neben app-files, öffne
… > Generate SAS und konfiguriere:
Signing method: Account key
Stored access policy: None
Permissions: Read
Start: fünf Minuten vor der aktuellen Zeit
Expiry: eine Stunde ab jetzt
Allowed protocols: HTTPS only
Ein leicht zurückgesetzter Start verhindert vorübergehende Fehler bei abweichenden Uhren von Client und Azure. Wähle Generate SAS token and URL und kopiere die erzeugte SAS-URL oder hänge den angezeigten Token an die Blob-URL. Der Token wird nur einmal angezeigt und muss wie ein Kennwort geschützt werden.
curl --include '<BLOB_SAS_URL>'
Erwarteter Inhalt:
CloudTrips private blob


Dies ist ein Ad-hoc Service SAS: Berechtigungen und Gültigkeitszeitraum sind im Token eingebettet. Azure Storage führt keine Liste ausgegebener SAS-Token, daher kann dieser einzelne Token nicht direkt widerrufen werden. Ablauf oder Rotation des signierenden Account Keys machen ihn ungültig, doch die Schlüsselrotation betrifft auch andere damit signierte SAS-Token.
Stored Access Policy erstellen
Kehre zu Data storage > Containers zurück. Markiere app-files, öffne
… > Access policy und wähle unter Stored access policies
+ Add policy:
Identifier: read-files
Permissions: Read
Start time: fünf Minuten vor der aktuellen Zeit
Expiry time: eine Stunde ab jetzt
Wähle OK und danach im Access-policy-Bereich Save. Das zweite Speichern ist wesentlich: Wird der Bereich nach OK geschlossen, geht die noch nicht angewendete Policy verloren.

Eine Stored Access Policy ist serverseitiger Zustand am Container. Mehrere Service-SAS-Token können ihren Identifier referenzieren und Berechtigungen sowie Zeitfenster erben. Änderung oder Löschen der Policy wirkt deshalb auf alle verknüpften Token.
Policygebundenen SAS erzeugen
Markiere app-files, öffne … > Generate SAS und konfiguriere:
Signing method: Account key
Stored access policy: read-files
Allowed protocols: HTTPS only
Die Policy liefert Leseberechtigung und Gültigkeitszeitraum. Erzeuge den SAS und kopiere den Token sicher. Liefert das Portal eine URL auf Containerebene, baue die Blob-URL so zusammen:
https://stctblobdmytrotestweu.blob.core.windows.net/app-files/cloudtrips-storage-test.txt?<POLICY_SAS_TOKEN>
Füge kein zweites ? ein, wenn der kopierte Token oder die URL bereits eines
enthält. Teste:
curl --include '<POLICY_LINKED_BLOB_SAS_URL>'
Erwarteter Inhalt: CloudTrips private blob.

Stored Access Policies funktionieren nur mit einem Service SAS. Sie können nicht mit User Delegation SAS oder Account SAS verbunden werden. Microsoft empfiehlt grundsätzlich User Delegation SAS, da er mit Microsoft-Entra- Anmeldedaten geschützt ist; hier wird Service SAS gezielt für den policybasierten Widerruf verwendet.
Die drei SAS-Typen unterscheiden sich durch Signatur und möglichen Umfang:
Service SAS
Signiert durch: Storage Account Key
Umfang: ein Azure-Storage-Dienst, zum Beispiel Blob Storage
Stored Access Policy: unterstützt
Account SAS
Signiert durch: Storage Account Key
Umfang: mehrere Storage-Dienste und Vorgänge auf Dienstebene
Stored Access Policy: nicht unterstützt
User Delegation SAS
Signiert durch: temporärer User-Delegation-Key aus Microsoft-Entra-Anmeldedaten
Umfang: Blob Storage und Data Lake Storage
Stored Access Policy: nicht unterstützt
Ein User Delegation SAS vermeidet den langlebigen Storage Account Key und ist für Blobzugriff normalerweise die bevorzugte Wahl. Ein Account SAS besitzt den größten möglichen Umfang. Ein Service SAS ist enger begrenzt und erhält durch die Verknüpfung mit einer Stored Access Policy den hier demonstrierten serverseitigen Widerrufsmechanismus.
Policygebundenen SAS widerrufen
Kehre zum Access policy-Bereich des Containers zurück, lösche read-files
und wähle Save. Warte kurz auf die Verteilung der Berechtigungsänderung und
rufe danach exakt dieselbe policygebundene URL erneut auf:
curl --include '<POLICY_LINKED_BLOB_SAS_URL>'
Erwartetes Ergebnis: 403 mit Authentifizierungs- oder Autorisierungsfehler.
URL, Token, Account Key und Blob blieben unverändert; der Zugriff endet, weil
Azure den Stored-Policy-Identifier des Tokens nicht mehr auflösen kann.
Der frühere Ad-hoc-SAS bleibt bis zu seinem eigenen Ablauf gültig, weil er
read-files nie referenziert hat.


Bereinigen
Lösche die eigenständige Ressourcengruppe:
az group delete \
--name rg-cloudtrips-storage-test-weu \
--yes
Prüfe, ob sie entfernt wurde:
az group exists --name rg-cloudtrips-storage-test-weu
Erwartetes Ergebnis: false.