Skapa en SAS för användardelegering för en container eller blob med PowerShell
Med en signatur för delad åtkomst (SAS) kan du bevilja begränsad åtkomst till containrar och blobar i ditt lagringskonto. När du skapar en SAS anger du dess begränsningar, inklusive vilka Azure Storage-resurser en klient har åtkomst till, vilka behörigheter de har för dessa resurser och hur länge SAS är giltigt.
Varje SAS signeras med en nyckel. Du kan signera en SAS på något av två sätt:
- Med en nyckel som skapats med Microsoft Entra-autentiseringsuppgifter. En SAS som är signerad med Microsoft Entra-autentiseringsuppgifter är en SAS för användardelegering . En klient som skapar en SAS för användardelegering måste tilldelas en Azure RBAC-roll som innehåller åtgärden Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . Mer information finns i Skapa en SAS för användardelegering.
- Med lagringskontonyckeln. Både en tjänst-SAS och ett sas-konto signeras med lagringskontonyckeln. Klienten som skapar en tjänst-SAS måste antingen ha direkt åtkomst till kontonyckeln eller tilldelas behörigheten Microsoft.Storage/storageAccounts/listkeys/action . Mer information finns i Skapa en tjänst-SAS eller Skapa ett konto-SAS.
Kommentar
En SAS för användardelegering ger överlägsen säkerhet till en SAS som är signerad med lagringskontonyckeln. Microsoft rekommenderar att du använder en SAS för användardelegering när det är möjligt. Mer information finns i Bevilja begränsad åtkomst till data med signaturer för delad åtkomst (SAS).
Den här artikeln visar hur du använder Microsoft Entra-autentiseringsuppgifter för att skapa en SAS för användardelegering för en container eller blob med Azure PowerShell.
Om SAS för användardelegering
En SAS-token för åtkomst till en container eller blob kan skyddas med hjälp av antingen Microsoft Entra-autentiseringsuppgifter eller en kontonyckel. En SAS som skyddas med Microsoft Entra-autentiseringsuppgifter kallas sas för användardelegering eftersom den OAuth 2.0-token som används för att signera SAS begärs för användarens räkning.
Microsoft rekommenderar att du använder Microsoft Entra-autentiseringsuppgifter när det är möjligt som bästa praxis för säkerhet, i stället för att använda kontonyckeln, som är enklare att kompromettera. När din programdesign kräver signaturer för delad åtkomst använder du Microsoft Entra-autentiseringsuppgifter för att skapa en SAS för användardelegering för överlägsen säkerhet. Mer information om SAS för användardelegering finns i Skapa en SAS för användardelegering.
Varning
Alla klienter som har en giltig SAS kan komma åt data i ditt lagringskonto enligt sas-tillstånd. Det är viktigt att skydda en SAS från skadlig eller oavsiktlig användning. Använd diskretion när du distribuerar en SAS och ha en plan för att återkalla en komprometterad SAS.
Mer information om signaturer för delad åtkomst finns i Bevilja begränsad åtkomst till Azure Storage-resurser med hjälp av signaturer för delad åtkomst (SAS).
Installera PowerShell-modulen
Om du vill skapa en SAS för användardelegering med PowerShell installerar du version 1.10.0 eller senare av Az.Storage-modulen. Följ dessa steg för att installera den senaste versionen av modulen:
Avinstallera alla tidigare installationer av Azure PowerShell:
- Ta bort alla tidigare installationer av Azure PowerShell från Windows med hjälp av inställningen Appar och funktioner under Inställningar.
- Ta bort alla Azure-moduler från
%Program Files%\WindowsPowerShell\Modules
.
Kontrollera att du har den senaste versionen av PowerShellGet installerad. Öppna ett Windows PowerShell-fönster och kör följande kommando för att installera den senaste versionen:
Install-Module PowerShellGet -Repository PSGallery -Force
Stäng och öppna PowerShell-fönstret igen när du har installerat PowerShellGet.
Installera den senaste versionen av Azure PowerShell:
Install-Module Az -Repository PSGallery -AllowClobber
Kontrollera att du har installerat Azure PowerShell version 3.2.0 eller senare. Kör följande kommando för att installera den senaste versionen av Azure Storage PowerShell-modulen:
Install-Module -Name Az.Storage -Repository PSGallery -Force
Stäng och öppna PowerShell-fönstret igen.
Kör följande kommando för att kontrollera vilken version av Az.Storage-modulen som är installerad:
Get-Module -ListAvailable -Name Az.Storage -Refresh
Mer information om hur du installerar Azure PowerShell finns i Installera Azure PowerShell med PowerShellGet.
Logga in på Azure PowerShell med Microsoft Entra-ID
Anropa kommandot Anslut-AzAccount för att logga in med ditt Microsoft Entra-konto:
Connect-AzAccount
Mer information om hur du loggar in med PowerShell finns i Logga in med Azure PowerShell.
Tilldela behörigheter med Azure RBAC
Om du vill skapa en SAS för användardelegering från Azure PowerShell måste Microsoft Entra-kontot som används för att logga in på PowerShell tilldelas en roll som innehåller åtgärden Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . Med den här behörigheten kan Microsoft Entra-kontot begära användardelegeringsnyckeln. Användardelegeringsnyckeln används för att signera SAS för användardelegering. Rollen som tillhandahåller åtgärden Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey måste tilldelas på lagringskontots, resursgruppens eller prenumerationens nivå. Mer information om Azure RBAC-behörigheter för att skapa en SAS för användardelegering finns i avsnittet Tilldela behörigheter med Azure RBAC i Skapa en sas för användardelegering.
Om du inte har tillräcklig behörighet för att tilldela Azure-roller till ett Microsoft Entra-säkerhetsobjekt kan du behöva be kontoägaren eller administratören att tilldela nödvändiga behörigheter.
I följande exempel tilldelas rollen Storage Blob Data Contributor , som innehåller åtgärden Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . Rollen är begränsad till lagringskontots nivå.
Kom ihåg att ersätta platshållarvärden i vinkelparenteser med dina egna värden:
New-AzRoleAssignment -SignInName <email> `
-RoleDefinitionName "Storage Blob Data Contributor" `
-Scope "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"
Mer information om inbyggda roller som innehåller åtgärden Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey finns i Inbyggda Roller i Azure.
Använda Microsoft Entra-autentiseringsuppgifter för att skydda en SAS
När du skapar en SAS för användardelegering med Azure PowerShell skapas den användardelegeringsnyckel som används för att signera SAS implicit åt dig. Starttiden och förfallotiden som du anger för SAS används också som starttid och förfallotid för användarens delegeringsnyckel.
Eftersom det maximala intervallet för användardelegeringsnyckeln är giltig är 7 dagar från startdatumet, bör du ange en förfallotid för SAS som är inom 7 dagar från starttiden. SAS är ogiltigt när användardelegeringsnyckeln har upphört att gälla, så en SAS med en förfallotid på mer än 7 dagar är fortfarande bara giltig i 7 dagar.
Om du vill skapa en SAS för användardelegering för en container eller blob med Azure PowerShell skapar du först ett nytt Azure Storage-kontextobjekt och anger parametern -UseConnectedAccount
. Parametern -UseConnectedAccount
anger att kommandot skapar kontextobjektet under det Microsoft Entra-konto som du loggade in med.
Kom ihåg att ersätta platshållarvärden i vinkelparenteser med dina egna värden:
$ctx = New-AzStorageContext -StorageAccountName <storage-account> -UseConnectedAccount
Skapa en SAS för användardelegering för en container
Om du vill returnera en SAS-token för användardelegering för en container anropar du kommandot New-AzStorageContainerSASToken och skickar in azure storage-kontextobjektet som du skapade tidigare.
I följande exempel returneras en SAS-token för användardelegering för en container. Kom ihåg att ersätta platshållarvärdena inom hakparenteser med dina egna värden:
New-AzStorageContainerSASToken -Context $ctx `
-Name <container> `
-Permission racwdl `
-ExpiryTime <date-time>
Sas-token för användardelegering som returneras liknar:
?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
Skapa en SAS för användardelegering för en blob
Om du vill returnera en SAS-token för användardelegering för en blob anropar du kommandot New-AzStorageBlobSASToken och skickar in azure storage-kontextobjektet som du skapade tidigare.
Följande syntax returnerar en SAS för användardelegering för en blob. Exemplet anger parametern -FullUri
, som returnerar blob-URI:n med den SAS-token som läggs till. Kom ihåg att ersätta platshållarvärdena inom hakparenteser med dina egna värden:
New-AzStorageBlobSASToken -Context $ctx `
-Container <container> `
-Blob <blob> `
-Permission racwd `
-ExpiryTime <date-time>
-FullUri
Den sas-URI för användardelegering som returneras liknar:
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
Kommentar
En sas för användardelegering har inte stöd för att definiera behörigheter med en lagrad åtkomstprincip.
Återkalla en SAS för användardelegering
Om du vill återkalla en SAS för användardelegering från Azure PowerShell anropar du kommandot Revoke-AzStorageAccountUserDelegationKeys . Det här kommandot återkallar alla användardelegeringsnycklar som är associerade med det angivna lagringskontot. Alla signaturer för delad åtkomst som är associerade med dessa nycklar är ogiltiga.
Kom ihåg att ersätta platshållarvärden i vinkelparenteser med dina egna värden:
Revoke-AzStorageAccountUserDelegationKeys -ResourceGroupName <resource-group> `
-StorageAccountName <storage-account>
Viktigt!
Både användardelegeringsnyckeln och Azure-rolltilldelningarna cachelagras av Azure Storage, så det kan uppstå en fördröjning mellan när du initierar återkallningsprocessen och när en befintlig SAS för användardelegering blir ogiltig.