Alıştırma - Depolanmış erişim ilkelerini kullanarak Azure Depolama’ya temsilci erişimi verme

Tamamlandı

Her biri kendi erişim izinlerine ve son kullanma tarihlerine sahip SAS'leri tek tek oluşturmak yerine, bunları bir depolanmış erişim ilkesiyle ilişkilendirebilirsiniz. İlkenin değiştirilmesi bu ilkeyle ilişkilendirilmiş tüm SAS’leri etkiler.

Artık şirketinizin SAS'lerini oluşturmanın ve yönetmenin daha iyi bir yolu olduğunu biliyorsunuz. Yeni test sayfalarınızı, depolanmış erişim ilkelerini kullanmak için güncelleştirebilirsiniz.

Bu alıştırmada, depolanan erişim ilkeleriyle SAS'ler oluşturmak için web uygulamanızı güncelleştirin. Ardından, ilkeleri değiştirmek ve erişimin iptal olduğunu test etmek için Azure CLI komutlarını kullanırsınız.

Depolanmış erişim ilkeleri oluşturmak için yöntem ekleme

  1. Azure Cloud Shell’de PatientRecordController.cs dosyasını düzenleyin.

    code ~/sas/Controllers/PatientRecordController.cs
    
  2. Sınıfın alt kısmında, GetBlobSas yönteminin altına bir yöntem yazarak saklı erişim ilkelerini oluşturun.

    // Use a stored access policy for the SAS
    private void CreateStoredAccessPolicy()
    {
        // Create a stored access policy for our blobs
        BlobSignedIdentifier identifier = new BlobSignedIdentifier
        {
            Id = _storedPolicyID,
            AccessPolicy = new BlobAccessPolicy
            {
                ExpiresOn = DateTimeOffset.UtcNow.AddHours(1),
                Permissions = "r"
            }
        };
    
        _container.SetAccessPolicy(permissions: new BlobSignedIdentifier[] { identifier });
    } 
    
  3. Bu yöntem erişim ilkesi tanımlayıcısı için genel değişken kullanır. Bu değişkeni sınıfın en üstüne, _container adlı BlobContainerClient değişkeni bildiriminin altına ekleyin.

    private String _storedPolicyID = "patient-images-policy";
    
  4. Oluşturulan her SAS belirteci için depolanmış erişim ilkesi kullanılacaktır, bu nedenle sınıf örneği oluşturma sırasında yeni yöntemi çağırın. Yöntemin alt kısmına bir çağrı ekleyin.

    public PatientRecordsController(ILogger<PatientRecordsController> logger, IConfiguration iconfiguration)
    {
        _logger = logger;
        _iconfiguration = iconfiguration; 
        _container = new BlobContainerClient(
            _iconfiguration.GetValue<string>("StorageAccount:ConnectionString"),
            _iconfiguration.GetValue<string>("StorageAccount:Container")
        );
        CreateStoredAccessPolicy();
    }
    
  5. Şimdi GetBlobSas erişim ilkesi kullanılacak şekilde basitleştirilebilir. Bunu kullanacak şekilde yöntemi değiştirin.

     // Build a SAS token for the given blob
     private string GetBlobSas()
     {
         // Create a user SAS that only allows reading for a minute
         BlobSasBuilder sas = new BlobSasBuilder 
         {
             Identifier = _storedPolicyID,
             BlobContainerName = _iconfiguration.GetValue<string>("StorageAccount:Container")
         };
    
         // Use the shared key to access the blob
         var storageSharedKeyCredential = new StorageSharedKeyCredential(
             _iconfiguration.GetValue<string>("StorageAccount:AccountName"),
             _iconfiguration.GetValue<string>("StorageAccount:AccountKey")
         );
    
         return '?' + sas.ToSasQueryParameters(storageSharedKeyCredential).ToString();
     }
    
  6. SAS belirteci isteklerini işleyen kodda, güncelleştirilmiş yöntemi çağırmak için küçük bir düzeltme yapılması gerekir.

    // GET PatientRecord/patient-nnnnnn/secure
    [HttpGet("{Name}/{secure}")]
    public PatientRecord Get(string name, string flag)
    {
        BlobClient blob = _container.GetBlobClient(name);
        return new PatientRecord { name=blob.Name, imageURI=blob.Uri.AbsoluteUri, sasToken=GetBlobSas() };
    }
    
  7. Ctrl+S’yi ve ardından Ctrl+Q’yu seçerek kod değişikliklerinizi kaydedin.

Yeni kodu test etme

  1. Cloud Shell’de uygulamayı oluşturun.

    cd ~/sas/
    dotnet build
    
  2. Önceki alıştırmayı tamamladıktan sonra bağlantı noktasının kapanması durumunda komutunu çalıştırarak curl yeniden açın.

    curl -X POST http://localhost:8888/openPort/8000;
    
  3. Güncelleştirilen web uygulamasını çalıştırın.

    dotnet run
    
  4. Web uygulamasının URL’sine gidin ve eğik çizgi (/) ile bittiğinden emin olun.

  5. Giriş sayfasında Get all patients öğesini seçin.

  6. Görüntü dosya adını kopyalayın. Örneğin patient-32589.jpg.

  7. Sayfanın üst kısmında External companies menü bağlantısını seçin.

  8. Görüntü dosyası adını Patient image filename (Hasta görüntüsü dosya adı) alanına yapıştırın.

  9. Anahtar Al’ı seçerek SAS belirtecini doldurun.

  10. Görüntüyü görmek için View scan öğesini seçin.

Saklı erişim ilkesini düzenleme

  1. Korumalı alanı etkinleştirmek için kullandığınız kimlik bilgilerini kullanarak Azure portalında oturum açın.

  2. Azure portalı kaynak menüsünde Tüm kaynaklar'ı seçin.

  3. Kaynak listesinde tıbbi kayıt depolama hesabını seçin.

  4. Genel Bakış bölmesinde Kapsayıcılar'ı ve ardından patient-images öğesini seçin.

  5. Hasta resimleri menüsündeki Ayarlar altında Erişim ilkesi'ni seçin.

  6. Web uygulamanızın patient-images-policy depolanmış erişim ilkesini oluşturduğuna dikkat edin.

  7. Sağ tarafta ... menüsünü seçin, ardından açılan menüde Düzenle’yi seçin.

  8. İlkeyi düzenle'de Okumaiznini listeden listeye değiştirin ve onaylamak için Tamam'ı seçin.

  9. Patient-images sayfasında Kaydet'iseçin | Erişim ilkesi bölmesi.

Yeni SAS’yi test etme

  1. Web uygulamanıza dönün. External companies sayfasında Anahtar Al’ı seçerek yeni bir SAS belirteci oluşturun.

  2. View scan öğesini seçin.

    Screenshot of the web app failing to view a patient image.

Görüntü Azure Depolama'dan döndürülmüyor ve 403 kimlik doğrulaması hatası alıyorsunuz.