Oszlop főkulcsainak létrehozása és tárolása az Always Encryptedhez

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

oszlop főkulcsai az Always Encryptedben az oszloptitkosítási kulcsok titkosításához használt kulcsvédő kulcsok. Az oszlop főkulcsait megbízható kulcstárolóban kell tárolni, és a kulcsoknak elérhetőnek kell lenniük az adatok titkosításához vagy visszafejtéséhez szükséges alkalmazásokhoz, valamint az Always Encrypted konfigurálásához és az Always Encrypted kulcsok kezeléséhez szükséges eszközökhöz.

Ez a cikk részletesen ismerteti a kulcstároló kiválasztását és az Always Encrypted oszlop főkulcsainak létrehozását. Részletes áttekintésért tekintse meg Az Always Encryptedkulcskezelésének áttekintése című témakört.

Kulcstároló kiválasztása az oszlop főkulcsához

Az Always Encrypted több kulcstárolót is támogat az Always Encrypted oszlop főkulcsainak tárolásához. A támogatott kulcstárolók attól függően változnak, hogy melyik illesztőprogramot és verziót használja.

A kulcstárolók két magas szintű kategóriáját érdemes figyelembe venni : Helyi kulcstárolókés Központosított kulcstárolók.

Helyi vagy központi kulcstároló?

  • helyi kulcstárolók – csak a helyi kulcstárolót tartalmazó számítógépeken lévő alkalmazások használhatják. Más szóval replikálnia kell a kulcstárolót és a kulcsot az alkalmazást futtató összes számítógépre. Egy helyi kulcstárolóra példa a Windows Tanúsítványtároló. Helyi kulcstároló használata esetén győződjön meg arról, hogy a kulcstároló minden, az alkalmazást üzemeltető gépen megtalálható, és hogy a számítógép tartalmazza azokat az oszlop főkulcsokat, amelyekre az alkalmazásnak szüksége van az Always Encrypted használatával védett adatok eléréséhez. Amikor első alkalommal épít ki egy oszlop főkulcsát, vagy amikor módosítja (elforgatja) a kulcsot, győződjön meg arról, hogy a kulcs üzembe lesz helyezve az alkalmazás(ok) összes gépén.

  • Központosított kulcstárolók – alkalmazások kiszolgálása több számítógépen. A központi kulcstárolókra példa az Azure Key Vault. A központosított kulcstárolók általában megkönnyítik a kulcskezelést, mivel nem kell több példányt fenntartania az oszlop főkulcsaiból több gépen. Győződjön meg arról, hogy az alkalmazások úgy vannak konfigurálva, hogy csatlakozzanak a központi kulcstárolóhoz.

Mely kulcstárolók támogatottak az Always Encrypted-kompatibilis ügyfélillesztőkben?

Az Always Encrypted-kompatibilis ügyfélillesztők olyan SQL Server-ügyfélillesztők, amelyek beépített támogatást nyújtanak az Always Encrypted ügyfélalkalmazásokba való beépítéséhez. Az Always Encrypted-kompatibilis illesztőprogramok közé tartozik néhány beépített szolgáltató a népszerű kulcstárolókhoz. Egyes illesztőprogramok lehetővé teszik egy egyéni oszlop főkulcstároló-szolgáltatójának implementálását és regisztrálását is, így bármilyen kulcstárolót használhat, még akkor is, ha nincs beépített szolgáltató. Ha egy beépített szolgáltató és egy egyéni szolgáltató között dönt, vegye figyelembe, hogy a beépített szolgáltató használata általában kevesebb módosítást jelent az alkalmazásokban (bizonyos esetekben csak egy adatbázis-kapcsolati sztring módosítása szükséges).

Az elérhető beépített szolgáltatók attól függenek, hogy melyik illesztőprogram, illesztőprogram-verzió és operációs rendszer van kiválasztva. Tekintse meg az adott illesztőprogram Always Encrypted dokumentációját annak megállapításához, hogy mely kulcstárolók támogatottak, és hogy az illesztőprogram támogatja-e az egyéni kulcstároló-szolgáltatókat – Alkalmazások fejlesztése Always Encryptedhasználatával.

Mely kulcstárolók támogatottak az SQL Toolsban?

