次の方法で共有


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

適用対象: NoSQL MongoDB カサンドラ グレムリン

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

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

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

注意

既存の Azure Cosmos DB アカウントでカスタマー マネージド キーを有効にする場合は、「Azure Key Vault を使用して 既存の 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 Key Vault リソースで データ レプリケーションを有効 にすることを強くお勧めします。

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

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

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

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

推奨されるセキュリティ モデルを選択する

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

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

注意

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

アクセス ポリシーの追加

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

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

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

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

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

取得、キーの折り返し解除、キーの折り返しなど、アクセス ポリシーのアクセス許可のスクリーンショット。

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

  2. Azure Cosmos DB の主要項目を検索して選択します。

    ヒント

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  2. ページでスコープをこのリソースに設定し、Key Vault 管理者ロールを持っており、Cosmos DB プリンシパルが Key Vault Crypto Encryption ユーザーロールを持っていることを確認します。

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 サービスから Azure Cosmos DB へのアクセスを許可することが必要になる場合があります。

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 または ARM テンプレートを使用して、継続的バックアップ アカウントを作成できます。

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

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

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

使用不可

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

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

使用不可

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

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

  • Microsoft管理キーによる既定の暗号化を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) は、カスタマー マネージド キーを使用するときにデータの暗号化と暗号化解除を実行するために必要な追加の処理を反映するように増加します。 追加の RU 消費量により、プロビジョニングされた容量の使用率が若干高くなる可能性があります。 ガイダンスのためにこの表を使用してください。

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

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

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

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

はい。 詳細については、「 Azure Key Vault を使用して既存の 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 または Azure Resource Manager (ARM) を使用して、ユーザー割り当て ID を既定の ID として設定します。
az cosmosdb update --resource-group MyResourceGroup --name MyAccountName --default-identity UserAssignedIdentity=/subscriptions/MySubscriptionId/resourcegroups/MyResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/MyUserAssignedIdentity

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

  • カスタマー マネージド キーへのアクセスは、アカウントの既定の ID で使用できる必要があります。 キーがローテーションされている場合は、ローテーション プロセスを 完全に完了するか、アカウントが古いキー バージョンと新しいキー バージョンの両方にアクセスできる必要があります。

  • ソース アカウントでもともと使われていたユーザー割り当てマネージド 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. このアイデンティティに Key Vault のキーアクセス権を付与する
  3. 復元されたデータベース アカウントにこの新しい ID を割り当てる

次のステップ