Konfigurowanie integracji usługi Azure Key Vault dla programu SQL Server na maszynach wirtualnych platformy Azure (Resource Manager)

Dotyczy:SQL Server na maszynie wirtualnej platformy Azure

Istnieje wiele funkcji szyfrowania programu SQL Server, takich jak transparent data encryption (TDE), szyfrowanie na poziomie kolumny (CLE) i szyfrowanie kopii zapasowych. Te formy szyfrowania wymagają zarządzania kluczami kryptograficznymi używanymi do szyfrowania i przechowywania ich. Usługa Azure Key Vault została zaprojektowana w celu poprawy bezpieczeństwa i zarządzania tymi kluczami w bezpiecznej i wysokiej dostępności. Program SQL Server Połączenie or umożliwia programowi SQL Server używanie tych kluczy z usługi Azure Key Vault.

Jeśli korzystasz z lokalnego programu SQL Server, możesz wykonać następujące kroki, aby uzyskać dostęp do usługi Azure Key Vault z lokalnego wystąpienia programu SQL Server. Jednak w przypadku programu SQL Server na maszynach wirtualnych platformy Azure możesz zaoszczędzić czas przy użyciu funkcji integracji z usługą Azure Key Vault.

Uwaga

Integracja usługi Azure Key Vault jest dostępna tylko dla wersji Enterprise, Developer i Evaluation programu SQL Server. Począwszy od programu SQL Server 2019, obsługiwana jest również wersja Standard.

Po włączeniu tej funkcji program automatycznie instaluje program SQL Server Połączenie or, konfiguruje dostawcę EKM w celu uzyskania dostępu do usługi Azure Key Vault i tworzy poświadczenia, aby umożliwić dostęp do magazynu. Jeśli zapoznano się z krokami opisanymi wcześniej w dokumentacji lokalnej, możesz zobaczyć, że ta funkcja automatyzuje kroki 2 i 3. Jedyną rzeczą, którą nadal trzeba wykonać ręcznie, jest utworzenie magazynu kluczy i kluczy. Z tego miejsca cała konfiguracja maszyny wirtualnej z programem SQL Server jest zautomatyzowana. Po ukończeniu tej konfiguracji można wykonać instrukcje języka Transact-SQL (T-SQL), aby rozpocząć szyfrowanie baz danych lub kopii zapasowych w zwykły sposób.

Uwaga

Integrację usługi Key Vault można również skonfigurować przy użyciu szablonu. Aby uzyskać więcej informacji, zobacz Szablon szybkiego startu platformy Azure na potrzeby integracji z usługą Azure Key Vault.

Przygotowanie do integracji z usługą AKV

Aby skonfigurować maszynę wirtualną z programem SQL Server przy użyciu integracji usługi Azure Key Vault, należy spełnić kilka wymagań wstępnych:

  1. Instalowanie programu Azure PowerShell
  2. Tworzenie dzierżawy firmy Microsoft Entra
  3. Tworzenie magazynu kluczy

W poniższych sekcjach opisano te wymagania wstępne i informacje potrzebne do późniejszego uruchomienia poleceń cmdlet programu PowerShell.

Uwaga

W tym artykule użyto modułu Azure Az programu PowerShell, który jest zalecanym modułem programu PowerShell do interakcji z platformą Azure. Aby rozpocząć pracę z modułem Azure PowerShell, zobacz Instalowanie programu Azure PowerShell. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Instalowanie programu Azure PowerShell

Upewnij się, że zainstalowano najnowszy moduł programu Azure PowerShell. Aby uzyskać więcej informacji, zobacz Instalowanie i konfigurowanie programu Azure PowerShell.

Rejestrowanie aplikacji w identyfikatorze Entra firmy Microsoft

Najpierw musisz mieć dzierżawę firmy Microsoft Entra w ramach subskrypcji. Wśród wielu korzyści można udzielić uprawnień do magazynu kluczy dla niektórych użytkowników i aplikacji.

Następnie zarejestruj aplikację przy użyciu identyfikatora Entra firmy Microsoft. Zapewnia to konto jednostki usługi, które ma dostęp do magazynu kluczy, którego potrzebuje Twoja maszyna wirtualna. W artykule Dotyczącym usługi Azure Key Vault możesz znaleźć te kroki w sekcji Rejestrowanie aplikacji przy użyciu identyfikatora Firmy Microsoft lub możesz zobaczyć kroki ze zrzutami ekranu w sekcjiUzyskiwanie tożsamości dla aplikacji tego wpisu w blogu. Przed wykonaniem tych kroków należy zebrać następujące informacje podczas tej rejestracji, które są potrzebne później po włączeniu integracji usługi Azure Key Vault na maszynie wirtualnej SQL.

  • Po dodaniu aplikacji znajdź identyfikator aplikacji (znany również jako ClientID lub AppID) w okienku Zarejestrowana aplikacja . Identyfikator aplikacji zostanie przypisany później do parametru $spName (nazwa główna usługi) w skrypce programu PowerShell w celu włączenia integracji z usługą Azure Key Vault.

    Application ID

  • Podczas wykonywania tych kroków podczas tworzenia klucza skopiuj klucz tajny dla klucza, jak pokazano na poniższym zrzucie ekranu. Ten klucz tajny jest przypisywany później do parametru $spSecret (klucz tajny jednostki usługi) w skry skrypie programu PowerShell.

    AAD secret

  • Identyfikator aplikacji i wpis tajny będą również używane do tworzenia poświadczeń w programie SQL Server.

  • Musisz autoryzować ten nowy identyfikator aplikacji (lub identyfikator klienta), aby mieć następujące uprawnienia dostępu: get, wrapKey, unwrapKey. Odbywa się to za pomocą polecenia cmdlet Set-AzKeyVaultAccessPolicy . Aby uzyskać więcej informacji, zobacz Omówienie usługi Azure Key Vault.

