Alıştırma - Paylaşılan erişim imzalarını kullanarak Azure Depolama’ya temsilci erişimi verme
Azure Depolama paylaşılan anahtarla, paylaşılan erişim imzasıyla (SAS) veya Microsoft Entra Kimliği aracılığıyla dosyalara erişim yetkisi vermenizi sağlar. SAS ile istemcinin dosyalarla ne yapabileceğini ve ne kadar süreyle yapabileceğini denetlersiniz.
Şirketinizin görüntü tanı sistemi hasta görüntülerine paylaşılan anahtar yoluyla dahili olarak erişiyor. Üçüncü tarafların tanılama görüntülerine erişmesine izin vermek için bir API oluşturmanız gerekir. Sas'nin üçüncü taraf istemcilere güvenli erişim vermenize nasıl yardımcı olabileceğini görmek için web uygulamanızda bir test sayfası oluşturursunuz.
Bu alıştırmada bir depolama hesabı oluşturacak ve bazı örnek hasta görüntülerini karşıya yükleyebilirsiniz. Ekibinizin mevcut web uygulamasını dağıtıp depolama alanına erişebildiğini test edebilirsiniz. Son adımda görüntüleri güvenli bir şekilde görmek üzere isteğe bağlı SAS belirteci oluşturmak için C# ve JavaScript kodu ekleyeceksiniz.
Depolama hesabı oluşturma ve görüntüleri karşıya yükleme
Azure Cloud Shell'i kullanarak hasta görüntüleri için bir depolama hesabı oluşturmak üzere aşağıdaki kodu girin. Kod bir depolama hesabı adı oluşturur.
export STORAGENAME=medicalrecords$RANDOM az storage account create \ --name $STORAGENAME \ --access-tier hot \ --kind StorageV2 \ --resource-group "<rgn>[sandbox resource group name]</rgn>"
Görüntüleri depolamak için depolama hesabı altında bir kapsayıcı oluşturun.
az storage container create \ --name patient-images \ --account-name $STORAGENAME \ --public-access off
Ekibinizin mevcut web uygulamasını kopyalayın. Bu depo, ekibiniz tarafından test için kullanılan örnek görüntüleri içerir.
git clone https://github.com/MicrosoftDocs/mslearn-control-access-to-azure-storage-with-sas.git sas
Görüntüleri depolama hesabınıza yüklemek için Azure CLI upload-batch komutunu kullanın.
az storage blob upload-batch \ --source sas \ --destination patient-images \ --account-name $STORAGENAME \ --pattern *.jpg
Hasta tanı görüntü sistemini test etme
Depolama hesabınız için bağlantı dizesi ekleyebilmemiz için appsettings.json dosyasını kod düzenleyicisinde açın.
code sas/appsettings.json
Cloud Shell'de, depolama hesabınıza bağlantı dizesi almak için aşağıdaki kodu girin.
az storage account show-connection-string --name $STORAGENAME
Şu biçimde bir yanıt görmeniz gerekir:
{ "connectionString": "DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=<account-name>;AccountKey=<account-key>" }
tırnak işaretleri dahil olmak üzere connectionString değerini kopyalayın.
Kod düzenleyicisinde, Bağlan ionString değerini
"[connection string]"
kopyaladığınız dizeyle değiştirin.bağlantı dizesi gövdesindeki değerini
AccountName=
kopyalayın.AccountName parametresinin değerini kopyaladığınız hesap adı değeriyle değiştirin.
bağlantı dizesi gövdesindeki değerini
AccountKey=
kopyalayın (tırnak işaretini eklemeyin). değerinin sonuna öğesini eklediğinizden==
emin olun.AccountKey parametresinin değerini kopyaladığınız hesap anahtarı değeriyle değiştirin.
Appsettings.json dosyası şimdi şu çıkışa benzer olmalıdır.
{ "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*", "StorageAccount": { "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net", "Container" : "patient-images", "AccountName":"<account-name>", "AccountKey":"<account-key>" } }
Ctrl+S ve ardından Ctrl+Q tuşlarına basarak kod düzenleyicisini kaydedin ve kapatın.
Cloud Shell'de çalışırken web uygulamanıza erişebilmek için bir bağlantı noktası açın.
curl -X POST http://localhost:8888/openPort/8000;
Bu komut, uygulamanızın erişilebileceği bir
url
yer döndürür.{"message":"Port 8000 is open","url":"https://gateway11.northeurope.console.azure.com/n/cc-4016c848/cc-4016c848/proxy/8000/"}
Uygulamanızı çalıştırın.
cd sas dotnet run
Uygulama derlendiğinde Cloud Shell konsolu aşağıdaki örneğe benzer ayrıntıları görüntüler.
Hosting environment: Development Content root path: /home/<yourusername>/sas Now listening on: https://localhost:8001 Now listening on: http://localhost:8000 Application started. Press Ctrl+C to shut down.
Tarayıcıda, önceki cURL komutu tarafından döndürülen URL'yi yapıştırın. Adresin sonuna eğik çizgi (/) eklediğinizden emin olun.
URL şu biçimde olmalıdır:
https://gateway11.northeurope.console.azure.com/n/cc-4016c848/cc-4016c848/proxy/8000/
.Oturum açmanız istenirse tarayıcı pencerenizi yenileyin. Lamna Healthcare Patient Diagnostic Image System (Lamna Healthcare Hasta Tanılama Sistemi) görüntüleniyor.
Depolama hesabındaki tüm görüntülerin listesini görüntülemek için Tüm hastaları al'ı seçin.
SAS oluşturmak için kod ekleme
Cloud Shell'de Ctrl+C tuşlarına basarak web uygulamasını durdurun.
İsteğe bağlı SAS oluşturmak ve web uygulamasının ön ucuna döndürmek için PatientRecordController sınıfını geliştirelim.
PatientRecordController.cs dosyasını kod düzenleyicisinde açmak için aşağıdaki kodu girin.
code Controllers/PatientRecordController.cs
Aşağıdaki kodu yönteminin altındaki sınıfın
GET PatientRecord/patient-nnnnnn
altına ekleyin.// 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(blob) }; }
Bu yöntem istenen hasta görüntüsünü, bu görüntüye erişmek için kullanılabilecek SAS ile döndürür.
Blob için SAS’yi oluşturacak bir yöntem ekleyin.
// Build a SAS token for the given blob private string GetBlobSas(BlobClient blob) { // Create a user SAS that only allows reading for a minute BlobSasBuilder sas = new BlobSasBuilder { BlobContainerName = blob.BlobContainerName, BlobName = blob.Name, Resource = "b", ExpiresOn = DateTimeOffset.UtcNow.AddMinutes(1) }; // Allow read access sas.SetPermissions(BlobSasPermissions.Read); // 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(); }
Bu yöntem, salt okunur olan ve süresi bir dakika içinde dolan bir SAS oluşturmak
BlobSasBuilder
için geçirilenBlobClient
nesnesini kullanır.Ctrl+S tuşlarına basarak dosyayı kaydedin ve ardından Ctrl+Q tuşlarına basarak düzenleyiciden çıkın.
SAS’yi kullanmak için kod ekleme
Şimdi görüntü için SAS istemek üzere web sayfasına kod ekleyelim.
external.cshtml sayfasını düzenlemek için aşağıdaki komutu girin.
code Pages/external.cshtml
Dosyanın sonuna yakın olan tık
#btn-submit
dinleyicisinde satırını değiştirerek$.get
öğesini ekleyin+ '/secure'
:$('#btn-submit').click(function(){ $('#result').empty(); $.get('api/PatientRecords/' + $('#patientID').val() + '/secure', function (data) { var imageURL = data.imageURI + $('#sasKey').val(); $('#result').html('<img id="patientScan" class="alert alert-success" src="' + imageURL + '" alt="patient scan" onerror="this.classList.remove(\'alert-success\'); this.classList.add(\'alert-danger\')"//>'); }, 'json'); });
Tıklama dinleyicisi işlevinin
#btn-submit
altına, dosyanın alt kısmına, etiketin</script>
üstüne aşağıdaki kodu ekleyin:$('#btn-getKey').click(function(){ $.get('api/PatientRecords/' + $('#patientID').val() + '/secure', function (data) { $('#sasKey').val(data.sasToken); }, 'json'); });
Bu jQuery kodu
btn-getKey
düğmesine bir tıklama dinleyicisi ekler. Kod verili görüntülü dosyası için yeni güvenli URL’ye bir Ajax çağrısı yürütür. Geri döndüğünde, anahtar giriş kutusunu SAS ile doldurur.Ctrl+S tuşlarına basarak değişiklikleri kaydedin ve ardından Ctrl+Q tuşlarına basarak düzenleyiciden çıkın.
Değişikliklerinizi test etme
Güncelleştirilmiş uygulamanızı çalıştırın.
dotnet run
Tarayıcınızda, web sitenizin sekmesini yenileyin. Get all patients’ı seçin ve görüntü dosya adlarından birini kopyalayın.
Web sayfasının üst kısmındaki menüde Dış şirketler'i seçin.
Dosya adını Patient image filename (Hasta görüntüsü dosya adı) alanına yapıştırın.
View scan öğesini seçin. SAS oluşturmadığınız için hasta tarama görüntüsüne erişilemiyor.
Dekont
Konsolu tarayıcınızda görüntülüyorsanız web sunucusunun 404 hata kodu iletisi döndürdiğini görürsünüz.
Anahtar Al’ı seçin. Bu seçim Anahtar alanını SAS ile doldurmalıdır.
View scan öğesini seçin. Hastanın teşhis görüntüsü görünmelidir.
Tarayıcınızda görüntüye sağ tıklayın ve görüntü adresini kopyalayın.
Yeni bir tarayıcı sekmesi açın, kopyalanan resim adresini adres çubuğuna yapıştırın ve Enter tuşuna basın. SAS'yi oluşturmanın üzerinden bir dakikadan uzun geçtiyse bir hata iletisi görmeniz gerekir. Bir dakikadan kısa bir süre geçtiyse, görüntü görüntülenmelidir.
Dekont
Sayfayı yenilemeniz gerekebilir.
<Error> <Code>AuthenticationFailed</Code> <Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly, including the signature. RequestId:03eda893-f01e-0028-2d73-c5c947000000 Time:2021-01-07T16:02:55.3752851Z</Message> <AuthenticationErrorDetail>Signed expiry time [Tue, 07 Jan 2021 16:02:00 GMT] must be after signed start time [Tue, 07 Jan 2021 16:02:55 GMT]</AuthenticationErrorDetail> </Error>
Dekont
Bazı tarayıcılardan bu hata iletisini görüntülemek için, görüntüyü önbelleğe almamış yeni bir tarayıcı penceresi açmanız gerekebilir.
Cloud Shell'de Ctrl+C tuşlarına basarak web uygulamasından çıkın.