Bagikan melalui


Sediakan kunci yang mendukung enklave

Berlaku untuk: SQL Server 2019 (15.x) dan yang lebih baru - Hanya Windows Azure SQL Database

Artikel ini menjelaskan cara menyediakan kunci berkemampuan enklave yang mendukung komputasi di dalam enklave aman sisi server yang digunakan untuk Always Encrypted dengan enklave aman.

Pedoman dan proses umum untuk mengelola kunci Always Encrypted berlaku saat Anda memprovisikan kunci yang diaktifkan enklave. Artikel ini menjelaskan detail khusus untuk Always Encrypted dengan enklave aman.

Untuk menyediakan kunci master kolom yang diaktifkan enklave menggunakan SQL Server Management Studio atau PowerShell, pastikan kunci baru mendukung komputasi enklave. Ini akan menyebabkan alat (SSMS atau PowerShell) menghasilkan CREATE COLUMN MASTER KEY pernyataan yang mengatur ENCLAVE_COMPUTATIONS dalam metadata kunci master kolom dalam database. Untuk informasi selengkapnya, lihat MEMBUAT KUNCI MASTER KOLOM (Transact-SQL).

Alat ini juga akan menandatangani properti master kolom secara digital dengan kunci master kolom, dan akan menyimpan tanda tangan dalam metadata database. Tanda tangan mencegah perusakan berbahaya dengan ENCLAVE_COMPUTATIONS pengaturan. Driver klien SQL memverifikasi tanda tangan sebelum mengizinkan penggunaan enklave. Ini memberi administrator keamanan kontrol atas data kolom mana yang dapat dihitung di dalam enklave.

ENCLAVE_COMPUTATIONS tidak dapat diubah, artinya, Anda tidak dapat mengubahnya setelah Anda menentukan kunci master kolom dalam metadata. Untuk mengaktifkan komputasi enklave menggunakan kunci enkripsi kolom, yang dienkripsi kunci master kolom tertentu, Anda perlu memutar kunci master kolom dan menggantinya dengan kunci master kolom yang diaktifkan enklave. Lihat Memutar kunci yang diaktifkan enklave.

Catatan

Saat ini, SSMS dan PowerShell mendukung kunci master kolom berkemampuan enklave yang disimpan di Azure Key Vault atau Windows Certificate Store. Modul keamanan perangkat keras (menggunakan CNG atau CAPI) tidak didukung.

Untuk membuat kunci enkripsi kolom dengan dukungan enklave, Anda perlu memastikan bahwa Anda memilih kunci master kolom yang mendukung enklave untuk mengenkripsi kunci baru.

Bagian berikut ini memberikan detail selengkapnya tentang cara menyediakan kunci yang diaktifkan enklave menggunakan SSMS dan PowerShell.

Memprovisikan kunci yang diaktifkan enklave menggunakan SQL Server Management Studio

Di SQL Server Management Studio, Anda dapat menyediakan:

  • Kunci master kolom yang diaktifkan enklave menggunakan dialog Kunci Master Kolom Baru.
  • Kunci enkripsi kolom yang diaktifkan enklave menggunakan dialog Kunci Enkripsi Kolom Baru.

Wizard Always Encrypted juga memungkinkan Anda membuat kunci master kolom dengan dukungan enklave dan kunci enkripsi kolom yang diaktifkan enklave.

Pastikan Anda telah menginstal versi ketersediaan umum (GA) terbaru dari SQL Server Management Studio (SSMS).

Memprovisikan kunci master kolom yang diaktifkan enklave dengan dialog Kunci Master Kolom Baru

Untuk memprovisikan kunci master kolom yang diaktifkan enklave, ikuti langkah-langkah dalam Memprovisikan Kunci Master Kolom dengan Dialog Kunci Master Kolom Baru. Pastikan Anda memilih Izinkan komputasi enklave. Lihat cuplikan layar di bawah ini:

Perbolehkan komputasi enklave

Catatan

Kotak centang Izinkan komputasi enklave muncul hanya jika enklave aman dikonfigurasi untuk database Anda. Jika Anda menggunakan SQL Server, lihat Mengonfigurasi enklave aman di SQL Server. Jika Anda menggunakan Azure SQL Database, lihat Mengaktifkan Always Encrypted dengan enklave aman untuk Azure SQL Database Anda.

Tip

