Zabezpečený přístup k datům aplikací

Tento kurz je třetí částí série. Zjistíte, jak bezpečně přistupovat k účtu úložiště.

Ve třetí části této série se naučíte:

  • Použití tokenů SAS pro přístup k obrázkům miniatur
  • Zapnutí šifrování na straně serveru
  • Povolení přenosu pouze přes protokol HTTP

Úložiště objektů blob v Azure představuje robustní službu pro ukládání souborů pro aplikace. Tento kurz rozšiřuje předchozí téma a ukazuje, jak bezpečně přistupovat k účtu úložiště z webové aplikace. Až budete hotovi, obrázky budou šifrované a webová aplikace bude pro přístup k obrázkům miniatur používat zabezpečené tokeny SAS.

Požadavky

K dokončení tohoto kurzu je nutné dokončit předchozí kurz o službě Storage: Automatizace změny velikosti nahraných obrázků s využitím služby Event Grid.

Nastavení veřejného přístupu ke kontejneru

V této části série kurzů se pro přístup k miniaturám používají tokeny SAS. V tomto kroku nastavíte veřejný přístup ke kontejneru thumbnails na hodnotu off (vypnuto).

$blobStorageAccount="<blob_storage_account>"

blobStorageAccountKey=(Get-AzStorageAccountKey -ResourceGroupName myResourceGroup -AccountName $blobStorageAccount).Key1

Set-AzStorageAccount -ResourceGroupName "MyResourceGroup" -AccountName $blobStorageAccount -KeyName $blobStorageAccountKey -AllowBlobPublicAccess $false

Konfigurace tokenů SAS pro miniatury

V první části této série kurzů zobrazovala webová aplikace obrázky z veřejného kontejneru. V této části série použijete k načtení obrázků miniatur tokeny sdíleného přístupového podpisu (SAS). Tokeny SAS umožňují zajistit omezený přístup ke kontejneru nebo objektu blob na základě IP adresy, protokolu, časového intervalu nebo povolených oprávnění. Další informace o sas najdete v tématu Udělení omezeného přístupu k prostředkům Azure Storage pomocí sdílených přístupových podpisů (SAS).

V tomto příkladu používá úložiště zdrojového kódu větev sasTokens, která obsahuje aktualizovaný vzorový kód. Odstraňte stávající nasazení z GitHubu pomocí příkazu az webapp deployment source delete. Dále nakonfigurujte nasazení z GitHubu do webové aplikace pomocí příkazu az webapp deployment source config.

V následujícím příkazu je <web-app> název vaší webové aplikace.

az webapp deployment source delete --name <web-app> --resource-group myResourceGroup

az webapp deployment source config --name <web_app> \
    --resource-group myResourceGroup --branch sasTokens --manual-integration \
    --repo-url https://github.com/Azure-Samples/storage-blob-upload-from-webapp
az webapp deployment source delete --name <web-app> --resource-group myResourceGroup

az webapp deployment source config --name <web_app> `
    --resource-group myResourceGroup --branch sasTokens --manual-integration `
    --repo-url https://github.com/Azure-Samples/storage-blob-upload-from-webapp

Ve větvi sasTokens úložiště se aktualizuje soubor StorageHelper.cs. Úlohu GetThumbNailUrls nahradí níže uvedeným příkladem kódu. Aktualizovaná úloha načte adresy URL miniatur pomocí BlobSasBuilder a určí čas spuštění, čas vypršení platnosti a oprávnění pro token SAS. Webová aplikace teď po nasazení načítá miniatury s použitím adresy URL s tokenem SAS. Aktualizovaná úloha je znázorněná v následujícím příkladu:

public static async Task<List<string>> GetThumbNailUrls(AzureStorageConfig _storageConfig)
{
    List<string> thumbnailUrls = new List<string>();

    // Create a URI to the storage account
    Uri accountUri = new Uri("https://" + _storageConfig.AccountName + ".blob.core.windows.net/");

    // Create BlobServiceClient from the account URI
    BlobServiceClient blobServiceClient = new BlobServiceClient(accountUri);

    // Get reference to the container
    BlobContainerClient container = blobServiceClient.GetBlobContainerClient(_storageConfig.ThumbnailContainer);

    if (container.Exists())
    {
        // Set the expiration time and permissions for the container.
        // In this case, the start time is specified as a few 
        // minutes in the past, to mitigate clock skew.
        // The shared access signature will be valid immediately.
        BlobSasBuilder sas = new BlobSasBuilder
        {
            Resource = "c",
            BlobContainerName = _storageConfig.ThumbnailContainer,
            StartsOn = DateTimeOffset.UtcNow.AddMinutes(-5),
            ExpiresOn = DateTimeOffset.UtcNow.AddHours(1)
        };

        sas.SetPermissions(BlobContainerSasPermissions.All);

        // Create StorageSharedKeyCredentials object by reading
        // the values from the configuration (appsettings.json)
        StorageSharedKeyCredential storageCredential =
            new StorageSharedKeyCredential(_storageConfig.AccountName, _storageConfig.AccountKey);

        // Create a SAS URI to the storage account
        UriBuilder sasUri = new UriBuilder(accountUri);
        sasUri.Query = sas.ToSasQueryParameters(storageCredential).ToString();

        foreach (BlobItem blob in container.GetBlobs())
        {
            // Create the URI using the SAS query token.
            string sasBlobUri = container.Uri + "/" +
                                blob.Name + sasUri.Query;

            //Return the URI string for the container, including the SAS token.
            thumbnailUrls.Add(sasBlobUri);
        }
    }
    return await Task.FromResult(thumbnailUrls);
}

Předchozí úloha využívá následující třídy, vlastnosti a metody:

Třída Vlastnosti Metody
StorageSharedKeyCredential
BlobServiceClient GetBlobContainerClient
BlobContainerClient Uri Existuje
GetBlobs
BlobSasBuilder Nastavení oprávnění
ToSasQueryParameters
BlobItem Název
Uribuilder Dotaz
Seznam Přidat

Šifrování služby Azure Storage

Azure Storage šifrování pomáhá chránit a chránit data tím, že šifruje data v klidových klidech a pracuje s šifrováním a dešifrováním. Veškerá data se šifrují pomocí 256bitového šifrování AES. To je jedna z nejsilnějších dostupných variant blokového šifrování.

Můžete se rozhodnout, že bude Microsoft spravovat šifrovací klíče, nebo si můžete přinést vlastní klíče s klíči spravovanými zákazníkem uloženými ve službě Azure Key Vault nebo Key Vault ve spravovaném modelu hardwarového zabezpečení (HSM) (Preview). Další informace najdete v tématu Klíče spravované zákazníkem pro Azure Storage šifrování.

Azure Storage šifrování automaticky šifruje data ve všech úrovních výkonu (Standard a Premium), ve všech modelech nasazení (Azure Resource Manager a Classic) a ve všech službách Azure Storage (Blob, Queue, Table a File).

Povolení pouze HTTPS

Abyste zajistili zabezpečení požadavků na data přicházejících do a z účtu úložiště, můžete požadavky omezit pouze na HTTPS. Aktualizujte požadovaný protokol pro účet úložiště pomocí příkazu az storage account update.

az storage account update --resource-group myresourcegroup --name <storage-account-name> --https-only true

Otestujte připojení pomocí příkazu curl s použitím protokolu HTTP.

curl http://<storage-account-name>.blob.core.windows.net/<container>/<blob-name> -I

Vzhledem k tomu, že se teď vyžaduje zabezpečený přenos, zobrazí se následující zpráva:

HTTP/1.1 400 The account being accessed does not support http.

Další kroky

Ve třetí části série jste se dozvěděli, jak zabezpečit přístup k účtu úložiště a naučili jste se například:

  • Použití tokenů SAS pro přístup k obrázkům miniatur
  • Zapnutí šifrování na straně serveru
  • Povolení přenosu pouze přes protokol HTTP

Přejděte ke čtvrté části série, kde se dozvíte, jak monitorovat a řešit potíže s aplikací cloudového úložiště.