データベースレベルのカスタマー管理キーによる TDE のアイデンティティとキーの管理

適用対象:Azure SQL データベース

  • データベース レベルの TDE CMK が Azure SQL Database (すべての SQL Database エディション) で使用できます。 Azure SQL Managed Instance、オンプレミスの SQL Server、Azure VM、Azure Synapse Analytics (専用 SQL プール (以前の SQL DW) では使用できません。
  • 同じガイドを適用して、フェデレーション クライアント ID パラメーターを除外することで、同じテナントでデータベース レベルのカスタマー マネージド キーを構成できます。 データベース レベルのカスタマー マネージド キーの詳細については、「データベース レベルのカスタマー マネージド キーを使用した Transparent Data Encryption (TDE)」を参照してください。

このガイドでは、データベース レベルの Transparent Data Encryption (TDE) とカスタマー マネージド キー (CMK) を使用して Azure SQL Database を作成、更新、取得するステップについて説明します。Azure Key Vault へのアクセスにはユーザー割り当てマネージド ID を使用します。 Azure Key Vault は、Azure SQL Database とは異なる Microsoft Entra テナントにあります。 詳しくは、「Transparent Data Encryption でのクロステナント カスタマー マネージド キー」をご覧ください。

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

前提条件

1 つ目のテナントで必要なリソース

このチュートリアルでは、1 つ目のテナントは独立系ソフトウェア ベンダー (ISV) に属し、2 つ目のテナントはクライアントのものであると仮定します。 このシナリオについて詳しくは、「Transparent Data Encryption でのクロステナント カスタマー マネージド キー」をご覧ください。

テナント間 CMK を使用して Azure SQL Database の TDE を構成する前に、アプリケーションのフェデレーション ID 資格情報として割り当てられたユーザー割り当てマネージド ID で構成されたマルチテナント Microsoft Entra アプリケーションが必要です。 前提条件のガイドのいずれかに従って行います。

  1. Azure SQL Database を作成する最初のテナントで、 マルチテナント Microsoft Entra アプリケーションを作成して構成します。

  2. ユーザー割り当てマネージド ID を作成する

  3. マルチテナント アプリケーションのフェデレーション ID クレデンシャルとして、ユーザーに割り当てられたマネージド ID を構成します。

  4. アプリケーション名とアプリケーション ID を記録しておきます。 この情報はAzureポータル>Microsoft Entra ID>Enterpriseアプリケーションで見つけ、作成したアプリケーションを検索してください。

2 つ目のテナントで必要なリソース

Azure AD および MSOnline PowerShell モジュールは、2024 年 3 月 30 日の時点で非推奨となります。 詳細については、非推奨の最新情報を参照してください。 この日以降、これらのモジュールのサポートは、Microsoft Graph PowerShell SDK への移行支援とセキュリティ修正プログラムに限定されます。 非推奨になるモジュールは、2025 年 3 月 30 日まで引き続き機能します。

Microsoft Entra ID (旧称 Azure AD) を使用するには、Microsoft Graph PowerShell に移行することをお勧めします。 移行に関する一般的な質問については、「移行に関する FAQ」を参照してください。 ノート: バージョン 1.0.x の MSOnline では、2024 年 6 月 30 日以降に使用障害が発生する可能性があります。

  1. Azure Key Vaultが所在する2つ目のテナントでは、登録されたアプリケーションのアプリケーションIDを使ってサービスプリンシパル(アプリケーション)を作成します。 以下はマルチテナント申請の登録方法の例です。 <TenantID><ApplicationID> は、それぞれ Microsoft Entra ID からのクライアント テナント ID とマルチテナント アプリケーションからの アプリケーション ID に置き換えます。

    • PowerShell:

      Connect-Entra -TenantID <TenantID>
      New-EntraServicePrincipal  -AppId <ApplicationID>
      
    • Azure CLI:

      az login --tenant <TenantID>
      az ad sp create --id <ApplicationID>
      
  2. Azure portal>[Microsoft Entra ID]>[エンタープライズ アプリケーション] に移動し、作成したアプリケーションを検索します。

  3. Azure Key Vault を持っていなければ作成し、キーを作成します。

  4. アクセス ポリシーを作成または設定します

    1. アクセス ポリシーを作成するときに、[キーのアクセス許可] で、[キーの取得、キーのラップ、キーのアンラップ] のアクセス許可を選択します。
    2. アクセス ポリシーを作成するときに、 プリンシパル オプションの最初の手順で作成したマルチテナント アプリケーションを選択します。

    Azure portal の Azure Key Vault のアクセス ポリシー メニューのスクリーンショット。

  5. アクセスポリシーとキーを作成したら、Azure Key Vaultからキーを取得しキー識別子を記録します。

データベース レベルのカスタマー マネージド キーを使用して新しい Azure SQL Database を作成する

以下の例は、ユーザー割り当てのマネージデンティティを用いてAzure SQL Database上でデータベースを作成する方法と、データベースレベルでクロステナントの顧客管理キーを設定する方法を示しています。 データベース作成段階で透過的なデータ暗号化のために、ユーザー割り当てのマネージドIDを設定する必要があります。

  1. aka.ms/azuresqlhub の Azure SQL ハブに移動します。

  2. リソース メニューで、[ Azure SQL Database ] を展開し、[ SQL データベース] を選択します。

  3. +作成ドロップダウンリストからSQLデータベースを選択します。

    [SQL データベース] ページ、[作成] ボタン、および [SQL データベース] オプションを示す Azure portal のスクリーンショット。

  4. [SQL データベースの作成] フォームの [基本] タブにある [プロジェクトの詳細] で、データベースの Azure [サブスクリプション][リソース グループ][サーバー] を選びます。 次に、[データベース名] に一意の名前を指定します。 Azure SQL Database 用の論理サーバーを作成していない場合は、「TDE とテナント間カスタマー マネージド キー (CMK) を使用して構成されたサーバーを作成する」をご覧ください。

  5. [セキュリティ] タブに移動したら、[データベース レベル キー透過的なデータ暗号化の構成] を選択します。

    Azure SQL Database を作成するときの Azure portal と [セキュリティ] メニューのスクリーンショット。

  6. [Transparent Data Encryption ] のメニューで、[Database level customer managed key (CMK)] (データベース レベルのカスタマー マネージド キー) を選びます。

    Azure portal の [Transparent Data Encryption] メニューのスクリーンショット。

  7. ユーザー割り当てマネージド ID の場合、データベース ID を有効にするには 構成 を選択し、目的の ID が ID メニューに表示されていない場合は、追加 を選択してリソースにユーザー割り当てマネージド ID を追加してください。 次に、[適用] を選択します。

    Azure portal の [ID] メニューのスクリーンショット。

    TDE 用にクロステナント CMK を構成する場合は、ここでフェデレーション クライアント ID を構成できます。

  8. [Transparent Data Encryption] のメニューで、[Change key] (鍵変更) を選びます。 TDE に使用するカスタマー マネージド キーの目的のサブスクリプションキー コンテナーキーバージョンを選択します。 [選択] ボタンを選択します。 キーを選んだら、必要に応じて、[Transparent Data Encryption] メニューで Azure Key Vault の URI (オブジェクト識別子) を使ってデータベース キーを追加することもできます。

    データベースレベルで自動キー回転を有効にするには、透過的なデータ暗号化メニューのAuto-rotate keyチェックボックスを使用することもできます。

    Azure portal の [Transparent Data Encryption] メニューでキーの追加を参照しているスクリーンショット。

  9. [適用] を選んで、データベースの作成を続けます。

  10. [Next:追加設定] を選択します。

  11. [次へ: タグ] を選択します。

  12. Azure タグの使用を検討します。 たとえば、リソースを作成したユーザーを識別する "所有者" タグまたは "CreatedBy" タグ、このリソースが運用、開発などにあるかどうかを識別する Environment タグなどです。詳細については、「 Azure リソースの名前付けおよびタグ付け戦略を開発する」を参照してください。

  13. [Review + create](レビュー + 作成) を選択します。

  14. [確認と作成] ページで、確認後、 [作成] を選択します。

ユーザー割り当てマネージド ID でキー コンテナーに対する適切なアクセス許可が有効になっていない場合、データベースの作成は失敗します。 ユーザー割り当てマネージド ID には、キーボールトに対する Get、wrapKey、unwrapKey のアクセス許可が必要です。 詳しくは、「カスタマー マネージド キーを使用した Transparent Data Encryption 用のマネージド ID」をご覧ください。

データベース レベルのカスタマー マネージド キーを使用して既存の Azure SQL Database を更新する

以下の例は、Azure SQL Database上の既存データベースをユーザー割り当てのマネージデンティティで更新する方法と、データベースレベルでクロステナントの顧客管理キーを設定する方法を示しています。 顧客管理キーを透過的なデータ暗号化に設定するには、ユーザー割り当てのマネージドアイデンティティが必要です。

Azure CLI の現在のリリースのインストールについては、Azure CLI のインストールに関する記事を参照してください。

az sql db create コマンドを使って、ユーザー割り当てマネージド ID とテナント間カスタマー マネージド TDE で構成されたデータベースを更新します。 フィールドでは、2 つ目のテナントの encryption-protector を使用できます。 マルチテナント アプリケーションの アプリケーション ID は、federated-client-id フィールドで使用できます。

ユーザー割り当てマネージド ID のリソース ID を取得するには、Azure portalマネージド ID を検索します。 マネージド ID を見つけて、[プロパティ] に移動します。 UMI リソース ID の例は、/subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity> のようになります。 この --encryption-protector-auto-rotation パラメーターを使用すると、データベース レベルでキーの自動ローテーションを有効にすることができます。

az sql db update --resource-group $resourceGroupName --server $serverName --name mySampleDatabase --sample-name AdventureWorksLT --edition GeneralPurpose --compute-model Serverless --family Gen5 --capacity 2 --assign-identity --user-assigned-identity-id $identityid --encryption-protector $keyid --federated-client-id $federatedclientid --keys $keys --keys-to-remove $keysToRemove --encryption-protector-auto-rotation True

リスト $keys はデータベースに追加するキーのスペース区切りリストであり、$keysToRemove はデータベースから削除する必要があるキーのスペース区切りリストです

$keys = '"https://yourvault.vault.azure.net/keys/yourkey1/6638b3667e384aefa31364f94d230000" "https://yourvault.vault.azure.net/keys/yourkey2/ fd021f84a0d94d43b8ef33154bca0000"'

$keysToRemove = '"https://yourvault.vault.azure.net/keys/yourkey3/6638b3667e384aefa31364f94d230000" "https://yourvault.vault.azure.net/keys/yourkey4/fd021f84a0d94d43b8ef33154bca0000"'

Azure SQL Database のデータベース レベルのカスタマー マネージド キー設定を表示する

次に、データベースのデータベース レベルのカスタマー マネージド キーを取得する例を示します。 ARM リソース Microsoft.Sql/servers/databases には、既定では、データベースで構成された TDE 保護機能とマネージド ID のみが表示されます。 キーの完全なリストを展開するには、-ExpandKeyList パラメーターを使用します。 さらに、-KeysFilter "current" や特定の時点の値 (たとえば 2023-01-01) などのフィルターを使用して、現在使用されているキーと過去の特定の時点で使用されたキーを取得できます。 これらのフィルターは、個々のデータベース クエリでのみサポートされ、サーバー レベルのクエリではサポートされません。

Azure CLI の現在のリリースのインストールについては、Azure CLI のインストールに関する記事を参照してください。

# Retrieve the basic database level customer-managed key settings from a database
az sql db show --resource-group $resourceGroupName --server $serverName --name mySampleDatabase

# Retrieve the basic database level customer-managed key settings from a database and all the keys ever added
az sql db show --resource-group $resourceGroupName --server $serverName --name mySampleDatabase --expand-keys

# Retrieve the basic database level customer-managed key settings from a database and the current keys in use
az sql db show --resource-group $resourceGroupName --server $serverName --name mySampleDatabase --expand-keys --keys-filter current

# Retrieve the basic database level customer-managed key settings from a database and the keys in use at a particular point in time
az sql db show --resource-group $resourceGroupName --server $serverName --name mySampleDatabase --expand-keys --keys-filter 01-01-2015

# Retrieve all the databases in a server to check which ones are configured with database level customer-managed keys
az sql db list --resource-group $resourceGroupName --server $serverName

論理サーバー内のすべてのキーを一覧表示する

サーバーの下の各データベースで使用されるすべてのキー (単なるプライマリ保護機能ではない) のリストをフェッチするには、キー フィルターを使用して個別にクエリを実行する必要があります。 論理サーバーの下の各キーを一覧表示する PowerShell クエリの例を次に示します。

Get-AzSqlDatabase コマンドレットを使用します。

$dbs = Get-AzSqlDatabase -resourceGroupName <ResourceGroupName> -ServerName <ServerName>
foreach ($db in $dbs)
{
Get-AzSqlDatabase -DatabaseName $db.DatabaseName -ServerName $db.ServerName -ResourceGroupName $db.ResourceGroupName -ExpandKeyList
}

Azure SQL Database のデータベース レベルのカスタマー マネージド キーを再検証する

Azure SQLの顧客管理キーによる透過的なデータ暗号化で説明されているように、TDEプロテクターがアクセス不能の場合、データベースはアクセス不能になります。 鍵アクセスを修正した後は、再検証キー操作を使ってデータベースを再びアクセス可能にします。 以下のコマンドは例を示しています。

Azure CLI の現在のリリースのインストールについては、Azure CLI のインストールに関する記事を参照してください。

az sql db tde key revalidate --resource-group $resourceGroupName --server $serverName --database mySampleDatabase

Azure SQL Database のデータベース レベルのカスタマー マネージド キーを元に戻す

次のコマンドを使用してサーバーにサービス マネージド キーが構成されている場合、データベース レベルの CMK が構成されたデータベースをサーバー レベルの暗号化に戻すことができます。

Azure CLI の現在のリリースのインストールについては、Azure CLI のインストールに関する記事を参照してください。

az sql db tde key revert --resource-group $resourceGroupName --server $serverName --name mySampleDatabase