Paylaşılan erişim imzalarını kullanarak Azure Depolama’ya temsilci erişimi verme

Tamamlandı

Paylaşılan erişim imzası (SAS) kullanarak, kaynaklarınıza temsilci erişimi verebilirsiniz. İstemcilerin depolama hesabı kimlik bilgilerinize doğrudan erişimi yoktur ve neye eriştiklerini ayrıntılı bir düzeyde denetlersiniz.

Tüm yetkilendirme seçeneklerini inceledikten sonra SAS’yi daha ayrıntılı olarak gözden geçirmeye karar verirsiniz. C# .NET web uygulamasında SAS oluşturmak ve kullanmak istiyorsunuz. Ayrıca SAS’nin ne zaman ve nasıl kullanılacağı konusunda Microsoft’un en iyi yöntemlerini izlemek istiyorsunuz.

Bu ünitede SAS'nin teknik düzeyde nasıl çalıştığını ve bunu kullanmak için yazmanız gereken C# kodunu gözden geçireceksiniz.

Paylaşılan erişim imzaları nasıl çalışır?

SAS'nin iki bileşeni vardır: bir veya daha fazla depolama kaynağına işaret eden bir URI ve istemcinin kaynaklara nasıl erişebileceğini gösteren bir belirteç.

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 gibi tek bir URI’de, URI’yi SAS belirtecinden şu şekilde ayırabilirsiniz:

URI SAS belirteci
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 belirteci aşağıdaki bileşenleri veya sorgu parametrelerini içerir.

Sorgu Parametresi Alan Adı Örnek Açıklama
Sp imzalı izin sp=r İstemcinin gerçekleştirebileceği bir veya daha fazla işlemi gösterir. Değerler birleştirilebilir: a (add), c (create), d (delete), l (list), r (read) ve w (write). sp=r salt okunurdur; sp=acdlrw tüm kullanılabilir hakları verir.
St başlangıç saati st=2020-01-20T11:42:32Z Erişimin başladığı tarih ve saat.
se süre sonu süresi se=2020-01-20T19:42:32Z Erişimin bittiği tarih ve saat. Başlangıç tarihine bağlı olarak, bu örnek sekiz saat erişim verir.
Spr imzalı protokol spr=https SAS ile yapılan istek için izin verilen protokol. Hem HTTPS hem de HTTP (varsayılan değer) veya yalnızca HTTPS olası değerlerine sahip isteğe bağlı bir alan.
sv imzalı sürüm sv=2019-02-02 Kullanılacak depolama API'sinin hizmet sürümü.
sr kaynak kapsamı sr=b Erişilecek depolamanın türü. Kullanılabilir değerler b (blob), c (kapsayıcı), d (dizin), f (dosya), s (paylaşım) değerlerini içerir
Sıg Imza sig=SrW1... wVZs%3D Şifreleme imzası.

Bir hizmet veya hesap paylaşılan erişim imzası oluşturduğunuzda imza depolama hesabı anahtarınız ile imzalanır. Depolama alanına erişimi olan bir Microsoft Entra güvenlik sorumlusu kullanıyorsanız, kullanıcı temsilcisi paylaşılan erişim imzası oluşturursunuz. Ayrıca sorumluya Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey eylemi verirsiniz.

.NET’te SAS oluşturma

Şirketiniz üçüncü taraflara erişim sağladığından, tıbbi görüntülere erişim gerektiren her üçüncü taraf için hizmet sorumluları oluşturmak için Microsoft Entra Id'yi kullanamazsınız. Uygulamanız her dosya için bir depolama hesabı anahtarı kullanır. Aşağıdaki adımlarda C# kodu kullanarak SAS oluşturma adımları gösterilmektedir.

Azure'da depolama hesabına bağlanmak için blob kapsayıcı istemcisi oluşturma

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

SAS belirtecini oluşturmak istediğiniz blobu alın ve BlobClient nesnesi oluşturun

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

SAS belirtecini oluştururken kullanacağınız blob için BlobSasBuilder nesnesi oluşturun

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

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

BlobSasBuilder nesnesinin ToSasQueryParameters yöntemine yapılacak çağrının kimliğini doğrulayın

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

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

En iyi yöntemler

SAS kullanmanın olası risklerini azaltmak için Microsoft bazı yönergeler sağlar:

  • SAS'yi güvenli bir şekilde dağıtmak ve ortadaki adam saldırılarını önlemeye yardımcı olmak için her zaman HTTPS kullanın.
  • En güvenli SAS, kullanıcı temsilcisidir. Depolama hesabı anahtarınızı kodda depolama gereksinimini ortadan kaldırdığı için mümkün olduğunca bunu kullanın. Kimlik bilgilerini yönetmek için Microsoft Entra Id kullanılmalıdır; bu seçenek çözümünüz için mümkün olmayabilir.
  • Sona erme zamanınızı kullanılabilir en küçük değere ayarlamaya çalışın. SAS anahtarının gizliliği bozulursa yalnızca kısa bir süre kötü amaçla kullanılabilir.
  • Gereken en düşük ayrıcalıklar kuralını uygulayın. Yalnızca gerekli olan erişimi verin. Örneğin uygulamanızda salt okuma erişimi yeterlidir.
  • Bazı durumlarda doğru çözüm SAS değildir. SAS kullanmanın riski kabul edilemez düzeyde olduğunda, kullanıcıları ve onların depolamaya erişimini yönetmek için bir ara katman hizmeti oluşturun.

Hizmet veya hesap SAS’sini kullanmanın en esnek ve güvenli yolu, SAS belirteçlerini bir saklı erişim ilkesiyle ilişkilendirmektir. Sonraki bir ünitede bu avantajları ve bunların nasıl çalıştığını keşfedersiniz.