Uygulama verilerine güvenli erişim

Bu öğretici, bir serinin üçüncü bölümüdür. Depolama hesabına erişim güvenliğinin nasıl sağlanacağını öğrenirsiniz.

Serinin üçüncü bölümünde şunları öğrenirsiniz:

  • Küçük resimlere erişmek için SAS belirteçlerini kullanma
  • Sunucu tarafı şifrelemesini açma
  • Yalnızca HTTPS taşımasını etkinleştirme

Azure blob depolama, uygulamalara ilişkin dosyaları depolamak için sağlam bir hizmet sağlar. Bu öğretici, bir web uygulamasından depolama hesabınıza erişim güvenliğinin nasıl sağlanacağını göstermek için önceki konuyu genişletir. İş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.

Önkoşullar

Bu öğreticiyi tamamlamak için önceki şu Depolama öğreticisini tamamlamış olmanız gerekir: Karşıya yüklenen görüntüleri yeniden boyutlandırmayı Event Grid kullanarak otomatikleştirme.

Kapsayıcı genel erişimini ayarlama

Öğretici serisinin bu kısmında, küçük resimlere erişmek için SAS belirteçleri kullanılır. Bu adımda, thumbnails kapsayıcısının genel erişimini off olarak ayarlarsınız.

$blobStorageAccount="<blob_storage_account>"

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

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

Küçük resimler için SAS belirteçlerini yapılandırma

Bu öğretici serisinin birinci kısmında web uygulaması, bir genel kapsayıcıdaki görüntüleri gösteriyordu. Serinin bu bölümünde, küçük resim görüntülerini almak için paylaşılan erişim imzaları (SAS) belirteçleri kullanırsiniz. 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 hakkında daha fazla bilgi için bkz. Paylaşılan erişim imzaları (SAS) kullanarak Azure Depolama kaynaklara sınırlı erişim izni ver.

Bu örnekte kaynak kod deposu, güncelleştirilmiş bir kod örneği içeren sasTokens dalını kullanır. az webapp deployment source delete komutuyla mevcut GitHub dağıtımını silin. Sonra az webapp deployment source config komutuyla web uygulamasına GitHub dağıtımını yapılandırın.

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

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

Deponun sasTokens dalı, StorageHelper.cs dosyasını güncelleştirir. GetThumbNailUrls görevini, aşağıdaki kod örneğiyle değiştirir. Güncelleştirilmiş görev, SAS belirteci için başlangıç saati, süre sonu saati ve izinleri belirtmek üzere blobSasBuilder kullanarak küçük resim URL'lerini alır. Dağıtıldıktan sonra web uygulaması artık bir SAS belirteci kullanarak URL ile küçük resimleri alır. Aşağıdaki örnekte güncelleştirilmiş görev gösterilmektedir:

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

Yukarıdaki görevde, aşağıdaki sınıflar, özellikler ve yöntemler kullanılır:

Sınıf Özellikler Yöntemler
StorageSharedKeyCredential
BlobServiceClient GetBlobContainerClient
BlobContainerClient Urı Var
GetBlobs
BlobSasBuilder Setpermissions
ToSasQueryParameters
BlobItem Ad
Uribuilder Sorgu
Liste Ekle

Azure Depolama şifrelemesi

Azure Depolama şifrelemesi, beklemede verileri şifreleerek ve şifreleme ile şifre çözmeyi işerek verilerinizi korumanıza ve korumanıza yardımcı olur. Verilerin tamamı, mevcut en güçlü blok şifreleme özelliklerinden biri olan 256 bit AES şifrelemesi ile şifrelenir.

Microsoft'un şifreleme anahtarlarını yönetmesini seçebilir veya Azure Key Vault veya Key Vault Yönetilen Donanım Güvenlik Modeli (HSM) (önizleme) içinde depolanan müşteri tarafından yönetilen anahtarlarla kendi anahtarlarınızı getirebiliyor olun. Daha fazla bilgi için bkz. Azure için müşteri tarafından yönetilen anahtarlar Depolama.

Azure Depolama şifrelemesi tüm performans katmanlarında (Standart ve Premium), tüm dağıtım modellerinde (Azure Resource Manager ve Klasik) ve tüm Azure Depolama hizmetlerinde (Blob, Kuyruk, Tablo ve Dosya) verileri otomatik olarak şifreler.

Yalnızca HTTPS'yi etkinleştirme

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. az storage account update komutunu kullanarak depolama hesabı için gerekli protokolü güncelleştirin.

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.

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:

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

Sonraki adımlar

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:

  • Küçük resimlere erişmek için SAS belirteçlerini kullanma
  • Sunucu tarafı şifrelemesini açma
  • Yalnızca HTTPS taşımasını etkinleştirme

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.