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:
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.
- Dalam skrip di bawah ini, New-SqlCertificateStoreColumnMasterKeySettings
-AllowEnclaveComputations
menggunakan parameter untuk membuat kunci master kolom baru yang diaktifkan enklave. - Skrip di bawah ini menggunakan cmdlet Get-AzAccessToken untuk mendapatkan token akses untuk brankas kunci. Ini diperlukan, karena New-SqlAzureKeyVaultColumnMasterKeySettings harus memiliki akses ke Azure Key Vault untuk menandatangani properti kunci master kolom.
# 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
- Menjalankan pernyataan Transact-SQL menggunakan enklave aman
- Mengonfigurasi enkripsi kolom di tempat menggunakan Always Encrypted dengan enklave aman
- Aktifkan Always Encrypted dengan enklave aman untuk kolom terenkripsi yang ada
- Mengembangkan aplikasi menggunakan Always Encrypted dengan enklave aman