gebeurtenis
31 mrt, 23 - 2 apr, 23
De grootste fabric-, Power BI- en SQL-leerevenement. 31 maart – 2 april. Gebruik code FABINSIDER om $ 400 te besparen.
Zorg dat u zich vandaag nog registreertDeze browser wordt niet meer ondersteund.
Upgrade naar Microsoft Edge om te profiteren van de nieuwste functies, beveiligingsupdates en technische ondersteuning.
In deze zelfstudie leert u hoe u versleuteling aan de clientzijde gebruikt om blobs te versleutelen en ontsleutelen met behulp van een sleutel die is opgeslagen met Azure Key Vault.
Azure Blob Storage ondersteunt zowel versleuteling aan de servicezijde als aan de clientzijde. Voor de meeste scenario's raadt Microsoft aan om versleutelingsfuncties aan de servicezijde te gebruiken voor gebruiksgemak bij het beveiligen van uw gegevens. Zie Azure Storage-versleuteling voor data-at-rest voor meer informatie over versleuteling aan de servicezijde.
De Azure Blob Storage-clientbibliotheek voor .NET ondersteunt gegevensversleuteling aan de clientzijde binnen toepassingen voordat u uploadt naar Azure Storage en gegevens ontsleutelt tijdens het downloaden naar de client. De bibliotheek biedt ook ondersteuning voor integratie met Azure Key Vault voor sleutelbeheer.
In deze handleiding ontdekt u hoe u:
Wanneer u lokaal ontwikkelt, moet u ervoor zorgen dat het gebruikersaccount dat toegang heeft tot de sleutelkluis de juiste machtigingen heeft. U hebt de rol Crypto Officer van Key Vault nodig om een sleutel te maken en acties uit te voeren op sleutels in een sleutelkluis. U kunt Azure RBAC-rollen toewijzen aan een gebruiker met behulp van Azure Portal, Azure CLI of Azure PowerShell. Meer informatie over de beschikbare bereiken voor roltoewijzingen vindt u op de overzichtspagina van het bereik.
In dit scenario wijst u machtigingen toe aan uw gebruikersaccount, gericht op de sleutelkluis, om het principe van minimale bevoegdheden te volgen. Deze procedure biedt gebruikers alleen de minimale machtigingen die nodig zijn en maakt veiligere productieomgevingen.
In het volgende voorbeeld ziet u hoe u de rol Key Vault Crypto Officer toewijst aan uw gebruikersaccount. Dit biedt de toegang die u nodig hebt om deze zelfstudie te voltooien.
Belangrijk
In de meeste gevallen duurt het een of twee minuten voordat de roltoewijzing is doorgegeven in Azure, maar in zeldzame gevallen kan het maximaal acht minuten duren. Als u verificatiefouten ontvangt wanneer u de code voor het eerst uitvoert, wacht u even en probeert u het opnieuw.
Zoek in Azure Portal uw sleutelkluis met behulp van de hoofdzoekbalk of linkernavigatiebalk.
Selecteer op de overzichtspagina van key vault toegangsbeheer (IAM) in het menu aan de linkerkant.
Selecteer op de pagina Toegangsbeheer (IAM) het tabblad Roltoewijzingen .
Selecteer + Toevoegen in het bovenste menu en voeg vervolgens roltoewijzing toe in de resulterende vervolgkeuzelijst.
Gebruik het zoekvak om de resultaten te filteren op de gewenste rol. Zoek voor dit voorbeeld naar Key Vault Crypto Officer en selecteer het overeenkomende resultaat en kies vervolgens Volgende.
Selecteer onder Toegang toewijzen de optie Gebruiker, groep of service-principal en kies vervolgens + Leden selecteren.
Zoek in het dialoogvenster naar uw Microsoft Entra-gebruikersnaam (meestal uw user@domain e-mailadres) en kies Vervolgens onderaan het dialoogvenster Selecteren .
Selecteer Beoordelen + toewijzen om naar de laatste pagina te gaan en vervolgens opnieuw beoordelen en toewijzen om het proces te voltooien.
Gebruik in een consolevenster (zoals PowerShell of Bash) de dotnet new
opdracht om een nieuwe console-app te maken met de naam BlobEncryptionKeyVault. Met deze opdracht maakt u een eenvoudig C#-project Hallo wereld met één bronbestand: Program.cs.
dotnet new console -n BlobEncryptionKeyVault
Schakel over naar de zojuist gemaakte BlobEncryptionKeyVault-map .
cd BlobEncryptionKeyVault
Open het project in de gewenste code-editor. Het project openen in:
BlobEncryptionKeyVault.csproj
bestand en dubbelklik erop.code .
Als u in dit voorbeeld wilt communiceren met Azure-services, installeert u de volgende clientbibliotheken met behulp van dotnet add package
.
dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Keys
dotnet add package Azure.Storage.Blobs
Voeg de volgende using
instructies toe en zorg ervoor dat u een verwijzing naar System.Configuration
het project toevoegt.
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;
Deze toepassing zoekt naar een omgevingsvariabele die wordt aangeroepen KEY_VAULT_NAME
om de naam van uw sleutelkluis op te halen. Als u de omgevingsvariabele wilt instellen, opent u een consolevenster en volgt u de instructies voor uw besturingssysteem. Vervang <your-key-vault-name>
door de naam van uw sleutelkluis.
Windows:
U kunt omgevingsvariabelen voor Windows instellen vanaf de opdrachtregel. Wanneer u deze methode gebruikt, zijn de waarden echter toegankelijk voor alle toepassingen die op dat besturingssysteem worden uitgevoerd en kunnen conflicten veroorzaken als u niet voorzichtig bent. Omgevingsvariabelen kunnen worden ingesteld op gebruikers- of systeemniveau:
setx KEY_VAULT_NAME "<your-key-vault-name>"
Nadat u de omgevingsvariabele in Windows hebt toegevoegd, moet u een nieuw exemplaar van het opdrachtvenster starten. Als u Visual Studio in Windows gebruikt, moet u Visual Studio mogelijk opnieuw starten nadat u de omgevingsvariabele hebt gemaakt om de wijziging te kunnen detecteren.
Linux:
export KEY_VAULT_NAME=<your-key-vault-name>
In dit voorbeeld maken we een sleutel en voegen we deze toe aan de sleutelkluis met behulp van de Azure Key Vault-clientbibliotheek. U kunt ook een sleutel maken en toevoegen aan een sleutelkluis met behulp van Azure CLI, Azure Portal of PowerShell.
In het onderstaande voorbeeld maken we een KeyClient-object voor de opgegeven kluis. Het KeyClient
object wordt vervolgens gebruikt om een nieuwe RSA-sleutel te maken in de opgegeven kluis.
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);
Vervolgens gebruiken we de sleutel die we zojuist hebben toegevoegd aan de kluis om de cryptografieclient- en sleutel-resolver-exemplaren te maken. CryptographyClient implementeert IKeyEncryptionKey en wordt gebruikt om cryptografische bewerkingen uit te voeren met sleutels die zijn opgeslagen in Azure Key Vault. KeyResolver implementeert IKeyEncryptionResolver en haalt sleutelversleutelingssleutels op uit de sleutel-id en lost de sleutel op.
// 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);
Als u een bestaande sleutel in de kluis hebt waarmee u wilt versleutelen, kunt u de sleutel- en sleutel-resolver-exemplaren maken door de URI door te geven:
var keyVaultKeyUri = $"https://{keyVaultName}.vault.azure.net/keys/{keyName}";
CryptographyClient cryptoClient = new CryptographyClient(new Uri(keyVaultKeyUri), tokenCredential);
Nu moeten we de versleutelingsopties configureren die moeten worden gebruikt voor het uploaden en downloaden van blobs. Als u versleuteling aan de clientzijde wilt gebruiken, maken we eerst een ClientSideEncryptionOptions
object en stellen we dit in bij het maken van de client met SpecializedBlobClientOptions
.
De klasse ClientSideEncryptionOptions biedt de clientconfiguratieopties voor het maken van verbinding met Blob Storage met behulp van versleuteling aan de clientzijde. KeyEncryptionKey is vereist voor uploadbewerkingen en wordt gebruikt om de gegenereerde versleutelingssleutel voor inhoud te verpakken. KeyResolver is vereist voor downloadbewerkingen en haalt de juiste sleutelversleutelingssleutel op om de gedownloade inhoudsversleutelingssleutel uit te pakken. KeyWrapAlgorithm is vereist voor uploads en geeft de algoritme-id op die moet worden gebruikt bij het verpakken van de versleutelingssleutel voor inhoud.
Belangrijk
Vanwege een beveiligingsprobleem in versie 1 is het raadzaam om het ClientSideEncryptionOptions
object te maken met behulp van ClientSideEncryptionVersion.V2_0
de versieparameter. Zie Het beveiligingsprobleem in uw toepassingen beperken voor meer informatie over het beperken van het beveiligingsprobleem in uw apps. Zie Azure Storage voor meer informatie over dit beveiligingsprobleem versleuteling aan de clientzijde bijwerken in SDK om beveiligingsproblemen op te lossen.
// 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 };
In dit voorbeeld passen we de versleutelingsconfiguratieopties aan de clientzijde toe op een BlobServiceClient
object. Wanneer deze versleutelingsopties worden toegepast op serviceclientniveau, worden deze versleutelingsopties van de serviceclient doorgegeven aan containerclients en van containerclients tot blobclients. Wanneer het BlobClient
object een upload- of downloadbewerking uitvoert, gebruiken de Azure Blob Storage-clientbibliotheken envelopversleuteling om blobs aan de clientzijde te versleutelen en ontsleutelen. Envelopversleuteling versleutelt een sleutel met een of meer extra sleutels.
// 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");
Wanneer het BlobClient
object een uploadmethode aanroept, treden er verschillende stappen op om de versleuteling aan de clientzijde uit te voeren:
ClientSideEncryptionOptions
. In dit voorbeeld is de KEK een asymmetrisch sleutelpaar dat is opgeslagen in de opgegeven Azure Key Vault-resource. De blobclient zelf heeft nooit toegang tot de KEK, maar roept alleen het sleutelterugloop-algoritme aan dat wordt geleverd door Key Vault.Voeg de volgende code toe om een blob te versleutelen en te uploaden naar uw Azure-opslagaccount:
// Upload the encrypted contents to the blob
Stream blobContent = BinaryData.FromString("Ready for encryption, Captain.").ToStream();
await blob.UploadAsync(blobContent);
Zodra de blob is geüpload, kunt u de blob in uw opslagaccount weergeven om de versleutelde inhoud samen met de versleutelingsmetagegevens weer te geven.
In de Azure Storage-clientbibliotheek wordt ervan uitgegaan dat de gebruiker de KEK lokaal of in een sleutelkluis beheert. De gebruiker hoeft niet te weten welke specifieke sleutel is gebruikt voor versleuteling. De sleuteloplosser die is opgegeven, ClientSideEncryptionOptions
wordt gebruikt om sleutel-id's op te lossen wanneer blobgegevens worden gedownload en ontsleuteld.
Wanneer het BlobClient
object een downloadmethode aanroept, treden er verschillende stappen op om de versleutelde blobgegevens te ontsleutelen:
ClientSideEncryptionOptions
. De persoonlijke sleutel van het RSA-sleutelpaar blijft in de sleutelkluis staan, dus de versleutelde sleutel uit de blobmetagegevens die de CEK bevat, wordt verzonden naar de sleutelkluis voor ontsleuteling.Voeg de volgende code toe om de blob te downloaden en te ontsleutelen die u eerder hebt geüpload.
// 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());
In deze zelfstudie hebt u geleerd hoe u .NET-clientbibliotheken gebruikt om versleuteling aan de clientzijde uit te voeren voor het uploaden en downloaden van blobbewerkingen.
Zie Versleuteling aan de clientzijde voor blobs voor een breed overzicht van versleuteling aan de clientzijde, inclusief instructies voor het migreren van versleutelde gegevens naar versie 2.
Zie de overzichtspagina van Azure Key Vault voor meer informatie over Azure Key Vault
gebeurtenis
31 mrt, 23 - 2 apr, 23
De grootste fabric-, Power BI- en SQL-leerevenement. 31 maart – 2 april. Gebruik code FABINSIDER om $ 400 te besparen.
Zorg dat u zich vandaag nog registreertTraining
Module
Werken met Azure Blob Storage - Training
Meer informatie over het gebruik van de Azure Blob Storage-clientbibliotheek voor het maken en bijwerken van Blob Storage-resources.
Certificering
Bouw end-to-end-oplossingen in Microsoft Azure om Azure Functions te maken, web-apps te implementeren en te beheren, oplossingen te ontwikkelen die gebruikmaken van Azure Storage en meer.
Documentatie
Een versleutelingssleutel opgeven voor een aanvraag voor Blob Storage - Azure Storage
Clients die aanvragen indienen voor Azure Blob Storage, kunnen per aanvraag een versleutelingssleutel bieden. Het opnemen van de versleutelingssleutel in de aanvraag biedt gedetailleerde controle over versleutelingsinstellingen voor blobopslagbewerkingen.
De versleutelingsstatus van een blob controleren - Azure Storage
Meer informatie over het gebruik van Azure Portal, PowerShell of Azure CLI om te controleren of een bepaalde blob is versleuteld.
Meer informatie over het opgeven van een door de klant verstrekte sleutel voor een aanvraag bij Blob Storage met behulp van .NET.