Proteger o acesso aos dados do aplicativoSecure access to application data

Este tutorial é a parte três de uma série.This tutorial is part three of a series. Aprenda a proteger o acesso à conta de armazenamento.You learn how to secure access to the storage account.

Na terceira parte da série, você aprenderá a:In part three of the series, you learn how to:

  • Usar tokens SAS para acessar imagens em miniaturaUse SAS tokens to access thumbnail images
  • Ativar a criptografia no lado do servidorTurn on server-side encryption
  • Habilitar o transporte somente para HTTPSEnable HTTPS-only transport

O Armazenamento de Blobs do Azure fornece um serviço robusto para armazenar arquivos de aplicativos.Azure blob storage provides a robust service to store files for applications. Este tutorial estende o tópico anterior para mostrar como proteger o acesso à sua conta de armazenamento de um aplicativo Web.This tutorial extends the previous topic to show how to secure access to your storage account from a web application. Quando você terminar as imagens são criptografadas e o aplicativo Web usa tokens SAS seguros para acessar as imagens em miniatura.When you're finished the images are encrypted and the web app uses secure SAS tokens to access the thumbnail images.

Pré-requisitosPrerequisites

Para concluir este tutorial, você deve ter concluído o tutorial anterior de Armazenamento: Automatizar o redimensionamento de imagens carregadas usando a Grade de Eventos.To complete this tutorial you must have completed the previous Storage tutorial: Automate resizing uploaded images using Event Grid.

Configurar o acesso público ao contêinerSet container public access

Nesta parte da série de tutoriais, os tokens SAS são usadas para acessar as miniaturas.In this part of the tutorial series, SAS tokens are used for accessing the thumbnails. Nesta etapa, você define o acesso público do contêiner de miniaturas para off.In this step, you set the public access of the thumbnails container to off.

blobStorageAccount="<blob_storage_account>"

blobStorageAccountKey=$(az storage account keys list -g myResourceGroup \
    --account-name $blobStorageAccount --query [0].value --output tsv) 

az storage container set-permission \
    --account-name $blobStorageAccount \
    --account-key $blobStorageAccountKey \
    --name thumbnails \
    --public-access off
$blobStorageAccount="<blob_storage_account>"

