Erstellen einer SAS für die Benutzerdelegierung für einen Container oder ein 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 Benutzerdelegierungs-SAS. 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 SAS für die Benutzerdelegierung bietet überragende Sicherheit für eine SAS, die mit dem Speicherkontoschlüssel 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).

In diesem Artikel wird beschrieben, wie Sie Microsoft Entra-Anmeldeinformationen verwenden, um eine SAS für die Benutzerdelegierung für einen Container oder ein Blob mit Azure PowerShell zu erstellen.

Informationen zur SAS für die Benutzerdelegierung

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 Azure AD-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 Anwendungsentwurf Shared Access Signatures erfordert, verwenden Sie Azure AD-Anmeldeinformationen, um eine SAS für die Benutzerdelegierung zu erstellen und damit die Sicherheit zu erhöhen. Weitere Informationen zur SAS für die Benutzerdelegierung finden Sie unter Erstellen einer SAS für die Benutzerdelegierung.

Achtung

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. Verteilen Sie eine SAS mit Diskretion, und halten Sie einen Plan für den Widerruf einer kompromittierten SAS bereit.

Weitere Informationen zu SAS (Shared Access Signatures) finden Sie unter Gewähren von eingeschränktem Zugriff auf Azure Storage-Ressourcen mithilfe von SAS (Shared Access Signature).

Installieren des PowerShell-Moduls

Zum Erstellen einer SAS für die Benutzerdelegierung mithilfe von PowerShell installieren Sie Version 1.10.0 oder höher des Az.Storage-Moduls. Führen Sie die folgenden Schritte aus, um die neueste Version des Moduls zu installieren:

  1. Deinstallieren Sie alle älteren Installationen von Azure PowerShell:

    • Entfernen Sie alle früheren Installationen von Azure PowerShell mit der Einstellung Apps & Features (unter Einstellungen) aus Windows.
    • Entfernen Sie alle Azure-Module aus %Program Files%\WindowsPowerShell\Modules.
  2. Vergewissern Sie sich, dass die aktuelle Version von PowerShellGet installiert ist. Öffnen Sie ein Windows PowerShell-Fenster, und führen Sie den folgenden Befehl aus, um die neueste Version zu installieren:

    Install-Module PowerShellGet -Repository PSGallery -Force
    
  3. Schließen Sie nach dem Installieren von PowerShellGet das PowerShell-Fenster, und öffnen Sie es dann erneut.

  4. Installieren Sie die neueste Version von Azure PowerShell:

    Install-Module Az -Repository PSGallery -AllowClobber
    
  5. Vergewissern Sie sich, dass mindestens Version 3.2.0 von Azure PowerShell installiert ist. Führen Sie den 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 Sie das PowerShell-Fenster, und öffnen Sie es dann erneut.

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

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

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

Anmelden bei Azure PowerShell mit Microsoft Entra ID

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

Connect-AzAccount

Weitere Informationen zum Anmelden mit PowerShell finden Sie unter Anmelden mit 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 die Anmeldung bei PowerShell erfolgt, eine Rolle zugewiesen werden, die die Aktion Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey beinhaltet. Diese Berechtigung ermöglicht diesem Microsoft Entra-Konto, den Benutzerdelegierungsschlüssel anzufordern. Der Benutzerdelegierungsschlüssel wird zum Signieren der SAS für die Benutzerdelegierung verwendet. Die Rolle, die die Aktion Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey bereitstellt, muss auf der Ebene des Speicherkontos, der Ressourcengruppe oder des Abonnements zugewiesen werden. Weitere Informationen zu Azure RBAC-Berechtigungen zum Erstellen einer SAS für die Benutzerdelegierung finden Sie im Abschnitt Zuweisen von Berechtigungen mit Azure RBAC unter Erstellen einer SAS für die Benutzerdelegierung.