Az SQL Server Management Studio, a Visual Studio Code MSSQL-bővítménye és az SqlServer PowerShell-modul támogatja a következő helyen tárolt oszlop főkulcsait:

  • A kulcstartók és a felügyelt HSM-ek az Azure Key Vaultban.

    Jegyzet

    A felügyelt HSM-ekhez az SSMS 18.9-es vagy újabb verziójára, valamint az SqlServer PowerShell-modul 21.1.18235-ös vagy újabb verziójára van szükség. A Visual Studio Code jelenleg nem támogatja a felügyelt HSM-eket.

  • Windows Tanúsítványtároló.

  • Kulcstárak, például hardveres biztonsági modul, amelyek titkosítási következő generációs (CNG) API-t vagy Cryptography API-t (CAPI) biztosítanak.

Oszlop főkulcsának létrehozása a Windows Tanúsítványtárolóban

Az oszlop főkulcsa lehet a Windows Tanúsítványtárolóban tárolt tanúsítvány. Az Always Encrypted-kompatibilis illesztőprogramok nem ellenőrzik a lejárati dátumot vagy a hitelesítésszolgáltatói láncot. A tanúsítvány egyszerűen nyilvános és titkos kulcsból álló kulcspárként használható.

Érvényes oszlop-főkulcsként a tanúsítványnak a következőnek kell lennie:

  • legyen X.509 tanúsítvány.
  • a két tanúsítványtároló egyikén kell tárolni: helyi gép vagy aktuális felhasználó. (Ha tanúsítványt szeretne létrehozni a helyi számítógép tanúsítványtárolójában, rendszergazdának kell lennie a célszámítógépen.)
  • titkos kulcsot tartalmaz (a tanúsítványban szereplő kulcsok ajánlott hossza 2048 bites vagy nagyobb).
  • létrehozásra kerüljön kulcscserére.

Egy érvényes oszlop főkulcsát tartalmazó tanúsítványt többféleképpen is létrehozhat, de a legegyszerűbb megoldás egy önaláírt tanúsítvány létrehozása.

Önaláírt tanúsítvány létrehozása a PowerShell használatával

Önaláírt tanúsítvány létrehozásához használja a New-SelfSignedCertificate parancsmagot. Az alábbi példa bemutatja, hogyan hozhat létre olyan tanúsítványt, amely az Always Encrypted oszlop főkulcsaként használható.

# New-SelfSignedCertificate is a Windows PowerShell cmdlet that creates a self-signed certificate. The below examples show how to generate a certificate that can be used as a column master key for Always Encrypted.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048 

# To create a certificate in the local machine certificate store location you need to run the cmdlet as an administrator.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:LocalMachine\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048

Önaláírt tanúsítvány létrehozása az SQL Server Management Studio (SSMS) használatával

További információ: Always Encrypted kulcsok kiépítése az SQL Server Management Studiohasználatával. Az SSMS-t használó és az Always Encrypted kulcsokat a Windows tanúsítványtárolóban tároló részletes oktatóanyagért tekintse meg Always Encrypted wizard tutorial (Windows Tanúsítványtároló).

Tanúsítványok elérhetővé tétele alkalmazások és felhasználók számára

Ha az oszlop főkulcsa a helyi gép tanúsítványtárolójában tárolt tanúsítvány, akkor exportálnia kell a tanúsítványt a titkos kulccsal, és importálnia kell az összes olyan gépre, amely olyan alkalmazásokat üzemeltet, amelyek várhatóan titkosítják vagy visszafejtik a titkosított oszlopokban tárolt adatokat, vagy eszközöket az Always Encrypted konfigurálásához és az Always Encrypted kulcsok kezeléséhez. Emellett minden felhasználónak olvasási engedélyt kell adni a helyi gép tanúsítványtárolójában tárolt tanúsítványhoz, hogy a tanúsítványt oszlop főkulcsaként lehessen használni.

Ha az oszlop főkulcsa az aktuális felhasználó tanúsítványtárolójában tárolt tanúsítvány, akkor exportálnia kell a tanúsítványt a titkos kulccsal, és importálnia kell az összes olyan alkalmazást futtató felhasználói fiók aktuális felhasználói tanúsítványtárolójába, amely várhatóan titkosítja vagy visszafejti a titkosított oszlopokban tárolt adatokat. vagy az Always Encrypted konfigurálására és az Always Encrypted kulcsok kezelésére szolgáló eszközök (az alkalmazásokat/eszközöket tartalmazó összes gépen). Nincs szükség engedélykonfigurációra – miután bejelentkezett egy gépre, a felhasználó hozzáférhet az aktuális felhasználói tanúsítványtárolóban található összes tanúsítványhoz.

A PowerShell használata

A Import-PfxCertificate és Export-PfxCertificate parancsmagokkal importálhat és exportálhat tanúsítványokat.

A Microsoft Felügyeleti konzol használata

