Erstelle ein Benutzerdelegierungs-SAS für einen Container oder Blob mit PowerShell

Eine Shared Access Signature (SAS) ermöglicht Ihnen, eingeschränkten Zugriff auf Container und Blobs in Ihrem Speicherkonto zu gewähren. Wenn Sie eine SAS erstellen, geben Sie ihre Einschränkungen an, einschließlich der Azure Storage-Ressourcen, auf die Clients zugreifen dürfen, welche Berechtigungen sie für diese Ressourcen haben und wie lange die SAS gültig ist.

Jede SAS wird mit einem Schlüssel signiert. Zum Signieren einer SAS stehen zwei Möglichkeiten zur Verfügung:

  • Mit einem Schlüssel, der mit Microsoft Entra-Anmeldeinformationen erstellt wurde. Eine SAS, die mit Microsoft Entra-Anmeldeinformationen signiert wurde, ist eine SAS für die Benutzerdelegierung. Einem Client, der eine SAS für die Benutzerdelegierung erstellt, muss eine Azure RBAC-Rolle zugewiesen werden, in der die Aktion Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey enthalten ist. Weitere Informationen finden Sie unter Erstellen einer SAS für die Benutzerdelegierung.
  • Mit dem Speicherkontoschlüssel. Sowohl eine Dienst-SAS als auch eine Konto-SAS wird mit dem Speicherkontoschlüssel signiert. Der Client, der eine Dienst-SAS erstellt, muss entweder direkten Zugriff auf den Kontoschlüssel haben, oder ihm muss die Berechtigung Microsoft.Storage /storageAccounts/listkeys/action zugewiesen werden. Weitere Informationen finden Sie unter Erstellen einer Dienst-SAS oder Erstellen einer Konto-SAS.

Hinweis

Eine Benutzerdelegierungs-SAS bietet mehr Sicherheit als eine SAS, die mit dem Schlüssel des Speicherkontos signiert wird. Microsoft empfiehlt, nach Möglichkeit eine SAS für die Benutzerdelegierung zu verwenden. Weitere Informationen finden Sie unter Gewähren von eingeschränktem Zugriff auf Daten mithilfe von SAS (Shared Access Signature).

Dieser Artikel zeigt, wie man Microsoft Entra-Zugangsdaten verwendet, um ein Benutzerdelegations-SAS für einen Container oder Blob mit Azure PowerShell zu erstellen.

Informationen zur Benutzerdelegierungs-SAS

Ein SAS-Token für den Zugriff auf einen Container oder ein Blob kann entweder mit Azure AD-Anmeldeinformationen oder einem Kontoschlüssel geschützt werden. Eine mit Microsoft Entra-Anmeldeinformationen gesicherte SAS wird als SAS für die Benutzerdelegierung bezeichnet, da das OAuth 2.0-Token, das zum Signieren der SAS verwendet wird, im Namen des Benutzers angefordert wird.

Microsoft empfiehlt als bewährte Methode, nach Möglichkeit Azure AD-Anmeldeinformationen anstelle des Kontoschlüssels zu verwenden, der leichter kompromittiert werden kann. Wenn Ihr Anwendungsdesign Shared Access Signatures erfordert, verwenden Sie Microsoft Entra-Anmeldeinformationen, um eine Benutzerdelegierungs-SAS für erhöhte Sicherheit zu erstellen. Weitere Informationen zur SAS für die Benutzerdelegierung finden Sie unter Erstellen einer SAS für die Benutzerdelegierung.

Caution

Jeder Client, der über eine gültige SAS verfügt, kann auf Daten in Ihrem Speicherkonto zugreifen, sofern von dieser SAS zugelassen. Es ist wichtig, eine SAS vor böswilliger oder unbeabsichtigter Verwendung zu schützen. Verwenden Sie Ermessensspielraum bei der Verteilung eines SAS und haben Sie einen Plan zur Widerrufung eines kompromittierten SAS. Um unbeabsichtigte Nutzung zu vermeiden, verwenden Sie benutzergebundenes benutzerdefiniertes SAS, das das SAS-Token an den vorgesehenen Endnutzer bindet und von niemandem sonst genutzt werden kann.

Weitere Informationen zu freigegebenen Zugriffssignaturen finden Sie unter Beschränkten Zugriff auf Azure Storage-Ressourcen mithilfe von freigegebenen Zugriffssignaturen (SAS) gewähren.

Installieren des PowerShell-Moduls

Um eine Benutzerdelegierung SAS mit PowerShell zu erstellen, installieren Sie Version 1.10.0 oder später des Az.Storage-Moduls. Befolgen Sie diese Schritte, um die neueste Version des Moduls zu installieren:

  1. Deinstall alle früheren Installationen von Azure PowerShell:

    • Entferne alle bisherigen Installationen von Azure PowerShell aus Windows mit der Einstellung Apps & Features unter Einstellungen.
    • Entferne alle Azure-Module aus %Program Files%\WindowsPowerShell\Modules.
  2. Stelle sicher, dass du die neueste Version von PowerShellGet installiert hast. Öffnen Sie ein Windows-PowerShell-Fenster und führen Sie folgenden Befehl aus, um die neueste Version zu installieren:

    Install-Module PowerShellGet -Repository PSGallery -Force
    
  3. Schließen und öffnen Sie das PowerShell-Fenster nach der Installation von PowerShellGet erneut.

  4. Installiere die neueste Version von Azure PowerShell:

    Install-Module Az -Repository PSGallery -AllowClobber
    
  5. Stelle sicher, dass du Azure PowerShell Version 3.2.0 oder später installiert hast. Führen Sie folgenden Befehl aus, um die neueste Version des Azure Storage PowerShell-Moduls zu installieren:

    Install-Module -Name Az.Storage -Repository PSGallery -Force
    
  6. Schließen und öffnen Sie das PowerShell-Fenster erneut.

Um zu überprüfen, welche Version des Az.Storage-Moduls installiert ist, führen Sie folgenden Befehl aus:

Get-Module -ListAvailable -Name Az.Storage -Refresh

Weitere Informationen zum Installieren von Azure PowerShell finden Sie unter Install Azure PowerShell mit PowerShellGet.

Melden Sie sich bei Azure PowerShell mit Microsoft Entra ID an.

Rufen Sie den Befehl Connect-AzAccount auf, um sich mit Ihrem Microsoft Entra-Konto anzumelden:

Connect-AzAccount

Weitere Informationen zur Anmeldung mit PowerShell finden Sie unter Sign in with Azure PowerShell.

Zuweisen von Berechtigungen mit Azure RBAC

Um eine SAS für die Benutzerdelegierung aus Azure PowerShell zu erstellen, muss dem Microsoft Entra-Konto, mit dem Sie sich bei PowerShell anmelden, eine Rolle zugewiesen sein, die die Aktion Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey umfasst. Diese Berechtigung ermöglicht es diesem Microsoft Entra-Konto, den Benutzerdelegierungsschlüssel anzufordern. Der Benutzerdelegierungsschlüssel wird verwendet, um das Benutzerdelegations-SAS zu signieren. Die Rolle, die die Aktion Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey umfasst, muss auf der Ebene des Speicherkontos, der Ressourcengruppe oder des Abonnements zugewiesen werden. Weitere Informationen zu Azure RBAC-Berechtigungen zur Erstellung einer Benutzerdelegations-SAS finden Sie im Abschnitt "Berechtigungen mit Azure RBAC zuweisen unter "Create a user delegation SAS".

Wenn Sie nicht über ausreichende Berechtigungen verfügen, um Azure-Rollen einem Microsoft Entra-Sicherheitsprinzipal zuzuweisen, müssen Sie möglicherweise den Kontoinhaber oder -administrator bitten, die erforderlichen Berechtigungen zuzuweisen.

Das folgende Beispiel weist die Rolle Storage Blob Data Contributor zu, die die Aktion Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey umfasst. Die Rolle ist auf die Ebene des Speicherkontos beschränkt.

Denken Sie daran, die Platzhalterwerte in eckigen Klammern durch Ihre eigenen Werte zu ersetzen:

New-AzRoleAssignment -SignInName <email> `
    -RoleDefinitionName "Storage Blob Data Contributor" `
    -Scope  "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"

Weitere Informationen zu den integrierten Rollen, die die Aktion Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey enthalten, finden Sie unter In Azure integrierte Rollen.

Verwenden Sie Microsoft Entra-Zugangsdaten, um ein SAS abzusichern

Wenn Sie ein Benutzerdelegations-SAS mit Azure PowerShell erstellen, wird der Benutzerdelegierungsschlüssel, mit dem das SAS signiert wird, implizit für Sie erstellt. Die von dir angegebene Start- und Verfallszeit für das SAS werden ebenfalls als Start- und Verfallszeit für den Benutzer-Delegationsschlüssel verwendet.

Da der maximale Zeitraum, über den der Benutzerdelegierungsschlüssel gültig ist, 7 Tage ab dem Startdatum beträgt, sollten Sie eine Ablaufzeit für das SAS festlegen, die innerhalb von 7 Tagen nach dem Startdatum liegt. Das SAS ist nach Ablauf des Benutzerdelegierungsschlüssels ungültig, sodass ein SAS mit einer Verfallszeit von mehr als 7 Tagen immer noch nur 7 Tage gültig ist.

Um ein Benutzerdelegierungs-SAS für einen Container oder Blob mit Azure PowerShell zu erstellen, erstellt man zunächst ein neues Azure Storage-Kontextobjekt, das den Parameter -UseConnectedAccount spezifiziert. Der Parameter -UseConnectedAccount gibt an, dass der Befehl das Kontextobjekt unter dem Microsoft Entra-Konto erstellt, mit dem Sie sich angemeldet haben.

Denken Sie daran, die Platzhalterwerte in eckigen Klammern durch Ihre eigenen Werte zu ersetzen:

$ctx = New-AzStorageContext -StorageAccountName <storage-account> -UseConnectedAccount

Erstellen Sie ein Benutzerdelegations-SAS für einen Container

Um ein Benutzerdelegierungs-SAS-Token für einen Container zurückzugeben, rufen Sie den Befehl New-AzStorageContainerSASToken auf und geben das zuvor erstellte Azure Storage-Kontextobjekt ein.

Das folgende Beispiel liefert ein Benutzerdelegations-SAS-Token für einen Container zurück. Denken Sie daran, die Platzhalterwerte in Klammern durch Ihre eigenen Werte zu ersetzen:

New-AzStorageContainerSASToken -Context $ctx `
    -Name <container> `
    -Permission racwdl `
    -ExpiryTime <date-time>

Das zurückgegebene SAS-Token der Benutzerdelegation wird ähnlich sein:

?sv=2018-11-09&sr=c&sig=<sig>&skoid=<skoid>&sktid=<sktid>&skt=2019-08-05T22%3A24%3A36Z&ske=2019-08-07T07%3A
00%3A00Z&sks=b&skv=2018-11-09&se=2019-08-07T07%3A00%3A00Z&sp=rwdl

Erstellen Sie ein Benutzerdelegierungs-SAS für einen Blob

Um ein Benutzerdelegierungs-SAS-Token für einen Blob zurückzugeben, rufen Sie den Befehl New-AzStorageBlobSASToken auf und übergeben Sie das zuvor erstellte Azure Storage-Kontextobjekt.

Die folgende Syntax liefert eine Benutzerdelegierungs-SAS für einen Blob. Das Beispiel spezifiziert den -FullUri Parameter, der die Blob-URI mit angehängtem SAS-Token zurückgibt. Denken Sie daran, die Platzhalterwerte in Klammern durch Ihre eigenen Werte zu ersetzen:

New-AzStorageBlobSASToken -Context $ctx `
    -Container <container> `
    -Blob <blob> `
    -Permission racwd `
    -ExpiryTime <date-time>
    -FullUri

Die zurückgegebene SAS-URI für die Benutzerdelegierung sieht in etwa wie folgt aus:

https://storagesamples.blob.core.windows.net/sample-container/blob1.txt?sv=2018-11-09&sr=b&sig=<sig>&skoid=<skoid>&sktid=<sktid>&skt=2019-08-06T21%3A16%3A54Z&ske=2019-08-07T07%3A00%3A00Z&sks=b&skv=2018-11-09&se=2019-08-07T07%3A00%3A00Z&sp=racwd

Hinweis

Ein Benutzerdelegierungs-SAS unterstützt keine Definition von Berechtigungen mit einer gespeicherten Zugriffsrichtlinie.

Widerrufen einer Benutzerdelegierungs-SAS

Um eine Benutzerdelegierung SAS aus Azure PowerShell zu widerrufen, rufen Sie den Befehl Revoke-AzStorageAccountUserDelegationKeys auf. Dieser Befehl widerruft alle Benutzerdelegierungsschlüssel, die mit dem angegebenen Speicherkonto verknüpft sind. Alle mit diesen Schlüsseln verknüpften Shared-Access-Signaturen werden ungültig erklärt.

Denken Sie daran, die Platzhalterwerte in eckigen Klammern durch Ihre eigenen Werte zu ersetzen:

Revoke-AzStorageAccountUserDelegationKeys -ResourceGroupName <resource-group> `
    -StorageAccountName <storage-account>

Von Bedeutung

Sowohl der Benutzerdelegierungsschlüssel als auch die Azure-Rollenzuweisungen werden von Azure Storage zwischengespeichert, sodass es eine Verzögerung zwischen dem Beginn des Widerrufsprozesses und der Ungültigkeit einer bestehenden Benutzerdelegierung (SAS) geben kann.

Nächste Schritte