次の方法で共有


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

適用対象:Azure SQL DatabaseAzure 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 プールに適用されます。 Synapse ワークスペース内の専用 SQL プールの Transparent Data Encryption に関するドキュメントについては、「Azure Synapse Analytics の暗号化」を参照してください。

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

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 PowerShell モジュールのインストール手順については、Azure PowerShell のインストールを参照してください。

Azure Key Vault の詳細については、Azure Key Vault の PowerShell の手順 と、 PowerShell で Azure Key Vault の論理的な削除を使用する方法に関するページを参照してください。

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

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

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

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

Managed HSM 上のサーバーにアクセス許可を追加するには、"Managed HSM 暗号化サービスの暗号化ユーザー"のローカル RBAC ロールをサーバーに追加します。 これにより、サーバーは Managed HSM のキーに対して、キーの取得、ラップ、ラップ解除の操作を実行できます。 詳細については、「マネージド HSM のロール管理」を参照してください

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

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

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

ヒント

Azure Key Vault の KeyId の例: https://contosokeyvault.vault.azure.net/keys/Key1/<key-id>

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

# add the key from Azure 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"

これで、データベースまたはデータ ウェアハウスで、Azure 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"
    
  • Get-AzSqlServerKeyVaultKey コマンドレットを使用して、サーバーに追加された Azure Key Vault キーの一覧を返します。

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

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

トラブルシューティング

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

    Get-AzSubscription -SubscriptionId <SubscriptionId>
    

  • 新しいキーをサーバーに追加できない場合、または新しいキーを TDE 保護機能として更新できない場合は、次の項目を確認してください。

    • キーに有効期限を設定しないでください。
    • キーで、"取得"、"キーのラップ"、"キーのラップ解除" の各操作が有効になっている必要があります。