Oktatóanyag: Blobok titkosítása és visszafejtése az Azure Key Vaulttal
Ebben az oktatóanyagban megtudhatja, hogyan használhat ügyféloldali titkosítást a blobok titkosítására és visszafejtésére az Azure Key Vaultban tárolt kulccsal.
Az Azure Blob Storage szolgáltatásoldali és ügyféloldali titkosítást is támogat. A legtöbb forgatókönyv esetében a Microsoft szolgáltatásoldali titkosítási funkciók használatát javasolja az adatok védelme érdekében. A szolgáltatásoldali titkosítással kapcsolatos további információkért tekintse meg az Inaktív adatok Azure Storage-titkosítását.
A .NET-hez készült Azure Blob Storage ügyfélkódtár támogatja az alkalmazások ügyféloldali adattitkosítását, mielőtt feltöltené az Azure Storage-ba, és visszafejtené az adatokat az ügyfélre való letöltés során. A kódtár az Azure Key Vaulttal való integrációt is támogatja a kulcskezeléshez.
Ez az oktatóanyag a következőket mutatja be:
- Azure Key Vault-erőforrás engedélyeinek konfigurálása
- Konzolalkalmazás létrehozása az erőforrások .NET-ügyfélkódtárak használatával történő használatához
- Kulcs hozzáadása kulcstartóhoz
- Ügyféloldali titkosítási beállítások konfigurálása kulcstartóban tárolt kulccsal
- Blobszolgáltatás-ügyfélobjektum létrehozása az ügyféloldali titkosítás engedélyezésével
- Titkosított blob feltöltése, majd a blob letöltése és visszafejtése
Előfeltételek
- Azure-előfizetés – fiók létrehozása ingyenesen
- Azure Storage-fiók – tárfiók létrehozása
- Key Vault – hozzon létre egyet az Azure Portal, az Azure CLI vagy a PowerShell használatával
- A Visual Studio 2022 telepítve van
Szerepkör hozzárendelése a Microsoft Entra-felhasználóhoz
Helyi fejlesztéskor győződjön meg arról, hogy a kulcstartóhoz hozzáférő felhasználói fiók rendelkezik a megfelelő engedélyekkel. Kulcs létrehozásához és a kulcstartó kulcsainak végrehajtásához a Key Vault crypto officer szerepkörre lesz szüksége. Azure RBAC-szerepköröket rendelhet egy felhasználóhoz az Azure Portal, az Azure CLI vagy az Azure PowerShell használatával. A szerepkör-hozzárendelések elérhető hatóköreiről a hatókör áttekintési oldalán tudhat meg többet.
Ebben a forgatókönyvben engedélyeket rendel a felhasználói fiókjához, amely a kulcstartóra terjed ki, hogy kövesse a minimális jogosultság elvét. Ez a gyakorlat csak a minimálisan szükséges engedélyeket biztosítja a felhasználóknak, és biztonságosabb éles környezeteket hoz létre.
Az alábbi példa bemutatja, hogyan rendelheti hozzá a Key Vault crypto officer szerepkört a felhasználói fiókjához, amely biztosítja az oktatóanyag elvégzéséhez szükséges hozzáférést.
Fontos
A szerepkör-hozzárendelés propagálása a legtöbb esetben egy-két percet vesz igénybe az Azure-ban, de ritkán akár nyolc percet is igénybe vehet. Ha hitelesítési hibákat kap a kód első futtatásakor, várjon néhány percet, és próbálkozzon újra.
Az Azure Portalon keresse meg a kulcstartót a fő keresősávon vagy a bal oldali navigációs sávon.
A Key Vault áttekintési oldalán válassza a Hozzáférés-vezérlés (IAM) lehetőséget a bal oldali menüben.
A Hozzáférés-vezérlés (IAM) lapon válassza a Szerepkör-hozzárendelések lapot.
Válassza a +Hozzáadás lehetőséget a felső menüből, majd a szerepkör-hozzárendelés hozzáadása lehetőséget az eredményül kapott legördülő menüből.
A keresőmezővel szűrheti az eredményeket a kívánt szerepkörre. Ebben a példában keresse meg a Key Vault titkosítási tisztjét, és válassza ki a megfelelő eredményt, majd válassza a Tovább gombot.
A Hozzáférés hozzárendelése területen válassza a Felhasználó, csoport vagy szolgáltatásnév lehetőséget, majd válassza a + Tagok kijelölése lehetőséget.
A párbeszédpanelen keresse meg a Microsoft Entra-felhasználónevet (általában a user@domain e-mail-címét), majd válassza a Párbeszédpanel alján található Kiválasztás lehetőséget.
Válassza a Véleményezés + hozzárendelés lehetőséget a végső lapra való ugráshoz, majd a folyamat befejezéséhez a Véleményezés + hozzárendelés lehetőséget.
A projekt beállítása
Egy konzolablakban (például a PowerShellben vagy a Bashben) a
dotnet new
paranccsal hozzon létre egy új, BlobEncryptionKeyVault nevű konzolalkalmazást. Ez a parancs egy egyszerű "„Helló világ!” alkalmazás" C#-projektet hoz létre egyetlen forrásfájllal: Program.cs.dotnet new console -n BlobEncryptionKeyVault
Váltson az újonnan létrehozott BlobEncryptionKeyVault könyvtárra .
cd BlobEncryptionKeyVault
Nyissa meg a projektet a kívánt kódszerkesztőben. A projekt megnyitása a következő helyen:
- Visual Studio, keresse meg és kattintson duplán a
BlobEncryptionKeyVault.csproj
fájlra. - A Visual Studio Code futtassa a következő parancsot:
code .
- Visual Studio, keresse meg és kattintson duplán a
Az Azure-szolgáltatások ebben a példában való használatához telepítse a következő ügyfélkódtárakat a következő használatával dotnet add package
.
dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Keys
dotnet add package Azure.Storage.Blobs
Adja hozzá a következő using
irányelveket, és mindenképpen adjon hozzá egy hivatkozást a projekthez System.Configuration
.
using Azure;
using Azure.Core;
using Azure.Identity;
using Azure.Security.KeyVault.Keys;
using Azure.Security.KeyVault.Keys.Cryptography;
using Azure.Storage;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
Környezeti változó beállítása
Ez az alkalmazás egy környezeti változót keres, amely lekéri KEY_VAULT_NAME
a kulcstartó nevét. A környezeti változó beállításához nyisson meg egy konzolablakot, és kövesse az operációs rendszer utasításait. Cserélje le <your-key-vault-name>
a kulcstartó nevére.
Windows:
A windowsos környezeti változókat a parancssorból állíthatja be. Ha azonban ezt a megközelítést használja, az értékek az adott operációs rendszeren futó összes alkalmazás számára elérhetők, és ütközéseket okozhatnak, ha nem körültekintő. A környezeti változók felhasználói vagy rendszerszinten állíthatók be:
setx KEY_VAULT_NAME "<your-key-vault-name>"
Miután hozzáadta a környezeti változót a Windowsban, el kell indítania a parancsablak új példányát. Ha Windows rendszeren használja a Visual Studiót, előfordulhat, hogy újra kell indítania a Visual Studiót, miután létrehozta a környezeti változót a változás észleléséhez.
Linux:
export KEY_VAULT_NAME=<your-key-vault-name>
Kulcs hozzáadása az Azure Key Vaultban
Ebben a példában létrehozunk egy kulcsot, és hozzáadjuk a kulcstartóhoz az Azure Key Vault ügyfélkódtár használatával. Kulcsokat az Azure CLI, az Azure Portal vagy a PowerShell használatával is létrehozhat és hozzáadhat egy kulcstartóhoz.
Az alábbi mintában létrehozunk egy KeyClient-objektumot a megadott tárolóhoz. Az KeyClient
objektum ezután egy új RSA-kulcs létrehozására szolgál a megadott tárolóban.
var keyName = "testRSAKey";
var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
// URI for the key vault resource
var keyVaultUri = $"https://{keyVaultName}.vault.azure.net";
TokenCredential tokenCredential = new DefaultAzureCredential();
// Create a KeyClient object
var keyClient = new KeyClient(new Uri(keyVaultUri), tokenCredential);
// Add a key to the key vault
var key = await keyClient.CreateKeyAsync(keyName, KeyType.Rsa);
Kulcs- és kulcsfeloldópéldányok létrehozása
Ezután a tárolóhoz most hozzáadott kulccsal hozzuk létre a titkosítási ügyfél- és kulcsfeloldópéldányokat. A CryptographyClient implementálja az IKeyEncryptionKey-t , és az Azure Key Vaultban tárolt kulcsokkal végzett titkosítási műveletek végrehajtására szolgál. A KeyResolver implementálja az IKeyEncryptionResolvert , és lekéri a kulcstitkosítási kulcsokat a kulcsazonosítóból, és feloldja a kulcsot.
// Cryptography client and key resolver instances using Azure Key Vault client library
CryptographyClient cryptoClient = keyClient.GetCryptographyClient(key.Value.Name, key.Value.Properties.Version);
KeyResolver keyResolver = new (tokenCredential);
Ha rendelkezik egy meglévő kulccsal a tárolóban, amellyel titkosítani szeretné, a kulcs- és kulcsfeloldó példányokat az URI-ban való átadással hozhatja létre:
var keyVaultKeyUri = $"https://{keyVaultName}.vault.azure.net/keys/{keyName}";
CryptographyClient cryptoClient = new CryptographyClient(new Uri(keyVaultKeyUri), tokenCredential);
Titkosítási beállítások konfigurálása
Most konfigurálnunk kell a blobfeltöltéshez és -letöltéshez használandó titkosítási beállításokat. Az ügyféloldali titkosítás használatához először létrehozunk egy ClientSideEncryptionOptions
objektumot, és beállítjuk az ügyféllétrehozáshoz a következővel SpecializedBlobClientOptions
: .
A ClientSideEncryptionOptions osztály biztosítja az ügyfélkonfigurációs beállításokat a Blob Storage-hoz ügyféloldali titkosítással való csatlakozáshoz. A KeyEncryptionKey a feltöltési műveletekhez szükséges, és a létrehozott tartalomtitkosítási kulcs körbefuttatására szolgál. A KeyResolver szükséges a letöltési műveletekhez, és lekéri a megfelelő kulcstitkosítási kulcsot a letöltött tartalomtitkosítási kulcs feloldásához. A KeyWrapAlgorithm a feltöltésekhez szükséges, és megadja a tartalomtitkosítási kulcs burkolásakor használni kívánt algoritmus-azonosítót.
Fontos
Az 1-es verzió biztonsági rése miatt ajánlott az objektumot a ClientSideEncryptionOptions
verzióparaméter használatával ClientSideEncryptionVersion.V2_0
létrehozni. Ha többet szeretne megtudni az alkalmazások biztonsági résének csökkentéséről, olvassa el az alkalmazások biztonsági résének enyhítése című témakört. A biztonsági résről további információt az Azure Storage ügyféloldali titkosításának frissítése az SDK-ban a biztonsági rés kezelése érdekében című témakörben talál.
// Configure the encryption options to be used for upload and download
ClientSideEncryptionOptions encryptionOptions = new (ClientSideEncryptionVersion.V2_0)
{
KeyEncryptionKey = cryptoClient,
KeyResolver = keyResolver,
// String value that the client library will use when calling IKeyEncryptionKey.WrapKey()
KeyWrapAlgorithm = "RSA-OAEP"
};
// Set the encryption options on the client options.
BlobClientOptions options = new SpecializedBlobClientOptions() { ClientSideEncryption = encryptionOptions };
Ügyfélobjektum konfigurálása ügyféloldali titkosítás használatára
Ebben a példában az ügyféloldali titkosítás konfigurációs beállításait alkalmazzuk egy BlobServiceClient
objektumra. A szolgáltatásügyfél szintjén alkalmazva ezek a titkosítási beállítások a szolgáltatásügyféltől a tárolóügyfeleknek, valamint a tárolóügyfelektől a blobügyfeleknek lesznek átadva. Amikor az BlobClient
objektum feltöltési vagy letöltési műveletet hajt végre, az Azure Blob Storage ügyfélkódtárai borítéktitkosítással titkosítják és visszafejtik a blobokat az ügyféloldalon. A borítéktitkosítás egy kulcsot egy vagy több további kulcssal titkosít.
// Create a blob client with client-side encryption enabled.
// Attempting to construct a BlockBlobClient, PageBlobClient, or AppendBlobClient from a BlobContainerClient
// with client-side encryption options present will throw, as this functionality is only supported with BlobClient.
Uri blobUri = new (string.Format($"https://{accountName}.blob.core.windows.net"));
BlobClient blob = new BlobServiceClient(blobUri, tokenCredential, options).GetBlobContainerClient("test-container").GetBlobClient("testBlob");
Blob titkosítása és feltöltése
Amikor az BlobClient
objektum egy feltöltési módszert hív meg, az ügyféloldali titkosítás végrehajtása több lépésben történik:
- Az Azure Storage-ügyfélkódtár egy véletlenszerű inicializálási vektort (IV) hoz létre 16 bájtból és egy 32 bájtból álló véletlenszerű tartalomtitkosítási kulcsot (CEK), és ezen információk használatával elvégzi a blobadatok borítéktitkosítását.
- A blobadatok titkosítása a CEK használatával történik.
- A CEK ezután be van csomagolva (titkosítva) a megadott
ClientSideEncryptionOptions
kulcstitkosítási kulccsal (KEK). Ebben a példában a KEK egy aszimmetrikus kulcspár, amely a megadott Azure Key Vault-erőforrásban van tárolva. Maga a blobügyfél soha nem fér hozzá a KEK-hez, csak meghívja a Key Vault által biztosított kulcsburkoló algoritmust. - A titkosított blobadatok ezután fel lesznek töltve a tárfiókba.
Adja hozzá a következő kódot egy blob titkosításához és az Azure Storage-fiókba való feltöltéséhez:
// Upload the encrypted contents to the blob
Stream blobContent = BinaryData.FromString("Ready for encryption, Captain.").ToStream();
await blob.UploadAsync(blobContent);
A blob feltöltése után megtekintheti a blobot a tárfiókban, és megtekintheti a titkosított tartalmakat a titkosítási metaadatokkal együtt.
Blob visszafejtése és letöltése
Az Azure Storage-ügyfélkódtár feltételezi, hogy a felhasználó helyileg vagy egy kulcstartóban kezeli a KEK-t. A felhasználónak nem kell tudnia a titkosításhoz használt konkrét kulcsot. A blobadatok letöltése és visszafejtése során a rendszer a megadott ClientSideEncryptionOptions
kulcsfeloldóval oldja fel a kulcsazonosítókat.
Amikor az BlobClient
objektum letöltő metódust hív meg, a titkosított blobadatok visszafejtése több lépésben történik:
- Az ügyfélkódtár letölti a titkosított blobadatokat, beleértve a titkosítási metaadatokat is a tárfiókból.
- A becsomagolt CEK ezután le van bontva (visszafejtve) a KEK használatával. Az ügyfélkódtár nem fér hozzá a KEK-hez a folyamat során, de csak a megadott
ClientSideEncryptionOptions
kulcs-feloldási algoritmust hívja meg. Az RSA-kulcspár titkos kulcsa a kulcstartóban marad, így a CEK-et tartalmazó blob metaadataiból származó titkosított kulcsot a rendszer elküldi a kulcstartóba a visszafejtéshez. - Az ügyfélkódtár a CEK használatával fejti vissza a titkosított blobadatokat.
Adja hozzá a következő kódot a korábban feltöltött blob letöltéséhez és visszafejtéséhez.
// Download and decrypt the encrypted contents from the blob
Response<BlobDownloadInfo> response = await blob.DownloadAsync();
BlobDownloadInfo downloadInfo = response.Value;
Console.WriteLine((await BinaryData.FromStreamAsync(downloadInfo.Content)).ToString());
Következő lépések
Ebben az oktatóanyagban megtanulta, hogyan használhatja a .NET-ügyfélkódtárakat a blobfeltöltési és -letöltési műveletek ügyféloldali titkosítására.
A blobok ügyféloldali titkosításának széles körű áttekintéséért, beleértve a titkosított adatok 2. verzióra való migrálásának utasításait, tekintse meg a blobok ügyféloldali titkosítását.
Az Azure Key Vaultról további információt az Azure Key Vault áttekintési oldalán talál.