Wenn Sie nicht über ausreichende Berechtigungen zum Zuweisen von Azure-Rollen zu einem Microsoft Entra-Sicherheitsprinzipal verfügen, müssen Sie möglicherweise den Kontobesitzer oder den Administrator bitten, die erforderlichen Berechtigungen zuzuweisen.

Im folgenden Beispiel wird die Rolle Storage Blob Data Contributor (Speicherblob-Datenmitwirkender) zugewiesen, die die Aktion Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey beinhaltet. Die Rolle wird auf der Ebene des Speicherkontos festgelegt.

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 Integrierte Azure-Rollen.

Verwenden von Microsoft Entra-Anmeldeinformationen zum Sichern einer SAS

Wenn Sie eine SAS für die Benutzerdelegierung mit Azure PowerShell erstellen, wird der Benutzerdelegierungsschlüssel, der zum Signieren der SAS verwendet wird, implizit für Sie erstellt. Die Startzeit und die Ablaufzeit, die Sie für die SAS angeben, werden auch als Startzeit und Ablaufzeit für den Benutzerdelegierungsschlüssel verwendet.

Da das maximale Intervall, in dem der Benutzerdelegierungsschlüssel gültig ist, 7 Tage ab dem Startdatum beträgt, sollten Sie eine Ablaufzeit für die SAS angeben, die innerhalb von 7 Tagen der Startzeit liegt. Die SAS ist ungültig, nachdem der Benutzerdelegierungsschlüssel abgelaufen ist, sodass eine SAS mit einer Ablaufzeit von mehr als 7 Tagen trotzdem nur 7 Tage gültig ist.

Um eine SAS für die Benutzerdelegierung für einen Container oder ein Blob mit Azure PowerShell zu erstellen, erstellen Sie zunächst ein neues Azure Storage-Kontextobjekt und geben dabei den Parameter -UseConnectedAccount an. Der -UseConnectedAccount-Parameter 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 einer SAS für die Benutzerdelegierung für einen Container

Um ein SAS-Token für die Benutzerdelegierung für einen Container zurückzugeben, geben Sie den Befehl New-AzStorageContainerSASToken aus, und übergeben Sie dabei das Azure Storage-Kontextobjekt, das Sie zuvor erstellt haben.

Im folgenden Beispiel wird eine SAS für die Benutzerdelegierung für einen Container zurückgegeben. 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 für die Benutzerdelegierung ähnelt dem folgenden Token:

?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 einer SAS für die Benutzerdelegierung für ein Blob

Um ein SAS-Token für die Benutzerdelegierung für ein Blob zurückzugeben, geben Sie den Befehl New-AzStorageBlobSASToken aus, und übergeben Sie dabei das Azure Storage-Kontextobjekt, das Sie zuvor erstellt haben.

Die folgende Syntax gibt eine SAS für die Benutzerdelegierung für ein Blob zurück. Im Beispiel wird der -FullUri-Parameter angegeben, der den Blob-URI mit angefügtem 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

Der zurückgegebene SAS-URI für die Benutzerdelegierung ähnelt dem folgenden URI:

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

Eine SAS für die Benutzerdelegierung unterstützt nicht das Definieren von Berechtigungen mit einer gespeicherten Zugriffsrichtlinie.

Widerrufen einer SAS für die Benutzerdelegierung

Um eine SAS für die Benutzerdelegierung aus Azure PowerShell zu widerrufen, rufen Sie den Befehl Revoke-AzStorageAccountUserDelegationKeys auf. Mit diesem Befehl werden alle Benutzerdelegierungsschlüssel widerrufen, die dem angegebenen Speicherkonto zugeordnet sind. Alle mit diesen Schlüsseln verknüpften Shared Access Signatures werden für 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>

Wichtig

Sowohl der Benutzerdelegierungsschlüssel als auch die Azure-Rollenzuweisungen werden von Azure Storage zwischengespeichert. Daher kann es zu einer Verzögerung zwischen der Initiierung des Sperrprozesses und dem Zeitpunkt kommen, zu dem eine SAS für die Benutzerdelegierung ungültig wird.

Nächste Schritte