Tworzenie magazynu kluczy

Aby używać usługi Azure Key Vault do przechowywania kluczy używanych do szyfrowania na maszynie wirtualnej, musisz mieć dostęp do magazynu kluczy. Jeśli magazyn kluczy nie został jeszcze skonfigurowany, utwórz go, wykonując kroki opisane w artykule Wprowadzenie do usługi Azure Key Vault . Przed wykonaniem tych kroków należy zebrać pewne informacje podczas tej konfiguracji, które będą potrzebne później po włączeniu integracji usługi Azure Key Vault na maszynie wirtualnej SQL.

New-AzKeyVault -VaultName 'ContosoKeyVault' -ResourceGroupName 'ContosoResourceGroup' -Location 'East Asia'

Gdy zostanie wyświetlony krok Tworzenie magazynu kluczy, zwróć uwagę na zwróconą właściwość vaultUri , która jest adresem URL magazynu kluczy. W przykładzie podanym w tym kroku pokazanym później nazwa magazynu kluczy to ContosoKeyVault, dlatego adres URL magazynu kluczy to https://contosokeyvault.vault.azure.net/.

Adres URL magazynu kluczy zostanie przypisany później do parametru $akvURL w skrypce programu PowerShell w celu włączenia integracji z usługą Azure Key Vault.

Po utworzeniu magazynu kluczy musimy dodać klucz do magazynu kluczy, ten klucz zostanie odwoływał się podczas tworzenia klucza asymetrycznego w programie SQL Server później.

Uwaga

Dostawca rozszerzonego zarządzania kluczami (EKM) w wersji 1.0.4.0 jest instalowany na maszynie wirtualnej z programem SQL Server za pośrednictwem rozszerzenia infrastruktura jako usługa SQL (IaaS). Uaktualnienie rozszerzenia agenta IaaS sql nie spowoduje zaktualizowania wersji dostawcy. Rozważ ręczne uaktualnienie wersji dostawcy EKM w razie potrzeby (na przykład podczas migracji do wystąpienia zarządzanego SQL).

Włączanie i konfigurowanie integracji z usługą Key Vault

Integrację usługi Key Vault można włączyć podczas aprowizacji lub skonfigurować dla istniejących maszyn wirtualnych.

Nowe maszyny wirtualne

Jeśli aprowizujesz nową maszynę wirtualną SQL za pomocą usługi Resource Manager, witryna Azure Portal umożliwia włączenie integracji z usługą Azure Key Vault.

SQL Azure Key Vault Integration

Aby uzyskać szczegółowy przewodnik aprowizacji, zobacz Aprowizowanie maszyny wirtualnej SQL w witrynie Azure Portal.

Istniejące maszyny wirtualne

W przypadku istniejących maszyn wirtualnych SQL otwórz zasób maszyn wirtualnych SQL i wybierz pozycję Zabezpieczenia w obszarze Ustawienia. Wybierz pozycję Włącz , aby włączyć integrację usługi Azure Key Vault.

Poniższy zrzut ekranu przedstawia sposób włączania usługi Azure Key Vault w portalu dla istniejącej maszyny wirtualnej z programem SQL Server (to wystąpienie programu SQL Server używa portu innego niż domyślny 1401):

SQL Key Vault integration for existing VMs

Po zakończeniu wybierz przycisk Zastosuj w dolnej części strony Zabezpieczenia , aby zapisać zmiany.

Uwaga

Utworzona tutaj nazwa poświadczeń zostanie zamapowana na identyfikator logowania SQL później. Dzięki temu identyfikator logowania SQL może uzyskać dostęp do magazynu kluczy.

Po włączeniu integracji usługi Azure Key Vault możesz włączyć szyfrowanie programu SQL Server na maszynie wirtualnej SQL. Najpierw należy utworzyć klucz asymetryczny w magazynie kluczy i klucz symetryczny w programie SQL Server na maszynie wirtualnej. Następnie będzie można wykonać instrukcje języka T-SQL w celu włączenia szyfrowania baz danych i kopii zapasowych.

Istnieje kilka form szyfrowania, które można wykorzystać:

