Azure Storage Accounts sind grundlegende Dienste in Microsoft Azure, die skalierbaren, sicheren und hochverfügbaren Cloud-Speicher für verschiedene Datentypen bereitstellen, einschließlich Blobs (binary large objects), Files, Queues und Tables. Sie dienen als Container, die diese unterschiedlichen Storage-Services unter einem einzigen Namespace zur einfachen Verwaltung zusammenfassen.
Hauptkonfigurationsoptionen:
Jedes Storagekonto muss einen eindeutigen Namen in ganz Azure haben.
Jedes Storagekonto wird in einer Region oder in einer Azure extended zone bereitgestellt.
Es ist möglich, die Premium-Version des Storagekontos für bessere Performance auszuwählen.
Es ist möglich, zwischen 4 Arten von Redundanz zum Schutz vor Rack-, Laufwerks- und Rechenzentrums-Ausfällen zu wählen.
Sicherheitskonfigurationsoptionen:
Require secure transfer for REST API operations: TLS für jede Kommunikation mit dem Storage erforderlich.
Allows enabling anonymous access on individual containers: Falls deaktiviert, wird es in Zukunft nicht möglich sein, anonymen Zugriff zu aktivieren.
Enable storage account key access: Falls deaktiviert, wird der Zugriff mit Shared Keys verboten.
Minimum TLS version
Permitted scope for copy operations: Erlaubt von jedem Storage Account, von jedem Storage Account desselben Entra-Tenants oder von Storage Accounts mit privaten Endpoints im selben Virtual Network.
Blob Storage options:
Allow cross-tenant replication
Access tier: Hot (häufig verwendete Daten), Cool und Cold (selten abgerufene Daten)
Networking options:
Network access:
Allow from all networks
Allow from selected virtual networks and IP addresses
Disable public access and use private access
Private endpoints: Ermöglicht eine private Verbindung zum Storage Account aus einem Virtual Network.
Data protection options:
Point-in-time restore for containers: Ermöglicht das Wiederherstellen von Containern in einen früheren Zustand.
Erfordert, dass Versioning, Change Feed und Blob Soft Delete aktiviert sind.
Enable soft delete for blobs: Aktiviert eine Aufbewahrungsfrist in Tagen für gelöschte Blobs (auch überschrieben).
Enable soft delete for containers: Aktiviert eine Aufbewahrungsfrist in Tagen für gelöschte Container.
Enable soft delete for file shares: Aktiviert eine Aufbewahrungsfrist in Tagen für gelöschte File Shares.
Enable versioning for blobs: Bewahrt vorherige Versionen deiner Blobs.
Enable blob change feed: Führt Protokolle über Erstellungs-, Änderungs- und Löschvorgänge an Blobs.
Enable version-level immutability support: Ermöglicht das Setzen einer zeitbasierten Aufbewahrungsrichtlinie auf Kontoebene, die für alle Blob-Versionen gilt.
Version-level immutability support und point-in-time restore for containers können nicht gleichzeitig aktiviert werden.
Verschlüsselungskonfiguration:
Encryption type: Es ist möglich, Microsoft-managed keys (MMK) oder Customer-managed keys (CMK) zu verwenden.
Enable infrastructure encryption: Erlaubt eine doppelte Verschlüsselung der Daten “für mehr Sicherheit”.
Static websites werden vom speziellen $web-Container über einen regionsspezifischen Endpoint wie https://<account>.z13.web.core.windows.net/ bereitgestellt.
Der $web-Container kann via Blob-API publicAccess: null melden, aber Dateien sind weiterhin über den statischen Site-Endpoint erreichbar, sodass das Ablegen von Config/IaC-Artefakten dort can leak secrets.
Quick audit workflow:
# Identify storage accounts with static website hosting enabled
az storage blob service-properties show --account-name <acc-name> --auth-mode login
# Enumerate containers (including $web) and their public flags
az storage container list --account-name <acc-name> --auth-mode login
# List files served by the static site even when publicAccess is null
az storage blob list --container-name '$web' --account-name <acc-name> --auth-mode login
# Pull suspicious files directly (e.g., IaC tfvars containing secrets/SAS)
az storage blob download -c '$web' --name iac/terraform.tfvars --file /dev/stdout --account-name <acc-name> --auth-mode login
Locate storage accounts die Daten exponieren können: az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'. Wenn allowBlobPublicAccessfalse ist, kannst du Container nicht öffentlich machen.
Riskante Accounts prüfen um das Flag und weitere schwache Einstellungen zu bestätigen: az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'.
Auf Container-Ebene exponierte Ressourcen aufzählen bei aktivem Flag:
az storage container list --account-name <acc> \
--query '[].{name:name, access:properties.publicAccess}'
"Blob": anonyme Lesezugriffe erlaubt nur wenn der Blob-Name bekannt ist (kein Auflisten).
Wenn publicAccessContainer ist, funktioniert anonyme Auflistung: curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list".
Für Blob und Container funktioniert der anonyme Blob-Download, wenn der Name bekannt ist:
az storage blob download -c <container> -n <blob> --account-name <acc> --file /dev/stdout
# or via raw HTTP
curl "https://<acc>.blob.core.windows.net/<container>/<blob>"
Die Storage-Accounts verfügen über Access Keys, die verwendet werden können, um darauf zuzugreifen. Dies gewährt vollen Zugriff auf das storage account.
Es ist möglich, generate Shared Keys, die mit den Access Keys signiert sind, zu verwenden, um den Zugriff auf bestimmte Ressourcen über eine signierte URL zu autorisieren.
Note
Hinweis: Der CanonicalizedResource-Teil repräsentiert die Ressource des storage services (URI). Wenn ein Teil der URL kodiert ist, sollte er auch innerhalb des CanonicalizedResource kodiert sein.
Note
Dies wird standardmäßig vom az CLI benutzt, um Requests zu authentifizieren. Um stattdessen die Anmeldeinformationen eines Entra ID Principals zu verwenden, geben Sie den Parameter --auth-mode login an.
Es ist möglich, einen shared key für blob, queue und file services zu generieren, indem die folgenden Informationen signiert werden:
Shared Access Signatures (SAS) sind sichere, zeitlich begrenzte URLs, die spezifische Berechtigungen zum Zugriff auf Ressourcen in einem Azure Storage account gewähren, ohne die Zugriffsschlüssel des Kontos offenzulegen. Während Zugriffsschlüssel vollen administrativen Zugriff auf alle Ressourcen bieten, ermöglicht SAS eine granulare Steuerung durch Angabe von Berechtigungen (z. B. read oder write) und Festlegung einer Ablaufzeit.
User delegation SAS: Dieses wird von einem Entra ID principal erstellt, der die SAS signiert und die Berechtigungen vom Benutzer an die SAS delegiert. Es kann nur mit blob and data lake storage verwendet werden (docs). Es ist möglich, alle erzeugten user delegated SAS zu revoken.
Even if it’s possible to generate a delegation SAS with “more” permissions than the ones the user has. However, if the principal doesn’t have them, it won’t work (no privesc).
Service SAS: Diese wird mit einem der storage account access keys signiert. Sie kann verwendet werden, um Zugriff auf spezifische Ressourcen in einem einzelnen Storage service zu gewähren. Wenn der Key erneuert wird, funktioniert die SAS nicht mehr.
Account SAS: Ebenfalls mit einem der storage account access keys signiert. Sie gewährt Zugriff auf Ressourcen über Storage account services hinweg (Blob, Queue, Table, File) und kann service-level Operationen einschließen.
A SAS URL signed by an access key looks like this:
When generating a SAS it’s needed to indicate the permissions that it should be granting. Depending on the objet the SAS is being generated over different permissions might be included. For example:
Azure Blob Storage unterstützt jetzt das SSH File Transfer Protocol (SFTP) und ermöglicht sichere Dateiübertragung und -verwaltung direkt zu Blob Storage, ohne benutzerdefinierte Lösungen oder Drittanbieterprodukte zu benötigen.
Protocol Support: SFTP funktioniert mit Blob Storage accounts, die mit hierarchical namespace (HNS) konfiguriert sind. Dadurch werden Blobs in Verzeichnisse und Unterverzeichnisse organisiert, was die Navigation erleichtert.
Security: SFTP verwendet lokale Benutzeridentitäten zur Authentifizierung und integriert sich nicht in RBAC oder ABAC. Jeder lokale Benutzer kann sich authentifizieren über:
Azure-generated passwords
Public-private SSH key pairs
Granular Permissions: Berechtigungen wie Lesen, Schreiben, Löschen und Auflisten können lokalen Benutzern für bis zu 100 container zugewiesen werden.
Networking Considerations: SFTP-Verbindungen erfolgen über Port 22. Azure unterstützt Netzwerk-Konfigurationen wie Firewalls, private endpoints oder virtual networks, um SFTP-Traffic abzusichern.
Hierarchical Namespace: HNS muss beim Erstellen des storage account aktiviert sein.
Supported Encryption: Erfordert von Microsoft SDL (Security Development Lifecycle) zugelassene kryptografische Algorithmen (z. B. rsa-sha2-256, ecdsa-sha2-nistp256).
SFTP Configuration:
Enable SFTP on the storage account.
Create local user identities with appropriate permissions.
Configure home directories for users to define their starting location within the container.
az storage blob show –account-name –container-name –sas-token ‘se=2024-12-31T23%3A59%3A00Z&sp=racwdxyltfmei&sv=2022-11-02&sr=c&sig=ym%2Bu%2BQp5qqrPotIK5/rrm7EMMxZRwF/hMWLfK1VWy6E%3D’ –name ‘asd.txt’