Delegowanie dostępu do usługi Azure Storage przy użyciu zapisanych zasad dostępu

Ukończone

Sygnatury dostępu współdzielonego (SAS, shared access signatures) to bezpieczny sposób udzielania dostępu dla klientów bez konieczności udostępniania poświadczeń platformy Azure. Ta łatwość użycia ma jednak swoją słabszą stronę. Każda osoba z prawidłową sygnaturą dostępu współdzielonego może uzyskać dostęp do pliku, gdy jest ona ważna. Jedynym sposobem odwołania dostępu do magazynu jest ponowne wygenerowanie kluczy dostępu. Regeneruj wymaga zaktualizowania wszystkich aplikacji, które używają starego klucza współużytkowanego do korzystania z nowego. Inną opcją jest skojarzenie usług SAS z zapisanymi zasadami dostępu.

Po dodaniu funkcji sygnatury dostępu współdzielonego do aplikacji wyróżniono brak elastyczności tworzenia sygnatury dostępu współdzielonego dla każdego obrazu, z których każda ma własne mechanizmy wygasania i kontroli dostępu. Chcesz zaktualizować aplikację, aby korzystała z przechowywanych zasad dostępu w kontenerze magazynu. Po zastosowaniu zasad chcesz sprawdzić, czy możesz zaktualizować datę wygaśnięcia i mieć wpływ na wszystkie utworzone tokeny SAS.

W tej lekcji dowiesz się, jak wykonywać następujące działania:

  • Użyj przechowywanych zasad dostępu.
  • Użyj interfejsu API magazynu języka C#, aby utworzyć tokeny SAS skojarzone z nowymi zasadami dostępu.
  • Przetestuj, czy wszystkie tokeny SAS można zmienić, aktualizując przechowywane zasady dostępu w witrynie Azure Portal.

Czym są zapisane zasady dostępu?

Zapisane zasady dostępu można utworzyć dla czterech rodzajów zasobów magazynu:

  • Kontenery obiektów blob
  • Udziały plików
  • Kolejki
  • Tabele

Przechowywane zasady dostępu tworzone dla kontenera obiektów blob mogą być używane dla wszystkich obiektów blob w kontenerze i dla samego kontenera. Przechowywane zasady dostępu są tworzone z następującymi właściwościami:

  • Identyfikator: nazwa używana do odwołowania się do przechowywanych zasad dostępu.
  • Godzina rozpoczęcia: wartość DateTimeOffset dla daty i godziny rozpoczęcia użycia zasad. Ta wartość może być równa null.
  • Godzina wygaśnięcia: wartość DateTimeOffset daty i godziny wygaśnięcia zasad. Po upływie tego czasu żądania wysyłane do magazynu będą kończyć się niepowodzeniem z komunikatem o błędzie 403.
  • Uprawnienia: lista uprawnień jako ciąg, który może być jednym lub wszystkimi elementami acdlrw.

Screenshot of the Azure portal showing a stored access policy.

Tworzenie zapisanych zasad dostępu

Zapisane zasady dostępu można utworzyć za pomocą kodu języka C#, używając witryny Azure Portal lub poleceń interfejsu wiersza polecenia platformy Azure.

Za pomocą kodu języka C# platformy .NET

BlobSignedIdentifier identifier = new BlobSignedIdentifier
{
    Id = "stored access policy identifier",
    AccessPolicy = new BlobAccessPolicy
    {
        ExpiresOn = DateTimeOffset.UtcNow.AddHours(1),
        Permissions = "rw"
    }
};

blobContainer.SetAccessPolicy(permissions: new BlobSignedIdentifier[] { identifier });

Za pomocą portalu

W portalu przejdź do konta magazynu, a następnie do kontenera magazynu obiektów blob. Po lewej stronie wybierz pozycję Zasady dostępu. Aby dodać nowe zapisane zasady dostępu, wybierz pozycję Dodaj zasady.

Następnie możesz wprowadzić wszystkie wymagane parametry.

Screenshot of the options for adding an access policy.

Za pomocą poleceń interfejsu wiersza polecenia platformy Azure

az storage container policy create \
    --name <stored access policy identifier> \
    --container-name <container name> \
    --start <start time UTC datetime> \
    --expiry <expiry time UTC datetime> \
    --permissions <(a)dd, (c)reate, (d)elete, (l)ist, (r)ead, or (w)rite> \
    --account-key <storage account key> \
    --account-name <storage account name> \

Tworzenie tokenów SAS i kojarzenie ich z zapisanymi zasadami dostępu

Skojarzymy przechowywane zasady dostępu utworzone z dowolnymi nowymi tokenami SAS. W przypadku aplikacji internetowej obrazu diagnostycznego pacjenta w firmie zaktualizuj istniejący kod, aby dodać poprzedni kod. Następnie w metodzie, która tworzy token SAS, należy odwołać się do nowych zapisanych zasad dostępu.

Cały istniejący kod potrzebny do utworzenia tokenu SAS to:

BlobSasBuilder sas = new BlobSasBuilder
{
    BlobContainerName = blob.BlobContainerName,
    BlobName = blob.Name,
    Resource = "b",
    ExpiresOn = DateTimeOffset.UtcNow.AddMinutes(1)
};
// Allow read access
sas.SetPermissions(BlobSasPermissions.Read);

można go zastąpić, odwołując się do nowych zasad dostępu.

// Create a user SAS that only allows reading for a minute
BlobSasBuilder sas = new BlobSasBuilder
{
    Identifier = "stored access policy identifier"
};

Dla pojedynczego kontenera obiektów blob można mieć maksymalnie pięć przechowywanych zasad dostępu.