Bulutta uygulama verilerine erişimin güvenliğini sağlamaSecure access to an application's data in the cloud

Bu öğretici, bir serinin üçüncü bölümüdür.This tutorial is part three of a series. Depolama hesabına erişim güvenliğinin nasıl sağlanacağını öğrenirsiniz.You learn how to secure access to the storage account.

Serinin üçüncü bölümünde şunları öğrenirsiniz:In part three of the series, you learn how to:

  • Küçük resimlere erişmek için SAS belirteçlerini kullanmaUse SAS tokens to access thumbnail images
  • Sunucu tarafı şifrelemesini açmaTurn on server-side encryption
  • Yalnızca HTTPS taşımasını etkinleştirmeEnable HTTPS-only transport

Azure blob depolama, uygulamalara ilişkin dosyaları depolamak için sağlam bir hizmet sağlar.Azure blob storage provides a robust service to store files for applications. Bu öğretici, bir Web uygulamasından Depolama Hesabınıza erişimin nasıl güvenli hale alınacağını göstermek için önceki konuyu genişletir.This tutorial extends the previous topic to show how to secure access to your storage account from a web application. İşiniz bittiğinde görüntüler şifrelenir ve web uygulaması, küçük resimlere erişmek için güvenli SAS belirteçlerini kullanır.When you're finished the images are encrypted and the web app uses secure SAS tokens to access the thumbnail images.

ÖnkoşullarPrerequisites

Bu öğreticiyi tamamlayabilmeniz için önceki depolama öğreticisini tamamlamış olmanız gerekir: Event Grid kullanarak karşıya yüklenen görüntüleri yeniden boyutlandırmayı otomatikleştirin.To complete this tutorial you must have completed the previous Storage tutorial: Automate resizing uploaded images using Event Grid.

Kapsayıcı genel erişimini ayarlamaSet container public access

Öğretici serisinin bu kısmında, küçük resimlere erişmek için SAS belirteçleri kullanılır.In this part of the tutorial series, SAS tokens are used for accessing the thumbnails. Bu adımda, thumbnails kapsayıcısının genel erişimini off olarak ayarlarsınız.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

Küçük resimler için SAS belirteçlerini yapılandırmaConfigure SAS tokens for thumbnails

Bu öğretici serisinin birinci kısmında web uygulaması, bir genel kapsayıcıdaki görüntüleri gösteriyordu.In part one of this tutorial series, the web application was showing images from a public container. Serinin bu bölümünde, küçük resim görüntülerini almak için paylaşılan erişim imzaları (SAS) belirteçlerini kullanırsınız.In this part of the series, you use shared access signatures (SAS) tokens to retrieve the thumbnail images. SAS belirteçleri; IP, protokol, zaman aralığı veya izin verilen haklar temelinde bir kapsayıcıya ya da bloba kısıtlı erişim sağlamanıza olanak verir.SAS tokens allow you to provide restricted access to a container or blob based on IP, protocol, time interval, or rights allowed. SAS hakkında daha fazla bilgi için bkz. paylaşılan erişim imzaları (SAS) kullanarak Azure depolama kaynaklarına sınırlı erişim verme.For more information about SAS, see Grant limited access to Azure Storage resources using shared access signatures (SAS).

Bu örnekte kaynak kod deposu, güncelleştirilmiş bir kod örneği içeren sasTokens dalını kullanır.In this example, the source code repository uses the sasTokens branch, which has an updated code sample. az webapp deployment source delete komutuyla mevcut GitHub dağıtımını silin.Delete the existing GitHub deployment with the az webapp deployment source delete. Sonra az webapp deployment source config komutuyla web uygulamasına GitHub dağıtımını yapılandırın.Next, configure GitHub deployment to the web app with the az webapp deployment source config command.

Aşağıdaki komutta <web-app>, web uygulamanızın adıdır.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

Deponun sasTokens dalı, StorageHelper.cs dosyasını güncelleştirir.The sasTokens branch of the repository updates the StorageHelper.cs file. GetThumbNailUrls görevini, aşağıdaki kod örneğiyle değiştirir.It replaces the GetThumbNailUrls task with the code example below. Güncelleştirilmiş görev, SAS belirtecine yönelik izinleri, başlangıç zamanını ve süre sonunu belirtmek için bir SharedAccessBlobPolicy ayarlayarak küçük resim URL’lerini alır.The updated task retrieves the thumbnail URLs by setting a SharedAccessBlobPolicy to specify the start time, expiry time, and permissions for the SAS token. Dağıtıldıktan sonra web uygulaması artık bir SAS belirteci kullanarak URL ile küçük resimleri alır.Once deployed the web app now retrieves the thumbnails with a URL using a SAS token. Aşağıdaki örnekte güncelleştirilmiş görev gösterilmektedir: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);
}

Yukarıdaki görevde, aşağıdaki sınıflar, özellikler ve yöntemler kullanılır:The following classes, properties, and methods are used in the preceding task:

SınıfClass ÖzelliklerProperties YöntemlerMethods
StorageCredentialsStorageCredentials
CloudStorageAccountCloudStorageAccount CreateCloudBlobClientCreateCloudBlobClient
CloudBlobClientCloudBlobClient GetContainerReferenceGetContainerReference
CloudBlobContainerCloudBlobContainer SetPermissionsAsyncSetPermissionsAsync
ListBlobsSegmentedAsyncListBlobsSegmentedAsync
BlobContinuationTokenBlobContinuationToken
BlobResultSegmentBlobResultSegment SonuçlarResults
CloudBlockBlobCloudBlockBlob GetSharedAccessSignatureGetSharedAccessSignature
SharedAccessBlobPolicySharedAccessBlobPolicy SharedAccessStartTimeSharedAccessStartTime
SharedAccessExpiryTimeSharedAccessExpiryTime
İzinlerPermissions

Sunucu tarafı şifrelemesiServer-side encryption

Azure Depolama Hizmeti Şifrelemesi (SSE), verilerinizi korumanıza ve muhafaza etmenize yardımcı olur.Azure Storage Service Encryption (SSE) helps you protect and safeguard your data. SSE, bekleyen verileri şifreleyerek şifreleme, şifre çözme ve anahtar yönetimini işler.SSE encrypts data at rest, handling encryption, decryption, and key management. Verilerin tamamı, mevcut en güçlü blok şifreleme özelliklerinden biri olan 256 bit AES şifrelemesi ile şifrelenir.All data is encrypted using 256-bit AES encryption, one of the strongest block ciphers available.

SSE tüm performans katmanları (Standart ve Premium), tüm dağıtım modelleri (Azure Resource Manager ve Klasik) ve tüm Azure Depolama hizmetlerinde (Blob, Kuyruk, Tablo ve Dosya) verileri otomatik olarak şifreler.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).

Yalnızca HTTPS'yi etkinleştirmeEnable HTTPS only

Depolama hesabına gelen ve depolama hesabından giden isteklerin güvenli olduğundan emin olmak için istekleri yalnızca HTTPS ile sınırlayabilirsiniz.In order to ensure that requests for data to and from a storage account are secure, you can limit requests to HTTPS only. az storage account update komutunu kullanarak depolama hesabı için gerekli protokolü güncelleştirin.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

HTTP protokolünü kullanarak curl kullanan bağlantıyı test edin.Test the connection using curl using the HTTP protocol.

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

Artık güvenli aktarım gerekli olduğundan şu iletiyi alırsınız:Now that secure transfer is required, you receive the following message:

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

Sonraki adımlarNext steps

Serinin üçüncü kısmında, aşağıda örnekleri verilen eylemlerle birlikte depolama hesabına erişim güvenliğinin nasıl sağlanacağını öğrendiniz:In part three of the series, you learned how to secure access to the storage account, such as how to:

  • Küçük resimlere erişmek için SAS belirteçlerini kullanmaUse SAS tokens to access thumbnail images
  • Sunucu tarafı şifrelemesini açmaTurn on server-side encryption
  • Yalnızca HTTPS taşımasını etkinleştirmeEnable HTTPS-only transport

Bulut depolama uygulamasının nasıl izleneceğini ve sorunlarının nasıl giderileceğini öğrenmek için serinin dördüncü kısmına ilerleyin.Advance to part four of the series to learn how to monitor and troubleshoot a cloud storage application.