Azure Key Vault で Azure Cosmos DB アカウントのカスタマー マネージド キーを構成する

適用対象: NoSQL MongoDB Cassandra Gremlin Table

Azure Cosmos DB アカウントに格納されたデータは、Microsoft が管理するキー (サービス マネージド キー) を使用して自動的かつシームレスに暗号化されます。 自分で管理するキー (カスタマー マネージド キーまたは CMK) を使用する暗号化の 2 番目のレイヤーを追加することもできます。

顧客データに関する暗号化のレイヤーの図。

カスタマー マネージド キーは Azure Key Vault に格納し、カスタマー マネージド キーが有効になっている Azure Cosmos DB アカウントごとにキーを指定する必要があります。 このキーは、そのアカウントに格納されているすべてのデータを暗号化するために使用されます。

Note

既存の Azure Cosmos DB アカウントでカスタマー マネージド キーを有効にする場合は、こちらのリンクを参照して詳細を確認できます

警告

次のフィールド名は、カスタマー マネージド キーを使用するアカウント内の Cassandra API テーブル用に予約されています。

  • id
  • ttl
  • _ts
  • _etag
  • _rid
  • _self
  • _attachments
  • _epk

カスタマー マネージド キーが有効になっていない場合は、__sys_ で始まるフィールド名のみが予約されます。

前提条件

Azure Cosmos DB リソース プロバイダーを登録する

Microsoft.DocumentDB リソース プロバイダーをまだ登録していない場合は、最初の手順としてこのプロバイダーを登録する必要があります。

  1. Azure portal にサインインし、お使いの Azure サブスクリプションに移動して [設定] タブの [リソース プロバイダー] を選択します。

    リソース ナビゲーション メニューの [リソース プロバイダー] オプションのスクリーンショット。

  2. Microsoft.DocumentDB リソース プロバイダーを検索します。 そのリソース プロバイダーが既に登録済みとしてマークされているどうかを確認します。 そうでない場合は、リソース プロバイダーを選択して [登録] を選択します。

    Microsoft.DocumentDB リソース プロバイダーの [登録] オプションのスクリーンショット。

Azure Key Vault インスタンスを構成する

重要

Azure Key Vault インスタンスは、パブリック ネットワーク アクセス経由でアクセス可能にするか、信頼された Microsoft サービスがそのファイアウォールをバイパスすることを許可する必要があります。 プライベート エンドポイント経由でしかアクセスできないインスタンスは、カスタマー マネージド キーのホスティングに使用できません。

Azure Cosmos DB でカスタマー マネージド キーを使用するには、暗号化キーをホストするために使用しようとしている Azure Key Vault インスタンスで 2 つのプロパティを設定する必要があります。論理的な削除消去保護です。

  1. 新しい Azure Key Vault インスタンスを作成する場合は、作成時にこれらのプロパティを有効にします。

    論理的な削除と消去保護を含む Azure Key Vault オプションのスクリーンショット。

  2. 既存の Azure Key Vault インスタンスを使用している場合は、Azure portal の [プロパティ] セクションを見て、これらのプロパティが有効であることを確認できます。 これらのプロパティのいずれかが有効になっていない場合は、次のいずれかの記事の「消去保護を有効にする」と「論理的な削除を有効にする」のセクションを参照してください。

希望のセキュリティ モデルを選ぶ

消去保護と論理的な削除を有効にしたら、[アクセス ポリシー] タブで、使用する優先アクセス許可モデルを選択できます。 アクセス ポリシーは既定で設定されますが、Azure のロールベースのアクセス制御も使用できます。

Cosmos DB で暗号化キーを使用できるよう、必要なアクセス許可を付与する必要があります。 この手順は、Azure Key Vault がアクセス ポリシーとロールベースのアクセス制御のどちらを使用しているかにより異なります。

Note

注意すべきは、一度にアクティブにできるセキュリティ モデルは 1 つだけなので、Azure Key Vault がアクセス ポリシーを使うように設定されている場合、ロールベースのアクセス制御をシードする必要はありません。その逆も同様です)

アクセス ポリシーの追加

このバリエーションでは、Azure Cosmos DB プリンシパルを使用して、適切なアクセス許可を持つアクセス ポリシーを作成します。

  1. Azure portal から、暗号化キーをホストするために使用しようとしている Azure Key Vault インスタンスに移動します。 左側のメニューの [アクセス ポリシー] を選択します。

    リソース ナビゲーション メニューの [アクセス ポリシー] オプションのスクリーンショット。

  2. [+ アクセス ポリシーの追加] を選択します。

  3. [キーのアクセス許可] ドロップダウン メニューで、 [取得][キーの折り返しを解除] 、および [キーを折り返す] アクセス許可を選択します。

    Get、Unwrap キー、Wrap キーなどのアクセス ポリシーのアクセス許可のスクリーンショット。

  4. [プリンシパルの選択] で、 [選択されていません] を選択します。

  5. Azure Cosmos DB のプリンシパルを検索して、それを選びます (見つけやすいよう、すべての Azure リージョンでアプリケーション ID 00001111-aaaa-2222-bbbb-3333cccc4444 を使って検索することもできます。ただし、Azure Government リージョンだけはアプリケーション ID 11112222-bbbb-3333-cccc-4444dddd5555 を使います)。

    ヒント

    これにより、Azure Key Vault アクセス ポリシーに Azure Cosmos DB のファーストパーティ ID が登録されます。 Azure Cosmos DB プリンシパルが一覧にない場合は、Microsoft.DocumentDB リソース プロバイダーの再登録が必要になる場合があります。

  6. 下部にある [選択] を選択します。

    [アクセス ポリシーの追加] ページの [プリンシパルの選択] オプションのスクリーンショット。

  7. [追加] を選択して新しいアクセス ポリシーを追加します。

  8. すべての変更を保存するには、Key Vault インスタンスで [保存] を選択します。

ロールベースのアクセス制御ロールの追加

  1. Azure portal から、暗号化キーをホストするために使用しようとしている Azure Key Vault インスタンスに移動します。 左側のメニューから [アクセス制御 (IAM)] を選択し、[このリソースへのアクセスを許可する] を選択します。

    リソース ナビゲーション メニューの [アクセス制御] オプションのスクリーンショット。

    [アクセス制御] ページの [このリソースへのアクセスを許可する] オプションのスクリーンショット。

  2. Key Vault 管理者ロール を検索し、ご自分に割り当てます。 この割り当てを行うには、最初にリストからロール名を検索し、[メンバー] タブをクリックします。このタブでラジオから [ユーザー、グループ、またはサービス プリンシパル] オプションを選択し、Azure アカウントを検索します。 アカウントを選択すると、ロールを割り当てることができます。

    [アクセス制御] ページのロールの割り当てのスクリーンショット。

  3. その後、必要なアクセス許可を Cosmos DB のプリンシパルに割り当てる必要があります。 そのため、最後のロールの割り当てと同様に割り当てページに移動しますが、今回は [Key Vault Crypto Service Encryption User] ロールを探し、[メンバー] タブで Cosmos DB のプリンシパルを探します。 プリンシパルを見つけるには、Azure Cosmos DB プリンシパルを検索し、それを選びます。

    アクセス許可に割り当てられている Azure Cosmos DB プリンシパルのスクリーンショット。

    重要

    Azure Government リージョンではアプリケーション ID は 11112222-bbbb-3333-cccc-4444dddd5555 です。

  4. [確認と割り当て] を選択すると、ロールが Cosmos DB に割り当てられます。

ロールが正しく設定されていることを確認する

次に、アクセス制御ページを使用して、すべてのロールが正しく構成されていることを確認します。

  1. ロールが割り当てられたら、アクセス制御 IAM ページで [このリソースへのアクセスを表示する] を選択して、すべてが正しく設定されていることを確認します。

    [アクセス制御] ページの [このリソースへのアクセスを表示する] オプションのスクリーンショット。

  2. ページでスコープを [このリソース] に設定し、Key Vault 管理者ロールがあり、Cosmos DB プリンシパルに Key Vault Crypto Encryption User ロールがあることを確認します。

Azure Key Vault でキーを生成する

ここでは Azure Key Vault を使用して新しいキーを作成し、一意の識別子を取得します。

  1. Azure portal から、暗号化キーをホストするために使用しようとしている Azure Key Vault インスタンスに移動します。 次に、左側のメニューの [キー] を選択します。

    リソース ナビゲーション メニューの [キー] オプションのスクリーンショット。

  2. [生成/インポート] を選択し、新しいキーに名前を付け、RSA キー サイズを選択します。 最高のセキュリティを得るには、最小で 3072 をお勧めします。 次に、 [作成] を選択します。

    新しいキーを作成するダイアログのスクリーンショット。

    ヒント

    または Azure CLI を使用して次のキーを生成できます:

    az keyvault key create \
        --vault-name <name-of-key-vault> \
        --name <name-of-key>
    

    Azure CLI を使用した Key Vault の管理の詳細については、「Azure CLI を使用して Azure Key Vault を管理する」をご覧ください。

  3. キーが作成されたら、新しく作成されたキーを選択し、次にその現在のバージョンを選択します。

  4. 最後のスラッシュの後の部分を除き、キーの [キー識別子] をコピーします。

    キー識別子フィールドとコピー アクションのスクリーンショット。

新しい Azure Cosmos DB アカウントを作成する

Azure portal または Azure CLI を使用して、新しい Azure Cosmos DB アカウントを作成します。

Azure portal から新しい Azure Cosmos DB アカウントを作成する場合は、 [暗号化] の手順で [カスタマー マネージド キー] を選択します。 [キー URI] フィールドで、前の手順でコピーした Azure Key Vault キーの URI/キー識別子を貼り付けます。

カスタム マネージド キー URI が構成されている [暗号化] ページのスクリーンショット。

重要

ネットワーク構成によっては、Azure Cosmos DB へのアクセスを他の Azure サービスから許可する必要がある場合があります。

Azure Key Vault アクセス ポリシーでのマネージド ID の使用

このアクセス ポリシーにより、Azure Cosmos DB アカウントから暗号化キーにアクセスできるようになります。 アクセス ポリシーは、特定の Microsoft Entra ID へのアクセスを許可することによって実装されます。 次の 2 種類の ID がサポートされています。

  • Azure Cosmos DB のファーストパーティ ID は、Azure Cosmos DB サービスへのアクセス権を付与するために使用できます。
  • Azure Cosmos DB アカウントのマネージド ID は、ご使用のアカウントへのアクセス権を明示的に付与するために使用できます。

使用不可

継続的バックアップでカスタマー マネージド キーを使用する

Azure CLI または Azure Resource Manager テンプレートを使って、継続的バックアップ アカウントを作成できます。

現在、継続的バックアップ アカウントの作成では、ユーザー割り当てマネージド ID のみがサポートされています。

アカウントを作成後、ID をシステム割り当てマネージド ID に更新できます。

または、ユーザーは、最初に定期的バックアップ モードでシステム ID を作成してから、次の手順「Azure Cosmos DB アカウントを定期バックアップ モードから継続的バックアップ モードに移行する」に従ってアカウントを継続的バックアップ モードに移行することもできます。

使用不可

マネージド ID で構成された継続的アカウントを復元する

ソース アカウントのマネージド ID (ユーザー割り当て ID とシステム割り当て ID) をターゲット データベース アカウントに自動的に引き継ぐことはできないため、復元要求ではユーザー割り当て ID が必要です。

使用できません。

カスタマー マネージド キーと二重暗号化

カスタマー マネージド キーを使用する場合、Azure Cosmos DB アカウントに格納するデータは最終的に 2 回暗号化されます。

  • Microsoft マネージド キーを使用して実行される既定の暗号化で 1 回。
  • カスタマー マネージド キーを使用して実行される追加の暗号化で 1 回。

二重暗号化は、メインの Azure Cosmos DB トランザクション ストレージにのみ適用されます。 カスタマー マネージド キーを使用していても、機能によっては、二重暗号化が提供されない第 2 階層のストレージにデータが内部で複製されます。 これには次の機能があります。

キーの交換

Azure Cosmos DB アカウントで使用されるカスタマー マネージド キーのローテーションは、次の 2 つの方法で行うことができます。

  • Azure Key Vault から、現在使用されているキーの新しいバージョンを作成します。

    Azure portal の [バージョン] ページの [新しいバージョン] オプションのスクリーンショット。

  • アカウントのキー URI を更新して、現在使用されているキーを別のキーに切り替えます。 Azure portal から、Azure Cosmos DB アカウントに移動し、左側のメニューから [データ暗号化] を選択します。

    リソース ナビゲーション メニューの [データ暗号化] オプションのスクリーンショット。

    次に、 [キー URI] を使用する新しいキーに置き換え、 [保存] を選択します。

    [キー] ページの [保存] オプションのスクリーンショット。

    PowerShell で同じ結果を実現するには、次のようにします。

    # Variable for resource group name
    $RESOURCE_GROUP_NAME = "<resource-group-name>"
    
    # Variable for account name
    $ACCOUNT_NAME = "<globally-unique-account-name>"
    
    # Variable for new key URI in the key vault
    $NEW_KEY_VAULT_KEY_URI="https://<key-vault-name>.vault.azure.net/keys/<new-key-name>"
    
    $parameters = @{
        ResourceGroupName = $RESOURCE_GROUP_NAME 
        Name = $ACCOUNT_NAME
        ResourceType = "Microsoft.DocumentDb/databaseAccounts"
    }
    $ACCOUNT = Get-AzResource @parameters
    
    $ACCOUNT.Properties.keyVaultKeyUri = $NEW_KEY_VAULT_KEY_URI
    
    $ACCOUNT | Set-AzResource -Force
    

前のキーまたはキー バージョンは、Azure Key Vault 監査ログに Azure Cosmos DB からそのキーまたはキー バージョンに対するアクティビティが出現しなくなった後に無効にすることができます。 キーのローテーションから 24 時間が経過すれば、以前のキーまたはキーのバージョンに対するアクティビティが実行されることはないでしょう。

以前のキーが無効になっていたり削除されていたりしない限り、Azure Key Vault でのキーの自動ローテーションがサポートされます。 内部システムでは、カスタマー マネージド キーを有効にするためにアカウントが取り消し状態または移行中ではないことを検証した後、キーの新しいバージョンを反映するために少し時間が必要です。

エラー処理

Azure Cosmos DB でカスタマー マネージド キーによるエラーが発生した場合、Azure Cosmos DB によって、エラーの詳細が HTTP サブ状態コードと共に応答で返されます。 HTTP サブ状態コードを使用して、問題の根本原因をデバッグできます。 サポートされている HTTP サブ状態コードの一覧については、「Azure Cosmos DB の HTTP 状態コード」を参照してください。

よく寄せられる質問

Azure Cosmos DB でのカスタマー マネージド キーの設定に関してよく寄せられる質問を次に示します。

カスタマー マネージド キーを有効にするために追加料金は発生しますか?

いいえ、この機能を有効にするためにかかる料金はありません。

カスタマー マネージド キーは容量計画にどのような影響がありますか?

カスタマー マネージド キーを使用する場合、データベース操作によって使用される要求ユニットは、データの暗号化と復号化を実行するために必要な追加の処理を反映して増加します。 追加の RU の使用により、プロビジョニングされた容量の使用率が若干高くなる可能性があります。 ガイダンスのためにこの表を使用してください。

操作の種類 要求ユニットの増加
ポイント読み取り (ID による項目のフェッチ) + 5%/操作
任意の書き込み操作 操作あたり + 6% |インデックス付きプロパティあたり約 + 0.06 RU
クエリ、変更フィードの読み取り、または競合フィード + 15%/操作

カスタマー マネージド キーでどのようなデータが暗号化されますか?

カスタマー マネージド キーでは、次のメタデータを除き、ご自分の Azure Cosmos DB アカウントに格納されているすべてのデータが暗号化されます。

カスタマー マネージド キーは既存の Azure Cosmos DB アカウントでサポートされますか?

はい。 既存の Azure Cosmos DB アカウントのカスタマー マネージド キーを設定する方法に関するページを参照できます

Azure Cosmos DB の分析ストアと共にカスタマー マネージド キーを使用することはできますか?

はい。Azure Synapse Link では、Azure Cosmos DB アカウントのマネージド ID を使用したカスタマー マネージド キーの構成のみがサポートされています。 ご利用のアカウントで Azure Synapse Link を有効にするには、Azure Key Vault アクセス ポリシーで Azure Cosmos DB アカウントのマネージド ID を使用する必要があります。 マネージド ID を有効にしてアクセス ポリシーで使用する方法に関する攻略ガイドについては、マネージド ID を使用して Azure Cosmos DB から Azure Key Vault にアクセスする方法に関するページを参照してください。

アカウント レベルのキーより細かい粒度をサポートする計画はありますか?

現時点ではありませんが、コンテナー レベルのキーが検討されています。

Azure Cosmos DB アカウントでカスタマー マネージド キーが有効かどうかを確認するにはどうすればよいですか?

Azure portal から、Azure Cosmos DB アカウントに移動し、左側のメニューで [データ暗号化] のエントリを探します。このエントリが存在する場合は、カスタマー マネージド キーがアカウントで有効になっています。

リソース ナビゲーション メニューの [データ暗号化] オプションのスクリーンショット。

プログラムで Azure Cosmos DB アカウントの詳細をフェッチして、keyVaultKeyUri プロパティの存在を確認することもできます。

カスタマー マネージド キーは定期的なバックアップにどのように影響しますか?

Azure Cosmos DB は、アカウントに格納されているデータの定期的な自動バックアップを取得します。 この操作では、暗号化されたデータがバックアップされます。

定期的なバックアップを正常に復元するには、次の条件が必要です。

  • バックアップ時に使用した暗号化キーは、Azure Key Vault で使用できる必要があります。 この条件には、失効されておらず、バックアップの時点で使用していたキーのバージョンがまだ有効である必要があります。
  • アクセス ポリシーでシステム割り当てマネージド ID を使用した場合は、データを復元する前に、一時的にAzure Cosmos DB ファーストパーティ ID へのアクセスを許可します。 この要件は、システム割り当てマネージド ID はアカウントに固有であり、ターゲット アカウントで再利用できないために存在します。 データがターゲット アカウントに完全に復元されたら、目的の ID 構成を設定し、Key Vault のアクセス ポリシーからファースト パーティの ID を削除できます。

カスタマー マネージド キーは継続的バックアップにどのように影響しますか?

Azure Cosmos DB には、アカウントで継続的バックアップを構成するオプションが用意されています。 継続的バックアップを使用すると、過去 30 日以内の任意の時点にデータを復元できます。 カスタマー マネージド キーが有効になっているアカウントで継続的バックアップを使用するには、Key Vault のアクセス ポリシーでシステム割り当てまたはユーザー割り当てマネージド ID を使用する必要があります。 Azure Cosmos DB のファースト パーティ ID は、継続的バックアップを使用するアカウントでは現在サポートされていません。

カスタマー マネージド キーが有効なアカウントでユーザー割り当て ID を更新するための前提条件の手順。

  • Cosmos DB アカウントにユーザー割り当て ID を追加し、キー コンテナーのアクセス ポリシーにアクセス許可を付与します。
  • Azure CLI または ARM を使用して、ユーザー割り当てを既定の ID として設定します。
az cosmosdb update --resource-group MyResourceGroup --name MyAccountName --default-identity UserAssignedIdentity=/subscriptions/MySubscriptionId/resourcegroups/MyResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/MyUserAssignedIdentity

ポイントインタイム リストアが正常に実行するには、次の条件が必要です。

  • バックアップ時に使用した暗号化キーは、Azure Key Vault で使用できる必要があります。 この要件は、失効されておらず、バックアップの時点で使用していたキーのバージョンがまだ有効であることを意味します。
  • ソース アカウントでもともと使われていたユーザー割り当てマネージド ID が、Key Vault のアクセス ポリシーでまだ宣言されていることを確認する必要があります。

重要

アカウントを削除する前に暗号化キーを取り消した場合、取り消しが行われる前の最大 1 時間の間に書き込まれたデータが、アカウントのバックアップで失われる可能性があります。

暗号化キーを失効させるにはどうすればよいですか?

キーの失効は、そのキーの最新バージョンを無効にすることによって行われます。

無効になっているカスタム キー バージョンのスクリーンショット。

あるいは、Azure Key Vault インスタンスからすべてのキーを失効させるために、Azure Cosmos DB プリンシパルに付与されているアクセス ポリシーを削除することもできます。

アクセス ポリシーの [削除] オプションのスクリーンショット。

カスタマー マネージド キーが失効した後、どのような操作を使用できますか?

暗号化キーが失効しているときに使用できる唯一の操作はアカウントの削除です。

復元されたデータベース アカウントに新しいマネージド ID を割り当てて、データベース アカウントへのアクセスを続行するか、アクセスを回復します

ユーザー割り当て ID は指定された Cosmos DB アカウントに関連付けられており、ユーザー割り当て ID をアカウントに割り当てるたびに、ARM は要求をマネージド サービス ID に転送して、この接続を確立します。 現在、CMK + ユーザー割り当て ID の復元 (継続的バックアップと定期的バックアップ両方の復元) 中に、ソース データベース アカウントからターゲット データベース アカウントにユーザー ID 情報を引き継ぎます。

ID メタデータはソース データベース アカウントにバインドされているため、復元ワークフローでターゲット データベース アカウントに ID のスコープが再設定されません。 これにより、復元されたデータベース アカウントが正しくない状態になり、ソース アカウントが削除されて ID 更新時間の有効期限が切れるとアクセスできなくなります。

新しいマネージド ID を割り当てる手順:

  1. ユーザー割り当てマネージド ID を新規作成する。
  2. KeyVault キーにこの ID へのアクセス権を付与する。
  3. この新しい ID を復元されたデータベース アカウントに割り当てる。

次のステップ