mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-29 07:00:29 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-stor
This commit is contained in:
@@ -1,61 +1,68 @@
|
||||
# Az - Storage-Konten & Blobs
|
||||
# Az - Storage Accounts & Blobs
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Grundlegende Informationen
|
||||
## Basic Information
|
||||
|
||||
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.
|
||||
Azure Storage Accounts sind grundlegende Services in Microsoft Azure, die skalierbaren, sicheren und hochverfügbaren Cloud-**storage for various data types** bereitstellen, einschließlich blobs (binary large objects), files, queues und tables. Sie dienen als Container, die diese verschiedenen storage services unter einem einzigen namespace für einfache Verwaltung zusammenfassen.
|
||||
|
||||
**Hauptkonfigurationsoptionen**:
|
||||
**Main configuration options**:
|
||||
|
||||
- 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.
|
||||
- Every storage account must have a **uniq name across all Azure**.
|
||||
- Every storage account is deployed in a **region** or in an Azure extended zone
|
||||
- It's possible to select the **premium** version of the storage account for better performance
|
||||
- It's possible to select among **4 types of redundancy to protect** against rack, drive and datacenter **failures**.
|
||||
|
||||
**Sicherheitskonfigurationsoptionen**:
|
||||
**Security configuration options**:
|
||||
|
||||
- **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.
|
||||
- **Require secure transfer for REST API operations**: Require TLS in any communication with the storage
|
||||
- **Allows enabling anonymous access on individual containers**: If not, it won't be possible to enable anonymous access in the future
|
||||
- **Enable storage account key access**: If not, access with Shared Keys will be forbidden
|
||||
- **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.
|
||||
- **Permitted scope for copy operations**: Allow from any storage account, from any storage account from the same Entra tenant or from storage account with private endpoints in the same virtual network.
|
||||
|
||||
**Blob Storage options**:
|
||||
|
||||
- **Allow cross-tenant replication**
|
||||
- **Access tier**: Hot (häufig verwendete Daten), Cool und Cold (selten abgerufene Daten)
|
||||
- **Access tier**: Hot (frequently access data), Cool and Cold (rarely accessed data)
|
||||
|
||||
**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.
|
||||
- Allow from all networks
|
||||
- Allow from selected virtual networks and IP addresses
|
||||
- Disable public access and use private access
|
||||
- **Private endpoints**: It allows a private connection to the storage account from a 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.
|
||||
- **Point-in-time restore for containers**: Allows to restore containers to an earlier state
|
||||
- It requires versioning, change feed, and blob soft delete to be enabled.
|
||||
- **Enable soft delete for blobs**: It enables a retention period in days for deleted blobs (even overwritten)
|
||||
- **Enable soft delete for containers**: It enables a retention period in days for deleted containers
|
||||
- **Enable soft delete for file shares**: It enables a retention period in days for deleted file shared
|
||||
- **Enable versioning for blobs**: Maintain previous versions of your blobs
|
||||
- **Enable blob change feed**: Keep logs of create, modification, and delete changes to blobs
|
||||
- **Enable version-level immutability support**: Allows you to set time-based retention policy on the account-level that will apply to all blob versions.
|
||||
- Version-level immutability support and point-in-time restore for containers cannot be enabled simultaneously.
|
||||
|
||||
**Verschlüsselungskonfiguration**:
|
||||
**Encryption configuration options**:
|
||||
|
||||
- **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".
|
||||
- **Encryption type**: It's possible to use Microsoft-managed keys (MMK) or Customer-managed keys (CMK)
|
||||
- **Enable infrastructure encryption**: Allows to double encrypt the data "for more security"
|
||||
|
||||
### Storage endpoints
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="197">Storage Service</th><th>Endpoint</th></tr></thead><tbody><tr><td><strong>Blob storage</strong></td><td><code>https://<storage-account>.blob.core.windows.net</code><br><br><code>https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list</code></td></tr><tr><td><strong>Data Lake Storage</strong></td><td><code>https://<storage-account>.dfs.core.windows.net</code></td></tr><tr><td><strong>Azure Files</strong></td><td><code>https://<storage-account>.file.core.windows.net</code></td></tr><tr><td><strong>Queue storage</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>Table storage</strong></td><td><code>https://<storage-account>.table.core.windows.net</code></td></tr></tbody></table>
|
||||
| Storage Service | Endpoint |
|
||||
| --- | --- |
|
||||
| **Blob storage** | `https://<storage-account>.blob.core.windows.net` |
|
||||
| **Blob storage container listing** | `https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list` |
|
||||
| **Data Lake Storage** | `https://<storage-account>.dfs.core.windows.net` |
|
||||
| **Azure Files** | `https://<storage-account>.file.core.windows.net` |
|
||||
| **Queue storage** | `https://<storage-account>.queue.core.windows.net` |
|
||||
| **Table storage** | `https://<storage-account>.table.core.windows.net` |
|
||||
|
||||
### Öffentliche Zugänglichkeit
|
||||
### Public Exposure
|
||||
|
||||
If "Allow Blob public access" is **enabled** (disabled by default), when creating a container it's possible to:
|
||||
|
||||
@@ -67,8 +74,8 @@ If "Allow Blob public access" is **enabled** (disabled by default), when creatin
|
||||
|
||||
### Static website (`$web`) exposure & leaked secrets
|
||||
|
||||
- **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.
|
||||
- **Static websites** are served from the special `$web` container over a region-specific endpoint such as `https://<account>.z13.web.core.windows.net/`.
|
||||
- The `$web` container may report `publicAccess: null` via the blob API, but files are still reachable through the static site endpoint, so dropping config/IaC artifacts there can leak secrets.
|
||||
- Quick audit workflow:
|
||||
```bash
|
||||
# Identify storage accounts with static website hosting enabled
|
||||
@@ -80,53 +87,53 @@ az storage blob list --container-name '$web' --account-name <acc-name> --auth-mo
|
||||
# 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
|
||||
```
|
||||
### Prüfung anonymen Blob-Zugriffs
|
||||
### Auditing anonymous blob exposure
|
||||
|
||||
- **Locate storage accounts** die Daten exponieren können: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Wenn `allowBlobPublicAccess` `false` 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:
|
||||
- **Storage-Accounts lokalisieren**, die Daten exponieren können: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. Wenn `allowBlobPublicAccess` `false` ist, kannst du Container nicht public machen.
|
||||
- **Riskante Accounts prüfen**, um den Flag und andere schwache Settings zu bestätigen: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
|
||||
- **Container-Level-Exposure auflisten**, bei der der Flag aktiviert ist:
|
||||
```bash
|
||||
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).
|
||||
- `"Container"`: anonyme **Auflistung + Lesen** jedes Blobs.
|
||||
- `"Blob"`: anonyme Reads sind **nur erlaubt, wenn der Blob-Name bekannt ist** (kein Listing).
|
||||
- `"Container"`: anonymes **list + read** von jedem Blob.
|
||||
- `null`: privat; Authentifizierung erforderlich.
|
||||
- **Zugriff nachweisen** ohne Anmeldeinformationen:
|
||||
- Wenn `publicAccess` `Container` 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:
|
||||
- **Zugriff nachweisen** ohne Credentials:
|
||||
- Wenn `publicAccess` `Container` ist, funktioniert anonymes Listing: `curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list"`.
|
||||
- Für sowohl `Blob` als auch `Container` funktioniert anonymes Blob-Download, wenn der Name bekannt ist:
|
||||
```bash
|
||||
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>"
|
||||
```
|
||||
### Mit Storage verbinden
|
||||
### Connect to Storage
|
||||
|
||||
Wenn Sie ein **storage** finden, zu dem Sie eine Verbindung herstellen können, können Sie das Tool [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) dafür verwenden.
|
||||
Wenn du irgendeinen **storage** findest, auf den du dich verbinden kannst, könntest du das Tool [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) dafür verwenden.
|
||||
|
||||
## Zugriff auf Storage <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
## Access to Storage <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
|
||||
### RBAC
|
||||
|
||||
Es ist möglich, Entra ID-Principals mit **RBAC roles** zu verwenden, um auf Storage-Accounts zuzugreifen — dies ist der empfohlene Weg.
|
||||
Es ist möglich, Entra ID principals mit **RBAC roles** zu verwenden, um auf storage accounts zuzugreifen, und das ist der empfohlene Weg.
|
||||
|
||||
### Access Keys
|
||||
|
||||
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.**
|
||||
Die storage accounts haben access keys, die verwendet werden können, um auf sie zuzugreifen. Das bietet f**ull access to the storage account.**
|
||||
|
||||
<figure><img src="../../../images/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### **Shared Keys & Lite Shared Keys**
|
||||
|
||||
Es ist möglich, [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key), die mit den Access Keys signiert sind, zu verwenden, um den Zugriff auf bestimmte Ressourcen über eine signierte URL zu autorisieren.
|
||||
Es ist möglich, [**Shared Keys zu generieren**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key), die mit den access keys signiert sind, 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.
|
||||
> Beachte, dass der `CanonicalizedResource`-Teil die storage services resource (URI) darstellt. Und wenn irgendein Teil in der URL kodiert ist, sollte er auch innerhalb von `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.
|
||||
> Das wird standardmäßig vom `az` cli verwendet, um Requests zu authentifizieren. Damit es die Entra ID principal credentials verwendet, gib den Param `--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:
|
||||
- Es ist möglich, einen **shared key für blob, queue and file services** zu generieren, indem die folgenden Informationen signiert werden:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-Encoding + "\n" +
|
||||
@@ -143,7 +150,7 @@ Range + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Es ist möglich, einen **Shared Key für Table Services** zu generieren, indem man die folgenden Informationen signiert:
|
||||
- Es ist möglich, einen **shared key für table services** zu generieren, indem die folgenden Informationen signiert werden:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-MD5 + "\n" +
|
||||
@@ -151,7 +158,7 @@ Content-Type + "\n" +
|
||||
Date + "\n" +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Es ist möglich, einen **lite shared key for blob, queue and file services** zu generieren, indem die folgenden Informationen signiert werden:
|
||||
- Es ist möglich, einen **lite shared key für blob, queue und file services** zu generieren, indem die folgenden Informationen signiert werden:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-MD5 + "\n" +
|
||||
@@ -160,12 +167,12 @@ Date + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- Es ist möglich, einen **lite shared key for table services** zu erzeugen, indem man die folgenden Informationen signiert:
|
||||
- Es ist möglich, einen **lite shared key for table services** zu generieren, indem die folgenden Informationen signiert werden:
|
||||
```bash
|
||||
StringToSign = Date + "\n"
|
||||
CanonicalizedResource
|
||||
```
|
||||
Um den Schlüssel zu verwenden, kann er im Authorization-Header nach folgender Syntax angegeben werden:
|
||||
Dann kann der key verwendet werden, indem er im Authorization-Header mit der folgenden Syntax angegeben wird:
|
||||
```bash
|
||||
Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"
|
||||
#e.g.
|
||||
@@ -179,68 +186,68 @@ Content-Length: 0
|
||||
```
|
||||
### **Shared Access Signature** (SAS)
|
||||
|
||||
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.
|
||||
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 access keys des Accounts offenzulegen. Während access keys vollen administrativen Zugriff auf alle Ressourcen bieten, ermöglicht SAS eine granulare Kontrolle durch das Festlegen von Berechtigungen (wie read oder write) und einer Ablaufzeit.
|
||||
|
||||
#### SAS Types
|
||||
|
||||
- **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](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Es ist möglich, alle erzeugten user delegated SAS zu **revoke**n.
|
||||
- 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.
|
||||
- **User delegation SAS**: Dies wird aus einem **Entra ID principal** erstellt, der das SAS signiert und die Berechtigungen vom user an das SAS delegiert. Es kann nur mit **blob and data lake storage** verwendet werden ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)). Es ist möglich, alle generierten user delegated SAS zu **revoke**n.
|
||||
- Auch wenn es möglich ist, ein delegation SAS mit "mehr" Berechtigungen zu generieren als der user hat. Wenn der principal sie jedoch nicht hat, funktioniert es nicht (kein privesc).
|
||||
- **Service SAS**: Dies wird mit einem der **access keys** des storage account signiert. Es kann verwendet werden, um Zugriff auf bestimmte Ressourcen in einem einzelnen storage service zu gewähren. Wenn der key erneuert wird, funktioniert das SAS nicht mehr.
|
||||
- **Account SAS**: Es wird ebenfalls mit einem der **access keys** des storage account signiert. Es gewährt Zugriff auf Ressourcen über die services eines storage account hinweg (Blob, Queue, Table, File) und kann service-level operations enthalten.
|
||||
|
||||
A SAS URL signed by an **access key** looks like this:
|
||||
Eine SAS URL, die mit einem **access key** signiert ist, sieht so aus:
|
||||
|
||||
- `https://<container_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D`
|
||||
|
||||
A SAS URL signed as a **user delegation** looks like this:
|
||||
Eine SAS URL, die als **user delegation** signiert ist, sieht so aus:
|
||||
|
||||
- `https://<container_name>.blob.core.windows.net/testing-container?sp=r&st=2024-11-22T15:07:40Z&se=2024-11-22T23:07:40Z&skoid=d77c71a1-96e7-483d-bd51-bd753aa66e62&sktid=fdd066e1-ee37-49bc-b08f-d0e152119b04&skt=2024-11-22T15:07:40Z&ske=2024-11-22T23:07:40Z&sks=b&skv=2022-11-02&spr=https&sv=2022-11-02&sr=c&sig=7s5dJyeE6klUNRulUj9TNL0tMj2K7mtxyRc97xbYDqs%3D`
|
||||
|
||||
Note some **http params**:
|
||||
Beachte einige **http params**:
|
||||
|
||||
- The **`se`** param indicates the **expiration date** of the SAS
|
||||
- The **`sp`** param indicates the **permissions** of the SAS
|
||||
- The **`sig`** is the **signature** validating the SAS
|
||||
- Der **`se`** param gibt das **expiration date** des SAS an
|
||||
- Der **`sp`** param gibt die **permissions** des SAS an
|
||||
- Der **`sig`** ist die **signature**, die das SAS validiert
|
||||
|
||||
#### SAS permissions
|
||||
|
||||
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:
|
||||
Beim Generieren eines SAS muss angegeben werden, welche permissions es gewähren soll. Je nachdem, über welchem objet das SAS generiert wird, können unterschiedliche permissions enthalten sein. Zum Beispiel:
|
||||
|
||||
- (a)dd, (c)reate, (d)elete, (e)xecute, (f)ilter_by_tags, (i)set_immutability_policy, (l)ist, (m)ove, (r)ead, (t)ag, (w)rite, (x)delete_previous_version, (y)permanent_delete
|
||||
|
||||
## SFTP Support for Azure Blob Storage
|
||||
## SFTP Support für Azure Blob Storage
|
||||
|
||||
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.
|
||||
Azure Blob Storage unterstützt jetzt das SSH File Transfer Protocol (SFTP), wodurch sichere Dateiübertragung und Verwaltung direkt zu Blob Storage möglich sind, ohne Custom Solutions oder Third-party products zu benötigen.
|
||||
|
||||
### Key Features
|
||||
|
||||
- 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
|
||||
- Protocol Support: SFTP funktioniert mit Blob Storage accounts, die mit hierarchical namespace (HNS) konfiguriert sind. Dadurch werden blobs in directories und subdirectories organisiert, was die Navigation erleichtert.
|
||||
- Security: SFTP verwendet lokale user identities zur Authentifizierung und integriert sich nicht mit RBAC oder ABAC. Jeder lokale user kann sich authentifizieren über:
|
||||
- Azure-generierte 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.
|
||||
- Granular Permissions: Berechtigungen wie Read, Write, Delete und List können lokalen users für bis zu 100 containers zugewiesen werden.
|
||||
- Networking Considerations: SFTP connections werden über Port 22 hergestellt. Azure unterstützt Netzwerk-Konfigurationen wie firewalls, private endpoints oder virtual networks, um SFTP traffic abzusichern.
|
||||
|
||||
### Setup Requirements
|
||||
|
||||
- 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).
|
||||
- Supported Encryption: Erfordert von Microsoft Security Development Lifecycle (SDL) genehmigte cryptographic algorithms (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.
|
||||
- SFTP auf dem storage account aktivieren.
|
||||
- Lokale user identities mit passenden Berechtigungen erstellen.
|
||||
- Home directories für users konfigurieren, um ihren Startpunkt innerhalb des containers festzulegen.
|
||||
|
||||
### Permissions
|
||||
|
||||
| Permission | Symbol | Description |
|
||||
| ---------------------- | ------ | ------------------------------------ |
|
||||
| **Read** | `r` | Dateiinhalt lesen. |
|
||||
| **Write** | `w` | Dateien hochladen und Verzeichnisse erstellen. |
|
||||
| **List** | `l` | Inhalte von Verzeichnissen auflisten.|
|
||||
| **Delete** | `d` | Dateien oder Verzeichnisse löschen. |
|
||||
| **Create** | `c` | Dateien oder Verzeichnisse erstellen.|
|
||||
| **Modify Ownership** | `o` | Besitzender Benutzer oder Gruppe ändern. |
|
||||
| **Modify Permissions** | `p` | ACLs auf Dateien oder Verzeichnissen ändern. |
|
||||
| **Read** | `r` | Read file content. |
|
||||
| **Write** | `w` | Upload files and create directories. |
|
||||
| **List** | `l` | List contents of directories. |
|
||||
| **Delete** | `d` | Delete files or directories. |
|
||||
| **Create** | `c` | Create files or directories. |
|
||||
| **Modify Ownership** | `o` | Change the owning user or group. |
|
||||
| **Modify Permissions** | `p` | Change ACLs on files or directories. |
|
||||
|
||||
## Enumeration
|
||||
|
||||
@@ -372,7 +379,7 @@ az storage account local-user list \
|
||||
{{#tab name="Az PowerShell" }}
|
||||
|
||||
<details>
|
||||
<summary>Az PowerShell enumeration</summary>
|
||||
<summary>Az PowerShell-Aufzählung</summary>
|
||||
```powershell
|
||||
# Get storage accounts
|
||||
Get-AzStorageAccount | fl
|
||||
@@ -435,7 +442,7 @@ New-AzStorageBlobSASToken `
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Dateifreigaben
|
||||
### File Shares
|
||||
|
||||
{{#ref}}
|
||||
az-file-shares.md
|
||||
@@ -459,7 +466,7 @@ az-file-shares.md
|
||||
../az-persistence/az-storage-persistence.md
|
||||
{{#endref}}
|
||||
|
||||
## Referenzen
|
||||
## References
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction)
|
||||
- [https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview)
|
||||
|
||||
Reference in New Issue
Block a user