Skapa en SAS för användardelegering

Du kan skydda en SAS-token (signatur för delad åtkomst) för åtkomst till en container, katalog eller blob 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. Som bästa praxis för säkerhet rekommenderar vi att du använder Microsoft Entra autentiseringsuppgifter när det är möjligt, i stället för kontonyckeln, som lättare kan komprometteras. När programdesignen 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 att säkerställa bättre säkerhet.

Varje SAS signeras med en nyckel. Om du vill skapa en SAS för användardelegering måste du först begära en användardelegeringsnyckel som du sedan använder för att signera SAS. Användardelegeringsnyckeln motsvarar den kontonyckel som används för att signera en tjänst-SAS eller en konto-SAS, förutom att den förlitar sig på dina Microsoft Entra autentiseringsuppgifter. Om du vill begära användarens delegeringsnyckel anropar du åtgärden Hämta nyckel för användardelegering . Du kan sedan använda användarens delegeringsnyckel för att skapa SAS.

En SAS för användardelegering stöds för Azure Blob Storage och Azure Data Lake Storage Gen2. Lagrade åtkomstprinciper stöds inte för sas för användardelegering.

Varning

Signaturer för delad åtkomst är nycklar som ger behörighet till lagringsresurser, och du bör skydda dem på samma sätt som du skyddar en kontonyckel. 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. Åtgärder som använder signaturer för delad åtkomst bör endast utföras via en HTTPS-anslutning, och URI:er för signatur för delad åtkomst bör endast distribueras på en säker anslutning, till exempel HTTPS.

Information om hur du använder din kontonyckel för att skydda en SAS finns i Skapa en tjänst-SAS och Skapa ett konto-SAS.

Sas-stöd för användardelegering för katalogomfattande åtkomst

En SAS för användardelegering stöder katalogomfång (sr=d) när auktoriseringsversionen (sv) är 2020-02-10 eller senare och ett hierarkiskt namnområde (HNS) är aktiverat. Semantiken för katalogomfånget (sr=d) liknar containeromfånget (sr=c), förutom att åtkomsten är begränsad till en katalog och alla filer och underkataloger i den. När sr=d anges krävs även frågeparametern sdd .

Sträng-till-tecken-formatet för auktoriseringsversion 2020-02-10 är oförändrat.

Sas-stöd för användardelegering för en användar-OID

SAS för användardelegering stöder en valfri användarobjektidentifierare (OID) som finns i antingen parametern saoid eller suoid när auktoriseringsversionen (sv) är 2020-02-10 eller senare. Den här valfria parametern ger en förbättrad auktoriseringsmodell för klusterarbetsbelastningar med flera användare, till exempel Hadoop och Spark.

SAS-token kan begränsas till en specifik filsystemåtgärd och användare, vilket ger en mindre sårbar åtkomsttoken som är säkrare att distribuera över ett kluster med flera användare. Ett användningsfall för dessa funktioner är integreringen av Hadoop ABFS-drivrutinen med Apache Ranger.

Auktorisera en SAS för användardelegering

När en klient får åtkomst till en Blob Storage-resurs med en SAS för användardelegering auktoriseras begäran till Azure Storage med de Microsoft Entra autentiseringsuppgifter som användes för att skapa SAS. De behörigheter för rollbaserad åtkomstkontroll (RBAC) som beviljas för det Microsoft Entra kontot, tillsammans med de behörigheter som uttryckligen beviljas för SAS, avgör klientens åtkomst till resursen. Den här metoden ger ytterligare en säkerhetsnivå och hjälper dig att undvika att behöva lagra din kontoåtkomstnyckel med din programkod. Därför är det bästa sättet att skapa en SAS med hjälp av Microsoft Entra autentiseringsuppgifter.

Behörigheterna som beviljas till en klient som har SAS är skärningspunkten mellan de behörigheter som har beviljats till säkerhetsobjektet som begärde användarens delegeringsnyckel och de behörigheter som beviljats resursen på SAS-token med hjälp av signedPermissions fältet (sp). Om en behörighet som beviljas till säkerhetsobjektet via RBAC inte också beviljas på SAS-token beviljas inte den behörigheten till klienten som försöker använda SAS för att komma åt resursen. När du skapar en SAS för användardelegering kontrollerar du att de behörigheter som beviljas via RBAC och de behörigheter som beviljas via SAS-token båda överensstämmer med den åtkomstnivå som krävs av klienten.

Om du vill skapa en SAS för användardelegering gör du följande:

  1. Använd RBAC för att ge önskade behörigheter till säkerhetsobjektet som begär användardelegeringsnyckeln.
  2. Hämta en OAuth 2.0-token från Microsoft Entra ID.
  3. Använd token för att begära användarens delegeringsnyckel genom att anropa åtgärden Hämta användardelegeringsnyckel .
  4. Använd användardelegeringsnyckeln för att konstruera SAS-token med lämpliga fält.

Tilldela behörigheter med RBAC

Säkerhetsobjektet som begär användardelegeringsnyckeln måste ha rätt behörighet för att göra det. Ett Microsoft Entra ID säkerhetsobjekt kan vara en användare, en grupp, ett tjänsthuvudnamn eller en hanterad identitet.

Om du vill begära användarens delegeringsnyckel måste du tilldela åtgärden Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey till ett säkerhetsobjekt. Följande inbyggda RBAC-roller omfattar åtgärden Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey , antingen explicit eller som en del av en jokerteckendefinition:

Eftersom åtgärden Hämta nyckel för användardelegering fungerar på lagringskontots nivå måste åtgärden Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey vara begränsad till lagringskontots, resursgruppens eller prenumerationens nivå. Om säkerhetsobjektet har tilldelats någon av de tidigare angivna, inbyggda rollerna eller en anpassad roll som innehåller åtgärden Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey , på lagringskontots, resursgruppens eller prenumerationens nivå, kan säkerhetsobjektet sedan begära användardelegeringsnyckeln.

Om säkerhetsobjektet tilldelas en roll som tillåter dataåtkomst men är begränsad till nivån för en container kan du dessutom tilldela rollen Storage Blob Delegator till säkerhetsobjektet på nivån för lagringskontot, resursgruppen eller prenumerationen. Rollen Storage Blob Delegator ger säkerhetsobjektet behörighet att begära användardelegeringsnyckeln.

Mer information om RBAC-roller för Azure Storage finns i Auktorisera med Azure Active Directory.

Hämta en OAuth 2.0-token

Om du vill hämta användarens delegeringsnyckel begär du först en OAuth 2.0-token från Microsoft Entra ID. Ange token med ägarschemat för att auktorisera anropet till åtgärden Hämta användardelegeringsnyckel . Mer information om hur du begär en OAuth-token från Microsoft Entra ID finns i Autentiseringsflöden och programscenarier.

Begär användarens delegeringsnyckel

Ett anrop till åtgärden Hämta nyckel för användardelegering returnerar nyckeln som en uppsättning värden som används som parametrar på SAS-token för användardelegering. De här parametrarna beskrivs i referensen Hämta användardelegeringsnyckel och i nästa avsnitt"Skapa en SAS för användardelegering".

När en klient begär en användardelegeringsnyckel med hjälp av en OAuth 2.0-token returnerar Azure Storage användardelegeringsnyckeln för säkerhetsobjektets räkning. DEN SAS som skapas med användarens delegeringsnyckel beviljas de behörigheter som har beviljats till säkerhetsobjektet.

När du har användardelegeringsnyckeln kan du använda den för att skapa valfritt antal signaturer för delad åtkomst för användare under nyckelns livslängd. Användarens delegeringsnyckel är oberoende av OAuth 2.0-token som du använder för att hämta den, så token behöver inte förnyas så länge nyckeln fortfarande är giltig. Du kan ange att nyckeln är giltig i upp till sju dagar.

Skapa en SAS för användardelegering

I följande tabell sammanfattas de fält som stöds för en SAS-token för användardelegering. Efterföljande avsnitt innehåller ytterligare information om hur du anger dessa parametrar.

SAS-fältnamn SAS-tokenparameter Obligatorisk eller valfri Versionsstöd Beskrivning
signedVersion sv Krävs 2018-11-09 och senare Anger vilken version av tjänsten som används för att konstruera signaturfältet. Den anger också den tjänstversion som hanterar begäranden som görs med denna SAS.
signedResource sr Obligatorisk Alla Anger vilka blobresurser som är tillgängliga via signaturen för delad åtkomst.
signedStart st Valfritt Alla Valfritt. Den tid då signaturen för delad åtkomst blir giltig, uttryckt i något av de godkända ISO 8601 UTC-formaten. Om det här värdet utelämnas används den aktuella UTC-tiden som starttid. Mer information om accepterade UTC-format finns i Formatera DateTime-värden.
signedExpiry se Obligatorisk Alla Den tid då signaturen för delad åtkomst blir ogiltig, uttryckt i något av de godkända ISO 8601 UTC-formaten. Mer information om accepterade UTC-format finns i Formatera DateTime-värden.
signedPermissions sp Obligatorisk Alla Anger vilka åtgärder som en klient som har SAS kan utföra på resursen. Behörigheter kan kombineras.
signedIp sip Valfritt 2015-04-05 och senare Anger en IP-adress eller ett inklusivt intervall med IP-adresser som begäranden ska accepteras från. Tänk på att intervallet är inkluderande när du anger ett intervall. Endast IPv4-adresser stöds.

