Azure VM で SQL Server 用に Azure Key Vault 統合を構成する (リソース マネージャー)

適用対象: Azure VM 上の SQL Server

透過的なデータ暗号化 (TDE)列レベルの暗号化 (CLE)バックアップ暗号化 など、SQL Server 暗号化機能が複数存在します。 これらの形態の暗号化では、暗号化に利用する暗号鍵を管理し、保存する必要があります。 Azure Key Vault サービスは、セキュリティを強化し、安全かつ可用性の高い場所で鍵を管理できるように設計されています。 SQL Server コネクタ を利用すると、SQL Server は Azure Key Vault にある鍵を利用できます。

SQL Server をオンプレミスで実行している場合、いくつかの手順を踏んでオンプレミスの SQL Server インスタンスから Azure Key Vault にアクセスできます。 ただし、Azure VM の SQL Server の場合、Azure Key Vault の統合機能を利用することで時間を節約できます。

Note

Azure Key Vault の統合は、SQL Server の Enterprise Edition、Developer Edition、および評価版でのみ使用できます。 SQL Server 2019 からは、Standard Edition もサポートされています。

この機能が有効になっていると、SQL Server コネクタが自動的にインストールされ、Azure Key Vault にアクセスするように EKM プロバイダーが構成され、Vault へのアクセスを許可する資格情報が作成されます。 前述のオンプレミス文書の手順を見れば、この機能で手順 2 と 3 が自動化されることがわかります。 手動でしなければならないことは、Key Vault と鍵を作成することだけです。 そこから先は、SQL Server VM の設定全体が自動化されます。 この機能でこの設定が完了したら、Transact-SQL (T-SQL) ステートメントを実行し、通常どおり、データベースやバックアップの暗号化を開始できます。

Note

テンプレートを使用して Key Vault 統合を構成することもできます。 詳細については、 Azure Key Vault 統合用の Azure クイックスタート テンプレートに関するページをご覧ください。

AKV 統合の準備

Azure Key Vault 統合を使用し、SQL Server VM を構成するには、いくつかの前提条件があります。

  1. Azure PowerShell をインストールするには
  2. Azure Active Directory を作成する
  3. Key Vault を作成します

次のセクションでは、これらの前提条件と、後に PowerShell コマンドレットを実行するために必要な情報について説明します。

Note

この記事では、Azure と対話するために推奨される PowerShell モジュールである Azure Az PowerShell モジュールを使用します。 Az PowerShell モジュールの使用を開始するには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

Azure PowerShell をインストールする

最新の Azure PowerShell モジュールがインストールされていることを確認してください。 詳細については、「 Azure PowerShell のインストールと構成の方法」を参照してください。

ご利用の Azure Active Directory にアプリケーションを登録する

最初に、サブスクリプションに Azure Active Directory (AAD) を追加する必要があります。 特定のユーザーやアプリケーションが Key Vault にアクセスするための許可が与えられるなど、さまざまな利点があります。

次に、アプリケーションを AAD に登録します。 これで VM に必要なキー コンテナーへのアクセス許可を持つサービス プリンシパル アカウントを入手できます。 Azure Key Vault の記事のセクション「Azure Active Directory にアプリケーションを登録する」にこれらの手順があります。あるいは、このブログ投稿の「Get an identity for the application (アプリケーションの ID を取得する)」セクションのスクリーンショットで手順を確認できます。 これらの手順を完了する前に、後で SQL VM で Azure Key Vault 統合を有効にするときに必要になる次の情報をこの登録中に集める必要があります。

  • アプリケーションが追加されたら、 [登録済みのアプリ] ブレードで [アプリケーション ID] (別名 AAD ClientID または AppID) を探します。 アプリケーション ID は後に PowerShell スクリプトの $spName (サービス プリンシパル名) パラメーターに割り当てられ、Azure Key Vault 統合を有効にします。

    アプリケーション ID

  • これらの手順で、鍵を作成するとき、次のスクリーンショットのように、鍵のシークレットをコピーします。 この鍵シークレットは後に PowerShell スクリプトの $spSecret (サービス プリンシパル シークレット) パラメーターに割り当てられます。

    AAD シークレット

  • アプリケーション ID とシークレットは、SQL Server で資格情報を作成する場合も使用されます。

  • この新しいアプリケーション ID (またはクライアント ID) に権限を与え、アクセス許可 (getwrapKeyunwrapKey) を与える必要があります。 これは Set-AzKeyVaultAccessPolicy コマンドレットで行われます。 詳細については、Azure Key Vault の概要に関する記事を参照してください。

Key Vault を作成します

