Övning – Använda lagrade åtkomstprinciper för att delegera åtkomst till Azure Storage
I stället för att skapa SASs individuellt, var och en med sina egna åtkomstbehörigheter och förfallodatum, kan du associera dem med en lagrad åtkomstprincip. Om principen ändras påverkas alla signaturer för delad åtkomst som är kopplade till den.
Nu när du vet att det finns ett bättre sätt att skapa och hantera företagets SAS. Du kan uppdatera dina nya testsidor för att använda lagrade åtkomstprinciper.
I den här övningen uppdaterar du webbappen för att skapa SAS med lagrade åtkomstprinciper. Sedan använder du Azure CLI-kommandon för att ändra principerna och testa att åtkomsten återkallas.
Lägga till en metod för att skapa lagrade åtkomstprinciper
Redigera filen PatientRecordController.cs i Azure Cloud Shell.
code ~/sas/Controllers/PatientRecordController.cs
Längst ned i klassen, under metoden
GetBlobSas
, skriver du en metod för att skapa lagrade åtkomstprinciper.// 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 }); }
Den här metoden använder en global variabel för åtkomstprincipidentifieraren. Lägg till den här variabeln överst i klassen under deklarationen för
BlobContainerClient
-variabeln med namnet_container
.private String _storedPolicyID = "patient-images-policy";
Den lagrade åtkomstprincipen används för varje SAS-token som genereras, så anropa den nya metoden i klassens instansiering. Lägg till ett anrop längst ned i metoden.
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(); }
Nu kan
GetBlobSas
förenklas och använda åtkomstprincipen. Ändra metoden till att använda den.// 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(); }
Den kod som hanterar begäranden om SAS-token behöver en liten korrigering så att den anropar den uppdaterade metoden.
// 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() }; }
Spara dina kodändringar genom att välja Ctrl+S och sedan Ctrl+Q.
Testa den nya koden
I Cloud Shell kompilerar du appen.
cd ~/sas/ dotnet build
Om porten har stängts sedan du avslutade föregående övning kör
curl
du kommandot för att öppna den igen.curl -X POST http://localhost:8888/openPort/8000;
Kör den uppdaterade webbappen.
dotnet run
Gå till webbappens webbadress och kontrollera att den slutar med ett snedstreck (/).
På startsidan väljer du Get all patients (Hämta alla patienter).
Kopiera namnet på en bildfil. Ett exempel är patient-32589.jpg.
Välj menylänken External companies (Externa företag) längst upp på sidan.
Klistra in bildfilnamnet i fältet Patient image filename (Namn på patientbildfil).
Välj Get Key (Hämta nyckel) för att fylla SAS-token.
Välj View scan (Visa skanning) för att visa bilden.
Redigera principen för lagrad åtkomst
Logga in på Azure-portalen med samma autentiseringsuppgifter som du använde för att aktivera sandbox-miljön.
I resursmenyn i Azure-portalen väljer du Alla resurser.
I listan över resurser väljer du lagringskontot för medicinska journaler .
I fönstret Översikt väljer du Containrar och sedan patientbilder.
På menyn patientbilder går du till Inställningar och väljer Åtkomstprincip.
Observera att webbappen har skapat den lagrade åtkomstprincipen patient-images-policy.
Till höger väljer du menyn ... och väljer sedan Redigera från popup-menyn.
I redigera-principen ändrar du Behörighet från läs till lista och väljer OK för att bekräfta.
Välj Spara på patientbilderna | Fönstret Åtkomstprincip .
Testa en ny SAS
Gå tillbaka till din webbapp. På sidan External companies (Externa företag) skapar du en ny SAS-token genom att välja Hämta nyckel.
Välj View scan (Visa skanning).
Avbildningen returneras inte från Azure Storage och du får ett 403-autentiseringsfel.