Untuk memeriksa apakah kunci master kolom diaktifkan enklave, klik kanan di Object Explorer dan pilih Properti. Jika kunci diaktifkan enklave, Enclave Computations: Diizinkan muncul di jendela yang menampilkan properti kunci. Atau, Anda dapat menggunakan tampilan sys.column_master_keys (Transact-SQL).

Memprovisikan kunci enkripsi kolom yang diaktifkan enklave dengan dialog Kunci Enkripsi Kolom Baru

Untuk memprovisikan kunci enkripsi kolom yang diaktifkan enklave, ikuti langkah-langkah dalam Menyediakan Kunci Enkripsi Kolom dengan Dialog Kunci Enkripsi Kolom Baru. Saat memilih kunci master kolom, pastikan kunci tersebut diaktifkan enklave.

Tip

Untuk memeriksa apakah kunci enkripsi kolom diaktifkan enklave, klik kanan di Object Explorer dan pilih Properti. Jika kunci diaktifkan enklave, Enclave Computations: Diizinkan muncul di jendela yang menampilkan properti kunci.

Memprovisikan kunci yang diaktifkan enklave menggunakan PowerShell

Untuk menyediakan kunci berkemampuan enklave menggunakan PowerShell, Anda memerlukan modul SqlServer PowerShell versi 22 atau yang lebih tinggi.

Secara umum, alur kerja provisi kunci PowerShell (dengan dan tanpa pemisahan peran) untuk Always Encrypted, yang dijelaskan dalam Menyediakan Kunci Always Encrypted menggunakan PowerShell juga berlaku untuk kunci yang diaktifkan enklave. Bagian ini menjelaskan detail khusus untuk kunci yang diaktifkan enklave.

Modul SqlServer PowerShell memperluas cmdlet New-SqlCertificateStoreColumnMasterKeySettings dan New-SqlAzureKeyVaultColumnMasterKeySettings dengan -AllowEnclaveComputations parameter untuk memungkinkan Anda menentukan kunci master kolom yang diaktifkan enklave selama proses provisi. Cmdlet membuat objek lokal yang berisi properti kunci master kolom (disimpan di Azure Key Vault atau di Penyimpanan Sertifikat Windows). Jika ditentukan, -AllowEnclaveComputations properti menandai kunci sebagai diaktifkan enklave di objek lokal. Ini juga menyebabkan cmdlet mengakses kunci master kolom yang dirujuk (di Azure Key Vault atau di Windows Certificate Store) untuk menandatangani properti kunci secara digital. Setelah Anda membuat objek pengaturan untuk kunci master kolom baru yang diaktifkan enklave, Anda dapat menggunakannya dalam pemanggilan cmdlet New-SqlColumnMasterKey untuk membuat objek metadata yang menjelaskan kunci baru dalam database.

Menyediakan kunci enkripsi kolom yang diaktifkan enklave tidak berbeda dengan menyediakan kunci enkripsi kolom yang tidak diaktifkan enklave. Anda hanya perlu memastikan bahwa kunci master kolom yang digunakan untuk mengenkripsi kunci enkripsi kolom baru diaktifkan enklave.

Catatan

Modul SqlServer PowerShell saat ini tidak mendukung provisi kunci berkemampuan enklave yang disimpan dalam modul keamanan perangkat keras (menggunakan CNG atau CAPI).

Contoh - menyediakan kunci yang diaktifkan enklave menggunakan Windows Certificate Store

Contoh end-to-end di bawah ini menunjukkan cara memprovisikan kunci yang diaktifkan enklave, menyimpan kunci master kolom yang disimpan di Windows Certificate Store. Skrip didasarkan pada contoh di Penyimpanan Sertifikat Windows tanpa Pemisahan Peran (Contoh). Penting untuk dicatat adalah penggunaan -AllowEnclaveComputations parameter dalam cmdlet New-SqlCertificateStoreColumnMasterKeySettings , yang merupakan satu-satunya perbedaan antara alur kerja dalam dua contoh.

# 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

Contoh - menyediakan kunci yang diaktifkan enklave menggunakan Azure Key Vault

Contoh end-to-end di bawah ini menunjukkan cara memprovisikan kunci yang diaktifkan enklave, menyimpan kunci master kolom di brankas kunci di Azure Key Vault. Skrip didasarkan pada contoh di Azure Key Vault tanpa Pemisahan Peran (Contoh). Penting untuk dicatat dua perbedaan antara alur kerja untuk kunci yang diaktifkan enklave dibandingkan dengan kunci yang tidak diaktifkan enklave.

# 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

Langkah berikutnya

Lihat juga