Delegowanie dostępu do usługi Azure Storage przy użyciu sygnatur dostępu współdzielonego

Ukończone

Używając sygnatury dostępu współdzielonego (SAS), można delegować dostęp do zasobów. Klienci nie mają bezpośredniego dostępu do poświadczeń konta magazynu, a Ty kontrolujesz na szczegółowym poziomie, do czego mają dostęp.

Po zbadaniu wszystkich opcji autoryzacji decydujesz się na bardziej szczegółowe poznanie sygnatur dostępu współdzielonego. Chcesz utworzyć sygnaturę dostępu współdzielonego i używać jej w aplikacji internetowej platformy .NET w języku C#. Chcesz także postępować zgodnie z najlepszymi rozwiązaniami firmy Microsoft dotyczącymi tego, kiedy i jak używać sygnatur dostępu współdzielonego.

W tej lekcji dowiesz się, jak działa sygnatura dostępu współdzielonego na poziomie technicznym i jaki kod języka C#musisz napisać, aby go używać.

Jak działają sygnatury dostępu współdzielonego

Sygnatura dostępu współdzielonego ma dwa składniki: identyfikator URI wskazujący co najmniej jeden zasób magazynu i token wskazujący, jak klient może uzyskać dostęp do zasobów.

W pojedynczym identyfikatorze URI, takim jak 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, można oddzielić identyfikator URI od tokenu SAS w następujący sposób:

Identyfikator URI Token SAS
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

Token SAS zawiera następujące składniki lub parametry zapytania.

Parametry zapytania Nazwa pola Przykład opis
Sp podpisane uprawnienie sp=r Wskazuje co najmniej jedną operację, która może wykonać klient. Wartości mogą być złożone: a (add), c (create), d (delete), l (list), r (read) i w (write). sp=r jest tylko do odczytu; sp=acdlrw przyznaje wszystkie dostępne prawa.
XXI w. godzina rozpoczęcia st=2020-01-20T11:42:32Z Data i godzina rozpoczęcia dostępu.
se czas wygaśnięcia se=2020-01-20T19:42:32Z Data i godzina zakończenia dostępu. Na podstawie daty rozpoczęcia ten przykład udziela ośmiu godzin dostępu.
Spr podpisany protokół spr=https Protokół dozwolony dla żądania złożonego z sygnaturą dostępu współdzielonego. Opcjonalne pole, które ma możliwe wartości zarówno https, jak i HTTP (wartość domyślna) lub tylko https.
sv podpisana wersja sv=2019-02-02 Wersja usługi interfejsu API magazynu do użycia.
sr zakres zasobu sr=b Rodzaj magazynu, do którego uzyskuje się dostęp. Dostępne wartości to b (blob), c (kontener), d (katalog), f (plik), s (udział)
Sig Podpis sig=SrW1... wVZs%3D Podpis kryptograficzny.

Podpis jest podpisany przy użyciu klucza konta magazynu podczas tworzenia sygnatury dostępu współdzielonego usługi lub konta. Jeśli używasz podmiotu zabezpieczeń firmy Microsoft Entra z dostępem do magazynu, utworzysz sygnaturę dostępu współdzielonego delegowania użytkownika. Udzielasz również akcji Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey dla podmiotu zabezpieczeń.

Tworzenie sygnatury dostępu współdzielonego na platformie .NET

Ponieważ Twoja firma zapewnia dostęp do innych firm, nie możesz używać identyfikatora Entra firmy Microsoft do tworzenia jednostek usług dla każdej innej firmy, która wymaga dostępu do obrazów medycznych. Aplikacja używa klucza konta magazynu dla każdego pojedynczego pliku. W poniższych krokach pokazano, jak utworzyć sygnaturę dostępu współdzielonego przy użyciu kodu C#.

Tworzenie klienta kontenera obiektów blob w celu nawiązania połączenia z kontem magazynu na platformie Azure

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

Pobierz obiekt blob, dla którego chcesz utworzyć token SAS, i utwórz obiekt BlobClient

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

Utwórz obiekt BlobSasBuilder dla obiektu blob, który będzie używany w celu wygenerowania tokenu SAS

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

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

Uwierzytelnij wywołanie metody ToSasQueryParameters obiektu BlobSasBuilder

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

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

Najlepsze rozwiązania

Aby zmniejszyć potencjalne ryzyko związane z używaniem sygnatur dostępu współdzielonego, firma Microsoft oferuje kilka wskazówek:

  • Aby bezpiecznie dystrybuować sygnaturę dostępu współdzielonego i zapobiegać atakom typu man-in-the-middle, zawsze używaj protokołu HTTPS.
  • Najbezpieczniejsza sygnatura dostępu współdzielonego to delegowanie użytkowników. Używaj jej zawsze, gdy jest to możliwe, ponieważ eliminuje konieczność przechowywania klucza konta magazynu w kodzie. Identyfikator Entra firmy Microsoft musi służyć do zarządzania poświadczeniami; ta opcja może nie być możliwa dla Twojego rozwiązania.
  • Spróbuj ustawić najmniejszy użyteczną wartość czasu wygaśnięcia. Jeśli klucz sygnatury dostępu współdzielonego zostanie naruszony, będzie go można wykorzystać tylko przez krótki czas.
  • Zastosuj regułę minimalnych wymaganych uprawnień. Przyznawaj tylko dostęp, który jest wymagany. Na przykład w Twojej aplikacji wystarczy dostęp tylko do odczytu.
  • Istnieją sytuacje, w których sygnatura dostępu współdzielonego nie jest prawidłowym rozwiązaniem. Jeśli użycie sygnatury dostępu współdzielonego stanowi ryzyko, które jest nieakceptowalne, utwórz usługę warstwy środkowej w celu zarządzania użytkownikami i ich dostępem do magazynu.

Najbardziej elastycznym i bezpiecznym sposobem używania sygnatury dostępu współdzielonego usługi lub konta jest skojarzenie tokenów SAS z zapisanymi zasadami dostępu. W dalszej lekcji zapoznasz się z tymi korzyściami i sposobem ich działania.