PowerShell と Azure CLI: Azure Key Vault のユーザー管理キーを使用して Transparent Data Encryption を有効にする

適用対象:Azure SQL データベースAzure SQL Managed InstanceAzure Synapse Analytics

この記事では、Azure SQL Database または Azure Synapse Analytics で、Transparent Data Encryption (TDE) に Azure Key Vault のキーを使用する方法について説明します。 Bring Your Own Key (BYOK) のサポートのため、Azure Key Vault と統合される TDE の詳細については、Azure Key Vault のユーザー管理キーを使用する TDE に関するページを参照してください。 Azure Key Vault のカスタマー マネージド キーを使用して TDE を有効にする方法に関する Azure portal の手順をお探しの場合は、「ユーザー割り当てマネージド ID とカスタマー マネージド TDE で構成されたサーバーを作成する」を参照してください。

この記事は、Azure SQL Database、Azure SQL Managed Instance、Azure Synapse Analytics (専用 SQL プール (以前の SQL DW)) に適用されます。 Synapse ワークスペース内の専用 SQL プールの Transparent Data Encryption に関するドキュメントについては、Azure Synapse Analytics の暗号化に関する記事を参照してください。

Note

Azure SQL では、マネージド HSM に格納されている RSA キーを TDE プロテクターとして使用できるようになりました。 Azure Key Vault Managed HSM は、フル マネージド、高可用性、シングル テナント、標準準拠を特徴とするクラウド サービスで、FIPS 140-2 レベル 3 適合の HSM を使用してクラウド アプリケーションの暗号化キーを保護することができます。 マネージド HSM の詳細を参照してください。

Note

Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。

PowerShell の前提条件

  • Azure サブスクリプションがあり、そのサブスクリプションの管理者である必要があります。
  • [推奨されますが、必須ではありません] TDE 保護機能のキー マテリアルのローカル コピーを作成するためのハードウェア セキュリティ モジュール (HSM) またはローカル キー ストアを用意します。
  • Azure PowerShell がインストールされ、実行されている必要があります。
  • TDE に使用する Azure Key Vault とキーを作成します。
  • TDE に使用するには、キーには次の属性が必要です。
    • アクティブ化された日時(設定された場合)は、過去の日付と時刻である必要があります。
    • 有効期限 (設定する場合) は、将来の日付と時刻にする必要があります
    • キーは、有効状態になっている必要があります
    • "取得"、"キーのラップ"、"キーのラップ解除" の各操作を実行できる
  • Managed HSM キーを使用するには、こちらの指示に従って、Azure CLI を使用して Managed HSM を作成およびアクティブ化します

Az モジュールのインストール手順については、Azure PowerShell のインストールを参照してください。 具体的なコマンドレットについては、「AzureRM.Sql」を参照してください。

Key Vault の詳細については、「PowerShell を使用した Key Vault の操作」と「PowerShell で Key Vault の論理的な削除を使用する方法」を参照してください。

重要

PowerShell Azure Resource Manager (RM) モジュールは引き続きサポートされますが、今後の開発はすべて Az.Sql モジュールを対象に行われます。 AzureRM モジュールのバグ修正は、少なくとも 2020 年 12 月までは引き続き受け取ることができます。 Az モジュールと AzureRm モジュールのコマンドの引数は実質的に同じです。 その互換性の詳細については、「新しい Azure PowerShell Az モジュールの概要」を参照してください。

Microsoft Entra ID をサーバーに割り当てる

既存のサーバーがある場合、次のコマンドを使用して Microsoft Entra ID をサーバーに追加します。

$server = Set-AzSqlServer -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName> -AssignIdentity

サーバーを作成する場合は、サーバーの作成時に、-Identity タグを指定して New-AzSqlServer コマンドレットを使用して、Microsoft Entra ID を追加します。

$server = New-AzSqlServer -ResourceGroupName <SQLDatabaseResourceGroupName> -Location <RegionName> `
    -ServerName <LogicalServerName> -ServerVersion "12.0" -SqlAdministratorCredentials <PSCredential> -AssignIdentity

Key Vault アクセス許可をサーバーに付与する

キー コンテナーのキーを TDE に使用する前に、Set-AzKeyVaultAccessPolicy コマンドレットを使用して、キー コンテナーへのアクセス権をサーバーに付与します。

Set-AzKeyVaultAccessPolicy -VaultName <KeyVaultName> `
    -ObjectId $server.Identity.PrincipalId -PermissionsToKeys get, wrapKey, unwrapKey

Managed HSM 上のサーバーにアクセス許可を追加するには、"Managed HSM 暗号化サービスの暗号化ユーザー"のローカル RBAC ロールをサーバーに追加します。 これにより、Managed HSM 内のキーに対してサーバーによってキーの取得、キーを折り返す、キーの折り返しを解除の操作を実行できます。 Managed HSM でサーバー アクセスをプロビジョニングするための手順

Key Vault キーをサーバーに追加し、TDE 保護機能を設定する

Note

Managed HSM キーには、Az.Sql 2.11.1 バージョンの PowerShell を使用します。

Note

キー コンテナー名とキー名を組み合わせた長さは 94 文字以下である必要があります。

ヒント

Key Vault の KeyId の例: https://contosokeyvault.vault.azure.net/keys/Key1/1a1a2b2b3c3c4d4d5e5e6f6f7g7g8h8h

Managed HSM の KeyId の例:
https://contosoMHSM.managedhsm.azure.net/keys/myrsakey

# add the key from Key Vault to the server
Add-AzSqlServerKeyVaultKey -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName> -KeyId <KeyVaultKeyId>

# set the key as the TDE protector for all resources under the server
Set-AzSqlServerTransparentDataEncryptionProtector -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName> `
   -Type AzureKeyVault -KeyId <KeyVaultKeyId>

# confirm the TDE protector was configured as intended
Get-AzSqlServerTransparentDataEncryptionProtector -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName>

TDE を有効にする

Set-AzSqlDatabaseTransparentDataEncryption コマンドレットを使用して、TDE を有効にします。

Set-AzSqlDatabaseTransparentDataEncryption -ResourceGroupName <SQLDatabaseResourceGroupName> `
   -ServerName <LogicalServerName> -DatabaseName <DatabaseName> -State "Enabled"

データベースまたはデータ ウェアハウスで、Key Vault の暗号化キーを使用して TDE が有効になりました。

暗号化の状態と暗号化アクティビティを確認する

Get-AzSqlDatabaseTransparentDataEncryption を使用して、データベースまたはデータ ウェアハウスの暗号化の状態を取得します。

# get the encryption state of the database
Get-AzSqlDatabaseTransparentDataEncryption -ResourceGroupName <SQLDatabaseResourceGroupName> `
   -ServerName <LogicalServerName> -DatabaseName <DatabaseName> `

便利な PowerShell コマンドレット

  • TDE を無効にするには、Set-AzSqlDatabaseTransparentDataEncryption コマンドレットを使用します。

    Set-AzSqlDatabaseTransparentDataEncryption -ServerName <LogicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName> `
        -DatabaseName <DatabaseName> -State "Disabled"
    
  • サーバーに追加された Key Vault キーのリストを取得するには、Get-AzSqlServerKeyVaultKey コマンドレットを使用します。

    # KeyId is an optional parameter, to return a specific key version
    Get-AzSqlServerKeyVaultKey -ServerName <LogicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>
    
  • サーバーから Key Vault キーを削除するには、Remove-AzSqlServerKeyVaultKey を使用します。

    # the key set as the TDE Protector cannot be removed
    Remove-AzSqlServerKeyVaultKey -KeyId <KeyVaultKeyId> -ServerName <LogicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>
    

トラブルシューティング

問題が発生した場合は、以下を確認してください。

  • キー コンテナーが見つからない場合は、適切なサブスクリプションを使用していることを確認します。

    Get-AzSubscription -SubscriptionId <SubscriptionId>
    

  • 新しいキーをサーバーに追加できない、または新しいキーを TDE 保護機能として更新できない場合、次の内容を確認してください。
    • キーに有効期限がないこと。
    • キーで、"取得"、"キーのラップ"、"キーのラップ解除" の各操作が有効になっている必要があります。

次のステップ