TDE で保護されたデータベースの証明書を Azure SQL Managed Instance に移行する

適用対象:Azure SQL Managed Instance

ネイティブな復元オプションを使用して、Transparent Data Encryption (TDE) によって保護されたデータベースを Azure SQL Managed Instance に移行する場合、データベースの復元前に、SQL Server インスタンスから対応する証明書を移行しておく必要があります。 この記事では、証明書を Azure SQL Managed Instance に手動で移行するプロセスについて説明します。

  • 証明書を Personal Information Exchange (.pfx) ファイルにエクスポートする
  • ファイルから base-64 文字列に証明書を抽出する
  • PowerShell コマンドレットを使用してそれをアップロードする

TDE で保護されたデータベースと対応する証明書の両方を円滑に移行するためにフル マネージド サービスを使用する別の方法については、Azure Database Migration Service を使用してオンプレミスのデータベースを Azure SQL Managed Instance に移行する方法に関するページを参照してください。

重要

移行された証明書は TDE で保護されたデータベースの復元にのみ使用されます。 復元が終わり次第、移行済みの証明書は、インスタンスに設定した TDE によりサービス マネージド証明書またはキー コンテナーの非同期キーのいずれかの異なるプロテクタに置き換わります。

前提条件

この記事の手順を完了するには、次の前提条件を満たす必要があります。

  • ファイルとしてエクスポートされた証明書にアクセス可能なオンプレミス サーバーまたは他のコンピューターへの Pvk2Pfx コマンドライン ツールのインストール。 Pvk2Pfx ツールは、自己完結型コマンドライン環境である Enterprise Windows Driver Kit に含まれています。
  • Windows PowerShell バージョン 5.0 以上のインストール。

次のものを用意してください。

Note

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

重要

PowerShell Azure Resource Manager モジュールは Azure SQL Managed Instance によってまだサポートされていますが、今後の開発はすべて Az.Sql モジュールを対象に行われます。 これらのコマンドレットについては、「AzureRM.Sql」を参照してください。 Az モジュールと AzureRM モジュールのコマンドの引数は実質的に同じです。

PowerShell で次のコマンドを実行して、モジュールをインストール/更新します。

Install-Module -Name Az.Sql
Update-Module -Name Az.Sql

TDE 証明書を .pfx ファイルにエクスポートします。

証明書はソース SQL Server インスタンスから直接エクスポートできます。または、証明書ストアに保持されている場合にそこからエクスポートできます。

ソース SQL Server インスタンスから証明書をエクスポートする

SQL Server Management Studio で証明書をエクスポートして .pfx 形式に変換するには、次の手順を使用します。 手順全体を通して、証明書名およびファイル名とパスには汎用的な名前である TDE_Certfull_path が使用されています。 これらは実際の名前に置き換える必要があります。

  1. SSMS で、新しいクエリ ウィンドウを開いてソース SQL Server インスタンスに接続します。

  2. 次のスクリプトを使用することで、TDE で保護されたデータベースを一覧表示し、移行対象のデータベースの暗号化を保護する証明書の名前を取得します。

    USE master
    GO
    SELECT db.name as [database_name], cer.name as [certificate_name]
    FROM sys.dm_database_encryption_keys dek
    LEFT JOIN sys.certificates cer
    ON dek.encryptor_thumbprint = cer.thumbprint
    INNER JOIN sys.databases db
    ON dek.database_id = db.database_id
    WHERE dek.encryption_state = 3
    

    List of TDE certificates

  3. 次のスクリプトを実行して証明書を 1 組のファイル (.cer と .pvk) にエクスポートし、公開キーおよび秘密キーの情報を保持します。

    USE master
    GO
    BACKUP CERTIFICATE TDE_Cert
    TO FILE = 'c:\full_path\TDE_Cert.cer'
    WITH PRIVATE KEY (
      FILE = 'c:\full_path\TDE_Cert.pvk',
      ENCRYPTION BY PASSWORD = '<SomeStrongPassword>'
    )
    

    Backup TDE certificate

  4. PowerShell コンソールを使用し、Pvk2Pfx ツールを使用して、新しく作成されたファイルのペアから .pfx ファイルに証明書情報をコピーします。

    .\pvk2pfx -pvk c:/full_path/TDE_Cert.pvk  -pi "<SomeStrongPassword>" -spc c:/full_path/TDE_Cert.cer -pfx c:/full_path/TDE_Cert.pfx
    

証明書ストアから証明書をエクスポートする

証明書が SQL Server のローカル コンピューター証明書ストアに保持される場合、次の手順を使用してそれをエクスポートできます。

  1. PowerShell コンソールを開き、次のコマンドを実行して、Microsoft 管理コンソールの証明書スナップインを開きます。

    certlm
    
  2. 証明書 MMC スナップインで Personal > Certificates の順にパスを展開し、証明書の一覧を表示します。

  3. 証明書を右クリックして [エクスポート] をクリックします。

  4. ウィザードに従って、証明書と秘密キーを .pfx 形式にエクスポートします。

Azure PowerShell コマンドレットを使用して証明書を Azure SQL Managed Instance にアップロードする

  1. PowerShell で準備手順を開始します。

    # import the module into the PowerShell session
    Import-Module Az
    # connect to Azure with an interactive dialog for sign-in
    Connect-AzAccount
    # list subscriptions available and copy id of the subscription target the managed instance belongs to
    Get-AzSubscription
    # set subscription for the session
    Select-AzSubscription <subscriptionId>
    
  2. すべての準備手順が完了したら、次のコマンドを実行して、Base-64 でエンコードされた証明書をターゲットのマネージド インスタンスにアップロードします。

    # If you are using PowerShell 6.0 or higher, run this command:
    $fileContentBytes = Get-Content 'C:/full_path/TDE_Cert.pfx' -AsByteStream
    # If you are using PowerShell 5.x, uncomment and run this command instead of the one above:
    # $fileContentBytes = Get-Content 'C:/full_path/TDE_Cert.pfx' -Encoding Byte
    $base64EncodedCert = [System.Convert]::ToBase64String($fileContentBytes)
    $securePrivateBlob = $base64EncodedCert  | ConvertTo-SecureString -AsPlainText -Force
    $password = "<password>"
    $securePassword = $password | ConvertTo-SecureString -AsPlainText -Force
    Add-AzSqlManagedInstanceTransparentDataEncryptionCertificate -ResourceGroupName "<resourceGroupName>" `
        -ManagedInstanceName "<managedInstanceName>" -PrivateBlob $securePrivateBlob -Password $securePassword
    

これで、指定したマネージド インスタンスで証明書が使用できるようになりました。TDE で保護された対応するデータベースのバックアップを正常に復元できます。

注意

アップロードされた証明書は、sys.certificates カタログ ビューには表示されません。 証明書のアップロードが成功したことを確認するには、RESTORE FILELISTONLY コマンドを実行します。

次のステップ

この記事では、Transparent Data Encryption が有効なデータベースの暗号化キーを保護する証明書を、オンプレミスまたは IaaS の SQL Server インスタンスから Azure SQL Managed Instance に移行する方法について説明しました。

データベース バックアップを Azure SQL Managed Instance に復元する方法については、「Azure SQL Managed Instance へのデータベース バックアップの復元」に関するページを参照してください。