Använda signaturer för delad åtkomst för att delegera åtkomst till Azure Storage

Slutförd

Genom att använda en signatur för delad åtkomst (SAS) kan du delegera åtkomst till dina resurser. Klienterna får inte direkt åtkomst till autentiseringsuppgifterna för ditt lagringskonto, och du styr på en detaljerad nivå vad de får åtkomst till.

När du har undersökt alla auktoriseringsalternativ bestämmer du dig för att titta på en SAS i mer detalj. Du vill skapa och använda en SAS i en C# .NET-webbapp. Du vill också följa Microsofts bästa praxis om när och hur du använder en SAS.

I den här lektionen går du igenom hur en SAS fungerar på teknisk nivå och vilken C#-kod du måste skriva för att använda den.

Så här fungerar signaturer för delad åtkomst

En SAS har två komponenter: en URI som pekar på en eller flera lagringsresurser och en token som anger hur klienten kan komma åt resurserna.

I en enskild URI såsom https://medicalrecords.blob.core.windows.net/patient-images/patient-116139-nq8z7f.jpg?sp=r&st=2020-01-20T11:42:32Z&se=2020-01-20T19:42:32Z&spr=https&sv=2019-02-02&sr=b&sig=SrW1HZ5Nb6MbRzTbXCaPm%2BJiSEn15tC91Y4umMPwVZs%3D kan du dela upp URI:n från SAS-token på följande sätt:

URI SAS-token
https://medicalrecords.blob.core.windows.net/patient-images/patient-116139-nq8z7f.jpg? sp=r&st=2020-01-20T11:42:32Z&se=2020-01-20T19:42:32Z&spr=https&sv=2019-02-02&sr=b&sig=SrW1HZ5Nb6MbRzTbXCaPm%2BJiSEn15tC91Y4umMPwVZs%3D

SAS-token innehåller följande komponenter eller frågeparametrar.

Frågeparameter Fältnamn Exempel beskrivning
Sp signerad behörighet sp=r Anger en eller flera åtgärder som klienten kan utföra. Värden kan sammansattas: a (add), c (create), d (delete), l (list), r (read) och w (write). sp=r är skrivskyddad. sp=acdlrw ger alla tillgängliga rättigheter.
St starttid st=2020-01-20T11:42:32Z Datumet och tiden då åtkomsten börjar.
se förfallotid se=2020-01-20T19:42:32Z Datumet och tiden då åtkomsten slutar. Baserat på startdatumet ger det här exemplet åtta timmars åtkomst.
Spr signerat protokoll spr=https Protokollet som tillåts för en begäran som görs med SAS. Ett valfritt fält som har möjliga värden för både HTTPS och HTTP (standardvärdet) eller endast HTTPS.
sv signerad version sv=2019-02-02 Tjänstversionen av lagrings-API:et som ska användas.
sr resursomfång sr=b Den typ av lagring som används. Tillgängliga värden är b (blob), c (container), d (katalog), f (fil), s (resurs)
sig Signatur sig=SrW1... wVZs%3D Den kryptografiska signaturen.

Signaturen signeras med lagringskontonyckeln när du skapar en signatur för delad åtkomst för en tjänst eller ett konto. Om du använder ett Microsoft Entra-säkerhetsobjekt med åtkomst till lagringen skapar du en signatur för delad åtkomst för användardelegering. Du beviljar även objektet åtgärden Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey.

Skapa en SAS i .NET

Eftersom ditt företag ger åtkomst till tredje part kan du inte använda Microsoft Entra-ID för att skapa tjänstens huvudnamn för varje tredje part som kräver åtkomst till medicinska bilder. Din app använder en lagringskontonyckel för varje enskild fil. Följande steg visar hur du skapar en SAS med C#-kod.

Skapa en blobcontainerklient för att ansluta till lagringskontot i Azure

BlobContainerClient container = new BlobContainerClient( "ConnectionString", "Container" );

Hämta den blob som du vill skapa en SAS-token för och skapa en BlobClient

foreach (BlobItem blobItem in container.GetBlobs())
{
    BlobClient blob = container.GetBlobClient(blobItem.Name);
}

Skapa ett BlobSasBuilder-objekt för den blob som du använder för att generera SAS-token

BlobSasBuilder sas = new BlobSasBuilder
{
    BlobContainerName = blob.BlobContainerName,
    BlobName = blob.Name,
    Resource = "b",
    ExpiresOn = DateTimeOffset.UtcNow.AddMinutes(1)
};

// Allow read access
sas.SetPermissions(BlobSasPermissions.Read);

Autentisera ett anrop till metoden ToSasQueryParameters för objektet BlobSasBuilder

StorageSharedKeyCredential storageSharedKeyCredential = new StorageSharedKeyCredential( "AccountName", "AccountKey");

sasToken = sas.ToSasQueryParameters(storageSharedKeyCredential).ToString();

Bästa praxis

För att minska de potentiella riskerna med att använda en SAS har Microsoft tagit fram ett antal riktlinjer:

  • Använd alltid HTTPS för att distribuera en SAS på ett säkert sätt och förhindra man-in-the-middle-attacker.
  • Den säkraste SAS:en är användardelegering. Använd en sådan när det är möjligt, eftersom du då inte behöver lagra lagringskontonyckeln i koden. Microsoft Entra-ID måste användas för att hantera autentiseringsuppgifter. det här alternativet kanske inte är möjligt för din lösning.
  • Försök ange din förfallotid till det minsta användbara värdet. Om en SAS-nyckel blir komprometterad kan den bara utnyttjas under en kort tid.
  • Tillämpa regeln om minsta nödvändiga privilegier. Bevilja endast den åtkomst som krävs. I din app räcker det exempelvis med skrivskyddad åtkomst.
  • Det finns några situationer där en SAS inte är rätt lösning. Om risken med att använda en SAS är för stor skapar du en tjänst på mellannivå för att hantera användare och deras åtkomst till lagring.

Det mest flexibla och säkra sättet att använda en tjänst- eller konto-SAS är att koppla SAS-token till en lagrad åtkomstprincip. I en senare lektion utforskar du dessa fördelar och hur de fungerar.