Share via


Azure Arc 対応 SQL Managed Instance で Transparent Data Encryption を有効にする (プレビュー)

この記事では、Azure Arc 対応 SQL Managed Instance での保存時に Transparent Data Encryption (TDE) を有効または無効にする方法について説明します。この記事では、"マネージド インスタンス" という用語は、Azure Arc 対応 SQL Managed Instance のデプロイを指し、TDE の有効化と無効化は、マネージド インスタンスで実行されているすべてのデータベースに適用されます。

TDE について詳しくは、「Transparent Data Encryption」をご覧ください。

TDE 機能を有効にすると、次の処理が行われます。

  • 既存のすべてのデータベースが、自動的に暗号化されます。
  • 新しく作成されるすべてのデータベースが、自動的に暗号化されるようになります。

Note

この記事で紹介しているテクノロジはプレビュー機能であり、「Microsoft Azure プレビューの追加利用規約」に従うことを条件として提供されます。

最新の更新プログラムについては、リリース ノートを参照してください。

前提条件

この記事を進める前に、Azure Arc 対応 SQL Managed Instance リソースを作成し、それに接続しておく必要があります。

制限事項

自動 TDE を有効にするときは、次の制限が適用されます。

  • General Purpose レベルのみがサポートされます。
  • フェールオーバー グループはサポートされません。

TDE を有効にしてマネージド インスタンスを作成する (Azure CLI)

次の例では、TDE が有効になっている 1 つのレプリカを使用して Azure Arc 対応 SQL Managed Instance を作成します。

az sql mi-arc create --name sqlmi-tde --k8s-namespace arc --tde-mode ServiceManaged --use-k8s

マネージド インスタンスで TDE を有効にする

Arc 対応 SQL Managed Instance で TDE を有効にすると、データ サービスによって次のタスクが自動的に行われます。

  1. master データベースにサービス マネージドのデータベース マスター キーを追加します。
  2. サービス マネージドの証明書の保護機能を追加します。
  3. マネージド インスタンスのすべてのデータベースに、関連付けられたデータベース暗号化キー (DEK) を追加します。
  4. マネージド インスタンスのすべてのデータベースで暗号化を有効にします。

Azure Arc 対応 SQL Managed Instance の TDE は、次の 2 つのモードのいずれかに設定できます。

  • サービス マネージド
  • 顧客管理

サービス マネージド モードでは、TDE はマネージド インスタンスに、サービス管理のデータベース マスター キーとサービス管理のサーバー証明書を使うよう求めます。 これらの資格情報は、サービス マネージドの TDE が有効にされると自動的に作成されます。

カスタマー マネージド モードでは、TDE はサービス マネージドのデータベース マスター キーと、ユーザーがサーバー証明書に指定したキーを使います。 カスタマー マネージド モードを構成するには:

  1. 証明書を作成する。
  2. 証明書をシークレットとして、インスタンスと同じ Kubernetes 名前空間に格納します。

有効にする

次のセクションでは、サービス マネージド モードで TDE を有効にする方法を説明します。

サービス マネージド モードで TDE を有効にするには、次のコマンドを実行します。

az sql mi-arc update --tde-mode ServiceManaged

マネージド インスタンスで TDE を無効にする

Arc 対応 SQL Managed Instance で TDE を無効にすると、データ サービスによって次のタスクが自動的に行われます。

  1. マネージド インスタンスのすべてのデータベースで暗号化を無効にします。
  2. マネージド インスタンスのすべてのデータベースで、関連付けられている DEK を削除します。
  3. サービス マネージドの証明書の保護機能を削除します。
  4. master データベースで、サービス マネージドのデータベース マスター キーを削除します。

TDE を無効にするには、

az sql mi-arc update --tde-mode Disabled

TDE の資格情報をバックアップする

マネージド インスタンスから資格情報をバックアップすると、資格情報はコンテナー内に格納されます。 永続ボリュームに資格情報を格納するには、コンテナー内のマウント パスを指定します。 たとえば、var/opt/mssql/data のようにします。 次の例では、マネージド インスタンスから証明書をバックアップします。

Note

kubectl cp コマンドを Windows から実行する場合、Windows の絶対パスを使用するとコマンドが失敗することがあります。 相対パスまたは以下に示すコマンドを使用します。

  1. コンテナーから /var/opt/mssql/data に証明書をバックアップします。

    USE master;
    GO
    
    BACKUP CERTIFICATE <cert-name> TO FILE = '<cert-path>'
    WITH PRIVATE KEY ( FILE = '<private-key-path>',
    ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
    

    例:

    USE master;
    GO
    
    BACKUP CERTIFICATE MyServerCert TO FILE = '/var/opt/mssql/data/servercert.crt'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key',
    ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
    
  2. コンテナーからファイル システムに証明書をコピーします。

    kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-certificate-path> > <local-certificate-path>
    

    例:

    kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.crt > $HOME\sqlcerts\servercert.crt
    

  1. コンテナーからファイル システムに秘密キーをコピーします。

     kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-private-key-path> > <local-private-key-path>
    

    例:

    kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.key > $HOME\sqlcerts\servercert.key
    

  1. コンテナーから証明書と秘密キーを削除します。

    kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
    

    例:

    kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
    

マネージド インスタンスに TDE の資格情報を復元する

上記と同様に、資格情報を復元するには、資格情報をコンテナーにコピーし、後で対応する T-SQL を実行します。

Note

kubectl cp コマンドを Windows から実行する場合、Windows の絶対パスを使用するとコマンドが失敗することがあります。 相対パスまたは以下に示すコマンドを使用します。 TDE を有効にする前に作成されたデータベース バックアップを復元するには、SQL Managed Instance で TDE を無効にし、データベース バックアップを復元して、TDE をもう一度有効にする必要があります。

  1. ファイル システムからコンテナーに証明書をコピーします。

    type <local-certificate-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-certificate-path>
    

    例:

    type $HOME\sqlcerts\servercert.crt | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.crt
    

  1. ファイル システムからコンテナーに秘密キーをコピーします。

    type <local-private-key-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-private-key-path>
    

    例:

    type $HOME\sqlcerts\servercert.key | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.key
    
  2. /var/opt/mssql/data からファイル パスを使用して証明書を作成します。

    USE master;
    GO
    
    CREATE CERTIFICATE <certicate-name>
    FROM FILE = '<certificate-path>'
    WITH PRIVATE KEY ( FILE = '<private-key-path>',
        DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
    

    例:

    USE master;
    GO
    
    CREATE CERTIFICATE MyServerCertRestored
    FROM FILE = '/var/opt/mssql/data/servercert.crt'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key',
        DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
    
  3. コンテナーから証明書と秘密キーを削除します。

    kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
    

    例:

    kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
    

透過的なデータ暗号化