Klucze do naszych danych w chmurze, czyli wykorzystanie usługi Azure Key Vault oraz SQL Server

Wpis na temat wykorzystania usługi Azure Key Vault do przechowywania kluczy poza instancją SQL Server z wykorzystaniem Extensible Key Menagment. Następnie jak wykorzystać tą wiedzę do podniesienia bezpieczeństwa danych. Stosując takie rozwiązania jak Transparent Database Encryption do szyfrowania baz danych lub Backup Encryption do szyfrowania kopii zapasowych.

  1. Czym jest Extensible Key Menagment?
  2. Czym jest usługa Azure Key Vault?
  3. Dodanie usługi Azure Key Vault
    1. Azure Portal
    2. PowerShell
  4. Rejestracja konta aplikacji w Azure Active Directory
  5. Nadanie uprawnień dla konta aplikacji w Azure Key Vault
  6. Tworzenie klucza w Azure Key Vault
    1. Azure Portal
    2. PowerShell
  7. Instalacja provider EKM oraz rejestracja providera AzureKeyVault
  8. Tworzenie poświadczeń do usługi Azure Key Vault
  9. Tworzenie klucza asymetrycznego oraz loginu w SQL Server
  10. Sposoby wykorzystania klucza asymetrycznego
    1. Transparent Database Encryption
    2. Backup Encryption
  11. Odnośniki

Instrukcja zawiera sporo zrzutów ekranu, które same w sobie sporo wyjaśniają, jednak dla wielu kroków istniej alternatywa w postaci poleceń PowerShell. W wpisie pominąłem kwestii samego dostępu do Azure.

Czym jest Extensible Key Menagment?

Extensible Key Menagment (EKM) umożliwia zarządzanie kluczami do szyfrowania poza samym SQL Server. Tradycyjnie, wszystkie klucze dla kryptografii symetrycznych i asymetrycznych wykonywanych przez SQL Server znajdują się w samej bazy danych, jednak EKM pozwala na tworzenie kluczy, ich przechowywanie, szyfrowanie i deszyfrowanie poza samą bazą danych dzięki użyciu urządzeń typu Hardware security module HSM

SQL Server nie dostarcza dostawcy EKM. Każdy dostawca EKM może mieć różne procedury instalowania, konfigurowania i autoryzowania użytkowników.

Czym jest usługa Azure Key Vault?

Azure Key Vault ma bardzo dobrą dokumentacje na stronach Microsoftu dlatego pozwoliłem sobie umieścić fragment opisu usługi z tej strony.

Usługa Azure Key Vault ułatwia ochronę kluczy kryptograficznych i kluczy tajnych używanych przez aplikacje i usługi w chmurze. Za pomocą usługi Key Vault możesz szyfrować klucze i klucze tajne (takie jak klucze uwierzytelniania, klucze konta magazynu, klucze szyfrowania danych, pliki PFX oraz hasła) przy użyciu kluczy chronionych przez sprzętowe moduły zabezpieczeń (HSM, hardware security module). W celu zapewnienia dodatkowego bezpieczeństwa możesz zaimportować lub wygenerować klucze w modułach HSM.

Usługa Key Vault usprawnia proces zarządzania kluczami i pozwala zachować kontrolę nad kluczami, które mają dostęp do danych i szyfrują je. Deweloperzy mogą w klika minut utworzyć klucze do programowania i testowania, a następnie bezproblemowo przeprowadzić ich migrację do kluczy produkcji. W razie potrzeby administratorzy zabezpieczeń mogą przydzielić (i cofnąć) uprawnienia do używania kluczy.

Dodanie usługi Azure Key Vault

Do tematu można podejść w dwojaki sposób, wyklikując lub korzystając z PowerShell.

Azure Portal

Tworzenie magazyny kluczy za pomocą webowego portalu Azure, zaczynam od wyszukania usług Key Vault.

W trakcie tworzenia takiego magazyny zostaniemy poproszeni o nazwę, grupę zasobów i lokalizację.