Exempel: sip=168.1.5.65 eller sip=168.1.5.60-168.1.5.70.
signedProtocol spr Valfritt 2015-04-05 och senare Anger det protokoll som tillåts för en begäran som görs med SAS. Inkludera det här fältet för att kräva att begäranden som görs med SAS-token använder HTTPS.
signedObjectId skoid Obligatorisk 2018-11-09 och senare Identifierar ett Microsoft Entra säkerhetsobjekt.
signedTenantId sktid Obligatorisk 2018-11-09 och senare Anger den Microsoft Entra klientorganisation där ett säkerhetsobjekt har definierats.
signedKeyStartTime skt Valfritt. 2018-11-09 och senare Värdet returneras av åtgärden Hämta användardelegeringsnyckel . Anger början på livslängden för användarens delegeringsnyckel, uttryckt i något av de godkända ISO 8601 UTC-formaten. Om värdet utelämnas antas den aktuella tiden. Mer information om godkända UTC-format finns i Formatera DateTime-värden.
signedKeyExpiryTime ske Obligatorisk 2018-11-09 och senare Värdet returneras av åtgärden Hämta användardelegeringsnyckel . Anger slutet av livslängden för användarens delegeringsnyckel, uttryckt i något av de godkända ISO 8601 UTC-formaten. Mer information om godkända UTC-format finns i Formatera DateTime-värden.
signedKeyVersion skv Obligatorisk 2018-11-09 och senare Värdet returneras av åtgärden Hämta användardelegeringsnyckel . Anger den version av lagringstjänsten som användes för att hämta användardelegeringsnyckeln. Det här fältet måste ange version 2018-11-09 eller senare.
signedKeyService sks Obligatorisk 2018-11-09 och senare Anger den tjänst som användarens delegeringsnyckel är giltig för. För närvarande stöds endast Blob Storage.
signedAuthorizedObjectId saoid Valfritt 2020-02-10 och senare Anger objekt-ID för ett Microsoft Entra säkerhetsobjekt som har auktoriserats av ägaren av användarens delegeringsnyckel för att utföra åtgärden som beviljats av SAS-token. Ingen ytterligare behörighetskontroll på POSIX-åtkomstkontrollistor (POSIX) utförs.
signedUnauthorizedObjectId suoid Valfritt 2020-02-10 och senare Anger objekt-ID för ett Microsoft Entra säkerhetsobjekt när ett hierarkiskt namnområde är aktiverat. Azure Storage utför en POSIX ACL-kontroll mot objekt-ID:t innan åtgärden godkänns.
signedCorrelationId scid Valfritt 2020-02-10 och senare Korrelera lagringsgranskningsloggarna med de granskningsloggar som används av huvudkontot som genererar och distribuerar SAS.
signedDirectoryDepth sdd Krävs när sr=d 2020-02-10 och senare Anger antalet kataloger i rotmappen för katalogen som anges i canonicalizedResource fältet för sträng-till-tecken.
signedEncryptionScope ses Valfritt 2020-12-06 och senare Anger krypteringsomfånget som ska användas för att kryptera innehållet i begäran.
signature sig Obligatorisk Alla Signaturen är en hash-baserad kod för meddelandeautentisering (HMAC) som beräknas över sträng-till-tecken och nyckel med hjälp av SHA256-algoritmen och sedan kodas med hjälp av Base64-kodning.
Cache-Control svarsrubrik rscc Valfritt 2013-08-15 och senare Azure Storage anger Cache-Control svarshuvudet till det värde som anges på SAS-token.
Content-Disposition svarsrubrik rscd Valfritt 2013-08-15 och senare Azure Storage anger Content-Disposition svarshuvudet till det värde som anges på SAS-token.
Content-Encoding svarsrubrik rsce Valfritt 2013-08-15 och senare Azure Storage anger Content-Encoding svarshuvudet till det värde som anges på SAS-token.
Content-Language svarsrubrik rscl Valfritt 2013-08-15 och senare Azure Storage anger Content-Language svarshuvudet till det värde som anges på SAS-token.
Content-Type svarsrubrik rsct Valfritt 2013-08-15 och senare Azure Storage anger Content-Type svarshuvudet till det värde som anges på SAS-token.

Ange fältet signerad version

Det obligatoriska signedVersion fältet (sv) anger tjänstversionen för signaturen för delad åtkomst. Det här värdet anger vilken version av tjänsten som används för att konstruera fältet och anger den tjänstversion som hanterar en begäran som görs med signaturen signature för delad åtkomst. Värdet för fältet sv måste vara version 2018-11-09 eller senare.

Ange det signerade resursfältet

Det obligatoriska signedResource fältet (sr) anger vilka resurser som är tillgängliga via signaturen för delad åtkomst. I följande tabell beskrivs hur du refererar till en blob-, container- eller katalogresurs i SAS-token:

Resurs Parametervärde Versioner som stöds Description
Blob b Alla Ger åtkomst till blobens innehåll och metadata.
Blobversion Bv 2018-11-09 och senare Ger åtkomst till innehållet och metadata för blobversionen, men inte basbloben.
Ögonblicksbild av blob Bs 2018-11-09 och senare Ger åtkomst till innehållet och metadata för blobögonblicksbilden, men inte basbloben.
Container c Alla Ger åtkomst till innehållet och metadata för alla blobar i containern och till listan över blobar i containern.
Katalog d 2020-02-10 och senare Ger åtkomst till innehållet och metadata för alla blobar i katalogen och till listan över blobar i katalogen, i ett lagringskonto med ett hierarkiskt namnområde aktiverat. Om en katalog anges för fältet signedResource krävs även parametern signedDirectoryDepth (sdd). En katalog finns alltid i en container.

Ange varaktigheten för signaturens giltighet

Fälten signedStart (st) och signedExpiry (se) anger start- och förfallotiderna för SAS. Fältet signedExpiry är obligatoriskt. Fältet signedStart är valfritt. Om den utelämnas används den aktuella UTC-tiden som starttid.

För en SAS för användardelegering bör start- och förfallotiderna för SAS ligga inom det intervall som har definierats för användarens delegeringsnyckel. Om en klient försöker använda en SAS när användardelegeringsnyckeln har upphört att gälla misslyckas SAS med ett auktoriseringsfel, oavsett om SJÄLVA SAS fortfarande är giltigt.

Mer information om accepterade UTC-format finns i Formatera DateTime-värden.

Ange behörigheter

De behörigheter som anges för signedPermissions fältet (sp) på SAS-token anger vilka åtgärder en klient som har SAS kan utföra på resursen.

Behörigheter kan kombineras för att tillåta att en klient utför flera åtgärder med samma SAS. När du skapar SAS måste du inkludera behörigheter i följande ordning:

racwdxltmeop

Exempel på giltiga behörighetsinställningar för en container är rw, rd, rl, wd, och wlrl. Exempel på ogiltiga inställningar är wr, dr, lroch dw. Det är inte tillåtet att ange en behörighetsbeteckning mer än en gång.

En sas för användardelegering kan inte bevilja åtkomst till vissa åtgärder:

  • Containrar kan inte skapas, tas bort eller visas.
  • Containermetadata och egenskaper kan inte läsas eller skrivas.
  • Containrar kan inte hyras.

Om du vill skapa en SAS som ger åtkomst till dessa åtgärder använder du ett konto-SAS. Mer information finns i Skapa ett konto-SAS.

De behörigheter som stöds för varje resurstyp beskrivs i följande tabell:

Behörighet URI-symbol Resurs Versionsstöd Tillåtna åtgärder
Läsa r Container
Katalog
Blob
Alla Läs innehållet, blocklistan, egenskaperna och metadata för alla blobar i containern eller katalogen. Använd en blob som källa för en kopieringsåtgärd.
Lägg till a Container
Katalog
Blob
Alla Lägg till ett block i en tilläggsblob.
Skapa c Container
Katalog
Blob
Alla Skriv en ny blob, ögonblicksbild av en blob eller kopiera en blob till en ny blob.
Skriva w Container
Katalog
Blob
Alla Skapa eller skriva innehåll, egenskaper, metadata eller blocklista. Ögonblicksbild eller lånar bloben. Ändra storlek på bloben (endast sidblob). Använd blobben som mål för en kopieringsåtgärd.
Ta bort d Container
Katalog
Blob
Alla Ta bort en blob. För version 2017-07-29 och senare tillåter borttagningsbehörigheten även att ett lån för en blob bryts. Mer information finns i åtgärden Låna blob .
Ta bort version x Container
Blob
2019-12-12 och senare Ta bort en blobversion.
Permanent borttagning y Blob 2020-02-10 och senare Ta bort en ögonblicksbild eller version av bloben permanent.
Lista l Container
Katalog
Alla Visa en lista över blobar som inte rekursivt.
Taggar t Blob 2019-12-12 och senare Läsa eller skriva taggarna på en blob.
Flytta m Container
Katalog
Blob
2020-02-10 och senare Flytta en blob eller en katalog och dess innehåll till en ny plats. Den här åtgärden kan också begränsas till ägaren av den underordnade bloben, katalogen eller den överordnade katalogen om parametern saoid ingår i SAS-token och fästbiten anges i den överordnade katalogen.
Genomförande e Container
Katalog
Blob
2020-02-10 och senare Hämta systemegenskaperna och hämta POSIX-ACL för en blob om det hierarkiska namnområdet är aktiverat för lagringskontot. Om det hierarkiska namnområdet är aktiverat och anroparen är ägare till en blob, ger den här behörigheten möjlighet att ange ägande grupp, POSIX-behörigheter och POSIX-ACL för bloben. Det tillåter inte anroparen att läsa användardefinierade metadata.
Ägarskap o Container
Katalog
Blob
2020-02-10 och senare När det hierarkiska namnområdet är aktiverat gör den här behörigheten att anroparen kan ange ägare eller ägande grupp, eller att fungera som ägare när anroparen byter namn på eller tar bort en katalog eller blob i en katalog som har fästbiten inställd.
Behörigheter P Container
Katalog
Blob
2020-02-10 och senare När det hierarkiska namnområdet är aktiverat tillåter den här behörigheten anroparen att ange behörigheter och POSIX-ACL:er för kataloger och blobar.
Ange oföränderlighetsprincip i Container
Blob
2020-06-12 och senare Ange eller ta bort oföränderlighetsprincipen eller det juridiska undantaget för en blob.

Ange en IP-adress eller ETT IP-intervall

Det valfria signedIp fältet (sip) anger en offentlig IP-adress eller ett intervall med offentliga IP-adresser som begäranden ska accepteras från. Om DEN IP-adress som begäran kommer från inte matchar IP-adressen eller adressintervallet som anges på SAS-token, är begäran inte auktoriserad. Endast IPv4-adresser stöds.

När du anger ett intervall med IP-adresser är intervallet inkluderande. Om du till exempel anger sip=168.1.5.65 eller sip=168.1.5.60-168.1.5.70 använder SAS begränsas begäran till dessa IP-adresser.

I följande tabell beskrivs om fältet ska inkluderas signedIp på en SAS-token för ett visst scenario, baserat på klientmiljön och lagringskontots plats.

Klientmiljö Lagringskontoplats Rekommendation
Klient som körs i Azure I samma region som klienten En SAS som tillhandahålls till klienten i det här scenariot bör inte innehålla en utgående IP-adress för fältet signedIp . Begäranden som du gör från samma region med hjälp av en SAS med en angiven utgående IP-adress misslyckas.

Använd i stället ett virtuellt Azure-nätverk för att hantera nätverkssäkerhetsbegränsningar. Begäranden till Azure Storage från samma region sker alltid via en privat IP-adress. Mer information finns i Konfigurera Azure Storage-brandväggar och virtuella nätverk.
Klient som körs i Azure I en annan region än klienten En SAS som tillhandahålls till klienten i det här scenariot kan innehålla en offentlig IP-adress eller adressintervall för fältet signedIp . Begäranden som du gör med SAS måste komma från den angivna IP-adressen eller adressintervallet.
Klienten körs lokalt eller i en annan molnmiljö I alla Azure-regioner En SAS som tillhandahålls till klienten i det här scenariot kan innehålla en offentlig IP-adress eller adressintervall för fältet signedIp . Begäranden som du gör med SAS måste komma från den angivna IP-adressen eller adressintervallet.

Om begäran skickas via en proxy eller gateway anger du den offentliga utgående IP-adressen för den proxyn eller gatewayen signedIp för fältet.

Ange HTTP-protokollet

Det valfria signedProtocol fältet (spr) anger det protokoll som tillåts för begäranden som görs med SAS. Möjliga värden är både HTTPS och HTTP (https,http) eller endast HTTPS (https). Standardvärdet är https,http.

Anteckning

Det går inte att ange HTTP för fältet spr .

Ange det signerade objekt-ID:t

Fältet signedObjectId (skoid) krävs för en SAS för användardelegering. Åtgärden Hämta nyckel för användardelegering returnerar det här värdet som en del av svaret. Det signerade objekt-ID:t är ett GUID-värde som hanterar den oföränderliga identifieraren för ett säkerhetsobjekt i Microsofts identitetsplattform.

Ange det signerade klient-ID:t

Fältet signedTenantId (sktid) krävs för en SAS för användardelegering. Åtgärden Hämta nyckel för användardelegering returnerar det här värdet som en del av svaret. Det signerade klient-ID:t är ett GUID-värde som representerar den Microsoft Entra klientorganisation där ett säkerhetsobjekt har definierats.

Ange den signerade nyckelns starttid

Det valfria signedKeyStartTime fältet (skt) anger början på livslängden för användarens delegeringsnyckel i ISO-datumformat. Åtgärden Hämta nyckel för användardelegering returnerar det här värdet som en del av svaret. Om starttiden utelämnas antas den signerade nyckelstarttiden vara den aktuella tiden.

Ange förfallotid för signerad nyckel

Fältet signedKeyExpiryTime (ske) krävs för en SAS för användardelegering i ISO-datumformat. Åtgärden Hämta nyckel för användardelegering returnerar det här värdet som en del av svaret. Den signerade nyckelns förfallotid anger slutet på livslängden för användarens delegeringsnyckel. Värdet för förfallotiden kan vara högst sju dagar från starttiden för SAS.

Ange den signerade nyckeltjänsten

Fältet signedKeyService (sks) krävs för en SAS för användardelegering. Åtgärden Hämta nyckel för användardelegering returnerar det här värdet som en del av svaret. Fältet signerad nyckeltjänst anger den tjänst som användarens delegeringsnyckel är giltig för. Värdet för det signerade nyckeltjänstfältet för Blob Storage är b.