blobStorageAccountKey=$(az storage account keys list -g myResourceGroup `
    --account-name $blobStorageAccount --query [0].value --output tsv) 

az storage container set-permission `
    --account-name $blobStorageAccount `
    --account-key $blobStorageAccountKey `
    --name thumbnails `
    --public-access off

Configurar tokens SAS para miniaturasConfigure SAS tokens for thumbnails

Na parte um dessa série de tutoriais, o aplicativo Web estava mostrando imagens de um contêiner público.In part one of this tutorial series, the web application was showing images from a public container. Nesta parte da série, você usa tokens de SAS (assinaturas de acesso compartilhado) para recuperar as imagens em miniatura.In this part of the series, you use shared access signatures (SAS) tokens to retrieve the thumbnail images. Os tokens SAS permitem que você forneça acesso restrito a um contêiner ou blob com base em IP, protocolo, intervalo de tempo ou direitos permitidos.SAS tokens allow you to provide restricted access to a container or blob based on IP, protocol, time interval, or rights allowed. Para obter mais informações sobre SAS, confira Conceder acesso limitado a recursos de Armazenamento do Azure usando SAS (assinaturas de acesso compartilhado).For more information about SAS, see Grant limited access to Azure Storage resources using shared access signatures (SAS).

Neste exemplo, o repositório de código-fonte usa o branch sasTokens, que tem um exemplo de código atualizado.In this example, the source code repository uses the sasTokens branch, which has an updated code sample. Exclua a implantação existente do GitHub com o az webapp deployment source delete.Delete the existing GitHub deployment with the az webapp deployment source delete. Em seguida, configure a implantação do GitHub para o aplicativo Web com o comando az webapp deployment source config.Next, configure GitHub deployment to the web app with the az webapp deployment source config command.

No comando a seguir, <web-app> é o nome do seu aplicativo Web.In the following command, <web-app> is the name of your web app.

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

O branch sasTokens do repositório atualiza o arquivo StorageHelper.cs.The sasTokens branch of the repository updates the StorageHelper.cs file. Ele substitui a tarefa GetThumbNailUrls com o exemplo de código abaixo.It replaces the GetThumbNailUrls task with the code example below. A tarefa atualizada recupera as URLs de miniatura usando um BlobSasBuilder para especificar a hora de início, a hora de expiração e as permissões para o token SAS.The updated task retrieves the thumbnail URLs by using a BlobSasBuilder to specify the start time, expiry time, and permissions for the SAS token. Uma vez implantado, o aplicativo Web agora recupera as miniaturas com uma URL usando um token SAS.Once deployed the web app now retrieves the thumbnails with a URL using a SAS token. A tarefa atualizada é mostrada no exemplo a seguir:The updated task is shown in the following example:

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

As classes, propriedades e métodos a seguir são usados na tarefa anterior:The following classes, properties, and methods are used in the preceding task:

ClasseClass PropriedadesProperties MétodosMethods
StorageSharedKeyCredentialStorageSharedKeyCredential
BlobServiceClientBlobServiceClient GetBlobContainerClientGetBlobContainerClient
BlobContainerClientBlobContainerClient UriUri ExistsExists
GetBlobsGetBlobs
BlobSasBuilderBlobSasBuilder SetPermissionsSetPermissions
ToSasQueryParametersToSasQueryParameters
BlobItemBlobItem NomeName
UriBuilderUriBuilder ConsultaQuery
ListaList AdicionarAdd

Criptografia de Armazenamento do AzureAzure Storage encryption

A Criptografia do Armazenamento do Azure ajuda a proteger e resguardar seus dados criptografando-os em repouso e manipulando a criptografia e a descriptografia.Azure Storage encryption helps you protect and safeguard your data by encrypting data at rest and by handling encryption and decryption. Todos os dados são criptografados usando a criptografia AESde 256 bits, um dos codificadores de blocos mais potentes.All data is encrypted using 256-bit AES encryption, one of the strongest block ciphers available.

Você pode optar por a Microsoft gerenciar as chaves de criptografia ou trazer suas próprias chaves com chaves gerenciadas pelo cliente com o Azure Key Vault.You can choose to have Microsoft manage encryption keys, or you can bring your own keys with customer-managed keys with Azure Key Vault. Para obter mais informações, confira Usar chaves gerenciadas pelo cliente com o Azure Key Vault para gerenciar a criptografia do Armazenamento do Azure.For more information, see Use customer-managed keys with Azure Key Vault to manage Azure Storage encryption.

A criptografia do Armazenamento do Azure criptografa automaticamente os dados em todos os níveis de desempenho (Standard e Premium), em todos os modelos de implantação (Azure Resource Manager e Clássico) e em todos os serviços do Armazenamento do Azure (Blobs, Filas, Tabelas e Arquivos).Azure Storage encryption automatically encrypts data in all performance tiers (Standard and Premium), all deployment models (Azure Resource Manager and Classic), and all of the Azure Storage services (Blob, Queue, Table, and File).

Habilitar o HTTPS apenasEnable HTTPS only

Para garantir que as solicitações de dados de e para uma conta de armazenamento são seguras, você pode limitar solicitações para HTTPS apenas.In order to ensure that requests for data to and from a storage account are secure, you can limit requests to HTTPS only. Atualize o protocolo necessário da conta de armazenamento usando o comando az storage account update.Update the storage account required protocol by using the az storage account update command.

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

Teste a conexão usando curl que usa o protocolo HTTP.Test the connection using curl using the HTTP protocol.

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

Agora que a transferência segura é necessária, você pode receber a seguinte mensagem:Now that secure transfer is required, you receive the following message:

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

Próximas etapasNext steps

Na parte três da série, você aprendeu como proteger o acesso à conta de armazenamento, como:In part three of the series, you learned how to secure access to the storage account, such as how to:

  • Usar tokens SAS para acessar imagens em miniaturaUse SAS tokens to access thumbnail images
  • Ativar a criptografia no lado do servidorTurn on server-side encryption
  • Habilitar o transporte somente para HTTPSEnable HTTPS-only transport

Avance para a parte quatro da série para saber como monitorar e resolver problemas de um aplicativo de armazenamento de nuvem.Advance to part four of the series to learn how to monitor and troubleshoot a cloud storage application.