Azure Key Vault を使用して VM の暗号化に使用する鍵を保存するには、Key Vault へのアクセス許可が必要です。 キー コンテナーをまだ設定していない場合、「Azure Key Vault の概要」記事の手順で作成します。 これらの手順を完了する前に、後で SQL VM で Azure Key Vault 統合を有効にするときに必要になるいくつかの情報をこの設定中に集める必要があります。

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

"Key Vault を作成する" 手順に入ったら、返された vaultUri プロパティをメモします。これは Key Vault の URL です。 この手順の例では、下のように、Key Vault の名前は ContosoKeyVault であり、Key Vault URL は https://contosokeyvault.vault.azure.net/ になります。

Key Vault ID は後に PowerShell スクリプトの $akvURL パラメーターに割り当てられ、Azure Key Vault 統合を有効にします。

キー コンテナーが作成されたら、Microsoft はキー コンテナーにキーを追加する必要があります。このキーはその後、SQL Server で非対称キーを作成する場合に参照されます。

Note

拡張キー管理 (EKM) プロバイダー バージョン 1.0.4.0 は、SQL IaaS (サービスとしてのインフラストラクチャ) 拡張機能を通じて SQL Server VM にインストールされます。 SQL IaaS Agent 拡張機能をアップグレードしても、プロバイダーのバージョンは更新されません。 必要に応じて、EKM プロバイダーのバージョンの手動アップグレードを検討してください (たとえば、SQL マネージド インスタンスへの移行時)。

Key Vault 統合を有効にして構成する

Key Vault 統合はプロビジョニング時に有効にできます。または、既存の VM 用に構成できます。

新しい VM

リソース マネージャーで新しい SQL 仮想マシンをプロビジョニングしている場合は、Azure Portal で Azure Key Vault 統合を有効にすることができます。

SQL Azure Key Vault Integration

プロビジョニングの詳細なチュートリアルについては、Azure portal での SQL 仮想マシンのプロビジョニングに関するページをご覧ください。

既存の VM

既存の SQL 仮想マシンの場合、[SQL 仮想マシン リソース] を開き、 [設定][セキュリティ] を選択します。 [有効にする] を選択し、Azure Key Vault の統合を有効にします。

次のスクリーンショットは、既存の SQL Server VM に対してポータルで Azure Key Vault を有効にする方法を示しています (この SQL Server インスタンスでは既定以外のポート 1401 が使用されます)。

既存の VM 用の SQL Key Vault 統合

完了したら、 [セキュリティ] ページの下にある [適用] ボタンを選択して変更内容を保存します。

Note

ここで作成した資格情報名は、後で SQL ログインにマップされます。 これにより、SQL ログインで Key Vault にアクセスできるようになります。

Azure Key Vault 統合を有効にしたら、SQL VM で SQL Server 暗号化を有効にできます。 最初に、Key Vault 内で非対称鍵を作成し、VM の SQL Server 内で対称鍵を作成する必要があります。 これでデータベースとバックアップの暗号化を有効にする T-SQL ステートメントを実行できます。

次のような形式の暗号化を活用できます。

次の Transact-SQL スクリプトにはこれらの各領域の例があります。

例の前提条件

例はいずれも 2 つの前提条件に基づきます。キー コンテナーからの CONTOSO_KEY という名前の非対称鍵と、AKV 統合機能により作成された Azure_EKM_cred という名前の資格情報です。 以下の Transact-SQL コマンドは、これらの前提条件を準備して、例を実行できるようにするためのものです。

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. TDE のためにデータベース エンジンで使用される SQL Server を作成し、それに資格情報を追加します。

    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. 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
    

暗号化バックアップ

  1. バックアップを暗号化するためにデータベース エンジンで使用される SQL Server を作成し、それに資格情報を追加します。

    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. Key Vault に保存されている非対称鍵で暗号化を指定し、データベースをバックアップします。

    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
    

列レベルの暗号化 (CLE)

このスクリプトにより、Key Vault の非対称鍵で保護される対称鍵が作成され、その対称鍵を利用し、データベースのデータが暗号化されます。

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;

その他のリソース

これらの暗号化機能の使用方法の詳細については、「 SQL Server 暗号化機能で EKM を使用する」を参照してください。

この記事の手順では、Azure 仮想マシンで SQL Server を既に実行していることを前提としています。 実行していない場合、Azure での SQL Server 仮想マシンのプロビジョニングに関するページを参照してください。 Azure VM で SQL Server を実行する方法については、「Azure Virtual Machines における SQL Server の概要」を参照してください。

次のステップ

セキュリティ情報について詳しくは、「Azure Virtual Machines 上の SQL Server のセキュリティに関する考慮事項」をご覧ください。