Ange den signerade nyckelversionen

Fältet signedkeyversion (skv) krävs för en SAS för användardelegering. Åtgärden Hämta nyckel för användardelegering returnerar det här värdet som en del av svaret. Fältet signedkeyversion anger den lagringstjänstversion som används för att hämta användardelegeringsnyckeln. Det här fältet måste ange version 2018-11-09 eller senare.

Ange ett signerat objekt-ID för ett säkerhetsobjekt

De valfria signedAuthorizedObjectId fälten (saoid) och signedUnauthorizedObjectId (suoid) möjliggör integrering med Apache Hadoop och Apache Ranger för Azure Data Lake Storage Gen2 arbetsbelastningar. Använd något av dessa fält på SAS-token för att ange objekt-ID för ett säkerhetsobjekt:

  • Fältet saoid anger objekt-ID:t för ett Microsoft Entra säkerhetsobjekt som har auktoriserats av användarens delegeringsnyckel för att utföra åtgärden som beviljas av SAS-token. Azure Storage validerar SAS-token och ser till att ägaren av användardelegeringsnyckeln har de behörigheter som krävs innan Azure Storage beviljar åtkomst. Ingen ytterligare behörighetskontroll av POSIX-ACL:er utförs.
  • Fältet suoid anger objekt-ID för ett Microsoft Entra säkerhetsobjekt när ett hierarkiskt namnområde är aktiverat för ett lagringskonto. Fältet suoid är endast giltigt för konton som har ett hierarkiskt namnområde. När fältet suoid ingår i SAS-token utför Azure Storage en POSIX ACL-kontroll mot objekt-ID:t innan åtgärden godkänns. Om den här ACL-kontrollen inte lyckas misslyckas åtgärden. Ett hierarkiskt namnområde måste vara aktiverat för lagringskontot om fältet suoid ingår i SAS-token. Annars misslyckas behörighetskontrollen med ett auktoriseringsfel.

Objekt-ID:t för säkerhetsobjektet som begär användardelegeringsnyckeln samlas in i det obligatoriska skoid fältet. Om du vill ange ett objekt-ID för SAS-token med fältet eller suoid måste säkerhetsobjektet som identifieras i skoid fältet tilldelas en RBAC-roll som innehåller Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action eller Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action.saoid Mer information om dessa åtgärder finns i Åtgärder för Azure-resursprovider.

Genom att ange objekt-ID:t i saoid fältet eller suoid begränsar du även åtgärder som är relaterade till katalog- eller blobägarskap på följande sätt:

  • Om en åtgärd skapar en katalog eller blob anger Azure Storage katalogens eller blobens ägare till det värde som anges av objekt-ID:t. Om objekt-ID:t inte har angetts ställer Azure Storage in ägaren av katalogen eller blobben till det värde som anges av parametern skoid .
  • Om fästbiten anges i den överordnade katalogen och åtgärden tar bort eller byter namn på en katalog eller blob, måste objekt-ID:t för ägaren till den överordnade katalogen eller resursens ägare matcha värdet som anges av objekt-ID:t.
  • Om en åtgärd anger ägaren för en katalog eller blob och x-ms-owner huvudet har angetts måste värdet som anges av objekt-ID:t matcha det värde som anges av x-ms-owner huvudet.
  • Om en åtgärd anger gruppen för en katalog eller blob och x-ms-group huvudet anges, måste värdet som anges av objekt-ID vara medlem i den grupp som anges av x-ms-group huvudet.
  • Om en åtgärd anger behörigheter eller ACL för en katalog eller blob måste ett av följande två villkor också uppfyllas:
    • Värdet som anges för objekt-ID:t måste vara ägare till katalogen eller bloben.
    • Värdet för fältet signedPermissions (sp) måste innehålla behörigheten Ownership (o) utöver behörigheten Permissions (p).

Objekt-ID:t som anges i saoid fältet eller suoid ingår i diagnostikloggarna när du gör begäranden med hjälp av SAS-token.

Fältet saoid eller suoid stöds endast om signedVersion fältet (sv) är inställt på version 2020-02-10 eller senare. Endast ett av dessa fält kan ingå i SAS-token.

Ange ett korrelations-ID

Fältet signedCorrelationId (scid) anger ett korrelations-ID som kan användas för att korrelera lagringsgranskningsloggarna med de granskningsloggar som används av huvudkontot som genererar och distribuerar SAS. Till exempel har en betrodd auktoriseringstjänst vanligtvis en hanterad identitet som autentiserar och auktoriserar användare, genererar en SAS, lägger till en post i den lokala granskningsloggen och returnerar SAS till en användare som sedan kan använda SAS för att komma åt Azure Storage-resurser. Genom att inkludera ett korrelations-ID i både den lokala granskningsloggen och lagringsgranskningsloggen tillåter du att dessa händelser korreleras senare. Värdet är ett GUID utan klammerparenteser och med gemener.

Det här fältet stöds med version 2020-02-10 och senare.

Ange katalogdjupet

Om fältet signedResource anger en katalog (sr=d) måste du också ange signedDirectoryDepth fältet (sdd) för att ange antalet underkataloger under rotkatalogen. Värdet för fältet sdd måste vara ett icke-negativt heltal.

Rotkatalogen https://{account}.blob.core.windows.net/{container}/ har till exempel ett djup på 0. Varje underkatalog i rotkatalogen ökar djupet med 1. Katalogen https://{account}.blob.core.windows.net/{container}/d1/d2 har ett djup på 2.

Det här fältet stöds med version 2020-02-10 och senare.

Ange frågeparametrar för att åsidosätta svarshuvuden

Om du vill definiera värden för vissa svarshuvuden som ska returneras när signaturen för delad åtkomst används i en begäran kan du ange svarshuvuden i frågeparametrar. Svarshuvudena och motsvarande frågeparametrar är följande:

Svarshuvudnamn Motsvarande SAS-frågeparameter
Cache-Control rscc
Content-Disposition rscd
Content-Encoding rsce
Content-Language rscl
Content-Type rsct

Om du till exempel anger rsct=binary frågeparametern för en SAS-token Content-Type är svarshuvudet inställt binarypå . Det här värdet åsidosätter huvudvärdet Content-Type som lagras för blobben för en begäran med den här signaturen för delad åtkomst.

Om du skapar en signatur för delad åtkomst som anger svarshuvuden som frågeparametrar måste du inkludera de svarshuvudena i sträng-till-signering som används för att konstruera signatursträngen. Mer information finns i avsnittet "Ange signaturen".

Ange krypteringsomfånget

Fältet signed encryption scope (ses) anger ett krypteringsomfång som klientprogrammet använder när du laddar upp blobar med hjälp av SAS-token via put blob-åtgärden . Fältet signed encryption scope stöds när fältet signerad version (sv) på SAS-token är version 2020-12-06 eller senare. Om fältet signerad version anger en version som är tidigare än den version som stöds returnerar tjänsten felsvarskoden 403 (Förbjuden).

Om standardkrypteringsomfånget har angetts för containern eller filsystemet ses respekterar fältet containerkrypteringsprincipen. Om det finns ett matchningsfel mellan ses frågeparametern och x-ms-default-encryption-scope huvudet och x-ms-deny-encryption-scope-override huvudet är inställt truepå returnerar tjänsten felsvarskoden 403 (Förbjuden).

x-ms-encryption-scope Om både rubriken och ses frågeparametern anges i PUT-begäran och det finns ett matchningsfel returnerar tjänsten felsvarskoden 400 (felaktig begäran).

Ange signaturen

Fältet signature (sig) används för att auktorisera en begäran som görs av en klient med signaturen för delad åtkomst. Sträng-till-tecken är en unik sträng som konstrueras från de fält som måste verifieras för att godkänna begäran. Signaturen är en HMAC som beräknas över sträng-till-signering och -nyckel med hjälp av SHA256-algoritmen och sedan kodas med hjälp av Base64-kodning.

Skapa signatursträngen för en SAS för användardelegering genom att skapa sträng-till-signering från fälten som utgör begäran, koda strängen som UTF-8 och sedan beräkna signaturen med hjälp av HMAC-SHA256-algoritmen. Fälten som ingår i sträng-till-signera måste vara URL-avkodade.

Vilka fält som krävs i sträng-till-signera beror på vilken tjänstversion som används för auktorisering (sv fält). I följande avsnitt beskrivs sträng-till-signering-konfigurationen för versioner som stöder SAS för användardelegering.

Version 2020-12-06 och senare

Sträng-till-signera för auktoriseringsversion 2020-12-06 och senare har följande format:

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                signedEncryptionScope + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

Version 2020-02-10

Sträng-till-signera för auktoriseringsversion 2020-02-10 har följande format:

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

Tidigare versioner än 2020-02-10

Sträng-till-tecken för auktoriseringsversioner som är tidigare än 2020-02-10 har följande format:

StringToSign =  signedPermissions + "\n" +  
                signedStart + "\n" +  
                signedExpiry + "\n" +  
                canonicalizedResource + "\n" +  
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +  
                signedProtocol + "\n" +  
                signedVersion + "\n" +  
                signedResource + "\n" +
                rscc + "\n" +
                rscd + "\n" +  
                rsce + "\n" +  
                rscl + "\n" +  
                rsct

Kanonisk resurs

Delen canonicalizedResource av strängen är en kanonisk sökväg till den signerade resursen. Den måste innehålla Blob Storage-slutpunkten och resursnamnet, och den måste vara URL-avkodad. En blobsökväg måste innehålla dess container. En katalogsökväg måste innehålla antalet underkataloger som motsvarar parametern sdd .

Den kanoniska resurssträngen för en container måste utelämna det avslutande snedstrecket (/) för en SAS som ger åtkomst till containern.

I följande exempel visas hur du konstruerar canonicalizedResource delen av strängen, beroende på resurstyp.

Containerexempel (Azure Blob Storage)
URL = https://myaccount.blob.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
Blobexempel (Azure Blob Storage)
URL = https://myaccount.blob.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  
Containerexempel (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
Katalogexempel (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music/instruments/guitar/  
canonicalizedResource = "/blob/myaccount/music/instruments/guitar/"  
Blobexempel (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  

Valfria fält

Om ett fält är valfritt och inte tillhandahålls som en del av SAS-token anger du en tom sträng för fältet. Se till att inkludera det nya radtecknet (\n) efter den tomma strängen.

SAS-exempel för användardelegering

I följande exempel visas en blob-URI med en SAS-token för användardelegering tillagd. SAS-token för användardelegering ger läs- och skrivbehörighet till bloben.

https://myaccount.blob.core.windows.net/sascontainer/blob1.txt?sp=rw&st=2023-05-24T01:13:55Z&se=2023-05-24T09:13:55Z&skoid=<object-id>&sktid=<tenant-id>&skt=2023-05-24T01:13:55Z&ske=2023-05-24T09:13:55Z&sks=b&skv=2022-11-02&sip=168.1.5.60-168.1.5.70&spr=https&sv=2022-11-02&sr=b&sig=<signature>

Varje del av URI:n beskrivs i följande tabell:

Name SAS-del Description
Resurs-URI https://myaccount.blob.core.windows.net/sascontainer/blob1.txt Blobens adress. Vi rekommenderar starkt att du använder HTTPS.
Avgränsare ? Avgränsaren som föregår frågesträngen. Avgränsare är inte en del av SAS-token.
Behörigheter sp=rw Behörigheterna som beviljas av SAS är Läs (r) och Skriv (w).
Starttid st=2023-05-24T01:13:55Z Anges i UTC-tid. Om du vill att SAS ska vara giltigt omedelbart utelämnar du starttiden.
Förfallotid se=2023-05-24T09:13:55Z Anges i UTC-tid.
Objekt-ID skoid=<object-id> Ett Microsoft Entra säkerhetsobjekt.
Klientorganisations-ID sktid=<tenant-id> Den Microsoft Entra klientorganisation där säkerhetsobjektet är registrerat.
Nyckelstarttid skt=2023-05-24T01:13:55Z Början av livslängden för användardelegeringsnyckeln.
Nyckel förfallotid ske=2023-05-24T09:13:55Z Slutet av livslängden för användardelegeringsnyckeln.
Nyckeltjänst sks=b Endast Blob-tjänsten stöds för tjänstvärdet.
Nyckelversion skv=2022-11-02 Lagringstjänstversionen som användes för att hämta användarens delegeringsnyckel.
IP-intervall sip=168.1.5.60-168.1.5.70 Det intervall med IP-adresser som en begäran kommer att accepteras från.
Protokoll spr=https Endast begäranden som använder HTTPS är tillåtna.
Blob Service-version sv=2022-11-02 För Azure Storage version 2012-02-12 och senare anger den här parametern vilken version som ska användas.
Resurs sr=b Resursen är en blob.
Signatur sig=<signature> Används för att auktorisera åtkomst till bloben. Signaturen är en HMAC som beräknas över en sträng-till-signering och -nyckel med hjälp av SHA256-algoritmen och sedan kodas med hjälp av Base64-kodning.

Återkalla en SAS för användardelegering

Om du anser att en SAS har komprometterats bör du återkalla den. Du kan återkalla en SAS för användardelegering antingen genom att återkalla användardelegeringsnyckeln eller genom att ändra eller ta bort RBAC-rolltilldelningar för säkerhetsobjektet som används för att skapa SAS.

Viktigt

Både användardelegeringsnyckeln och RBAC-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.

Återkalla användarens delegeringsnyckel

Du kan återkalla användarens delegeringsnyckel genom att anropa åtgärden Återkalla användardelegeringsnycklar . När du återkallar användarens delegeringsnyckel blir alla signaturer för delad åtkomst som förlitar sig på den nyckeln ogiltiga. Du kan sedan anropa åtgärden Hämta användardelegeringsnyckel igen och använda nyckeln för att skapa nya signaturer för delad åtkomst. Det här är det snabbaste sättet att återkalla en SAS för användardelegering.

Ändra eller ta bort rolltilldelningar

Du kan ändra eller ta bort RBAC-rolltilldelningen för säkerhetsobjektet som används för att skapa SAS. När en klient använder SAS för att komma åt en resurs verifierar Azure Storage att säkerhetsobjektet vars autentiseringsuppgifter användes för att skydda SAS har de behörigheter som krävs för resursen.

Se även