Poniższe skrypty języka Transact-SQL zawierają przykłady dla każdego z tych obszarów.

Wymagania wstępne dotyczące przykładów

Każdy przykład jest oparty na dwóch wymaganiach wstępnych: klucz asymetryczny z magazynu kluczy o nazwie CONTOSO_KEY i poświadczenie utworzone przez funkcję integracji z usługą AKV o nazwie Azure_EKM_cred. Następujące polecenia języka Transact-SQL konfigurują te wymagania wstępne dotyczące uruchamiania przykładów.

USE master;
GO

--create credential
--The <<SECRET>> here requires the <Application ID> (without hyphens) and <Secret> to be passed together without a space between them.
CREATE CREDENTIAL Azure_EKM_cred
    WITH IDENTITY = 'keytestvault', --keyvault
    SECRET = '<<SECRET>>'
FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;


--Map the credential to a SQL login that has sysadmin permissions. This allows the SQL login to access the key vault when creating the asymmetric key in the next step.
ALTER LOGIN [SQL_Login]
ADD CREDENTIAL Azure_EKM_cred;


CREATE ASYMMETRIC KEY CONTOSO_KEY
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'KeyName_in_KeyVault',  --The key name here requires the key we created in the key vault
CREATION_DISPOSITION = OPEN_EXISTING;

Transparent Data Encryption (TDE)

  1. Utwórz identyfikator logowania programu SQL Server do użycia przez aparat bazy danych dla funkcji TDE, a następnie dodaj do niego poświadczenia.

    USE master;
    -- Create a SQL Server login associated with the asymmetric key
    -- for the Database engine to use when it loads a database
    -- encrypted by TDE.
    CREATE LOGIN EKM_Login
    FROM ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the TDE Login to add the credential for use by the
    -- Database Engine to access the key vault
    ALTER LOGIN EKM_Login
    ADD CREDENTIAL Azure_EKM_cred;
    GO
    
  2. Utwórz klucz szyfrowania bazy danych, który będzie używany dla funkcji TDE.

    USE ContosoDatabase;
    GO
    
    CREATE DATABASE ENCRYPTION KEY 
    WITH ALGORITHM = AES_128 
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the database to enable transparent data encryption.
    ALTER DATABASE ContosoDatabase
    SET ENCRYPTION ON;
    GO
    

Zaszyfrowane kopie zapasowe

  1. Utwórz identyfikator logowania programu SQL Server do użycia przez aparat bazy danych na potrzeby szyfrowania kopii zapasowych i dodaj do niego poświadczenia.

    USE master;
    -- Create a SQL Server login associated with the asymmetric key
    -- for the Database engine to use when it is encrypting the backup.
    CREATE LOGIN EKM_Login
    FROM ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the Encrypted Backup Login to add the credential for use by
    -- the Database Engine to access the key vault
    ALTER LOGIN EKM_Login
    ADD CREDENTIAL Azure_EKM_cred ;
    GO
    
  2. Utwórz kopię zapasową bazy danych określającą szyfrowanie przy użyciu klucza asymetrycznego przechowywanego w magazynie kluczy.

    USE master;
    BACKUP DATABASE [DATABASE_TO_BACKUP]
    TO DISK = N'[PATH TO BACKUP FILE]'
    WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD,
    ENCRYPTION(ALGORITHM = AES_256, SERVER ASYMMETRIC KEY = [CONTOSO_KEY]);
    GO
    

Szyfrowanie na poziomie kolumny (CLE)

Ten skrypt tworzy klucz symetryczny chroniony przez klucz asymetryczny w magazynie kluczy, a następnie używa klucza symetrycznego do szyfrowania danych w bazie danych.

CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY
WITH ALGORITHM=AES_256
ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

DECLARE @DATA VARBINARY(MAX);

--Open the symmetric key for use in this session
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

--Encrypt syntax
SELECT @DATA = ENCRYPTBYKEY(KEY_GUID('DATA_ENCRYPTION_KEY'), CONVERT(VARBINARY,'Plain text data to encrypt'));

-- Decrypt syntax
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));

--Close the symmetric key
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;

Dodatkowe zasoby

Aby uzyskać więcej informacji na temat korzystania z tych funkcji szyfrowania, zobacz Using EKM with SQL Server Encryption Features (Używanie EKM z funkcjami szyfrowania programu SQL Server).

Należy pamiętać, że kroki opisane w tym artykule zakładają, że program SQL Server jest już uruchomiony na maszynie wirtualnej platformy Azure. Jeśli nie, zobacz Aprowizuj maszynę wirtualną z programem SQL Server na platformie Azure. Aby uzyskać inne wskazówki dotyczące uruchamiania programu SQL Server na maszynach wirtualnych platformy Azure, zobacz Omówienie programu SQL Server na maszynach wirtualnych platformy Azure z systemem Windows.

Następne kroki

Aby uzyskać więcej informacji na temat zabezpieczeń, zapoznaj się z tematem Zagadnienia dotyczące zabezpieczeń programu SQL Server na maszynach wirtualnych platformy Azure.