クロステナントのカスタマー マネージド キーを使用してマネージド ディスクを暗号化する

この記事では、別の Microsoft Entra テナントに格納されている Azure Key Vault を使って、カスタマー マネージド キーでマネージド ディスクを暗号化するソリューションの構築について説明します。 この構成はいくつかのシナリオに最適です。たとえば、サービス プロバイダーのテナントのリソースが顧客のテナントのキーで暗号化されている顧客に対して、独自の暗号化キーを提供するサービス プロバイダーの Azure サポートです。

クロステナント CMK ワークフローのフェデレーション ID を持つディスク暗号化セットは、サービス プロバイダー/ISV テナント リソース (ディスク暗号化セット、マネージド ID、アプリ登録) と顧客テナント リソース (エンタープライズ アプリ、ユーザー ロールの割り当て、キー コンテナー) にまたがります。 この場合、ソースの Azure リソースはサービス プロバイダーのディスク暗号化セットです。

マネージド ディスクを使用したクロステナントのカスタマー マネージド キーについて質問がある場合は、crosstenantcmkvteam@service.microsoft.com 宛てにメールを送信してください。

制限事項

  • マネージド ディスクと顧客の Key Vault は同じ Azure リージョンに存在している必要があります。ただし、サブスクリプションは異なっていてもかまいません。
  • この機能では、Ultra Disks または Azure Premium SSD v2 マネージド ディスクはサポートされていません。
  • この機能は、21Vianet によって運営される Microsoft Azure または政府機関向けクラウドでは使用できません。

クロステナントのカスタマー マネージド キーについて

Azure でサービスとしてのソフトウェア (SaaS) オファリングを構築している多くのサービス プロバイダーは、顧客に独自の暗号化キーを管理するオプションを提供したいと考えています。 カスタマー マネージド キーを使用すると、サービス プロバイダーは、サービス プロバイダーの顧客によって管理され、サービス プロバイダーからアクセスできない暗号化キーを使用して、顧客のデータを暗号化できます。 Azure では、サービス プロバイダーの顧客は Azure Key Vault を使って、独自の Microsoft Entra テナントとサブスクリプションで暗号化キーを管理できます。

サービス プロバイダーが所有し、サービス プロバイダーのテナントに存在する Azure プラットフォーム サービスとリソースでは、暗号化/暗号化解除操作を実行するために、顧客のテナントからキーにアクセスする必要があります。

次の図は、サービス プロバイダーとその顧客にまたがるクロステナントの CMK ワークフローでフェデレーション ID を使用した保存時のデータ暗号化を示しています。

Screenshot showing a cross-tenant CMK with a federated identity.

上の例では、独立したサービス プロバイダーのテナント ("テナント 1") と顧客のテナント ("テナント 2") の、2 つの Microsoft Entra テナントがあります。 "テナント 1" は Azure プラットフォーム サービスをホストし、"テナント 2" は顧客のキー コンテナーをホストします。

サービス プロバイダーによって、"テナント 1" 内にマルチテナント アプリケーションの登録が作成されます。 ユーザー割り当てマネージド ID を使用して、このアプリケーションにフェデレーション ID 資格情報が作成されます。 次に、アプリの名前とアプリケーション ID が顧客と共有されます。

適切なアクセス許可を持つユーザーは、顧客テナント "テナント 2" にサービス プロバイダーのアプリケーションをインストールします。 次にユーザーは、インストールされているアプリケーションに関連付けられているサービス プリンシパルに、顧客のキー コンテナーへのアクセス権を付与します。 顧客はまた、暗号化キー (カスタマー マネージド キー) をキー コンテナーに格納します。 顧客は、キーの場所 (キーの URL) をサービス プロバイダーと共有します。

これでサービス プロバイダーには次の情報があります。

  • 顧客のテナント内にインストールされ、カスタマー マネージド キーへのアクセスが許可されている、マルチテナント アプリケーションのアプリケーション ID。
  • マルチテナント アプリケーション上の資格情報として構成されたマネージド ID。
  • 顧客のキー コンテナー内のキーの場所。

この 3 つのパラメーターを使用して、サービス プロバイダーは "テナント 2" のカスタマー マネージド キーで暗号化できる "テナント 1" 内の Azure リソースをプロビジョニングします。

上記のエンド ツー エンド ソリューションを 3 つのフェーズに分割しましょう。

  1. サービス プロバイダーは ID を構成します。
  2. 顧客は、サービス プロバイダーのマルチテナント アプリに対し、Azure Key Vault 内の暗号化キーへのアクセス権を付与します。
  3. サービス プロバイダーは、CMK を使用して Azure リソース内のデータを暗号化します。

フェーズ 1 の操作は、ほとんどのサービス プロバイダー アプリケーションに対して 1 回限りの設定となります。 フェーズ 2 とフェーズ 3 の操作は、顧客ごとに繰り返されます。

フェーズ 1 - サービス プロバイダーが Microsoft Entra アプリケーションを構成する

Step 説明 Azure RBAC の最小ロール Microsoft Entra RBAC の最小ロール
1. 新しいマルチテナント Microsoft Entra アプリケーションの登録を作成するか、既存のアプリケーションの登録から始めます。 Azure portalMicrosoft Graph APIAzure PowerShell、または Azure CLI を使用して、アプリケーション登録のアプリケーション ID (クライアント ID) をメモします なし アプリケーション開発者
2. ユーザー割り当てマネージド ID を作成します (フェデレーション ID 資格情報として使用されます)。
Azure portal / Azure CLI / Azure PowerShell/ Azure Resource Manager テンプレート
マネージド ID 共同作成者 なし
3. アプリケーションの ID を借用できるように、アプリケーションのフェデレーション ID 資格情報としてユーザー割り当てマネージド ID を構成します。
Graph API リファレンス/ Azure portal/ Azure CLI/ Azure PowerShell
なし アプリケーションの所有者
4. アプリケーション名とアプリケーション ID を顧客と共有し、顧客がアプリケーションをインストールして承認できるようにします。 なし なし

サービス プロバイダーに関する考慮事項

  • Microsoft Entra アプリケーションの作成に Azure Resource Manager (ARM) テンプレートを使用することは推奨されていません。
  • 同じマルチテナント アプリケーションを使用して、"テナント 2"、"テナント 3"、"テナント 4" など、複数のテナント内のキーにアクセスすることができます。 各テナントでは、アプリケーション ID は同じだがオブジェクト ID は異なるアプリケーションの独立したインスタンスが作成されます。 したがって、このアプリケーションの各インスタンスは個別に承認されます。 この機能に使用されるアプリケーション オブジェクトを使用して、すべての顧客間でアプリケーションをパーティション分割する方法を検討します。
    • 1 つのアプリケーションで使用できるフェデレーション ID 資格情報は最大 20 個なので、サービス プロバイダーはフェデレーション ID を顧客間で共有する必要があります。 フェデレーション ID の設計に関する考慮事項と制限について詳しくは、「外部 ID プロバイダーを信頼するようにアプリを構成する」をご覧ください。
  • サービス プロバイダーが顧客ごとに 1 つのアプリケーション オブジェクトを使用するシナリオもまれにありますが、この場合は、すべての顧客で大規模にアプリケーションを管理するための多額のメンテナンス コストが必要になります。
  • サービス プロバイダー テナント内では、発行者の確認を自動化することはできません。

フェーズ 2 - 顧客がキー コンテナーへのアクセスを承認する

手順 説明 最小特権の Azure RBAC ロール 最小特権の Microsoft Entra ロール
1.
  • 推奨: アプリにサインインするようにユーザーを送信します。 ユーザーがサインインできる場合は、アプリのサービス プリンシパルがテナントに存在します。
  • Microsoft GraphMicrosoft Graph PowerShellAzure PowerShell、または Azure CLI を使用して、サービス プリンシパルを作成します。
  • 管理者の同意 URL を作成し、アプリケーション ID を使用してサービス プリンシパルを作成するためのテナント全体にわたる同意を付与します。
  • なし アプリケーションをインストールするアクセス許可を持つユーザー
    2. カスタマー マネージド キーとして使用されるキーと Azure キー コンテナーを作成します。 キー コンテナーを作成するには、ユーザーに Key Vault Contributor ロールを割り当てる必要があります

    キー コンテナーにキーを追加するには、ユーザーに Key Vault Crypto Officer ロールを割り当てる必要があります
    なし
    3. Key Vault Crypto Service Encryption User ロールを割り当てることで、同意したアプリケーション ID に、Azure キー コンテナーへのアクセス権を付与します Key Vault Crypto Service Encryption User ロールをアプリケーションに割り当てるには、ユーザー アクセス管理者ロールが割り当てられている必要があります。 なし
    4. キー コンテナーの URL とキー名を、SaaS オファリングのカスタマー マネージド キー構成にコピーします。 なし なし

    Note

    CMK を使用した暗号化のためにマネージド HSM へのアクセスを承認するには、こちらのストレージ アカウントの例を参照してください。 マネージド HSM を使用したキーの管理の詳細については、「Azure CLI を使用してマネージド HSM を管理する」を参照してください

    サービス プロバイダーの顧客に関する考慮事項

    • 顧客テナント "テナント 2" で、管理者は、管理者以外のユーザーがアプリケーションをインストールできないようにポリシーを設定できます。 これらのポリシーによって、管理者以外のユーザーがサービス プリンシパルを作成できないようにすることができます。 そのようなポリシーを構成した場合は、サービス プリンシパルを作成するアクセス許可を持ったユーザーの関与が必要になります。
    • Azure Key Vault へのアクセスは、Azure RBAC またはアクセス ポリシーを使用して承認できます。 キー コンテナーへのアクセスを許可する場合は、キー コンテナーのアクティブなメカニズムを使用するようにしてください。
    • Microsoft Entra アプリケーションの登録には、アプリケーション ID (クライアント ID) が使用されます。 アプリケーションがテナントにインストールされると、サービス プリンシパルが作成されます。 サービス プリンシパルでは、アプリ登録と同じアプリケーション ID が共有されますが、独自のオブジェクト ID が生成されます。 アプリケーションにリソースへのアクセスを承認するには、サービス プリンシパル Name または ObjectID プロパティの使用が必要になる場合があります。

    フェーズ 3 - サービス プロバイダーがカスタマー マネージド キーを使用して Azure リソース内のデータを暗号化する

    フェーズ 1 と 2 が完了すると、サービス プロバイダーは、顧客のテナント内のキーとキー コンテナーと ISV のテナント内の Azure リソースを使用して、Azure リソース上の暗号化を構成できます。 サービス プロバイダーは、その Azure リソースでサポートされているクライアント ツール、ARM テンプレート、または REST API を使用して、クロステナントのカスタマー マネージド キーを構成できます。

    クロステナントのカスタマー マネージド キーを構成する

    このセクションでは、クロステナントのカスタマー マネージド キー (CMK) を構成し、顧客データを暗号化する方法について説明します。 Tenant2 のキー コンテナーに格納されている CMK を使用して、Tenant1 のリソース内の顧客データを暗号化する方法について説明します。 Azure portal、Azure PowerShell、または Azure CLI を使用できます。

    Azure portal にサインインして、次の手順を実行します。

    サービス プロバイダーが ID を構成します

    次の手順は、サービス プロバイダーのテナント Tenant1 のサービス プロバイダーによって実行されます。

    サービス プロバイダーが新しいマルチテナント アプリ登録を作成します

    新しいマルチテナント Microsoft Entra アプリケーションの登録を作成するか、既存のマルチテナント アプリケーションの登録から始めることができます。 既存のアプリケーション登録から始める場合は、アプリケーションのアプリケーション ID (クライアント ID) をメモします。

    新しい登録を作成するには、次の手順に従います。

    1. 検索ボックスで Microsoft Entra ID を検索します。 Microsoft Entra ID 拡張機能を見つけて選びます。

    2. 左ウィンドウで、[管理] > [アプリの登録] を選択します。

    3. [+ 新規登録] を選択します。

    4. アプリケーションの登録の名前を指定して、[任意の組織ディレクトリ内のアカウント (任意の Microsoft Entra ディレクトリ - マルチテナント)] を選びます。

    5. [登録] を選択します。

    6. アプリケーションの ApplicationId/ClientId を メモします。

      Screen shot showing how to create a new multi-tenant application registration.

    サービス プロバイダーは、ユーザー割り当てマネージド ID を作成します

    フェデレーション ID 資格情報として使用されるユーザー割り当てマネージド ID を作成します。

    1. 検索ボックスで「マネージド ID」を検索します。 マネージド ID 拡張機能を見つけて選択します。

    2. [+ 作成] を選択します。

    3. マネージド ID のリソース グループ、リージョン、名前を指定します。

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

    5. デプロイが成功したら、ユーザー割り当てマネージド ID の Azure ResourceId をメモします。この ID は [プロパティ] にあります。 次に例を示します。

      /subscriptions/tttttttt-0000-tttt-0000-tttt0000tttt/resourcegroups/XTCMKDemo/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ConsotoCMKDemoUA

      Screen shot showing how to create a resource group and a user-assigned managed identity.

    サービス プロバイダーは、ユーザー割り当てマネージド ID をアプリケーションのフェデレーション資格情報として構成します

    アプリケーションの ID を借用できるように、アプリケーションのフェデレーション ID 資格情報としてユーザー割り当てマネージド ID を構成します。

    1. [Microsoft Entra ID] > [アプリの登録] > 自分のアプリに移動します。

    2. [証明書とシークレット] を選択します。

    3. [フェデレーション資格情報] を選択します。

      Screen shot showing how to navigate to Certificate and secrets.

    4. [資格情報の追加] を選択します。

    5. [フェデレーション資格情報のシナリオ] で、[カスタマー マネージド キー] を選択します。

    6. [マネージド ID の選択] をクリックします。 ウィンドウからサブスクリプションを選択します。 [マネージド ID] で、[ユーザー割り当てマネージド ID] を選択します。 [選択] ボックスで、先ほど作成したマネージド ID を検索し、ウィンドウの下部にある [選択] をクリックします。

      Screen shot showing how to select a managed identity.

    7. [資格情報の詳細] で、資格情報の名前と説明 (省略可能) を指定し、[追加] を選択します。

      Screen shot showing how to add a credential.

    サービス プロバイダーがアプリケーション ID を顧客と共有する

    マルチテナント アプリケーションのアプリケーション ID (クライアント ID) を見つけて、顧客と共有します。

    顧客がサービス プロバイダーのアプリにキー コンテナー内のキーへのアクセスを許可する

    次の手順は、顧客のテナント Tenant2 の顧客によって実行されます。 顧客は Azure portal、Azure PowerShell、または Azure CLI を使用できます。

    手順を実行するユーザーは、アプリケーション管理者クラウド アプリケーション管理者グローバル管理者などの特権ロールを持つ管理者である必要があります。

    Azure portal にサインインして、次の手順を実行します。

    顧客が顧客テナントにサービス プロバイダー アプリケーションをインストールする

    サービス プロバイダーの登録済みアプリケーションを顧客のテナントにインストールするには、登録済みアプリからのアプリケーション ID で、サービス プリンシパルを作成します。 サービス プリンシパルは、次のいずれかの方法で作成できます。

    顧客がキー コンテナーを作成する

    キー コンテナーを作成するには、ユーザーのアカウントに Key Vault Contributor ロール、またはキー コンテナーの作成を許可する別のロールを割り当てる必要があります。

    1. Azure portal メニューまたは [ホーム] ページで、[+リソースの作成] を選択します 検索ボックスに「Key Vaults」と入力します。 結果の一覧から [キー コンテナー] を選択します。 [キー コンテナー] ページで、[作成] を選択します。

    2. [基本] タブで、サブスクリプションを選択します。 [リソース グループ] で、[新規作成] を選択し、リソース グループ名を入力します。

    3. キー コンテナーの一意の名前を入力します。

    4. リージョンと価格レベルを選択します。

    5. 新しいキー コンテナーの消去保護を有効にします。

    6. [アクセス ポリシー] タブで、[アクセス許可モデル][Azure ロールベースのアクセス制御] を選びます。

    7. [確認および作成][作成] の順に選択します。

      Screen shot showing how to create a key vault.

    キー コンテナーの名前と URI を記録しておきます。キー コンテナーにアクセスするアプリケーションは。この URI を使う必要があります。

    詳細については、「クイックスタート - Azure portal を使用して Azure キー コンテナーを作成する」を参照してください。

    顧客は、Key Vault Crypto Officer ロールをユーザー アカウントに割り当てます

    この手順により、暗号化キーを作成できるようになります。

    1. キー コンテナーに移動し、左側のウィンドウから [アクセスの制御 (IAM)] を選択します。
    2. [このリソースへのアクセス権の付与][ロールの割り当ての追加] を選択します。
    3. Key Vault Crypto Officer を検索して選択します。
    4. [メンバー] タブで、[ユーザー、グループ、またはサービス プリンシパル] を選択します。
    5. [メンバー] を選択し、ユーザー アカウントを検索します。
    6. [レビューと割り当て] を選択します。

    顧客が暗号化キーを作成する

    暗号化キーを作成するには、ユーザーのアカウントに Key Vault Crypto Officer ロール、またはキーの作成を許可する別のロールを割り当てる必要があります。

    1. Key Vault のプロパティ ページで、[キー] を選択します。
    2. [Generate/Import](生成/インポート) を選択します。
    3. [キーの作成] 画面で、キーの名前を指定します。 他の値は既定値のままにしておきます。
    4. [作成] を選択します
    5. キー URI をコピーします。

    顧客がサービス プロバイダー アプリケーションにキー コンテナーへのアクセスを許可する

    キー コンテナーにアクセスできるように、Azure RBAC ロール Key Vault Crypto Service Encryption User をサービス プロバイダーの登録済みアプリケーションに割り当てます。

    1. キー コンテナーに移動し、左側のウィンドウから [アクセスの制御 (IAM)] を選択します。
    2. [このリソースへのアクセス権の付与][ロールの割り当ての追加] を選択します。
    3. [Key Vault Crypto Service Encryption User] を検索して選択します。
    4. [メンバー] タブで、[ユーザー、グループ、またはサービス プリンシパル] を選択します。
    5. [メンバー] を選択し、サービス プロバイダーからインストールしたアプリケーションのアプリケーション名を検索します。
    6. [レビューと割り当て] を選択します。

    これで、キー コンテナーの URI とキーを使用して、カスタマー マネージド キーを構成できます。

    ディスク暗号化セットを作成する

    Azure Key Vault を作成し、必要な Microsoft Entra 構成を実行したので、テナント間で動作するように構成されたディスク暗号化セットをデプロイし、キー コンテナー内のキーに関連付けます。 これは Azure portal、Azure PowerShell、または Azure CLI を使用して実行できます。 ARM テンプレートまたは REST API も使用できます。

    Azure portal を使用するには、ポータルにサインインして、次の手順を実行します。

    1. [+ リソースの作成] を選択し、[ディスク暗号化セット] を探し、[作成] > [ディスク暗号化セット] を選択します。

    2. [プロジェクトの詳細] で、ディスク暗号化セットの作成先のサブスクリプションとリソース グループを選択します。

    3. [インスタンスの詳細] で、ディスク暗号化セットの名前を指定します。

      Screenshot showing how to enter the project and instance details to create a new disk encryption set.

    4. ディスク暗号化セットの作成先の [リージョン] を選択します。

    5. [暗号化の種類] で、 [カスタマー マネージド キーを使用した保存時の暗号化] を選択します。

    6. [暗号化キー] で、[URI からキーを入力] ラジオ ボタンを選択してから、顧客のテナントに作成されるキーのキー URI を入力します。

    7. [ユーザー割り当て ID] で、[ID の選択] を選択します。

    8. ISV のテナントで以前に作成したユーザー割り当てマネージド ID を選択してから、[追加] を選択します。

    9. [マルチテナント アプリケーション] で、[アプリケーションの選択] を選択します。

    10. ISV のテナントで以前に作成したマルチテナント登録済みアプリケーションを選択し、[選択] をクリックします。

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

    Resource Manager テンプレートを使用する

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "desname": {
          "defaultValue": "<Enter ISV disk encryption set name>",
          "type": "String"
        },
        "region": {
          "defaultValue": "WestCentralUS",
          "type": "String"
        },
        "userassignedmicmk": {
          "defaultValue": "/subscriptions/<Enter ISV Subscription Id>/resourceGroups/<Enter ISV resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<Enter ISV User Assigned Identity Name>",
          "type": "String"
        },
        "cmkfederatedclientId": {
          "defaultValue": "<Enter ISV Multi-Tenant App Id>",
          "type": "String"
        },
        "keyVaultURL": {
          "defaultValue": "<Enter Client Key URL>",
          "type": "String"
        },
        "encryptionType": {
          "defaultValue": "EncryptionAtRestWithCustomerKey",
          "type": "String"
        }
      },
      "variables": {},
      "resources": [
        {
          "type": "Microsoft.Compute/diskEncryptionSets",
          "apiVersion": "2021-12-01",
          "name": "[parameters('desname')]",
          "location": "[parameters('region')]",
          "identity": {
            "type": "UserAssigned",
            "userAssignedIdentities": {
              "[parameters('userassignedmicmk')]": {}
            }
          },
          "properties": {
            "activeKey": {
              "keyUrl": "[parameters('keyVaultURL')]"
            },
            "federatedClientId": "[parameters('cmkfederatedclientId')]",
            "encryptionType": "[parameters('encryptionType')]"
          }
        }
      ]
    }
    

    REST API を使用する

    認証ヘッダーとしてベアラー トークンを使用し、BODY のコンテンツ タイプとしてapplication/JSON を使用します。 (ポータルで ARM 要求を実行しているときに、[ネットワーク] タブで management.azure にフィルターを適用します。)

    PUT https://management.azure.com/subscriptions/<Enter ISV Subscription Id>/resourceGroups/<Enter ISV Resource Group Name>/providers/Microsoft.Compute/diskEncryptionSets/<Enter ISV Disk Encryption Set Name>?api-version=2021-12-01
    Authorization: Bearer ...
    Content-Type: application/json
    
    {
      "name": "<Enter ISV disk encryption set name>",
      "id": "/subscriptions/<Enter ISV Subscription Id>/resourceGroups/<Enter ISV resource group name>/providers/Microsoft.Compute/diskEncryptionSets/<Enter ISV disk encryption set name>/",
      "type": "Microsoft.Compute/diskEncryptionSets",
      "location": "westcentralus",
      "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
    "/subscriptions/<Enter ISV Subscription Id>/resourceGroups/<Enter ISV resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<Enter ISV User Assigned Identity Name>
    ": {}
        }
      },
      "properties": {
        "activeKey": {
          "keyUrl": "<Enter Client Key URL>"
        },
        "encryptionType": "EncryptionAtRestWithCustomerKey",
        "federatedClientId": "<Enter ISV Multi-Tenant App Id>"
      }
    }
    

    次のステップ

    次の用語も参照: