Sichern des Zugriffs auf die Daten einer Anwendung in der CloudSecure access to an application's data in the cloud

Dieses Tutorial ist der dritte Teil einer Reihe.This tutorial is part three of a series. Hier erfahren Sie, wie Sie den Zugriff auf das Speicherkonto sichern.You learn how to secure access to the storage account.

Im dritten Teil der Serie lernen Sie Folgendes:In part three of the series, you learn how to:

  • Verwenden von SAS-Token, um auf Miniaturbilder zuzugreifenUse SAS tokens to access thumbnail images
  • Aktivieren der serverseitigen VerschlüsselungTurn on server-side encryption
  • Aktivieren der Übertragung nur über HTTPSEnable HTTPS-only transport

Azure Blob Storage ist ein zuverlässiger Dienst zum Speichern von Dateien für Anwendungen.Azure blob storage provides a robust service to store files for applications. Dieses Tutorial baut auf das vorhergehende Thema auf und veranschaulicht, wie Sie den Zugriff auf Ihr Speicherkonto aus einer Webanwendung sichern.This tutorial extends the previous topic to show how to secure access to your storage account from a web application. Nach Abschluss sind die Bilder verschlüsselt, und die Web-App verwendet sichere SAS-Token für den Zugriff auf die Miniaturbilder.When you're finished the images are encrypted and the web app uses secure SAS tokens to access the thumbnail images.

VoraussetzungenPrerequisites

Damit Sie dieses Tutorial abschließen können, müssen Sie das vorherige Storage-Tutorial abgeschlossen haben: Automatisieren der Größenänderung von hochgeladenen Images mit Event Grid.To complete this tutorial you must have completed the previous Storage tutorial: Automate resizing uploaded images using Event Grid.

Festlegen des öffentlichen Zugriffs auf den ContainerSet container public access

In diesem Teil der Tutorialreihe werden SAS-Token für den Zugriff auf die Miniaturbilder verwendet.In this part of the tutorial series, SAS tokens are used for accessing the thumbnails. In diesem Schritt legen Sie den öffentlichen Zugriff auf den Container thumbnails auf off fest.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 \
-n $blobStorageAccount --query [0].value --output tsv) 

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

Konfigurieren von SAS-Token für MiniaturbilderConfigure SAS tokens for thumbnails

In Teil 1 dieser Tutorialreihe wurden Bilder aus einem öffentlichen Container in der Webanwendung angezeigt.In part one of this tutorial series, the web application was showing images from a public container. In diesem Teil der Reihe verwenden Sie SAS-Token (Shared Access Signature), um die Miniaturbilder abzurufen.In this part of the series, you use Shared Access Signature (SAS) tokens to retrieve the thumbnail images. SAS-Token ermöglichen den eingeschränkten Zugriff auf einen Container oder ein Blob in Abhängigkeit von IP, Protokoll, Zeitintervall und gewährten Rechten.SAS tokens allow you to provide restricted access to a container or blob based on IP, protocol, time interval, or rights allowed.

In diesem Beispiel wird der Branch sasTokens im Quellcoderepository verwendet, der ein aktualisiertes Codebeispiel enthält.In this example, the source code repository uses the sasTokens branch, which has an updated code sample. Löschen Sie die vorhandene GitHub-Bereitstellung mit az webapp deployment source delete.Delete the existing GitHub deployment with the az webapp deployment source delete. Anschließend konfigurieren Sie die GitHub-Bereitstellung für die Web-App mit dem Befehl az webapp deployment source config.Next, configure GitHub deployment to the web app with the az webapp deployment source config command.

Im folgenden Befehl ist <web-app> der Name Ihrer Web-App.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