PowerShell

Utworzenie magazyny za pomocą PowerShell wymaga modułu AzureRM. W tym celu, w konsoli PowerShell z podwyższonymi uprawnieniami, wykonać należy polecenie:

Gdy moduł jest dostępny, można zalogować się do portalu Azure za pomocą funkcji Login-AzureRMAccountktóra wywoła okno logowania.

Dobrą praktyką jest „umieszczanie” wszystkich powiązanych zasobów wewnątrz jednej grupy. Pierwsze polecenie tworzy grupę zasobów o nazwie powerSQLGroup a kolejne magazyn kluczy o nazwie powerSQLKeyVault.

Rejestracja konta aplikacji w Azure Active Directory

Wymogiem korzystania z Key Vault jest zarejestrowanie użytkownika bądź aplikacja w usłudze Active Directory w Azure.

W tym scenariuszu SQL Server jest aplikacją, która będzie miała dostęp do magazynu klucz. Na zakładce Azure Active Directory wybieramy App registrations a następnie New application registration.

W formularzu należy Wprowadzić nazwę oraz adres URL logowania aplikacji. W tym scenariuszu adres może być dowolonym, prawidłowym adresem URL. Typ aplikacji należy zostawić Web app/API, następnie klikamy Create.

Po tym kroku wracamy do App registrations i wybieramy wcześniej utworzone konto.

W tym momencie warto sobie zachować Application ID który będzie niezbędny do utworzenie poświadczeń, następnie klikamy Settings.

Przechodzimy do zakładki Keys i tworzymy klucz uzupełniając Description, Expires. Nastomiast wartość klucza zostanie wyświetlone w dopiero w momencie zapisania ustawień

Należy zachować wartość klucza, jest niezwykle ważny do utworzenia poświadczeń w ramach SQL Server. Po opuszczeniu tej strony nie ma możliwości odzyskania tego klucza.

Nadanie uprawnień dla konta aplikacji w Azure Key Vault

Z tak utworzonym kontem aplikacji wracamy do Key Value w celu dodania do polityki dostępu.

Po kliknięciu New, wybieramy Select principal i dodajemy wcześniej przygotowane konto.

Następnie dodajmy niezbędne uprawnienia takie jak: Get, List, Unwrap Key i Wrap Key.

Tworzenie klucza w Azure Key Vault

Azure Portal

Ostatnim krokiem w obszarze Azure jest przygotowanie klucza, który posłuży w SQL Server do szyfrowania kluczy prywatnych. Wybieramy nasz Key Vault, następnie zakładkę Keys.

W formularzu towrzenia klucza jedynym wymaganym polem jest nazwa. Ustawienie dat ważności klucza jest opcjonalne.

PowerShell

Dodanie klucza w magazynie kluczy możliwe jest również za pomocą PowerShell i wcześniej wspomnianego modułu AzureRM.

Instalacja provider EKM oraz rejestracja providera AzureKeyVault

Gdy wykonana została cała konfiguracja od strony chmurowej, należy przygotować SQL Server oraz dostawcę Extensible Key Menagment (EKM). W tym celu należy pobrać i zainstalować SQL Server Connector for Microsoft Azure Key Vault na serwerze gdzie znajduję się instancja SQL Server.

Po przeklikaniu instalatora należy zarejestrować dostawce Azure Key Vault w SQL Server poleceniem CREATE CRYPTOGRAPHIC PROVIDER .

W poleceniu najważniejsza jest scieżka do biblioteki Microsoft.AzureKeyVaultService.EKM.dll, domyślnie będzie to C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault.  Na końcu można odpytać systemowy widok sys.cryptographic_providers w celu sprawdzenia dostępnych dostawców.

Poświadczenia do usługi

Azure Key Vault

W kolejnym kroku należy utworzyć poświadczenie umożliwiające dostęp do magazyn kluczy w Azure.  W tym kroku niezbędne będą:

  • nazwa Azure Key Vault: powerSQLApp
  • Application ID: cfba4b24-faaf-4bff-bc11-ee8882f4e445
  • wartość klucza: ItOjoANkNwEi6U6Pun0H7ZADTq+C05QFzcVdaKqlZ1c=

W poleceniu dla IDENTITY przypisujemy nazwę Azure Key Vault, natomiast SECRET składa się z dwóch elementów, Application ID bez myślników oraz wartości klucza. Tworzymy podwójnie poświadczenie, różniące się tylko nazwa, ponieważ poświadczenie może być dodane tylko do jednego loginu.

Msg 33042, Level 16, State 1, Line 42
Cannot add credential because it is already mapped to a login.

Jedno zostanie dodane do loginu, który ma uprawnienia do utworzenia klucza asymetrycznego, drugie natomiast do loginu, który będzie używane przez Database Engine do szyfrowania/deszyfrowania baz danych lub kopii zapasowych.

Tworzenie klucza asymetrycznego oraz loginu w SQL Server

Mając poświadczenia można utworzyć klucz asymetryczny, którego klucz prywatny podpisany zostanie wcześniej przygotowanym kluczem symetrycznym w Azure Key Vault. Tak jak wcześniej pisałem należy dodać poświadczenie mnadobnik_Login_ekm_cred do loginu z uprawnieniami do tworzenia kluczy.  W moim przykładzie jest to mój login z uprawnieniami sysadmin.

Aby móc zastosować tak utworzony klucz np. do Backup Encryption należy utworzyć login SQL Server pozwiązany z wcześniejszym kluczem asymetrycznym. W przeciwnym wypadku przy próbie np. szyfrowania kopii zapasowej otrzymamy błąd:

Msg 33121, Level 16, State 1, Line 3
The asymmetric key ‚asymetricSQLServerKey’ does not have a login associated with it.
Create a login and credential for this key to automatically access the extensible key management provider ‚AzureKeyVault_EKM_Prov’.
Msg 33122, Level 16, State 1, Line 6
This command requires a database encryption scan on database ‚TDE’.
However, the database has changes from previous encryption scans that are pending log backup. Take a log backup and retry the command.

Dlatego tworzymy identyfikator logowania SQL Server oraz dodajemy uprawnienia do poświadczenia AzureKey_Login_ekm_cred.

Sposoby wykorzystania klucza asymetrycznego

Po tak przygotowanej konfiguracji usługi Azure Key Vault oraz SQL Server można wykorzystać klucz asymetryczny do szyfrowania baz danych lub kopii zapasowych.

Transparent Database Encryption

Na temat TDE zapraszam do Wszystko co warto wiedzieć o Transparent Data Encryption jednak kluczową informacją z tamtego wpisu jest:

Zastosowanie klucza asymetrycznego do zaszyfrowania bazy danych za pomocą Transparent Data Encryption wymaga stosowania Extensible Key Management. Uściślając tylko klucz asymetryczny chroniony przez moduł EKM może zostać użyty do zaszyfrowania bazy danych.

Aby zaszyfrować bazę danych wykonujemy polecenie, gdzie dla ENCRYPTION BY SERVER ASYMMETRIC KEY podajemy wcześniej przygotowany klucz asymetryczny, który podpisany został poprzez klucz znajdujący się w magazynie Azure Key Vault

Backup Encryption

Również temat Backup Encryption poruszyłem w innym wpisie a dokładniej Czemu wykonywanie kopii zapasowych to już za mało? Poniżej tylko polecenie T-SQL, które umożliwia wykonanie zaszyfrowanej kopii zapasowej bazy danych wcześniej przygotowanym kluczem.

Odnośniki

Przydatne linki:

Z pasją poświęcam czas na zdobywanie wiedzy w zakresie szeroko rozumianej Data Platform. Zachwycony językiem skryptowym Windows PowerShell. Swoją wiedzę, doświadczenia i spostrzeżenia opisuję na blogu.