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 Assistenten für immer verschlüsselte Spalten 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:

Allow enclave computations

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, lesen Sie " Konfigurieren der sicheren Enklave in SQL Server". Wenn Sie Azure SQL-Datenbank verwenden, lesen Sie "Immer verschlüsselt mit sicheren Enklaven für Ihre Azure SQL-Datenbank aktivieren".

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-enabled ist, wird Enclave Computations: Allowed wird im Fenster mit den Eigenschaften des Schlüssels angezeigt. 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-enabled ist, wird Enclave Computations: Allowed wird im Fenster mit den Eigenschaften des Schlüssels angezeigt.

Bereitstellen Enclave-fähiger Schlüssel mit PowerShell

Um Enklavenfähige Schlüssel mithilfe von PowerShell bereitzustellen, benötigen Sie das SqlServer PowerShell-Modul, Version 22 oder höher.

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 von Verschlüsselungsschlüsseln mit Enklave-fähigen Spalten unterscheidet sich nicht von den Verschlüsselungsschlüsseln für bereitstellungsspalten, die nicht enklavisch aktiviert sind. 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). Es ist wichtig, zwei Unterschiede zwischen dem Workflow für enklavfähige Schlüssel im Vergleich zu den Schlüsseln zu beachten, die nicht enklavisch aktiviert sind.

  • 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 Spaltenmasterschlü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