Mit dem Branch sasTokens des Repositorys wird die Datei StorageHelper.cs aktualisiert.The sasTokens branch of the repository updates the StorageHelper.cs file. Diese ersetzt den Task GetThumbNailUrls durch das Codebeispiel unten.It replaces the GetThumbNailUrls task with the code example below. Der aktualisierte Task ruft die Miniaturbild-URLs ab, indem eine SharedAccessBlobPolicy so festgelegt wird, dass sie die Anfangszeit, die Ablaufzeit und die Berechtigungen für das SAS-Token angibt.The updated task retrieves the thumbnail URLs by setting a SharedAccessBlobPolicy to specify the start time, expiry time, and permissions for the SAS token. Nach der Bereitstellung der Web-App werden die Miniaturbilder über eine URL mit einem SAS-Token abgerufen.Once deployed the web app now retrieves the thumbnails with a URL using a SAS token. Der aktualisierte Task ist im folgenden Beispiel dargestellt: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 storagecredentials object by reading the values from the configuration (appsettings.json)
    StorageCredentials storageCredentials = new StorageCredentials(_storageConfig.AccountName, _storageConfig.AccountKey);

    // Create cloudstorage account by passing the storagecredentials
    CloudStorageAccount storageAccount = new CloudStorageAccount(storageCredentials, true);

    // Create blob client
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

    // Get reference to the container
    CloudBlobContainer container = blobClient.GetContainerReference(_storageConfig.ThumbnailContainer);

    BlobContinuationToken continuationToken = null;

    BlobResultSegment resultSegment = null;

    //Call ListBlobsSegmentedAsync and enumerate the result segment returned, while the continuation token is non-null.
    //When the continuation token is null, the last page has been returned and execution can exit the loop.
    do
    {
        //This overload allows control of the page size. You can return all remaining results by passing null for the maxResults parameter,
        //or by calling a different overload.
        resultSegment = await container.ListBlobsSegmentedAsync("", true, BlobListingDetails.All, 10, continuationToken, null, null);

        foreach (var blobItem in resultSegment.Results)
        {
            CloudBlockBlob blob = blobItem as CloudBlockBlob;
            //Set the expiry time and permissions for the blob.
            //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.
            SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy();

            sasConstraints.SharedAccessStartTime = DateTimeOffset.UtcNow.AddMinutes(-5);

            sasConstraints.SharedAccessExpiryTime = DateTimeOffset.UtcNow.AddHours(24);

            sasConstraints.Permissions = SharedAccessBlobPermissions.Read;

            //Generate the shared access signature on the blob, setting the constraints directly on the signature.
            string sasBlobToken = blob.GetSharedAccessSignature(sasConstraints);

            //Return the URI string for the container, including the SAS token.
            thumbnailUrls.Add(blob.Uri + sasBlobToken);

        }

        //Get the continuation token.
        continuationToken = resultSegment.ContinuationToken;
    }

    while (continuationToken != null);

    return await Task.FromResult(thumbnailUrls);
}

Die folgenden Klassen, Eigenschaften und Methoden werden im vorhergehenden Task verwendet:The following classes, properties, and methods are used in the preceding task:

KlasseClass EigenschaftenProperties MethodenMethods
StorageCredentialsStorageCredentials
CloudStorageAccountCloudStorageAccount CreateCloudBlobClientCreateCloudBlobClient
CloudBlobClientCloudBlobClient GetContainerReferenceGetContainerReference
CloudBlobContainerCloudBlobContainer SetPermissionsAsyncSetPermissionsAsync
ListBlobsSegmentedAsyncListBlobsSegmentedAsync
BlobContinuationTokenBlobContinuationToken
BlobResultSegmentBlobResultSegment ErgebnisseResults
CloudBlockBlobCloudBlockBlob GetSharedAccessSignatureGetSharedAccessSignature
SharedAccessBlobPolicySharedAccessBlobPolicy SharedAccessStartTimeSharedAccessStartTime
SharedAccessExpiryTimeSharedAccessExpiryTime
BerechtigungenPermissions

Serverseitige VerschlüsselungServer-side encryption

Azure Storage Service Encryption (SSE) vereinfacht das Sichern und Schützen Ihrer Daten.Azure Storage Service Encryption (SSE) helps you protect and safeguard your data. SSE verschlüsselt ruhende Daten und übernimmt die Verschlüsselung, die Entschlüsselung und die Schlüsselverwaltung.SSE encrypts data at rest, handling encryption, decryption, and key management. Sämtliche Daten werden mittels 256-Bit- AES-Verschlüsselungverschlüsselt, einem der sichersten verfügbaren Blockverschlüsselungsverfahren.All data is encrypted using 256-bit AES encryption, one of the strongest block ciphers available.

SSE verschlüsselt die Daten automatisch in allen Leistungsebenen (Standard oder Premium), allen Bereitstellungsmodellen (Azure Resource Manager und Classic) sowie allen Azure Storage-Diensten (Blob, Queue, Table und File).SSE 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).

Aktivieren der Übertragung nur über HTTPSEnable HTTPS only

Damit Anforderungen von Daten in und aus einem Speicherkonto geschützt sind, können Sie die Anforderungen auf HTTPS beschränken.In order to ensure that requests for data to and from a storage account are secure, you can limit requests to HTTPS only. Aktualisieren Sie das für das Speicherkonto erforderliche Protokoll mit dem Befehl 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

Testen Sie die Verbindung mit curl über das HTTP-Protokoll.Test the connection using curl using the HTTP protocol.

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

Da jetzt die sichere Übertragung aktiviert ist, erhalten Sie die folgende Meldung:Now that secure transfer is required, you receive the following message:

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

Nächste SchritteNext steps

In Teil 3 der Reihe haben Sie gelernt, wie Sie den Zugriff auf das Speicherkonto über folgende Vorgänge sichern:In part three of the series, you learned how to secure access to the storage account, such as how to:

  • Verwenden von SAS-Token, um auf Miniaturbilder zuzugreifenUse SAS tokens to access thumbnail images
  • Aktivieren der serverseitigen VerschlüsselungTurn on server-side encryption
  • Aktivieren der Übertragung nur über HTTPSEnable HTTPS-only transport

Fahren Sie mit Teil 4 der Reihe fort, um zu erfahren, wie Sie Überwachung und Problembehandlung für eine Cloudspeicheranwendung durchführen.Advance to part four of the series to learn how to monitor and troubleshoot a cloud storage application.