Ha a felhasználónak engedélyezni szeretné a Olvasás engedélyt a helyi számítógép tanúsítványtárolójában tárolt tanúsítványhoz, kövesse az alábbi lépéseket:

  1. Nyisson meg egy parancssort, és írja be mmc.
  2. Az MMC konzolban, a Fájl menüben kattintson a Beépülő modul hozzáadása/eltávolításalehetőségre.
  3. A Beépülő modul hozzáadása/eltávolítása párbeszédpanelen kattintson a Hozzáadáselemre.
  4. Az Különálló beépülő modul hozzáadása párbeszédpanelen kattintson a Tanúsítványokelemre, majd kattintson a Hozzáadásgombra.
  5. A Tanúsítványok beépülő modul párbeszédpanelen kattintson a Számítógépfiókelemre, majd a Befejezésgombra.
  6. A Különálló beépülő modul hozzáadása párbeszédpanelen kattintson a Bezárás gombra.
  7. A Beépülő modul hozzáadása/eltávolítása párbeszédpanelen kattintson az OKgombra.
  8. A Tanúsítványok beépülő modulban keresse meg a tanúsítványt a Tanúsítványok > Személyes mappában, kattintson a jobb gombbal a tanúsítványra, mutasson Minden feladat, majd kattintson a Titkos kulcsok kezeléseparancsra.
  9. A Biztonsági párbeszédpanelen szükség esetén adjon hozzá olvasási engedélyt egy felhasználói fiókhoz.

Oszlop főkulcsok létrehozása az Azure Key Vaultban

Az Azure Key Vault segít megvédeni a titkosítási kulcsokat és titkos kulcsokat, és kényelmes lehetőség az oszlop főkulcsainak tárolására az Always Encryptedhez, különösen akkor, ha az alkalmazásokat az Azure-ban üzemeltetik. Az Azure Key Vaultban történő kulcs létrehozásához egy Azure-előfizetés és egy Azure Key Vault szükséges. Egy kulcs tárolható kulcstárban vagy felügyelt HSM-ben. Érvényes oszlop főkulcsának az Azure Key Vaultban felügyelt kulcsnak RSA-kulcsnak kell lennie.

Az Azure CLI, a Portal vagy a PowerShell használata

A kulcsok kulcstartóban való létrehozásáról a következő témakörben olvashat bővebben:

A kulcsok felügyelt HSM-ben való létrehozásával kapcsolatos információkért lásd:

SQL Server Management Studio (SSMS)

További információért arról, hogyan hozható létre oszlop főkulcs egy kulcstartóban vagy felügyelt HSM-ben az Azure Key Vault használatával, SSMS alkalmazásával lásd: Az Always Encrypted kulcsok kiépítése SQL Server Management Studio használatával. Az SSMS-t használó és az Always Encrypted kulcsokat kulcstartóban tároló részletes oktatóanyagért tekintse meg Always Encrypted Wizard (Azure Key Vault)című oktatóanyagot.

Azure Key Vault-kulcsok elérhetővé tétele alkalmazások és felhasználók számára

Egy titkosított oszlop eléréséhez az alkalmazásnak hozzá kell tudnia férni az Azure Key Vaulthoz, és az oszlop főkulcsára vonatkozó speciális engedélyekre is szüksége van az oszlopot védő oszloptitkosítási kulcs visszafejtéséhez.

Az Always Encrypted kulcsainak kezeléséhez engedélyekre van szüksége az oszlop főkulcsainak az Azure Key Vaultban való listázásához és létrehozásához, valamint a kulcsokkal végzett titkosítási műveletekhez.

Kulcstárolók

Ha az oszlop főkulcsait kulcstartóban tárolja, és szerepkör-engedélyeket használ az engedélyezéshez:

  • Az Ön alkalmazásának azonosítójának olyan szerepkörök tagjának kell lennie, amelyek lehetővé teszik a következő adatsík-műveleteket a kulcstartóban:

    • Microsoft.KeyVault/vaults/keys/decrypt/action
    • Microsoft.KeyVault/vaults/keys/read
    • Microsoft.KeyVault/vaults/keys/verify/action

    Az alkalmazásnak a szükséges engedély megadásának legegyszerűbb módja az, ha hozzáadja az identitását a Key Vault crypto user szerepkörhöz. Egyéni szerepkört is létrehozhat a szükséges engedélyekkel.

  • Az Always Encrypted kulcsait kezelő felhasználónak olyan tagnak vagy szerepkörben kell lennie, amely lehetővé teszi a következő adatsík-műveleteket a kulcstartón:

    • Microsoft.KeyVault/vaults/keys/create/action
    • Microsoft.KeyVault/vaults/keys/decrypt/action
    • Microsoft.KeyVault/vaults/keys/encrypt/action
    • Microsoft.KeyVault/vaults/keys/read
    • Microsoft.KeyVault/vaults/keys/sign/action
    • Microsoft.KeyVault/vaults/keys/verify/action

    A felhasználónak a szükséges engedély megadásának legegyszerűbb módja, ha hozzáadja a felhasználót a Key Vault crypto user szerepkörhöz. Egyéni szerepkört is létrehozhat a szükséges engedélyekkel.

Ha az oszlop főkulcsait kulcstartóban tárolja, és hozzáférési szabályzatokat használ az engedélyezéshez:

  • Az alkalmazás identitásához a következő hozzáférési házirend-engedélyek szükségesek a kulcstáron: lekérni, kicsomagolni a kulcsot, és hitelesíteni.
  • Az Always Encrypted kulcsait kezelő felhasználóknak a következő hozzáférési házirend-engedélyekre van szükségük a kulcstartón: létrehozása, lekérése, lista, aláírási, unwrapKey, wrapKey, ellenőrzése.

A kulcstartók hitelesítésének és engedélyezésének konfigurálásáról általános információkat A key vaultelérésének engedélyezése egy biztonsági tag számára című témakörben talál.

Felügyelt HSM-ek

Az alkalmazás identitásának olyan szerepköröknek kell lennie, amelyek lehetővé teszik az alábbi adatsík-műveleteket a felügyelt HSM-en:

  • Microsoft.KeyVault/managedHsm/keys/decrypt/action
  • Microsoft.KeyVault/managedHsm/keys/read/action
  • Microsoft.KeyVault/managedHsm/keys/verify/action

A Microsoft azt javasolja, hogy hozzon létre egy egyéni szerepkört, amely csak a fenti engedélyeket tartalmazza.

Az Always Encrypted kulcsait kezelő felhasználónak olyan tagnak vagy szerepkörnek kell lennie, amely engedélyezi a következő adatsík-műveleteket a kulcson:

  • Microsoft.KeyVault/managedHsm/keys/create/action (kulcs létrehozása)
  • Microsoft.KeyVault/managedHsm/keys/decrypt/action
  • Microsoft.KeyVault/managedHsm/keys/encrypt/action
  • Microsoft.KeyVault/managedHsm/keys/read
  • Microsoft.KeyVault/managedHsm/keys/sign/action
  • Microsoft.KeyVault/managedHsm/keys/verify/action

A felhasználónak a fenti engedélyek megadásának legegyszerűbb módja, ha hozzáadja a felhasználót a felügyelt HSM crypto user szerepkörhöz. Egyéni szerepkört is létrehozhat a szükséges engedélyekkel.

A felügyelt HSM-ekhez tartozó hozzáférés-vezérléssel kapcsolatos további információkért lásd:

Oszlop-főkulcsok létrehozása hardveres biztonsági modulokban a CNG használatával

Az Always Encrypted oszlop-főkulcsa a Cryptography Next Generation (CNG) API-t implementáló kulcstárolóban tárolható. Ez a tárolótípus általában egy hardveres biztonsági modul (HSM). A HSM egy fizikai eszköz, amely védi és kezeli a digitális kulcsokat, és titkosítási feldolgozást biztosít. A HSM-ek hagyományosan beépülő kártya vagy külső eszköz formájában jönnek létre, amely közvetlenül egy számítógéphez (helyi HSM-ekhez) vagy hálózati kiszolgálóhoz csatlakozik.

Ha egy HSM-et elérhetővé szeretne tenni egy adott gépen lévő alkalmazások számára, a CNG-t implementáló kulcstároló-szolgáltatót (KSP) telepíteni és konfigurálni kell a gépen. Az Always Encrypted ügyfélillesztő (az illesztőprogramon belüli oszlop főkulcstároló-szolgáltatója) a KSP használatával titkosítja és visszafejti az oszloptitkosítási kulcsokat, amelyet a kulcstárolóban tárolt oszlop-főkulcs véd.

A Windows tartalmazza a Microsoft Szoftverkulcstár-szolgáltatót – egy szoftveralapú KSP-t, amelyet tesztelési célokra használhat. Lásd a CNG kulcstároló szolgáltatókat .

Oszlop-főkulcsok létrehozása kulcstárban cNG/KSP használatával

Az oszlop főkulcsának az RSA-algoritmus használatával aszimmetrikus kulcsnak (nyilvános/titkos kulcspárnak) kell lennie. A javasolt kulcshossz 2048 vagy nagyobb.

HSM-specifikus eszközök használata

Tekintse meg a HSM dokumentációját.

A PowerShell használata

A .NET API-k segítségével kulcsokat hozhat létre egy kulcstárolóban a CNG használatával a PowerShellben.

$cngProviderName = "Microsoft Software Key Storage Provider" # If you have an HSM, you can use a KSP for your HSM instead of a Microsoft KSP
$cngAlgorithmName = "RSA"
$cngKeySize = 2048 # Recommended key size for Always Encrypted column master keys
$cngKeyName = "AlwaysEncryptedKey" # Name identifying your new key in the KSP
$cngProvider = New-Object System.Security.Cryptography.CngProvider($cngProviderName)
$cngKeyParams = New-Object System.Security.Cryptography.CngKeyCreationParameters
$cngKeyParams.provider = $cngProvider
$cngKeyParams.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::OverwriteExistingKey
$keySizeProperty = New-Object System.Security.Cryptography.CngProperty("Length", [System.BitConverter]::GetBytes($cngKeySize), [System.Security.Cryptography.CngPropertyOptions]::None);
$cngKeyParams.Parameters.Add($keySizeProperty)
$cngAlgorithm = New-Object System.Security.Cryptography.CngAlgorithm($cngAlgorithmName)
$cngKey = [System.Security.Cryptography.CngKey]::Create($cngAlgorithm, $cngKeyName, $cngKeyParams)

Az SQL Server Management Studio használata

Lásd: Always Encrypted kulcsok kiépítése az SQL Server Management Studiohasználatával.

CNG-kulcsok elérhetővé tétele alkalmazások és felhasználók számára

A HSM és a KSP dokumentációjában megtudhatja, hogyan konfigurálhatja a KSP-t egy gépen, és hogyan biztosíthat hozzáférést az alkalmazásoknak és a felhasználóknak a HSM-hez.

Oszlop-főkulcsok létrehozása hardveres biztonsági modulokban a CAPI használatával

Az Always Encrypted oszlop-főkulcsa olyan kulcstárolóban tárolható, amely implementálja a titkosítási API-t (CAPI). Az ilyen tárolók általában egy hardveres biztonsági modul (HSM) – fizikai eszköz, amely védi és kezeli a digitális kulcsokat, és kriptográfiai feldolgozást biztosít. A HSM-ek hagyományosan beépülő kártya vagy külső eszköz formájában jönnek létre, amely közvetlenül egy számítógéphez (helyi HSM-ekhez) vagy hálózati kiszolgálóhoz csatlakozik.

Ha egy HSM-et elérhetővé szeretne tenni egy adott gépen lévő alkalmazások számára, telepíteni és konfigurálni kell a gépen egy TITKOSÍTÁSI-szolgáltatót (CSP), amely implementálja a CAPI-t. Az Always Encrypted ügyfélillesztő (az illesztőprogramon belüli oszlop főkulcstároló-szolgáltatója) a CSP használatával titkosítja és visszafejti az oszloptitkosítási kulcsokat, amelyet a kulcstárolóban tárolt oszlop-főkulcs véd.

Jegyzet

A CAPI egy régi, elavult API. Ha egy KSP elérhető a HSM-hez, akkor csP/CAPI helyett azt kell használnia.

A CSP-nek támogatnia kell az RSA-algoritmust az Always Encrypted használatával való használathoz.

A Windows a következő szoftveralapú (HSM által nem támogatott) CSP-ket tartalmazza, amelyek támogatják az RSA-t, és tesztelési célokra használhatók: Microsoft Enhanced RSA és AES titkosítási szolgáltató.

Oszlopfőkulcsok létrehozása kulcstárolóban a CAPI/CSP használatával

Az oszlop főkulcsának az RSA-algoritmus használatával aszimmetrikus kulcsnak (nyilvános/titkos kulcspárnak) kell lennie. A javasolt kulcshossz 2048 vagy nagyobb.

HSM-specifikus eszközök használata

Tekintse meg a HSM dokumentációját.

Az SQL Server Management Studio (SSMS) használata

Lásd: Always Encrypted kulcsok kiépítése az SQL Server Management Studiohasználatával.

CNG-kulcsok elérhetővé tétele alkalmazások és felhasználók számára

A HSM és a CSP dokumentációjában megtudhatja, hogyan konfigurálhatja a csP-t egy gépen, és hogyan biztosíthat hozzáférést az alkalmazásoknak és a felhasználóknak a HSM-hez.

Következő lépések

Lásd még: