Azure Digital Twins をセキュリティで保護する

この記事では、Azure Digital Twins のセキュリティのベスト プラクティスについて説明します。 ロールとアクセス許可、マネージド ID、Azure Private Link を使用したプライベート ネットワーク アクセス、サービス タグ、保存データの暗号化、クロスオリジン リソース共有 (CORS) について説明します。

Azure Digital Twins では、セキュリティのために、デプロイ内の特定のデータ、リソース、アクションへのアクセスを正確に制御できます。 これには、Azure ロールベースのアクセス制御 (Azure RBAC) と呼ばれるきめ細かいロールおよびアクセス許可の管理戦略が使用されています。

Azure Digital Twins では、保存データの暗号化もサポートされています。

Azure RBAC を使用したロールとアクセス許可

Azure RBAC は、Microsoft Entra ID との統合を通じて Azure Digital Twins に提供されます。

Azure RBAC を使用して、"セキュリティ プリンシパル" (ユーザー、グループ、またはアプリケーションのサービス プリンシパルである可能性があります) にアクセス許可を付与できます。 セキュリティ プリンシパルは Microsoft Entra ID によって認証され、代わりに OAuth 2.0 トークンを受け取ります。 このトークンは、Azure Digital Twins インスタンスへのアクセス要求を承認するために使用できます。

認証と権限承認

Microsoft Entra ID を使用すると、アクセスは 2 段階のプロセスになります。 セキュリティ プリンシパル (ユーザー、グループ、またはアプリケーション) が Azure Digital Twins にアクセスしようとすると、要求は必ず "認証" され、"承認" されます。

  1. まず、セキュリティ プリンシパルの ID が "認証" され、OAuth 2.0 トークンが返されます。
  2. 次に、指定されたリソースへのアクセスを "承認" するために、トークンが要求の一部として Azure Digital Twins サービスに渡されます。

この認証手順では、実行時のアプリケーション要求に OAuth 2.0 アクセス トークンが含まれている必要があります。 アプリケーションが Azure エンティティ (Azure Functions アプリなど) 内で実行されている場合、マネージド ID を使用してリソースにアクセスできます。 マネージド ID の詳細については、次のセクションを参照してください。

承認の手順では、セキュリティ プリンシパルに Azure ロールを割り当てる必要があります。 セキュリティ プリンシパルに割り当てられたロールによって、そのプリンシパルが持つアクセス許可が決定されます。 Azure Digital Twins には、Azure Digital Twins リソースの一連のアクセス許可を含む Azure ロールが用意されています。 これらのロールについては、この記事の後半で説明します。

Azure でサポートされているロールとロールの割り当ての詳細については、Azure RBAC ドキュメントの各種ロールの概要に関するページを参照してください。

マネージド ID による認証

Azure リソースのマネージド ID は、アプリケーション コードが実行されるデプロイに関連付けられた、セキュリティで保護された ID を作成できる Azure 間機能です。 この ID は、アプリケーションに必要な特定の Azure リソースにアクセスするためのカスタム アクセス許可を付与するアクセス制御ロールに関連付けることができます。

マネージド ID では、Azure プラットフォームがこのランタイム ID を管理します。 ID 自体やアクセスする必要のあるリソース用に、アクセス キーをアプリケーション コードや構成に保存して保護する必要はありません。 Azure App Service アプリケーション内で実行される Azure Digital Twins クライアント アプリで、SAS ルールとキー、またはその他のアクセス トークンを処理する必要はありません。 クライアント アプリには、Azure Digital Twins 名前空間のエンドポイント アドレスのみが必要です。 アプリが接続されると、Azure Digital Twins によってマネージド エンティティのコンテキストがクライアントにバインドされます。 マネージド ID に関連付けられると、Azure Digital Twins クライアントは承認済みのすべての操作を実行できます。 次に、マネージド エンティティを Azure Digital Twins Azure ロールに関連付けることにより、承認が付与されます (説明は後述します)。

承認: Azure Digital Twins の Azure ロール

Azure には、Azure Digital Twins のデータ プレーン API へのアクセスを承認するための 2 つの Azure 組み込みロールが用意されています。 名前または ID を使用してロールを参照できます。

組み込みのロール 説明 id
Azure Digital Twins Data Owner (Azure Digital Twins データ所有者) Azure Digital Twins リソースへのフル アクセス権が付与されます bcd981a7-7f74-457b-83e1-cceb9e632ffe
Azure Digital Twins データ リーダー Azure Digital Twins リソースへの読み取り専用アクセス権が付与されます d57506d4-4c8d-48b1-8587-93c323f6a5a3

ロールを割り当てるには、次の 2 つの方法があります。

Azure Digital Twins インスタンスにロールを割り当てる詳細な手順については、「インスタンスと認証を設定する」を参照してください。 組み込みロールの定義方法の詳細については、Azure RBAC のドキュメントのロール定義の概要に関するページを参照してください。

インスタンス用のカスタム Azure ロールを作成することもできます。 これにより、ツイン、コマンド、リレーションシップ、イベントルート、ジョブ、モデル、クエリなど、個々のデータ領域における特定のアクションに対する権限を付与できます。 Azure のカスタム ロールの詳細については、「Azure カスタム ロール」をを参照してください。

ロールの自動化

自動化されたシナリオでロールを参照する場合は、名前ではなく ID を使用して参照することをお勧めします。 名前はリリースによって変わる可能性がありますが、ID は変わらないため、自動化の場合はより安定した参照になります。

ヒント

New-AzRoleAssignment (reference) などのコマンドレットを使用してロールを割り当てる場合は、-RoleDefinitionName ではなく -RoleDefinitionId パラメーターを使用して、ロールの名前ではなく ID を渡すことができます。

アクセス許可のスコープ

セキュリティ プリンシパルに Azure ロールを割り当てる前に、セキュリティ プリンシパルに必要なアクセスのスコープを決定します。 ベスト プラクティスとしては、できるだけ狭いスコープのみを付与するのが最善の方法です。

次の一覧は、Azure Digital Twins リソースへのアクセスのスコープを指定できるレベルについて説明したものです。

  • モデル: このリソースのアクションを使用すると、Azure Digital Twins にアップロードされたモデルの制御を指示できます。
  • Digital Twins Graph のクエリ: このリソースのアクションによって、Azure Digital Twins グラフ内の Digital Twins に対してクエリ操作を実行する機能が決まります。
  • Digital Twins: このリソースのアクションを使用すると、Twins Graph 内の Digital Twins に対する CRUD 操作を制御できます。
  • Digital Twins の関係: このリソースのアクションによって、Twins Graph 内のデジタル ツイン間の関係に対する CRUD 操作の制御が定義されます。
  • イベント ルート: このリソースのアクションによって、Azure Digital Twins から Event HubEvent GridService Bus などのエンドポイント サービスにイベントをルーティングするアクセス許可が決まります。

アクセス許可のトラブルシューティング

ユーザーが自分のロールで許可されていないアクションの実行を試みた場合、403 (Forbidden) と書かれた、サービス要求からのエラーが表示されることがあります。 詳細とトラブルシューティングの手順については、「Azure Digital Twins の失敗したサービス要求のトラブルシューティング: エラー 403 (許可されていません)」を参照してください。

他のリソースにアクセスするためのマネージド ID

Azure Digital Twins インスタンスに Microsoft Entra ID "マネージド ID" を設定することで、インスタンスは、Azure Key Vault などの他の Microsoft Entra で保護されたリソースに簡単にアクセスできるようになります。 ID は Azure プラットフォームによって管理され、シークレットをプロビジョニングまたはローテーションする必要はありません。 Microsoft Entra ID のマネージド ID の詳細については、「Azure リソースのマネージド ID」を参照してください。

Azure Digital Twins では、システム割り当てユーザー割り当てという 2 種類のマネージド ID がサポートされています。

これらのマネージド ID の種類のいずれかを使用して、カスタム定義エンドポイントに対する認証を行うことができます。 Azure Digital Twins では、Event HubService Bus の宛先用のエンドポイントと配信不能イベント用の Azure Storage コンテナー エンドポイントに対する、ID ベースの認証がサポートされています。 Event Grid エンドポイントでは、現時点ではマネージド ID はサポートされていません。

イベントのルーティングに使用できる Azure Digital Twins エンドポイントのマネージド ID を有効にする方法については、「エンドポイント オプション: ID ベースの認証」を参照してください。

イベントを Event Hubs および Service Bus エンドポイントにルーティングするための信頼された Microsoft サービスを使用する

Azure Digital Twins は、Event Hubs と Service Bus エンドポイントに接続し、これらのリソースのパブリック エンドポイントを使用してイベント データを送信できます。 ただし、これらのリソースが VNet にバインドされている場合、リソースへの接続は既定でブロックされます。 その結果、この構成では、Azure Digital Twins がイベント データをリソースに送信できなくなります。

これを解決するには、Azure Digital Twins インスタンスから Event Hubs または Service Bus リソースへの接続を、"信頼された Microsoft サービス" オプションで有効にしてください (Event Hubs の信頼された Microsoft サービスService Bus の信頼された Microsoft サービスを参照)。

信頼された Microsoft サービス接続を有効にするには、次の手順を完了する必要があります。

  1. Azure Digital Twins インスタンスでは、システム割り当てマネージド ID を使用する必要があります。 これにより、他のサービスがインスタンスを信頼できる Microsoft サービスとして見つけることができるようになります。 インスタンスにシステム マネージド ID を設定する手順については、「インスタンスのマネージド ID を有効にする」を参照してください。
  2. システム割り当てのマネージド ID がプロビジョニングされたら、Event Hubs または Service Bus エンドポイントにアクセスするためのアクセス許可をインスタンスのマネージド ID に付与します (この機能は Event Grid ではサポートされていません)。 適切なロールを割り当てる手順については、「ID に Azure ロールを割り当てる」を参照してください。
  3. ファイアウォール構成が設定されている Event Hubs および Service Bus エンドポイントの場合は、[信頼された Microsoft サービスによるこのファイアウォールのバイパスを許可する] 設定を必ず有効にしてください。

Azure Private Link は、Azure Virtual Network (VNet) 内のプライベート エンドポイント経由で、Azure リソース (Azure Event HubsAzure StorageAzure Cosmos DB など) と、Azure でホストされている顧客とパートナー サービスにアクセスできるようにするサービスです。

同様に、Azure Digital Twins インスタンスにプライベート アクセス エンドポイントを使用することで、仮想ネットワーク内にいるクライアントが Private Link 経由でインスタンスに安全な REST API アクセスを行うことができます。 Azure Digital Twins インスタンス用のプライベート アクセス エンドポイントを構成することで、Azure Digital Twins インスタンスをセキュリティで保護してパブリックに露出されないようにすることができます。 さらに、Azure Virtual Network (VNet) からのデータ流出も回避できます。

プライベート アクセス エンドポイントでは、Azure VNet アドレス空間の IP アドレスが使用されます。 プライベート ネットワーク上のクライアントと Azure Digital Twins インスタンス間のネットワーク トラフィックは、VNet と Microsoft バックボーン ネットワーク上のプライベート リンクを経由します。これにより、パブリック インターネットに露出されることがなくなります。

ネットワークを示している図。パブリック クラウドへのアクセスがない保護された VNET であり、Private Link 経由で Azure Digital Twins インスタンスに接続している。

Azure Digital Twins インスタンス用のプライベート アクセス エンドポイントを構成することで、Azure Digital Twins インスタンスをセキュリティで保護してパブリックに露出されないようにするだけでなく、VNet からのデータの流出を回避できます。

Azure Digital Twins 用の Private Link を設定する方法については、「Private Link を使用してプライベート アクセスを有効にする」を参照してください。

Note

Azure Private Link を使用したプライベート ネットワーク アクセスは、残りの API を介した Azure Digital Twins へのアクセスに適用されます。 この機能は、Azure Digital Twins のイベント ルーティング機能を使用するイグレス シナリオには適用されません。

設計上の考慮事項

Azure Digital Twins に対して Private Link を使用する場合は、次の点を考慮する必要があります。

  • 価格: 価格の詳細については、「Azure Private Link の価格」をご覧ください。
  • リージョン別の提供状況: Azure Digital Twins のプライベート リンクに対しては、Azure Digital Twins を利用できるすべての Azure リージョンで利用できます。
  • Azure Digital Twins Explorer: Azure Digital Twins Explorer は、パブリック アクセスが無効になっている Azure Digital Twins インスタンスにアクセスできません。 ただし、Azure Functions を使用して、Azure Digital Twins Explorer コードベースをクラウドにプライベートにデプロイできます。 これを行う方法については、「 Azure Digital Twins Explorer: クラウドでの実行」を参照してください。
  • Azure Digital Twins インスタンスあたりのプライベート エンドポイントの最大数: 10
  • その他の制限: Private Link の制限事項お詳細については、Azure Private Link のドキュメントの制限事項に関するページを参照してください。

サービス タグ

サービス タグは、特定の Azure サービスの IP アドレス プレフィックスのグループを表します。 サービス タグに含まれるアドレス プレフィックスの管理は Microsoft が行い、アドレスが変化するとサービス タグは自動的に更新されます。これにより、ネットワーク セキュリティ規則に対する頻繁な更新の複雑さを最小限に抑えられます。 サービス タグの詳細については、仮想ネットワーク タグに関するページを参照してください。

サービス タグを使用して、ネットワーク セキュリティ グループまたは Azure Firewall に対してネットワーク アクセス制御を定義するには、セキュリティ規則を作成するときに特定の IP アドレスの代わりにサービス タグを使用します。 規則の適切なソースまたは宛先フィールドにサービス タグ名 (この場合は AzureDigitalTwins) を指定すると、対応するサービスのトラフィックを許可または拒否することができます。

AzureDigitalTwins サービス タグの詳細を以下に示します。

タグ 目的 受信または送信で使用できるか リージョン別か Azure Firewall と共に使用できるか
AzureDigitalTwins Azure Digital Twins
注: このタグ、またはこのタグによってカバーされる IP アドレスを使用すると、イベント ルート用に構成されたエンドポイントへのアクセスを制限することができます。
受信 いいえ はい

サービス タグを使用したイベント ルート エンドポイントへのアクセス

Azure Digital Twins でサービス タグを使用して イベント ルート エンドポイントにアクセスする手順を次に示します。

  1. まず、Azure IP 範囲とサービス タグを示すこの JSON ファイル リファレンス (Azure IP 範囲とサービス タグ) をダウンロードします。

  2. JSON ファイル内で "AzureDigitalTwins" IP 範囲を検索します。

  3. エンドポイントに接続されている外部リソース (たとえば、Event GridEvent HubsService Bus、または配信不能イベント用の Azure Storage) のドキュメントを参照して、そのリソースに対して IP フィルターを設定する方法を確認します。

  4. "手順 2" からの IP 範囲を使用して、外部リソースに対して IP フィルターを設定します。

  5. 必要に応じて、IP 範囲を定期的に更新します。 範囲は時間の経過と共に変化する可能性があるため、これらを定期的にチェックし、必要に応じて更新することをお勧めします。 これらの更新の頻度は異なる場合がありますが、1 週間に 1 回チェックすることをお勧めします。

保存データの暗号化

Azure Digital Twins によって、データ センターに書き込まれる場合の保存データおよび転送中データが暗号化され、アクセス時に復号化されます。 この暗号化は、Microsoft のマネージド暗号化キーを使用して行われます。

クロスオリジン リソース共有 (CORS)

現在、Azure Digital Twins ではクロスオリジン リソース共有 (CORS) がサポートされていません。 このため、ブラウザー アプリ、API Management (APIM) インターフェイス、または Power Apps コネクタから REST API を呼び出すと、ポリシー エラーが表示される場合があります。

このエラーを解決するために、次のいずれかのアクションを実行できます。

  • メッセージから CORS ヘッダー Access-Control-Allow-Origin を削除します。 このヘッダーは、応答を共有できるかどうかを示します。
  • または、CORS プロキシを作成し、それを通じて Azure Digital Twins REST API 要求を行います。

次のステップ