この記事では、Azure Arc 対応 SQL Managed Instance での保存時に Transparent Data Encryption (TDE) を有効または無効にする方法について説明します。この記事では、"マネージド インスタンス" という用語は、Azure Arc 対応 SQL Managed Instance のデプロイを指し、TDE の有効化と無効化は、マネージド インスタンスで実行されているすべてのデータベースに適用されます。
TDE の詳細については、「Transparent Data Encryption」を参照してください。
TDE 機能を有効にすると、次の処理が行われます。
- 既存のすべてのデータベースが、自動的に暗号化されます。
- 新しく作成されるすべてのデータベースが、自動的に暗号化されるようになります。
注
この記事で紹介しているテクノロジはプレビュー機能であり、「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 を有効にすると、データ サービスによって次のタスクが自動的に行われます。
masterデータベースにサービス マネージドのデータベース マスター キーを追加します。- サービス マネージドの証明書の保護機能を追加します。
- マネージド インスタンスのすべてのデータベースに、関連付けられたデータベース暗号化キー (DEK) を追加します。
- マネージド インスタンスのすべてのデータベースで暗号化を有効にします。
Azure Arc 対応 SQL Managed Instance の TDE は、次の 2 つのモードのいずれかに設定できます:
- サービス マネージド
- カスタマー マネージド
サービス マネージド モードでは、TDE はマネージド インスタンスに、サービス管理のデータベース マスター キーとサービス管理のサーバー証明書を使うよう求めます。 これらの資格情報は、サービス マネージドの TDE が有効にされると自動的に作成されます。
カスタマー マネージド モードでは、TDE はサービス マネージドのデータベース マスター キーと、ユーザーがサーバー証明書に指定したキーを使います。 カスタマー マネージド モードを構成するには:
- 証明書を作成します。
- 証明書をシークレットとして、インスタンスと同じ Kubernetes 名前空間に格納します。
有効化
次のセクションでは、サービス マネージド モードで TDE を有効にする方法を説明します。
サービス マネージド モードで TDE を有効にするには、次のコマンドを実行します。
az sql mi-arc update --tde-mode ServiceManaged
マネージド インスタンスで TDE を無効にする
Arc 対応 SQL Managed Instance で TDE を無効にすると、データ サービスによって次のタスクが自動的に行われます。
- マネージド インスタンスのすべてのデータベースで暗号化を無効にします。
- マネージド インスタンスのすべてのデータベースで、関連付けられている DEK を削除します。
- サービス マネージドの証明書の保護機能を削除します。
masterデータベースで、サービス マネージドのデータベース マスター キーを削除します。
TDE を無効にするには:
az sql mi-arc update --tde-mode Disabled
TDE の資格情報をバックアップする
マネージド インスタンスから資格情報をバックアップすると、資格情報はコンテナー内に格納されます。 永続ボリュームに資格情報を格納するには、コンテナー内のマウント パスを指定します。 たとえば、「var/opt/mssql/data」のように入力します。 次の例では、マネージド インスタンスから証明書をバックアップします。
注
kubectl cp コマンドを Windows から実行する場合、Windows の絶対パスを使用するとコマンドが失敗することがあります。 相対パスまたは以下に示すコマンドを使用します。
コンテナーから
/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>');コンテナーからファイル システムに証明書をコピーします。
コンテナーからファイル システムに秘密キーをコピーします。
コンテナーから証明書と秘密キーを削除します。
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 を実行します。
注
kubectl cp コマンドを Windows から実行する場合、Windows の絶対パスを使用するとコマンドが失敗することがあります。 相対パスまたは以下に示すコマンドを使用します。
TDE を有効にする前に作成されたデータベース バックアップを復元するには、SQL Managed Instance で TDE を無効にし、データベース バックアップを復元して、TDE をもう一度有効にする必要があります。
ファイル システムからコンテナーに証明書をコピーします。
ファイル システムからコンテナーに秘密キーをコピーします。
/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>' );コンテナーから証明書と秘密キーを削除します。
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"