ネットワーク機能を設定する方法 (HTML)

[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]

このトピックでは、ネットワークの分離という概念と、ネットワーク機能を設定して Windows ランタイム アプリのネットワーク アクセスを完全に制御する方法について説明します。 ネットワーク機能により、Windows ランタイム アプリが必要なネットワーク リソースにアクセスできるようになるほか、エンド ユーザーにアクセス レベルに関する正確な予測が提供されます。 Windows ランタイム アプリでネットワーク リソースへの接続を適切に行うには、このトピックの内容を理解しておくことが重要です。 ネットワーク分離下では、正しい機能を明示的に要求しなければ Windows ランタイム アプリがネットワーク リソースにアクセスすることはできません。

理解しておく必要があること

テクノロジ

必要条件

  • 以下の情報は、ネットワーク接続の確立を伴う、あらゆる接続型 (ネットワーク認識型) の Windows ランタイム アプリに当てはまります。書かれている内容は、JavaScript で作られたアプリに関係します。また、C#、VB.NET、C++ で .NET Framework 4.5 を使って作られたアプリにも関係します。

ネットワーク分離のチェック リスト

アプリに対してネットワーク分離がきちんと構成されているかどうかを、このチェック リストを使って確認してください。

  • アプリが必要とするネットワーク アクセスの方向を調べます。これには、クライアント側から開始される出力方向の要求と、相手からの一方的な入力方向の要求とがあります。両方のタイプのネットワーク要求を組み合わせたものもあります。
  • アプリの通信相手となるネットワーク リソースの種類を調べます。アプリの通信相手は、ホーム ネットワークまたは社内ネットワーク上の信頼済みリソースである場合もあれば、インターネット上のリソースと通信することが必要になる場合もあります。その両方のタイプのネットワーク リソースにアクセスすることも考えられます。
  • アプリ マニフェストには、必要最小限のネットワーク分離機能を構成します。これらの機能は通常、アプリの開発時に Microsoft Visual Studio 2013 を使って構成します。
  • アプリを展開して実行し、トラブルシューティングのためのネットワーク分離ツールを使ってテストします。

ネットワーク分離について

すべてのアプリがネットワーク アクセスを必要とするわけではありませんが、それを必要とするアプリのために、Windows 8.1 には、さまざまなレベルのネットワーク アクセスが用意されており、適切な機能を選んで有効にすることができます。

ネットワーク分離の利点は、必要なネットワーク アクセスのスコープをアプリごとに定義できることです。ネットワーク アクセス要求は、次の 2 つのカテゴリに分類されます。

  • クライアント側から開始される出力方向の要求
    アプリがクライアントとして、最初のネットワーク要求をリモート コンピューター (通常はサーバー) に送ることによってネットワーク アクセスを開始します。クライアント アプリがサーバーに要求を送り、サーバーがクライアント アプリに応答を返します。Web クライアント アプリから Web サーバーへのトラフィックはすべてこのカテゴリに該当します。

  • 相手からの一方的な入力方向の要求
    アプリがネットワーク サーバーとして、リモート コンピューターから来る入力方向のネットワーク要求をリッスンします。リモート コンピューターが最初の要求をアプリ (サーバー) に送ることによってネットワーク アクセスを開始します。 リモート コンピューターがアプリに要求を送り、アプリがリモート コンピューターに応答を返します。メディア サーバーとして機能するアプリがこのカテゴリに該当します。

スコープの定義されていないアプリが、特定の種類のネットワーク接続にアクセスすることはできないようになっています。 ネットワーク分離を設定して強制的に適用できるため、アプリのセキュリティが侵害されたとしても、そこからアクセスできるネットワークは、そのアプリに対して明示的に許可されている範囲に限られます。そのため、他のアプリケーションやシステムそのものへの影響の範囲をきわめて小さくすることができます。

ネットワーク分離は、ネットワークへのアクセスを伴う、次の名前空間に存在するすべてのメソッドとプロパティに影響します。

ネットワーク分離は、Windows によって能動的かつ強制的に適用されます。これらの名前空間のメソッドまたはプロパティによってネットワーク アクセスが生じた場合、適切なネットワーク機能が有効になっていなければ、ネットワーク分離によって、そのメソッドの呼び出しまたはプロパティへのアクセスは失敗します。他の名前空間のクラスも、上に挙げた名前空間のメソッドやプロパティを利用する場合は、同様の結果となります。

アプリのネットワーク機能は、そのビルド時にアプリ マニフェストで構成します。通常、ネットワーク機能は、アプリの開発時に Visual Studio を使って追加します。アプリ マニフェスト ファイルをテキスト エディターで直接編集してネットワーク機能を設定することもできます。

ネットワーク分離と機能

ネットワーク分離は、Windows 8 で採用されるアプリケーション セキュリティ モデルの一部です。Windows がネットワークの境界を能動的に検出し、ネットワーク アクセスの制限を強制的に適用することによって、ネットワーク分離が実現されています。検索されるネットワークの境界は次のとおりです。

  • ホーム\社内ネットワーク
    これは、ローカルのホーム ネットワークまたは社内ネットワークです。コンピューターが接続されているローカル サブネットと、ネットワークの一部として構成されているローカル プロキシから成ります。インターネット プロキシは、この境界からは除外されます。ドメイン環境では、Active Directory サイトとサブネットによって定義される範囲がこれに含まれます。

  • インターネット
    インターネットからホーム ネットワークと社内ネットワークを除いた範囲です。これは、インターネットへのアクセスを提供するすべてのプロキシから成り立っています。ホーム\社内ネットワークに属していないネットワーク アクセスはすべて、"インターネット" と見なされます。

Windows 8 では、すべてのリモート ネットワーク ホストが、この 2 つのカテゴリのいずれかに分類されます。アプリの通信相手となるホストのカテゴリと、該当する通信方向を把握することにより、アプリの適切な機能を選ぶことができます。

アプリにネットワーク アクセスを許可するためには、ネットワークに関連した所定の機能をアプリ マニフェストで有効にする必要があります。これらの機能はセキュリティ識別子 (SID) として定義されています。つまり、Windows 8 は、SID を使って境界を強制的に適用します。

定義されているネットワーク分離機能は次のとおりです。

Visual Studio で使われている用語 説明

インターネット (クライアント)

インターネットや、公共の場所のネットワーク (空港、喫茶店など) への出力方向のアクセスを提供します。インターネットにアクセスする必要があるほとんどのアプリは、この機能を使います。

アプリ マニフェストでは internetClient 機能に該当します。

インターネット (クライアントとサーバー)

インターネットや、公共の場所のネットワーク (空港、喫茶店など) からの入力方向と出力方向のネットワーク アクセスをアプリに提供します。

アプリ マニフェストでは internetClientServer 機能に該当します。

プライベート ネットワーク (クライアントとサーバー)

ユーザーの信頼する場所 (自宅、職場など) において、入力方向と出力方向のネットワーク アクセスをアプリに提供します。

アプリ マニフェストでは privateNetworkClientServer 機能に該当します。

 

  

Windows Phone ストア アプリには、アプリのすべてのネットワーク アクセスを可能にする単一のネットワーク機能があります。インターネット (クライアントとサーバー) 機能を使うと、クライアント操作 (出力方向のアクセス) とサーバー操作 (入力方向のアクセス) の両方のために、ネットワークへの完全なアクセスが可能になります。ただし、いずれかのネットワーク機能 (internetClient、internetClientServer、または privateNetworkClientServer) が Package.appxmanifest ファイルで指定されている場合、Windows Phone ストア アプリは実行時にクライアントとサーバーの両操作のためにネットワークに対して完全なアクセスを得ることができます。

Visual Studio で Windows Phone ストア アプリを開発、テストしているときは、アプリ マニフェスト ファイルでこの機能を指定していない場合でも、アプリの実行時にネットワーク機能 (インターネット (クライアントとサーバー)) を利用できます。アプリを公開すると、アプリではネットワーク機能が自動的には表示されません。アプリでネットワーク接続が必要な場合は、マニフェスト デザイナーの [機能] ページで [インターネット (クライアントとサーバー)] チェック ボックスをオンにしてください。

ネットワーク アクセスを許可するために、他の特定の機能をアプリ マニフェストで有効にすることが必要になる場合があります。これらの機能は GUID として定義されます。つまり、境界は GUID を使って強制的に適用されます。

Visual Studio で使われている用語 説明

エンタープライズ認証

ドメイン資格情報を必要とするネットワーク リソースにアプリが接続できるようにします。この機能を使う場合、すべてのアプリの機能をドメイン管理者が有効にする必要があります。たとえば、イントラネットの Sharepoint サーバーからデータを取得するアプリが該当します。

この機能を使うと、資格情報を必要とするネットワーク上のリソースに、自分の資格情報を使ってアクセスすることができます。この機能を持ったアプリは、ネットワーク上でユーザーを偽装することができます。

この機能を使う場合、認証プロキシ経由でのインターネットへのアクセスをアプリに許可する必要はありません。

アプリ マニフェストでは enterpriseAuthentication 機能に該当します。

近接通信

コンピューターときわめて近い場所にあるデバイスとの近距離近接通信で必要となります。近距離近接通信は、近くのデバイス上のアプリケーションに接続したりデータを送ったりするときに使われます。

この機能を有効にすると、アプリは、ユーザーの同意に基づいて相手を招待したり招待に応じたりしながら、ネットワークにアクセスし、きわめて近い場所にあるデバイスに接続することができます。

アプリ マニフェストでは proximity 機能に該当します。

共有ユーザー証明書

ソフトウェア証明書とハードウェア証明書 (スマート カード証明書など) にアプリがアクセスできるようにします。この機能が実行時に呼び出されると、ユーザーは、カードの挿入や証明書の選択などの行動をとる必要があります。

この機能では、ソフトウェア証明書やハードウェア証明書、スマート カードが、アプリでの身分証明に使われます。この機能は、企業や銀行、行政サービスで身分証明に使うことができます。

アプリ マニフェストでは sharedUserCertificates 機能に該当します。

 

さらに、デバイス アクセスに関連した所定のデバイス機能をアプリ マニフェストで有効にし、必要なネットワーク アクセスを確保しなければならない場合もあります。これらのデバイス機能は GUID として定義されます。つまり、境界は GUID を使って強制的に適用されます。

Visual Studio で使われている用語 説明

Web カメラ

Web カメラのビデオ フィードにアクセスできるようにします。

リモート コンピューターとの間で Web カメラのビデオ フィードをネットワークを介して共有する場合、この機能が必要になります。

アプリ マニフェストでは webcam 機能に該当します。

 

アプリケーションに必要な機能をきちんと把握することが大切です。次の表は、いくつかの一般的な操作と、必要な機能を一覧にしたものです。

必要な機能

アプリケーション 説明

コンテンツを実行するだけの Web クライアント。これには、RSS 配信や AtomPub プロトコルを使う Web サイトやアプリから HTML を読み込むアプリが含まれます。

internetClient

ソーシャル ネットワーク アプリ。これには、ソーシャル ネットワーク サイトのコンテンツを実行して生成するアプリが含まれます。

internetClient

ピア ツー ピア (p2p) アプリ。これには、インスタント メッセンジャーやチャットへのアクセスを提供するアプリが含まれます。

internetClientServer

ホーム ネットワークまたは社内ネットワークで共有するためのアプリ。これには、メディアまたはネットワーク接続ストレージ (NAS) コンテンツにアクセスするアプリが含まれます。

privateNetworkClientServer

ホームまたは社内での基幹業務アプリ。これには、HTTP クライアントとして動作するアプリや、ソケットまたは WebSocket を使うアプリが含まれます。

privateNetworkClientServer

ホームまたは社内でネットワーク機能を使う生産性アプリ。これには、ネットワーク機能にアクセスする生産性アプリが含まれます。

privateNetworkClientServer

ネットワーク アクセスが必要なゲーム アプリ。

internetClient

マッチメイキングを行うマルチプレイヤー インターネット ゲーム アプリ。

internetClient

きわめて近い場所にいるユーザーとのマルチプレイヤー ゲーム。

proximity

マルチキャスト検出またはマルチキャストを使ってプレイヤーを検出するマルチプレイヤー ゲーム アプリ。

internetClientServer

ホーム ネットワークまたは社内ネットワークを使うマルチプレイヤー ゲーム アプリ。これには、マルチキャスト検出でプレイヤーを検出する、またはマルチキャストを使って検出されるアプリが含まれます。

privateNetworkClientServer

ブロードキャスト アプリ。これには、インターネット上でラジオ放送を受信するアプリが含まれます。

internetClient

 

ネットワーク分離とネットワーク境界

Windows 8.1 がネットワーク分離を強制的に適用するためには、ネットワークの境界を検出して明らかにする必要があります。この検出処理は、Windows 8.1 によって動的に実行されます。Windows 8 は、ネットワークをプローブして、ローカル コンピューターのネットワーク インターフェイス上のアドレスと、そこにバインドされているすべてのアドレスを検出して、ゲートウェイ (インターネットとのアクセス ポイントとなる IP アドレス) の存在を調べます。 次の情報が検出されます。

  • ホーム ネットワークまたは社内ネットワークで使われているローカル アドレスとサブネット。
  • インターネットのゲートウェイとインターネットへのプロキシ。

ホーム ネットワークや社内ネットワークで検出される標準的なローカル IPv4 アドレスとサブネットには、プライベート IPv4 アドレスとして次の範囲が含まれます。

  • 10.0.0.0 ~ 10.255.255.255
  • 172.16.0.0 ~ 172.31.255.255
  • 192.168.0.0 ~ 192.168.255.255

ホーム ネットワークや社内ネットワークで検出される標準的なローカル IPv6 アドレスとサブネットには、次の IPv6 アドレス範囲が含まれます。

  • IPV6 アドレスに関連付けられているローカル IPv6 サブネット。
  • IPv6 リンク ローカル アドレス (fe80::/10)。
  • 移行テクノロジ (6to4、ISATAP など) に使われる IPv6 トンネル アドレス。Teredo で使われる IPv6 アドレス範囲 (2001::/32) を除く。

ユーザーは、初めて自分のコンピューターをネットワーク (自宅のワイヤレス LAN (Wi-Fi) ネットワーク) に接続するとき、そのネットワーク上で共有を有効にするかどうかを選択することができます。Windows は、この選択を基に、そのネットワークが信頼されているネットワークなのかどうかを判断します。

次のいずれかの条件が満たされている場合、ネットワーク エンドポイントはホーム\社内ネットワークの一部と見なされます。

  • ユーザーによって指定された信頼済みのネットワークのローカル サブネットの一部である場合。たとえば、ホーム ユーザーは、自宅のネットワークを信頼済みとして指定するのが一般的です。ローカル サブネット上のコンピューターは、ホーム\社内ネットワークの一部として指定されます。
  • コンピューターがネットワーク上にあり、ドメイン コントローラーに対して認証されている場合。ローカル サブネット内のネットワーク エンドポイントは、プライベートと見なされます。イントラネット アドレス空間内のネットワーク エンドポイントは、プライベートと見なされます。
  • コンピューターが DirectAccess 用に構成されており、ネットワーク エンドポイントがイントラネット アドレス空間に属している場合。

イントラネット アドレス空間は構成済みの Active Directory サイトとサブネットで構成され、グループ ポリシーを使用して Windows ネットワーク分離用に構成されます。ドメインに参加しているコンピューターは、Active Directory とグループ ポリシーにこの情報を問い合わせます。

前に挙げた条件を満たさないその他すべてのネットワーク エンドポイントは、インターネット上のネットワーク エンドポイントと見なされます。

ネットワーク分離に必要な管理者の制御について詳しくは、「Isolating Windows Store apps on Your Network (ネットワーク上の Windows ストア アプリの分離)」をご覧ください。

ネットワーク分離と強制適用

クライアント側から開始される出力方向の要求をアプリが試みると (www.contoso.com に対する HTTP Web 要求など)、システムは、そのアプリに対して有効になっている機能をアプリ マニフェストで調べ、クライアント側から特定のホスト (www.contoso.com など) に向けて開始される出力方向の要求を許可するか遮断するかを判断します。 クライアント側から開始される出力方向の要求が許可された場合、その要求に対するサーバーからの応答も許可されます。

アプリが、相手からの一方的な入力方向の要求をリッスンしようとすると、システムは、そのアプリに対して設定されている機能をそのマニフェストで調べ、リモート IP アドレスからの一方的な入力方向の要求を許可するか遮断するかを判断します。 相手からの一方的な入力方向の要求をリッスンするには、アプリに対して InterentClientServer 機能または privateNetworkClientServer 機能が有効にされている必要があります。このうち少なくとも 1 つの機能が有効になっていれば、アプリは、指定したタイプのネットワークで、相手からの一方的な入力方向の要求を、1 つまたは複数のポートでリッスンすることができます。相手からの一方的な入力方向の要求については、リモートの特定の送信元 IP アドレスからの要求が許可されているかどうかがその都度、調べられます。Windows は、相手からの一方的な入力方向の要求が、自宅や職場の IP アドレスからのものか、インターネットからのものかを判断し、有効にされている機能と実際のリモート アドレスとに基づいて、アクセスを許可または拒否します。

近接通信コンポーネントには、ネットワーク分離が完全に統合されています。アプリ マニフェストで近接通信機能が有効になっている場合、他のネットワーク機能を有効にする必要はありません。ただし、近接デバイスを招待したり招待に応じたりするには、ユーザーの同意が必要です。そうして初めて、近接デバイスとローカル コンピューター間の通信が成立します。

ネットワーク分離とループバック

従来、IP ループバック アドレスとループバック インターフェイスは、ネットワークを介しての異なるアプリケーション間の通信や、同じローカル コンピューター上の複数のアプリケーションどうしのプロセス間通信に使われてきました。

IP ループバック アドレスを使ったネットワーク通信は通常、プロセス間通信 (2 つの異なるアプリ間の通信) には使用できません。このような通信は、ネットワーク分離によって制限されています。IP ループバック アドレスを使ったネットワーク通信は、同じアプリの同じプロセス内の通信目的に限って利用できます。

開発時のデバッグを目的とし、アプリ間で IP ループバック アドレスにアクセスできるようにする方法について詳しくは、「ループバックを有効にする方法とネットワーク分離のトラブルシューティングを行う方法」をご覧ください。

バックグラウンド転送とトースト通知

Windows.Networking.BackgroundTransfer 名前空間の BackgroundDownloader クラスと BackgroundUploader クラスは、Windows 8.1、Windows Phone 8.1、および Windows Server 2012 R2 で、転送が成功または失敗したときにユーザーがタイルとトースト通知を受け取るオプションをサポートします。

Windows.Networking.BackgroundTransfer を使うアプリがトースト通知を使って通信できるようにするには、アプリのマニフェスト ファイルでアプリがトースト対応であることを宣言する必要があります。この設定は、ネットワーク分離設定の [機能] セクションにはありません。[トースト対応] 設定は、[アプリケーション UI] タブの [通知] セクションの下にあります。[トースト対応] オプションを [はい] に設定して、アプリがトースト通知を受け取れるようにします。

[トースト対応] がアプリのマニフェストで有効にされていない場合、Windows.Networking.BackgroundTransfer 名前空間のトースト設定は無視され、アプリはトースト通知を受け取りません。

  ユーザーは、いつでもアプリのトースト通知を手作業で無効または有効にできます。

 

トースト通知について詳しくは、「トースト通知の送信」と「トースト通知をオプトインする方法」をご覧ください。

関連トピック

その他のリソース

アプリ機能の宣言

アプリ パッケージ マニフェスト

Capability

DeviceCapability

ループバックを有効にする方法とネットワーク分離のトラブルシューティングを行う方法

トースト通知をオプトインする方法

トースト通知の送信

ネットワーク接続のトラブルシューティングとデバッグ

辞書/リファレンス

HttpClient

IXMLHTTPRequest2

System.Net.Http

Windows.Networking.BackgroundTransfer

Windows.Networking.Sockets

Windows.Web.AtomPub

Windows.Web.Http

Windows.Web.Http.HttpClient

Windows.Web.Syndication

サンプル

HttpClient のサンプルに関するページ

StreamSocket のサンプル