Transparent Data Encryption (TDE) 保護機能をローテーションする
[アーティクル] 01/23/2024
16 人の共同作成者
フィードバック
この記事の内容
適用対象: Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics (専用の SQL プールのみ)
この記事では、Azure Key Vault から TDE 保護機能を使用してサーバー のキーをローテーションする方法について説明します。 サーバーの論理的な TDE 保護機能のローテーションは、サーバー上のデータベースを保護する新しい非対称キーに切り替えることを示します。 キー ローテーションはオンラインで行われ、データベース全体ではなくデータべースのデータ暗号化キーを復号化して再暗号化するのみであるため、完了までに数秒しかかかりません。
この記事では、サーバーの TDE 保護機能をローテーションする自動化された方法と手動の方法の両方について説明します。
TDE 保護機能をローテーションするときの重要な考慮事項
TDE 保護機能が変更されても、データベースの古いバックアップが、最新の TDE 保護機能を使用するように更新されることはありません。 Key Vault の TDE 保護機能で暗号化されたバックアップを復元するには、キー マテリアルがターゲット サーバーで使用できることを確認します。 そのため、データベースのバックアップを復元できるように、Azure Key Vault (AKV) の TDE 保護機能の古いバージョンをすべてキー コンテナーに保持しておくことをお勧めします。
カスタマー マネージド キー (CMK) からサービス マネージド キーに切り替える場合でも、以前に使用したすべてのキーを AKV で保持します。 これにより、AKV に格納された TDE 保護機能を使用してデータベースのバックアップを復元できます。
古いバックアップとは別に、トランザクション ログ ファイルにも古い TDE 保護機能へのアクセスが必要になる場合があります。 古いキーを必要とする残りのログがあるかどうかを確認するには、キーのローテーションを実行した後、 sys.dm_db_log_info 動的管理ビュー (DMV) を使用します。 この DMV は、トランザクション ログの仮想ログファイル (VLF) と、VLF の暗号化キーの拇印に関する情報を返します。
古いキーは AKV で保持する必要があります。また、データベースのバックアップ保有期間ポリシーのバックとして構成されているバックアップ保有期間に基づいて、サーバーで使用できるようにする必要があります。 これにより、古いキーを使用して、サーバー上の長期保存 (LTR) バックアップを復元することができます。
注意
キーのローテーションを行う前に、一時停止されている Azure Synapse Analytics の専用 SQL プールを再開する必要があります。
この記事は、Azure SQL Database、Azure SQL Managed Instance、Azure Synapse Analytics 専用 SQL プール (以前の SQL DW) に適用されます。 Synapse ワークスペース内の専用 SQL プールの Transparent Data Encryption (TDE) に関するドキュメントについては、Azure Synapse Analytics の暗号化 に関する記事を参照してください。
重要
ロールオーバー後に以前のバージョンのキーは削除しないでください。 キーがロール オーバーされると、古いデータベース バックアップ、バックアップされたログファイル、トランザクション ログ ファイルなど、一部のデータは引き続き以前のキーで暗号化されます。
前提条件
このハウツー ガイドでは、Azure Key Vault のキーを Azure SQL Database または Azure Synapse Analytics の TDE 保護機能として既に使用していることを前提としています。 BYOK をサポートする Transparent Data Encryption に関する記事をご覧ください。
Azure PowerShell がインストールされ、実行されている必要があります。
キーの自動ローテーション
TDE 保護機能の自動ローテーション は、Azure portal から、または以下の PowerShell または Azure CLI コマンドを使用して、サーバーまたはデータベースの TDE 保護機能を構成するときに有効にできます。 有効にすると、サーバーまたはデータベースは、TDE 保護機能として使用されているキーの新しいバージョンがないか、キー コンテナーを継続的にチェックします。 新しいバージョンのキーが検出された場合、サーバーまたはデータベース上の TDE 保護機能が24 時間 以内に最新のキー バージョンに自動的にローテーションされます。
サーバー、データベース、またはマネージド インスタンスの自動ローテーションは、Azure Key Vault の自動キー ローテーションと共に使用して、TDE キーに対してエンドツーエンドのゼロ タッチ ローテーションを有効にすることができます。
Note
サーバーまたはマネージド インスタンスに geo レプリケーションが構成されている場合は、自動ローテーションを有効にする前に、ここで 説明するように追加のガイドラインに従う必要があります。
Azure portal を使用して以下を実行します。
既存のサーバーまたはマネージド インスタンスの [Transparent Data Encryption] セクションに移動します。
[カスタマー マネージド キー] オプションを選択し、TDE 保護機能として使用するキー コンテナーとキーを選択します。
[Auto-rotate key] (キーの自動ローテーション) チェック ボックスをオンにします。
[保存] を選択します。
Az PowerShell モジュールのインストール手順については、Azure PowerShell のインストール を参照してください。 具体的なコマンドレットについては、「AzureRM.Sql 」を参照してください。
PowerShell を使用して TDE 保護機能の自動ローテーションを有効にするには、次のスクリプトを参照してください。 <keyVaultKeyId>
は、Key Vault から取得 できます。
Azure SQL Database
Set-AzSqlServerTransparentDataEncryptionProtector コマンドを使用します。
Set-AzSqlServerTransparentDataEncryptionProtector -Type AzureKeyVault -KeyId <keyVaultKeyId> `
-ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName> `
-AutoRotationEnabled <boolean>
Azure SQL Managed Instance
Set-AzSqlInstanceTransparentDataEncryptionProtector コマンドを使用します。
Set-AzSqlInstanceTransparentDataEncryptionProtector -Type AzureKeyVault -KeyId <keyVaultKeyId> `
-InstanceName <ManagedInstanceName> -ResourceGroup <ManagedInstanceResourceGroupName> `
-AutoRotationEnabled <boolean>
Azure CLI の現在のリリースのインストールについては、Azure CLI のインストール に関する記事を参照してください。
Azure CLI を使用して TDE 保護機能の自動ローテーションを有効にするには、次のスクリプトを参照してください。
Azure SQL Database
az sql server tde-key set コマンドを使用します。
az sql server tde-key set --server-key-type AzureKeyVault
--auto-rotation-enabled true
[--kid] <keyVaultKeyId>
[--resource-group] <SQLDatabaseResourceGroupName>
[--server] <logicalServerName>
Azure SQL Managed Instance
az sql mi tde-key set コマンドを使用します。
az sql mi tde-key set --server-key-type AzureKeyVault
--auto-rotation-enabled true
[--kid] <keyVaultKeyId>
[--resource-group] <ManagedInstanceGroupName>
[--managed-instance] <ManagedInstanceName>
データベース レベルでのキーの自動ローテーション
キーの自動ローテーションは、Azure SQL Database のデータベース レベルで有効にすることもできます。 これは、サーバー上のデータベースの 1 つまたは一部に対してのみキーの自動ローテーションを有効にする場合に便利です。 詳細については、「データベース レベル CMK を使用した TDE の ID とキーの管理 」を参照してください。
PowerShell を使用してデータベース レベルで TDE 保護機能の自動ローテーションを有効にするには、次のコマンドを参照してください。 -EncryptionProtectorAutoRotation
パラメータを使用し、自動キー ローテーションを有効にするには $true
に設定し、自動キー ローテーションを無効にするには $false
に設定します。
Set-AzSqlDatabase -ResourceGroupName <resource_group_name> -ServerName <server_name> -DatabaseName <database_name> -EncryptionProtectorAutoRotation:$true
Azure CLI を使用してデータベース レベルで TDE 保護機能の自動ローテーションを有効にするには、次のコマンドを参照してください。 --encryption-protector-auto-rotation
パラメータを使用し、自動キー ローテーションを有効にするには True
に設定し、自動キー ローテーションを無効にするには False
に設定します。
az sql db update --resource-group <resource_group_name> --server <server_name> --name <database_name> --encryption-protector-auto-rotation True
geo レプリケーション構成のキーの自動ローテーション
プライマリ サーバーが、CMK を使って TDE を使用するように設定されている Azure SQL Database geo レプリケーション構成では、セカンダリ サーバーも、プライマリで使用されるものと同じキーを使用して CMK で TDE を有効にするように構成する必要があります。
Azure portal を使用して以下を実行します。
プライマリ サーバーの [Transparent Data Encryption] セクションに移動します。
[カスタマー マネージド キー] オプションを選択し、TDE 保護機能として使用するキー コンテナーとキーを選択します。
[Auto-rotate key] (キーの自動ローテーション) チェック ボックスをオンにします。
[保存] を選択します。
セカンダリ サーバーの [Transparent Data Encryption] セクションに移動します。
[カスタマー マネージド キー] オプションを選択し、TDE 保護機能として使用するキー コンテナーとキーを選択します。 プライマリ サーバーに使用したものと同じキーを使用します。
[このキーを既定の TDE 保護機能にする] をオフにします。
[保存] を選択します。
プライマリ サーバーでキーをローテーションすると、セカンダリ サーバーに自動的に転送されます。
<keyVaultKeyId>
は、Key Vault から取得 できます。
Add-AzSqlServerKeyVaultKey コマンドを使用して、新しいキーを セカンダリ サーバーに追加します。
# add the key from Key Vault to the secondary server
Add-AzSqlServerKeyVaultKey -KeyId <keyVaultKeyId> -ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
最初の手順の同じキーをプライマリ サーバーに追加します。
# add the key from Key Vault to the primary server
Add-AzSqlServerKeyVaultKey -KeyId <keyVaultKeyId> -ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
Set-AzSqlInstanceTransparentDataEncryptionProtector を使用して、キーの自動ローテーションを true
に設定して、そのキーをプライマリ サーバーのプライマリ保護機能として設定します。
Set-AzSqlServerTransparentDataEncryptionProtector -Type AzureKeyVault -KeyId <keyVaultKeyId> `
-ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName> `
-AutoRotationEnabled $true
Get-AzKeyVaultKey コマンドと Set-AzKeyVaultKeyRotationPolicy コマンドを使用して、Key Vault 内の Key Vault キーをローテーションします。
Get-AzKeyVaultKey -VaultName <keyVaultName> -Name <keyVaultKeyName> | Set-AzKeyVaultKeyRotationPolicy -KeyRotationLifetimeAction @{Action = "Rotate"; TimeBeforeExpiry = "P18M"}
SQL Server (プライマリとセカンダリの両方) に新しいキーまたは新しいキー バージョンがあるかどうかを確認します。
注意
キーのローテーションは、サーバーに適用されるまで最長 1 時間かかる場合があります。 少なくとも 1 時間待ってから、次のコマンドを実行してください。
Get-AzSqlServerKeyVaultKey -KeyId <keyVaultKeyId> -ServerName <logicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>
各サーバーに異なるキーを使用する
Azure portal で CMK を使用して TDE を構成する場合、異なる Key Vault キーを使用してプライマリ サーバーとセカンダリ サーバーを構成できます。 Azure portal では、プライマリ サーバーを保護するために使用されるキーと、セカンダリ サーバーにレプリケートされたプライマリ データベースを保護するキーが同じであるかどうかは明確に示されません。 ただし、PowerShell、Azure CLI、または REST API を使用して、サーバーで使用されるキーに関する詳細を取得できます。 これは、自動ローテーションされたキーがプライマリ サーバーからセカンダリ サーバーに転送されることを示します。
PowerShell コマンドを使用して、キーのローテーション後にプライマリ サーバーからセカンダリ サーバーに転送されるキーを確認する例を次に示します。
プライマリ サーバーで次のコマンドを実行して、サーバーのキーの詳細を表示します。
Get-AzSqlServerKeyVaultKey -ServerName <logicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>
次のような結果が表示されます。
ResourceGroupName : <SQLDatabaseResourceGroupName>
ServerName : <logicalServerName>
ServerKeyName : <keyVaultKeyName>
Type : AzureKeyVault
Uri : https://<keyvaultname>.vault.azure.net/keys/<keyName>/<GUID>
Thumbprint : <thumbprint>
CreationDate : 12/13/2022 8:56:32 PM
同じ Get-AzSqlServerKeyVaultKey
コマンドをセカンダリ サーバーで実行します。
Get-AzSqlServerKeyVaultKey -ServerName <logicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>
セカンダリ サーバーに、プライマリ サーバーとは異なるキーを使用する既定の TDE 保護機能がある場合は、2 つ (以上) のキーが表示されます。 最初のキーは既定の TDE 保護機能であり、2 番目のキーは、プライマリ サーバーで使用され、レプリケートされたデータベースの保護に使用されるキーです。
プライマリ サーバーでキーをローテーションすると、セカンダリ サーバーに自動的に転送されます。 プライマリ サーバーで Get-AzSqlServerKeyVaultKey
をもう一度実行すると、2 つのキーが表示されます。 最初のキーは元のキーで、2 番目のキーは、キーのローテーションの一部として生成された現在のキーです。
セカンダリ サーバーで Get-AzSqlServerKeyVaultKey
コマンドを実行すると、プライマリ サーバーに存在するものと同じキーも表示されます。 これにより、プライマリ サーバー上のローテーションされたキーが自動的にセカンダリ サーバーに転送され、データベース レプリカの保護に使用されることを確認できます。
手動でのキーのローテーション
手動でのキーの交換では、次のコマンドを使用して新しいキーを追加します。このキーは、新しいキー名で、場合によっては別の Key Vault に存在する可能性があります。 このアプローチを使用する場合は、別のキー コンテナーに同じキーを追加し、高可用性と geo dr シナリオをサポートすることがサポートされます。 Azure portal を使用して手動キー ローテーションを行うこともできます。
手動キー ローテーションでは、キー コンテナーで新しいキー バージョンが生成された場合 (手動またはキー コンテナーの自動キー ローテーション ポリシーを使用して)、サーバーの TDE 保護機能と同じ設定を手動で行う必要があります。
Note
キー コンテナー名とキー名を組み合わせた長さは 94 文字以下である必要があります。
Azure portal の使用:
既存のサーバーまたはマネージド インスタンスの [Transparent Data Encryption] メニューに移動します。
[カスタマー マネージド キー] オプションを選択し、新しい TDE 保護機能として使用するキー コンテナーとキーを選択します。
[保存] を選択します。
キー コンテナーに新しいキーを追加するには、Add-AzKeyVaultKey コマンドを使います。
# add a new key to Key Vault
Add-AzKeyVaultKey -VaultName <keyVaultName> -Name <keyVaultKeyName> -Destination <hardwareOrSoftware>
Azure SQL Database の場合は、以下を使います。
# add the new key from Key Vault to the server
Add-AzSqlServerKeyVaultKey -KeyId <keyVaultKeyId> -ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
# set the key as the TDE protector for all resources under the server
Set-AzSqlServerTransparentDataEncryptionProtector -Type AzureKeyVault -KeyId <keyVaultKeyId> `
-ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
Azure SQL Managed Instance の場合は、以下を使います。
# add the new key from Key Vault to the managed instance
Add-AzSqlInstanceKeyVaultKey -KeyId <keyVaultKeyId> -InstanceName <ManagedInstanceName> -ResourceGroup <ManagedInstanceResourceGroupName>
# set the key as the TDE protector for all resources under the managed instance
Set-AzSqlInstanceTransparentDataEncryptionProtector -Type AzureKeyVault -KeyId <keyVaultKeyId> `
-InstanceName <ManagedInstanceName> -ResourceGroup <ManagedInstanceResourceGroupName>
キー コンテナーに新しいキーを追加するには、az keyvault key create コマンドを使います。
# add a new key to Key Vault
az keyvault key create --name <keyVaultKeyName> --vault-name <keyVaultName> --protection <hsmOrSoftware>
Azure SQL Database の場合は、以下を使います。
# add the new key from Key Vault to the server
az sql server key create --kid <keyVaultKeyId> --resource-group <SQLDatabaseResourceGroupName> --server <logicalServerName>
# set the key as the TDE protector for all resources under the server
az sql server tde-key set --server-key-type AzureKeyVault --kid <keyVaultKeyId> --resource-group <SQLDatabaseResourceGroupName> --server <logicalServerName>
Azure SQL Managed Instance の場合は、以下を使います。
# add the new key from Key Vault to the managed instance
az sql mi key create --kid <keyVaultKeyId> --resource-group <Managed InstanceResourceGroupName> --managed-instance <ManagedInstanceName>
# set the key as the TDE protector for all resources under the managed instance
az sql mi tde-key set --server-key-type AzureKeyVault --kid <keyVaultKeyId> --resource-group <ManagedInstanceResourceGroupName> --managed-instance <ManagedInstanceName>
TDE 保護機能モードを切り替える
TDE 保護機能を Microsoft による管理から BYOK モードに切り替えるには、Azure portal を使用します。
既存のサーバーまたはマネージド インスタンスの [Transparent Data Encryption] メニューに移動します。
[カスタマー マネージド キー] オプションを選択します。
TDE 保護機能として使用するキー コンテナーとキーを選択します。
[保存] を選択します。
Azure SQL Database
TDE 保護機能を Microsoft による管理から BYOK モードに切り替えるには、Set-AzSqlServerTransparentDataEncryptionProtector コマンドを使用します。
Set-AzSqlServerTransparentDataEncryptionProtector -Type AzureKeyVault `
-KeyId <keyVaultKeyId> -ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
TDE 保護機能を BYOK モードから Microsoft による管理に切り替えるには、Set-AzSqlServerTransparentDataEncryptionProtector コマンドを使用します。
Set-AzSqlServerTransparentDataEncryptionProtector -Type ServiceManaged `
-ServerName <logicalServerName> -ResourceGroup <SQLDatabaseResourceGroupName>
Azure SQL Managed Instance
TDE 保護機能を Microsoft による管理から BYOK モードに切り替えるには、Set-AzSqlInstanceTransparentDataEncryptionProtector コマンドを使用します。
Set-AzSqlServerTransparentDataEncryptionProtector -Type AzureKeyVault `
-KeyId <keyVaultKeyId> <ManagedInstanceName> -ResourceGroup <ManagedInstanceResourceGroupName>
TDE 保護機能を BYOK モードから Microsoft による管理に切り替えるには、Set-AzSqlInstanceTransparentDataEncryptionProtector コマンドを使用します。
Set-AzSqlServerTransparentDataEncryptionProtector -Type ServiceManaged `
-InstanceName <ManagedInstanceName> -ResourceGroup <ManagedInstanceResourceGroupName>e>
Azure SQL Database
次の例では az sql server tde-key set を使用します。
TDE 保護機能を Microsoft による管理から BYOK モードに切り替えるには、次のようにします。
az sql server tde-key set --server-key-type AzureKeyVault --kid <keyVaultKeyId> --resource-group <SQLDatabaseResourceGroupName> --server <logicalServerName>
TDE 保護機能を BYOK モードから Microsoft による管理に切り替えるには、次のようにします。
az sql server tde-key set --server-key-type ServiceManaged --resource-group <SQLDatabaseResourceGroupName> --server <logicalServerName>
Azure SQL Managed Instance
次の例では az sql mi tde-key set を使用しています。
TDE 保護機能を Microsoft による管理から BYOK モードに切り替えるには、次のようにします。
az sql mi tde-key set --server-key-type AzureKeyVault --kid <keyVaultKeyId> --resource-group <ManagedInstanceResourceGroupName> --managed-instance <ManagedInstanceName>
TDE 保護機能を BYOK モードから Microsoft による管理に切り替えるには、次のようにします。
az sql mi tde-key set --server-key-type ServiceManaged --resource-group <ManagedInstanceResourceGroupName> --managed-instance <ManagedInstanceName>
関連するコンテンツ