NOBTAの気ままにITブログ

Azure全般 / SQL Serverに関する情報を発信していきます。


スポンサーリンク

Azure 仮想マシン上に構築された SQL Server AlwaysOn 可用性データベースの透過的暗号(TDE)方法について [Azure/SQL Server]


スポンサーリンク

Azure SQL Database、Azure SQL Managed Instance、 Azure Synapse Analytics の何れもデータベースの透過的暗号化 (TDE) が既定で有効になっており、データベース全体 (データベース物理ファイル) の暗号化が有効になっています。

しかしながら、Azure 仮想マシン上に SQL Server をインストールし、AlwaysOn 可用性グループを構築した場合、既定では 可用性データベース の透過的暗号化 (TDE) は無効になっているため、データベース全体の暗号化を実施する場合は、自身で 透過的暗号化(TDE) を有効化する必要があります。

今回は、可用性データベース に対して 透過的暗号(TDE) により、データベース全体の暗号化を実施する方法についてまとめてみようと思います。

※ SQL Server 透過的暗号化 (TDE) は、Azure仮想マシンにインストールされた SQL Server に特化した機能ではなく、オンプレミス環境、Amazon EC2環境、Amazon RDS for SQL Server など、SQL Server がインストールされた環境で有効にすることが可能な機能です。

 

[透過的暗号化(TDE)とは]

透過的暗号化(TDE)を使用することで、SQL Server 物理データベースファイル (.mdf/.ndf) および トランザクションログファイル (.ldf) への書き込み時に暗号化され、メモリに読み込まれる際に暗号化の解除がリアルタイムで行われます。

透過的暗号化(TDE)で暗号化されているデータベースの場合、証明書とプライベートキーがなければ、他の環境でリストア、データベースファイルのアタッチをすることが出来ないため、データベースのバックアップやデータベース物理ファイルが配置された物理ディスクそのものが盗まれたとしても、 データの漏洩を防ぐことが可能になります。

なお、透過的暗号化(TDE)を使用するためには、SQL Server Enterprise Edition、Developer Editon などの Enterprise Edition 相当のエディションでのみ使用可能です。

Azure SQL Database では、既定で透過的暗号化(TDE) が有効になっており、3重に冗長化されているため、とてもお得な機能だと思います。

 

[前提条件]

  • Azure 仮想マシン上に SQL Server Enterprise Edition、Developer Editon などの Enterprise Edition 相当のエディションで SQL Server AlwaysOn 可用性グループが構築されていること。

f:id:nobtak:20200612153614p:plain

 

Azure 仮想マシン上に SQL Server AlwaysOn 可用性データベースを構築する方法については、以下の URL を参照。

 

 

1号機 (SQL AG1:プライマリレプリカ) 作業1

1) SQL Server Management Studio (以下 SSMS) を起動し、管理者権限(sysadmin)が付与されたログイン(saなど)で該当のSQL Server インスタンスに接続します。

2) 「新しいクエリ」を選択します。

3) 以下のクエリを実行し、データベース マスターキーを作成します。

use master
go
create master key encryption by password = '********'
go

 

4) 以下のクエリを実行し、証明書を作成します。

use master
go
create certificate AGDB_EncryptionCertwith subject='TDE Certificate for the AGDB database', expiry_date='2050/01/01'
go

※ 証明書名 (今回は「AGDB_EncryptionCert」) は任意の名前を指定。

 

5)  以下のクエリを実行し、4)で作成した証明書およびプライベートキーのバックアップを実行します。

use master
go
backup certificate AGDB_EncryptionCert to file='c:\cert\AGDB_EncryptionCert'
with private key (file='c:\cert\AGDB_PrivateFile', encryption by password='********')
go

※ password には、任意のパスワードを指定します。このパスワードは、2号機側で証明書を作成する際に使用します。

 

6) 5) でバックアップした証明書(今回の場合は「AGDB_EncryptionCert」)、プライベートキー(今回の場合は「AGDB_PrivateFile」) を2号機(SQL AG2 : セカンダリノード)の任意のパスにコピーします。

 

2号機 (SQL AG2:セカンダリレプリカ) 作業1

1) SQL Server Management Studio (以下 SSMS) を起動し、管理者権限(sysadmin)が付与されたログイン(saなど)で該当のSQL Server インスタンスに接続します。

2) 「新しいクエリ」を選択します。

3)  以下のクエリを実行し、データベース マスターキーを作成します。

use master
go
create master key encryption by password = '********'
go

 

4)  以下のクエリを実行し、1号機からコピーしてきた証明書とプライベートキーを使用し、証明書を作成します。  

use master
go
create certificate AGDB_EncryptionCert from file='c:\cert\AGDB_EncryptionCert'
 with private key (file='c:\cert\AGDB_PrivateFile'decryption by password='********')
go

※ password には、バックアップ時に指定したパスワードを指定します。

 

1号機 (SQL AG1:プライマリレプリカ) 作業2

1)  以下のクエリを実行し、可用性データベースに対して、データベース暗号化キーを作成します。 

use <可用性データベース名>
go
create database encryption key

with algorithm=AES_256 encryption by server certificate AGDB_EncryptionCert
go

 

2)  以下のクエリを実行し、可用性データベースに対して透過的暗号化(TDE)を有効化します。

use master
go
alter database <可用性データベース名> set encryption on
go

 

3)  以下のクエリを実行し、可用性データベースに対して透過的暗号化(TDE)が有効になっていることを確認します。

use master
go
select name, is_encrypted from sys.databases
go

 

[コマンド結果例]

f:id:nobtak:20200613000027p:plain 

 

2号機 (SQL AG2:セカンダリレプリカ) 作業2

1) 以下のクエリを実行し、可用性データベースに対して透過的暗号化(TDE)が有効になっていることを確認します。

use master
go
select name, is_encrypted from sys.databases
go

 

[コマンド結果例]

f:id:nobtak:20200613000027p:plain

 

まとめ

今回は、既に SQL Server AlwaysOn 可用性グループの可用性データベースに対して透過的暗号化(TDE)の有効化を実施しました。

プライマリ レプリカ側から可用性データベースに対して透過的暗号化(TDE)の有効化を実施した場合、セカンダリ レプリカ側の可用性データベースに対しても透過的暗号化(TDE)が有効化されます。

なお、バックアップした証明書、プライベートキーを使用することで、別環境に可用性データベースをバックアップなどから復元できてしまうため、Key Vault などのセキュアな場所に保管することをお勧めします。