Använda lagrade åtkomstprinciper för att delegera åtkomst till Azure Storage

Slutförd

En signatur för delad åtkomst (SAS) är ett säkert sätt att ge åtkomst till klienter utan att du behöver dela dina Azure-autentiseringsuppgifter. Den här enkelheten har dock en baksida. Alla med rätt SAS kan komma åt filen så länge den är giltig. Det enda sättet att återkalla åtkomsten till lagringen är att återskapa åtkomstnycklar. Förnyelse kräver att du uppdaterar alla appar som använder den gamla delade nyckeln för att använda den nya. Ett annat alternativ är att associera SAS:erna med en lagrad åtkomstprincip.

När du lade till SAS-funktioner i din app markerade den inflexibiliteten att skapa en SAS för varje bild, var och en med sina egna förfallo- och åtkomstkontroller. Du vill uppdatera din app så att den använder en lagrad åtkomstprincip i lagringscontainern. När principen är på plats vill du testa att du kan uppdatera utgångstiden och påverka alla skapade SAS-token.

I den här lektionen lär du dig att:

  • Använd en lagrad åtkomstprincip.
  • Använd C#-lagrings-API:et för att skapa SAS-token som är associerade med din nya åtkomstprincip.
  • Testa att ALLA SAS-token kan ändras genom att uppdatera den lagrade åtkomstprincipen i Azure-portalen.

Vad är lagrade åtkomstprinciper?

Du kan skapa en lagrad åtkomstprincip på fyra typer av lagringsresurser:

  • Blobcontainrar
  • Filresurser
  • Köer
  • Tabeller

Den lagrade åtkomstprincip som du skapar för en blobcontainer kan användas för alla blobar i containern och för själva containern. En lagrad åtkomstprincip skapas med följande egenskaper:

  • Identifierare: Det namn som du använder för att referera till den lagrade åtkomstprincipen.
  • Starttid: Ett DateTimeOffset-värde för datum och tid då principen kan börja användas. Det här värdet kan vara null.
  • Förfallotid: Ett DateTimeOffset-värde för datum och tid när principen upphör att gälla. Efter den här tiden misslyckas begäranden till lagringen med ett 403-felmeddelande.
  • Behörigheter: Listan över behörigheter som en sträng som kan vara en eller alla acdlrw.

Screenshot of the Azure portal showing a stored access policy.

Skapa lagrade åtkomstprinciper

Du kan skapa en lagrad åtkomstprincip med C#-kod via Azure-portalen eller med Azure CLI-kommandon.

Med C# .NET-kod

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 });

Med portalen

På portalen går du till lagringskontot och sedan till Blob Storage-containern. Till vänster väljer du Åtkomstprincip. Du lägger till en ny lagrad åtkomstprincip genom att välja + Lägg till princip.

Du kan sedan ange alla obligatoriska parametrar.

Screenshot of the options for adding an access policy.

Med Azure CLI-kommandon

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> \

Skapa SAS-token och koppla dem till lagrade åtkomstprinciper

Nu ska vi associera den lagrade åtkomstprincipen som du skapade med alla nya SAS-token som du behöver. För företagets webbapp för patientdiagnostikbild uppdaterar du den befintliga koden för att lägga till den tidigare koden. I den metod som skapar SAS-token refererar du sedan till den nya lagrade åtkomstprincipen.

All din befintliga kod som behövs för att skapa SAS-token är:

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

och den kan ersättas genom att referera till din nya åtkomstprincip.

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

Du kan ha upp till fem lagrade åtkomstprinciper för en enda blobcontainer.