Freigeben über


Bereitstellen Enclave-fähiger Schlüssel

Gilt für: SQL Server 2019 (15.x) und höher – nur Windows Azure SQL-Datenbank

In diesem Artikel wird beschrieben, wie Sie Enclave-fähige Schlüssel bereitstellen, die Berechnungen in serverseitigen Secure Enclaves unterstützen, die für Always Encrypted mit Secure Enclaves verwendet werden.

Die allgemeinen Richtlinien und Prozesse für die Verwaltung von Always Encrypted-Schlüsseln gelten für die Bereitstellung von Enclave-fähigen Schlüsseln. Dieser Artikel befasst sich mit Details zu Always Encrypted mit Secure Enclaves.

Stellen Sie sicher, dass der neue Schlüssel Enclave-Berechnungen unterstützt, um einen Enclave-fähigen Spaltenhauptschlüssel mithilfe von SQL Server Management Studio (SSMS) oder PowerShell bereitzustellen. Das führt dazu, dass das Tool (SSMS oder PowerShell) die CREATE COLUMN MASTER KEY-Anweisung generiert, die ENCLAVE_COMPUTATIONS in den Metadaten des Spaltenhauptschlüssels in der Datenbank festlegt. Weitere Informationen finden Sie unter CREATE COLUMN MASTER KEY (Transact-SQL).

Das Tool signiert die Spaltenhaupteigenschaften digital mit dem Spaltenhauptschlüssen und speichert die Signatur in den Datenbankmetadaten. Die Signatur verhindert böswillige Änderungen mit der Einstellung ENCLAVE_COMPUTATIONS. Der SQL-Clienttreiber überprüft die Signaturen, bevor die Enclave-Nutzung zugelassen wird. Dadurch haben Sicherheitsadministratoren die Kontrolle darüber, welche Spaltendaten innerhalb der Enclave berechnet werden können.

ENCLAVE_COMPUTATIONS ist unveränderlich, d. h. Sie können keine Änderungen vornehmen, nachdem Sie den Spaltenhauptschlüssel in den Metadaten definiert haben. Sie müssen den Spaltenhauptschlüssel rotieren und durch einen Enclave-fähigen Spaltenhauptschlüssel ersetzen, um Enclave-Berechnungen mithilfe eines Spaltenverschlüsselungsschlüssels zu aktivieren, der von einem angegebenen Spaltenhauptschlüssel verschlüsselt wird. Informationen hierzu finden Sie unter Rotieren Enclave-fähiger Schlüssel.

Hinweis

Derzeit unterstützen sowohl SSMS als auch PowerShell Enclave-fähige Spaltenhauptschlüssel, die in Azure Key Vault oder im Windows-Zertifikatspeicher gespeichert werden. Hardwaresicherheitsmodule (mit CNG oder CAPI) werden nicht unterstützt.

Sie müssen sicherstellen, dass Sie einen Enclave-fähigen Spaltenhauptschlüssel zum Verschlüsseln des neuen Schlüssels auswählen, um einen Enclave-fähigen Spaltenverschlüsselungsschlüssel zu erstellen.

In den folgenden Abschnitten finden Sie weitere Informationen zum Bereitstellen Enclave-fähiger Schlüssel mithilfe von SSMS und PowerShell.

Bereitstellen von Enclave-fähigen-Schlüsseln mithilfe von SQL Server Management Studio

In SQL Server Management Studio können Sie Folgendes bereitstellen:

  • Einen Enclave-fähigen Spaltenhauptschlüssel über das Dialogfeld Neuer Spaltenhauptschlüssel
  • Einen Enclave-fähigen Spaltenverschlüsselungsschlüssel über das Dialogfeld Neuer Spaltenverschlüsselungsschlüssel

Mit dem Always Encrypted Assistenten können Sie auch einen Enklaven-aktivierten Spaltenmasterschlüssel und einen Enklaven-fähigen Spaltenverschlüsselungsschlüssel erstellen.

Stellen Sie sicher, dass Sie die neueste allgemeine Verfügbarkeitsversion (GA) von SQL Server Management Studio (SSMS) installiert haben.

Bereitstellen Enclave-fähiger Spaltenhauptschlüssel mit dem Dialogfeld „Neuer Spaltenhauptschlüssel“

Führen Sie die Schritte unter Bereitstellen von Spaltenhauptschlüsseln mit dem Dialogfeld „Neuer Spaltenhauptschlüssel“ aus, um einen Enclave-fähigen Spaltenhauptschlüssel bereitzustellen. Stellen Sie sicher, dass Sie die Option Enclave-Berechnungen zulassen aktivieren. Diese Option sehen Sie im folgenden Screenshot:

Enclave-Berechnungen zulassen

Hinweis

Das Kontrollkästchen Enclave-Berechnungen zulassen wird nur angezeigt, wenn eine Secure Enclave für Ihre Datenbank konfiguriert ist. Wenn Sie SQL Server verwenden, finden Sie weitere Informationen unter Konfigurieren von Secure Enclaves in SQL Server. Wenn Sie die Azure SQL-Datenbank verwenden, siehe Aktivieren von Always Encrypted mit Secure Enclaves in der Azure SQL-Datenbank.

Tipp

Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf den Spaltenhauptschlüssel, und wählen Sie dann Eigenschaften aus, um zu überprüfen, ob er Enclave-fähig ist. Wenn der Schlüssel Enklave-aktiviert ist, erscheint Enklave-Berechnungen: Erlaubt in dem Fenster, das die Eigenschaften des Schlüssels anzeigt. Alternativ können Sie die Ansicht sys.column_master_keys (Transact-SQL) verwenden.

Bereitstellen Enclave-fähiger Spaltenverschlüsselungsschlüssel mithilfe des Dialogfelds „Neuer Spaltenverschlüsselungsschlüssel“

Führen Sie die Schritte unter Bereitstellen von Spaltenverschlüsselungsschlüsseln mit dem Dialogfeld „Neuer Spaltenverschlüsselungsschlüssel“ aus, um einen Enclave-fähigen Spaltenverschlüsselungsschlüssel bereitzustellen. Stellen Sie bei der Auswahl eines Spaltenhauptschlüssels sicher, dass dieser Enclave-fähig ist.

Tipp

Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf den Spaltenverschlüsselungsschlüssel, und wählen Sie dann Eigenschaften aus, um zu überprüfen, ob er Enclave-fähig ist. Wenn der Schlüssel Enklave-aktiviert ist, erscheint Enklave-Berechnungen: Erlaubt in dem Fenster, das die Eigenschaften des Schlüssels anzeigt.

Bereitstellen Enclave-fähiger Schlüssel mit PowerShell

Für die Bereitstellung Enclave-fähiger Schlüssel mithilfe von PowerShell benötigen Sie mindestens die Version 22 des PowerShell-Moduls „SqlServer“.

Im Allgemeinen gelten die Bereitstellungsworkflows für PowerShell-Schlüssel (mit und ohne Rollentrennung), die unter Bereitstellen von Always Encrypted-Schlüsseln mithilfe von PowerShell beschrieben werden, auch für Enclave-fähige Schlüssel. In diesem Abschnitt werden spezifische Details zu Enclave-fähigen Schlüsseln beschrieben.

Das PowerShell-Modul „SqlServer“ erweitert die Cmdlets New-SqlCertificateStoreColumnMasterKeySettings und New-SqlAzureKeyVaultColumnMasterKeySettings um den Parameter -AllowEnclaveComputations, damit Sie während des Bereitstellungsprozesses einen Enclave-fähigen Spaltenhauptschlüssel festlegen können. Beide Cmdlets erstellen ein lokales Objekt, das Eigenschaften eines Spaltenhauptschlüssels enthält (der in Azure Key Vault oder im Windows-Zertifikatspeicher gespeichert wird). Die Eigenschaft -AllowEnclaveComputations kennzeichnet den Schlüssel im lokalen Objekt als Enclave-fähig, wenn sie festgelegt wird. Dies bewirkt außerdem, dass das Cmdlet auf den referenzierten Spaltenhauptschlüssel zugreift (der sich in Azure Key Vault oder im Windows-Zertifikatspeicher befindet), um die Eigenschaften des Schlüssels digital zu signieren. Sobald Sie ein Einstellungsobjekt für einen neuen Enclave-fähigen Spaltenhauptschlüssel erstellt haben, können Sie diesen in anschließenden Aufrufen des Cmdlets New-SqlColumnMasterKey verwenden, um ein Metadatenobjekt zu erstellen, das den neuen Schlüssel in der Datenbank beschreibt.

Die Bereitstellung Enclave-fähiger Spaltenverschlüsselungsschlüssel unterscheidet sich nicht von der Bereitstellung nicht Enclave-fähiger Spaltenverschlüsselungsschlüssel. Sie müssen lediglich sicherstellen, dass der Spaltenhauptschlüssel, der zum Verschlüsseln des neuen Spaltenverschlüsselungsschlüssel verwendet wird, Enclave-fähig ist.

Hinweis

Das PowerShell-Modul „SqlServer“ unterstützt die Bereitstellung von Enclave-fähigen Schlüsseln, die in Hardwaresicherheitsmodulen (mit CNG oder CAPI) gespeichert werden, derzeit nicht.

Beispiel: Bereitstellen Enclave-fähiger Schlüssel mithilfe des Windows-Zertifikatspeichers

Im folgenden vollumfassenden Beispiel wird veranschaulicht, wie Enclave-fähige Schlüssel bereitgestellt werden, wenn der Spaltenhauptschlüssel im Windows-Zertifikatspeicher gespeichert wird. Das Skript basiert auf dem Beispiel unter Windows-Zertifikatspeicher ohne Rollentrennung (Beispiel). Dabei sollte unbedingt die Verwendung des -AllowEnclaveComputations-Parameters im Cmdlet New-SqlCertificateStoreColumnMasterKeySettings beachtet werden, was den einzigen Unterschied zwischen den Workflows der beiden Beispiele darstellt.

# Create a column master key in Windows Certificate Store.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage DataEncipherment -KeySpec KeyExchange

# Import the SqlServer module.
Import-Module "SqlServer" -MinimumVersion 22.0.50

# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
# Change the authentication method in the connection string, if needed.
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True"
$database = Get-SqlDatabase -ConnectionString $connStr

# Create a SqlColumnMasterKeySettings object for your column master key
# using the -AllowEnclaveComputations parameter.
$cmkSettings = New-SqlCertificateStoreColumnMasterKeySettings -CertificateStoreLocation "CurrentUser" -Thumbprint $cert.Thumbprint -AllowEnclaveComputations

# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings

# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database. 
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName  -InputObject $database -ColumnMasterKey $cmkName

Beispiel: Bereitstellen Enclave-fähiger Schlüssel mithilfe von Azure Key Vault

Im folgenden vollumfassenden Beispiel wird veranschaulicht, wie Enclave-fähige Schlüssel bereitgestellt werden, wenn der Spaltenhauptschlüssel in einem Schlüsseltresor im Azure Key Vault gespeichert wird. Das Skript basiert auf dem Beispiel unter Azure Key Vault ohne Rollentrennung (Beispiel). Hier sollten Sie unbedingt die zwei Unterschiede zwischen den Workflows für Enclave-fähige und nicht Enclave-fähige Schlüssel beachten.

  • Im folgenden Skript wird im Cmdlet New-SqlCertificateStoreColumnMasterKeySettings der Parameter -AllowEnclaveComputations verwendet, damit der neue Spaltenhauptschlüssel Enclave-fähig ist.
  • Das folgende Skript verwendet das Cmdlet Get-AzAccessToken, um ein Zugriffstoken für Schlüsseltresor abzurufen. Dies ist erforderlich, da die New-SqlAzureKeyVaultColumnMasterKeySettings Zugriff auf den Azure Key Vault haben muss, um die Eigenschaften des Spaltenhauptschlüssels zu signieren.
# Create a column master key in Azure Key Vault.
Import-Module "SqlServer" -MinimumVersion 22.0.50
Import-Module Az.Accounts -MinimumVersion 2.2.0
Connect-AzAccount
$SubscriptionId = "<Azure SubscriptionId>"
$resourceGroup = "<resource group name>"
$azureLocation = "<datacenter location>"
$akvName = "<key vault name>"
$akvKeyName = "<key name>"
$azureCtx = Set-AzConteXt -SubscriptionId $SubscriptionId # Sets the context for the below cmdlets to the specified subscription.
New-AzResourceGroup -Name $resourceGroup -Location $azureLocation # Creates a new resource group - skip, if your desired group already exists.
New-AzKeyVault -VaultName $akvName -ResourceGroupName $resourceGroup -Location $azureLocation # Creates a new key vault - skip if your vault already exists.
Set-AzKeyVaultAccessPolicy -VaultName $akvName -ResourceGroupName $resourceGroup -PermissionsToKeys get, create, delete, list, wrapKey,unwrapKey, sign, verify -UserPrincipalName $azureCtx.Account
$akvKey = Add-AzKeyVaultKey -VaultName $akvName -Name $akvKeyName -Destination "Software"

# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
# Change the authentication method in the connection string, if needed.
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True"
$database = Get-SqlDatabase -ConnectionString $connStr

# Obtain an access token for key vaults.
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token 

# Create a SqlColumnMasterKeySettings object for your column master key. 
$cmkSettings = New-SqlAzureKeyVaultColumnMasterKeySettings -KeyURL $akvKey.ID -AllowEnclaveComputations -KeyVaultAccessToken $keyVaultAccessToken

# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings

# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database. 
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName -KeyVaultAccessToken $keyVaultAccessToken

Nächste Schritte

Siehe auch