(57)【特許請求の範囲】
【請求項１】
プロバイダネットワーク上の１つ以上のデバイスによって実装された仮想ネットワーク検証サービスによって、
前記プロバイダネットワーク上でクライアントの仮想ネットワークについての制約問題を表すクエリを受信することと、
前記仮想ネットワークの記述的情報を取得することと、
前記仮想ネットワークのエンコードされた記述を生成するために、宣言型論理プログラミング言語に従って前記記述的情報をエンコードすることと、
制約ソルバーエンジンを使用して、エンコードされた仮想ネットワーキングルールに従って、前記エンコードされた記述に対するクエリを解決することと、
クエリ解決の結果を前記クライアントに提供することと、を実行することを含む、方法。
【請求項２】
前記記述的情報が前記クライアントから取得される、請求項１に記載の方法。
【請求項３】
前記記述的情報を取得することが、
１つ以上のプロバイダネットワークサービスから、前記仮想ネットワークの前記記述的情報を取得するための許可を前記クライアントから取得することと、
前記１つ以上のプロバイダネットワークサービスから、前記プロバイダネットワーク上の前記仮想ネットワークに対する前記記述的情報を取得することと、を含む、請求項１に記載の方法。
【請求項４】
前記記述的情報が、前記仮想ネットワークに実装されたネットワーキングプリミティブのインスタンスを識別する情報、前記仮想ネットワーク内の仮想マシンの記述、前記仮想ネットワーク内の仮想マシン間の関係の記述、または前記仮想ネットワークの外部のエンティティへのインターフェースの記述のうちの１つ以上を含む、請求項１に記載の方法。
【請求項５】
前記仮想ネットワーキングルールが、前記仮想ネットワークに実装されたネットワーキングプリミティブのための仮想ネットワーキングセマンティクスおよび論理をエンコードするルール、１つ以上のネットワーキングセキュリティ標準をエンコードするルール、またはクライアントのネットワーキング要件をエンコードするクライアント定義ルールのうちの１つ以上を含む、請求項１に記載の方法。
【請求項６】
前記クライアントから前記エンコードされた仮想ネットワーキングルールを受信することをさらに含み、前記エンコードされた仮想ネットワーキングルールが、前記クライアントによって定義された仮想ネットワークのためのベストプラクティスを指定するルールを含み、前記クエリが、前記仮想ネットワークが前記ベストプラクティスに準拠することを検証するように提示される、請求項１に記載の方法。
【請求項７】
前記クエリが、前記仮想ネットワーク内の仮想マシンと前記仮想ネットワーク内の別の仮想マシンとの間のパスが開いていることを検証する、前記仮想ネットワーク内の仮想マシンと前記仮想ネットワークの外部の１つ以上のエンティティとの間のパスが開いていることを検証する、または前記仮想ネットワーク内の仮想マシンが、前記仮想マシンにアクセスすべきでないエンティティによってアクセス可能ではないことを検証するために提示される、請求項１に記載の方法。
【請求項８】
前記クエリ解決の結果を前記クライアントに提供することが、前記クエリ解決の前記結果のテキスト表現を前記クライアントに提供すること、または前記クエリ解決の前記結果のグラフィック表現を前記クライアントに提供することを含む、請求項１に記載の方法。
【請求項９】
前記クエリを受信することと、前記記述的情報を取得することと、前記仮想ネットワーク検証サービスへのアプリケーションプログラミングインターフェースに従って前記クエリ解決の前記結果を提供することと、をさらに含む、請求項１に記載の方法。
【請求項１０】
前記クライアントの仮想ネットワークが、２つのピア仮想ネットワークを含み、前記クエリが、第１のピア仮想ネットワーク内の仮想マシンがプロバイダネットワークを介したピア仮想ネットワーク間のピア接続を介して、第２のピア仮想ネットワーク内の別の仮想マシンと通信できることを検証するように提示される、請求項１に記載の方法。
【請求項１１】
プログラム命令を格納した非一時的コンピュータ可読記憶媒体に結合されたプロセッサを備えるシステムであって、前記プログラム命令が前記システムに、
プロバイダネットワーク上におけるクライアントの仮想ネットワークについての１つ以上のクエリを受信させ、クエリが制約問題として表現され、
前記仮想ネットワークの記述的情報を取得させ、
前記仮想ネットワークのエンコードされた記述を生成するために、宣言的論理プログラミング言語に従って前記記述的情報をエンコードさせ、
制約ソルバーエンジンを使用して、エンコードされた仮想ネットワーキングルールに従って、前記エンコードされた記述に対する１つ以上のクエリを解決させ、
前記１つ以上のクエリの前記解決の結果を前記クライアントに提供させる、システム。
【請求項１２】
前記記述的情報が、前記クライアントから、または仮想ネットワークを記述するメタデータを保持する１つ以上のプロバイダネットワークサービスから取得される、請求項１１に記載のシステム。
【請求項１３】
前記記述的情報が、前記仮想ネットワーク内で実装されたネットワーキングプリミティブのインスタンスを識別する情報、前記仮想ネットワーク内の仮想マシンの記述、前記仮想ネットワーク内の前記仮想マシン間の関係の記述、または前記仮想ネットワークの外部のエンティティへのインターフェースの記述のうちの１つ以上を含む、請求項１１に記載のシステム。
【請求項１４】
前記仮想ネットワーキングルールが、前記仮想ネットワークに実装されたネットワーキングプリミティブのための仮想ネットワーキングセマンティクスおよび論理をエンコードするルール、１つ以上のネットワーキングセキュリティ標準をエンコードするルール、または前記クライアントのネットワーキング要件をエンコードするクライアント定義ルールのうちの１つ以上を含む、請求項１１に記載のシステム。
【請求項１５】
実行時に前記システムに前記仮想ネットワークの記述的情報を取得させる前記プログラム命令が、実行時に前記システムに、
前記記述的情報を取得するための許可を前記クライアントから受け取らせること、および
１つ以上のプロバイダネットワークサービスから前記仮想ネットワークの前記記述的情報を取得するために、前記許可を使用させることを行わせる命令をさらに含む、請求項１１に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
多くの企業および他の組織は、（例えば、ローカルネットワークの一部として）同じ場所に配置されているか、または代わりに（例えば、１つ以上のプライベートまたは公衆の中間ネットワークを介して接続された）複数の異なる地理的位置に配置されたコンピューティングシステムなど、多数のコンピューティングシステムを相互接続するコンピュータネットワークを操作してコンピュータネットワークの動作をサポートする。例えば、単一の組織によって、および単一の組織のために運営されるプライベートデータセンターや、顧客にコンピューティングリソースを提供するビジネスとして企業により運営されるパブリックデータセンターなど、多数の相互接続されたコンピューティングシステムを収容するデータセンターが普及している。パブリックデータセンター運営者の中には、様々な顧客が所有するハードウェアにネットワークアクセス、電力および安全な設置設備を提供するものもあれば、顧客が使用できるようにされたハードウェアリソースも含む「フルサービス」設備を提供するものもある。
【図面の簡単な説明】
【０００２】
【図１】いくつかの実施形態による、プロバイダネットワーク環境における仮想ネットワーク検証サービスを示す図である。
【図２】いくつかの実施形態による、例示的な仮想ネットワーク検証サービスの構成要素および動作を示す図である。
【図３】いくつかの実施形態による、クライアントが仮想ネットワークについての記述的情報とクエリとを仮想ネットワーク検証サービスへ提供し、仮想ネットワーク検証サービスがクエリを処理して結果をクライアントに提供することを示す図である。
【図４】いくつかの実施形態による、クライアントがクエリと仮想ネットワークへのアクセス許可とを仮想ネットワーク検証サービスに提供し、仮想ネットワーク検証サービスが仮想ネットワークから記述的情報を取得し、クエリを処理し、結果をクライアントに提供することを示す図である。
【図５】いくつかの実施形態による、仮想ネットワークについての情報をプロバイダネットワークのクライアントに提供するための方法のハイレベルフローチャートである。
【図６】いくつかの実施形態による、プロバイダネットワークのクライアントに仮想ネットワークについての情報を提供する方法のフローチャートであり、クライアントは、仮想ネットワーク検証サービスに記述的情報およびクエリを提供する。
【図７】いくつかの実施形態による、仮想ネットワークについての情報をプロバイダネットワークのクライアントに提供するための方法であって、この場合にクライアントが仮想ネットワークにアクセスするための記述的情報および許可を仮想ネットワーク検証サービスに提供する方法のフローチャートである。
【図８】いくつかの実施形態による、ピア仮想ネットワークを含むプロバイダネットワーク環境における仮想ネットワークの実装形態を示す図である。
【図９】いくつかの実施形態による、クライアント用の仮想ネットワークを自動的に合成するための方法のフローチャートである。
【図１０】いくつかの実施形態による、クライアント用の仮想ネットワークを自動的に合成するための別の方法のフローチャートである。
【図１１】いくつかの実施形態による、例示的なプロバイダネットワーク環境を示す図である。
【図１２】いくつかの実施形態による、ＩＰトンネリング技術を使用してネットワーク基板上にオーバーレイネットワークを実装する例示的なデータセンターを示す図である。
【図１３】いくつかの実施形態による、ストレージ仮想化サービスおよびハードウェア仮想化サービスをクライアントに提供する例示的なプロバイダネットワークのブロック図である。
【図１４】いくつかの実施形態による、少なくともいくつかのクライアントに仮想ネットワークを提供する例示的なプロバイダネットワークを示す図である。
【図１５】いくつかの実施形態による、プロバイダネットワーク上の例示的仮想ネットワーク内のサブネットおよびセキュリティグループを示す図である。
【図１６】いくつかの実施形態で使用され得る例示的なコンピュータシステムを示すブロック図である。
【０００３】
実施形態は、いくつかの実施形態および例示的な図面の例として本明細書に記載されているが、当業者は、記載された実施形態または図面に限定されないことを認識するであろう。しかし、図面およびその詳細な説明は、本発明を開示された特定の形態に限定することを意図するものではなく、むしろ、その意図は、添付の特許請求の範囲によって定義される主旨および範囲に該当する全ての変更、均等物、および代替物を包含することが理解されるべきである。本明細書で使用される見出しは、編成目的のみのためであり、そして説明または請求項の範囲を限定するために使用されることを意味しない。本出願を通して使用されるように、「可能性がある（ｍａｙ）」という語は、必須の意味（すなわち、必然的な意味）ではなく、寛容な意味（すなわち、可能性を有するという意味）で使用される。同様に、「含む（ｉｎｃｌｕｄｅ）」、「含む（ｉｎｃｌｕｄｉｎｇ）」、および「含む（ｉｎｃｌｕｄｅｓ）」という語は、含むがそれに限定されないことを意味する。請求項で使用されるとき、用語「または」は、包括的なまたはとして使用され、排他的なまたはとしては使用されない。例えば、「ｘ、ｙ、またはｚのうちの少なくとも１つ」という句は、ｘ、ｙ、およびｚのうちの任意の１つ、ならびにそれらの任意の組合せを意味する。
【発明を実施するための形態】
【０００４】
プロバイダネットワーク環境において仮想ネットワークを検証するための方法および装置の様々な実施形態が説明される。宣言型論理プログラミング言語を利用して、プロバイダネットワーク上の仮想ネットワークについての再帰クエリを含むクエリを制約問題として表現し、制約ソルバー（例えば、充足可能性モジュロ理論（ｓａｔｉｓｆｉａｂｉｌｉｔｙ  ｍｏｄｕｌｏ  ｔｈｅｏｒｙ，ＳＭＴ）ソルバー）エンジンを用いてクエリを解決することによってクエリに対する結果を提供することを可能にする仮想ネットワーク検証サービスの実施形態について説明する。いくつかの実施形態で使用され得る例示的な宣言型論理プログラミング言語はＤａｔａｌｏｇである。他の宣言型論理プログラミング言語が使用されてもよいことに留意されたい。
【０００５】
クライアントの仮想ネットワーク内でネットワーキングプリミティブをプロビジョニングおよび構成するために、クライアントは様々なプロバイダネットワークサービスを使用することができ、各サービスはそれ自身のアプリケーションプログラミングインターフェース（ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ，ＡＰＩ）およびネットワーキングセマンティクスを提供することができる。従来、コードサンプルおよびドキュメンテーションが各サービスに提供され得るが、仮想ネットワークにおけるネットワーキングプリミティブ間の相互作用の正式な記述が存在していなかった。実施形態では、ネットワーキングプリミティブのための仮想ネットワーキングセマンティクスおよび論理は、論理プログラミング言語に従って仮想ネットワーキングルールのセットとして表現およびエンコードされ得る。仮想ネットワーキングルールは、仮想ネットワークに実装され得るとともにプロバイダネットワークのサービスおよびＡＰＩによって提供される様々なネットワーキングプリミティブ間の共通の関係および相互作用を表現するルールを含むことができる。したがって、実施形態は、プロバイダネットワーク環境において仮想ネットワーキングがどのように機能するかの論理を記述する仮想ネットワーキングルールを１つのロケーションまたはファイルに提供することができる。
【０００６】
いくつかの実施形態では、仮想ネットワーキングルールは、ペイメントカード業界データセキュリティ基準（Ｐａｙｍｅｎｔ  Ｃａｒｄ  Ｉｎｄｕｓｔｒｙ  Ｄａｔａ  Ｓｅｃｕｒｉｔｙ  Ｓｔａｎｄａｒｄ，ＰＣＩ  ＤＳＳ）、連邦リスクおよび認可管理プログラム（Ｆｅｄｅｒａｌ  Ｒｉｓｋ  ａｎｄ  Ａｕｔｈｏｒｉｚａｔｉｏｎ  Ｍａｎａｇｅｍｅｎｔ  Ｐｒｏｇｒａｍ，ＦｅｄＲＡＭＰ）標準、または医療保険の相互運用性と説明責任に関する法律（Ｈｅａｌｔｈ  Ｉｎｓｕｒａｎｃｅ  Ｐｏｒｔａｂｉｌｉｔｙ  ａｎｄ  Ａｃｃｏｕｎｔａｂｉｌｉｔｙ  Ａｃｔ，ＨＩＰＰＡ）標準、またはクライアントの内部セキュリティ標準などのネットワークセキュリティ標準をエンコードするルールを組み込んでもよい。いくつかの実施形態では、仮想ネットワーク検証サービスは、クライアントの仮想ネットワークが特定の標準に準拠していることを検証するためにクライアントによって選択的に使用され得る異なるネットワーキングセキュリティ標準をそれぞれエンコードする仮想ネットワーキングルールの２つ以上の異なるセットを提供し得る。いくつかの実施形態では、仮想ネットワーク検証サービスは、クライアントの内部セキュリティ標準、ベストプラクティスまたは他のネットワーキング要件をエンコードするカスタムルールをクライアントが定義できるようにすることができ、したがって、クライアントの特定の仮想ネットワークへの適用についてクライアントにより定義されるカスタムルールを含む仮想ネットワーキングルールのセットが実装され得る。
【０００７】
実施形態では、仮想ネットワーク検証サービスは、クライアントの仮想ネットワークについての記述的情報を取得する。記述的情報は、例えば、仮想ネットワークに実装されたネットワーキングプリミティブのインスタンスを識別し、インスタンスの記述（例えば、計算インスタンスに割り当てられた役割、リソースインスタンスに付与または拒否された許可、インスタンスに割り当てられたＩＰアドレスなど）を含み、インスタンス間の関係（例えば、インスタンス間のネットワークを介したパス）を記述し、外部エンティティ（例えば、仮想ネットワークの外部のエンティティによってアクセスされ得る計算インスタンス）へのインターフェースまたはアクセスポイントを記述し得る。いくつかの実施形態では、クライアントは仮想ネットワークから記述的情報を取得し、その記述的情報を仮想ネットワーク検証サービスに提供することができる。あるいは、いくつかの実施形態では、クライアントは、仮想ネットワーク検証サービスが仮想ネットワークから記述的情報を直接取得することを可能にする許可を、仮想ネットワーク検証サービスに与えてもよい。仮想ネットワーク検証サービスは、宣言的論理プログラミング言語に従って記述的情報を論理プログラムとしてエンコードすることができる。
【０００８】
仮想ネットワーク検証サービスの実施形態は、ポートスキャン方法および構文チェック方法などの従来のネットワーク分析方法と比較したときに多大な利点をもたらすことができる。これらの従来の方法とは異なり、仮想ネットワーク検証サービスは、エンコードされた仮想ネットワーキングルールと仮想ネットワーク記述とを通じて、すべてのネットワーキングプリミティブおよびリソースインスタンス、ならびにそれらの複雑な相互関係に関する知識を有する。スキャン時に稼働しているデバイスに依存し、したがってスキャン時に存在するデバイス間のネットワークを介したパスしか識別できない場合がある従来の方法とは異なり、記述的情報は、仮想ネットワークを記述するメタデータを保持する１つ以上のプロバイダネットワークサービスのＡＰＩへのＤＥＳＣＲＩＢＥコールのみを使用してクライアントまたはサービスによって取得されることが可能であり、したがって、それぞれのデバイスまたはインスタンスが起動および待機していなくてもネットワークを介したパスが識別され得る。さらに、ポートスキャン方法では脅威の存在を識別できるが、脅威の不在は識別できない。構文チェック方法は個々のネットワークデバイスの浅い特性をチェックし得るが、攻撃ベクトルの有無を識別しない。一方、仮想ネットワーク検証サービスの実施形態は、エンコードされた仮想ネットワーキングルールで表現されるようなネットワークポリシーからの可能性のあるすべての逸脱を見つけることができ、脅威および攻撃ベクトルの存在および不在の両方を識別することができる。さらに、記述的情報は、仮想ネットワークを記述するメタデータを保持する１つ以上のプロバイダネットワークサービスへのＤＥＳＣＲＩＢＥコールのみを使用してクライアントまたはサービスによって取得されてもよく、したがって、実体的なネットワークおよびＣＰＵ帯域幅を必要とするポートスキャン方法などの従来の方法とは異なって、クライアントの仮想ネットワークへの影響はほとんどまたは全くなく、また、ポートスキャン方法の場合のように、プロバイダネットワーク上のあらゆるデバイスへの完全なネットワークアクセスは必要ない。
【０００９】
実施形態では、仮想ネットワーク検証サービスはクライアントからクエリを受信する。いくつかの実施形態では、クエリは、ＳＱＬに類似しているがネットワーク構成に適用される表現的クエリ言語で提示され得る。そのようなクエリの非限定的な例は、仮想ネットワーク検証サービス（ｖｉｒｔｕａｌ  ｎｅｔｗｏｒｋ  ｖｅｒｉｆｉｃａｔｉｏｎ  ｓｅｒｖｉｃｅ，ＶＮＶＳ）に、インスタンスＡがインスタンスＢにＳＳＨすることができるようなインスタンスのすべてのペアのリストを提供するように要求する「ＶＮＶＳクエリ−ｉリスト：ｃａｎ−ｓｓｈ（Ａ，Ｂ）」のようなものであり得る。あるいは、いくつかの実施形態では、クエリはヒューマンフレンドリーな方法で提示され得る。そのようなクエリの非限定的な例は、「インスタンスＡがインスタンスＢにＳＳＨで入ることができるように、インスタンスのすべてのペアのリストを表示する」のようなものであり得る。いくつかの実施形態において、少なくともいくつかのクエリが、予め定義され、仮想ネットワーク検証サービスへのグラフィカルインターフェースを介して、ユーザインターフェース要素（例えば、メニュー）においてクライアントに提供され得る。
【００１０】
クエリは、生成された論理プログラムについての定理に対応し、制約問題を表現する。仮想ネットワーク検証サービスは、宣言型論理プログラミング言語に従って制約問題を解決するように構成された制約ソルバープログラム（制約ソルバーエンジンとも呼ばれる）を使用して、エンコードされたルールに従って、エンコードされた記述に対するクエリによって表される制約問題を解決し、結果をクライアントに提供する。いくつかの実施形態では、仮想ネットワーク検証サービスは、クエリを提示するためのＡＰＩおよびインターフェースを提供することができる。いくつかの実施形態では、仮想ネットワーク検証サービスは、クライアントがＡＰＩおよびインターフェースを介して選択することができる標準クエリのセットを提供することができる。いくつかの実施形態では、仮想ネットワーク検証サービスは、クライアントがＡＰＩおよびインターフェースを介してカスタムクエリを作成および送信することを可能にし得る。
【００１１】
実施形態では、仮想ネットワーク検証サービスは、コンソール上のサービスへのグラフィカルインターフェースまたはコマンドラインインターフェース（ｃｏｍｍａｎｄ  ｌｉｎｅ  ｉｎｔｅｒｆａｃｅ，ＣＬＩ）を介してクライアントによって使用されて、プロバイダネットワーク上のクライアントの仮想ネットワークについての質問（制約を指定するクエリとして提示される）に対する回答を取得することができる。提示される可能性がある質問の例としては、以下が挙げられるが、これらに限定されない。
●仮想ネットワーク内のどのインスタンスにインターネットからアクセス可能であるか。
●いずれのインスタンスが仮想ネットワーク上の指定されたリソースにアクセスできるか（例えば、データベース、キャッシュ、ストレージエンドポイント、他のインスタンスなど）。
●仮想ネットワークはネットワーキングセキュリティ標準のベストプラクティスに準拠しているか。
●仮想ネットワークは、ルールのこのセットにエンコードされているように、自分の会社のベストプラクティスに準拠しているか。
【００１２】
より一般的には、クライアントが仮想ネットワーク検証サービスを使用して、仮想ネットワーク内のリソースと仮想ネットワーク内の他のリソースとの間の予想パイプ、ならびに外部エンティティへの予想パイプが開いていること、および予想パイプが開いたパイプのみであること（例えば、外部エンティティが、外部エンティティが達することを許されるべきではない仮想ネットワーク内のリソースに達することができないこと）を検証することができる。
【００１３】
仮想ネットワーク内のリソースと他のリソースとの間のパイプ、または仮想ネットワーク内のリソースと外部エンティティとの間のパイプが開いていることを検証することは、リソース間、またはリソースと外部エンティティとの間にネットワークを介したパスまたはルート（例えば、リソースから、外部エンティティが仮想ネットワーク上のリソースにアクセスすることができるＨＴＴＰＳゲートウェイへのパス）があること（すなわち、ネットワーク接続性があること）を検証することを含み得る。パスは、エンドポイント間のネットワーク接続性を提供するネットワークを介した直接パスであってもよく、あるいはルート上の１つ以上のホップを通過し、エンドポイント間のネットワーク接続性を提供する推移的なパスであってもよい。仮想ネットワークを記述するメタデータを保持する１つ以上のプロバイダネットワークサービスのＡＰＩへのＤＥＳＣＲＩＢＥコールのみを使用して仮想ネットワークに対する記述的情報を取得することができ、したがって、それぞれのデバイスまたはインスタンスが起動および待機していない場合でもパスを検証することができる。いくつかの実施形態では、仮想ネットワークの記述的情報は、リソースに付与または拒否される許可（例えば、仮想ネットワーク上のエンドポイントへの１つのリソースアクセスを付与または拒否する許可、ＩＰアドレス範囲、または、所定のエンドポイント（ストレージエンドポイントなど）にアクセスできる、またはできないリソースインスタンスの特定のポートを指定する許可など）を含み得る。これらの実施形態では、仮想ネットワーク内のパスが開いていることを検証することは、そのパスに対する必要な許可が付与されたことを検証することを含み得る。同様に、予想されるパスが開いたパスのみであることを検証することは、仮想ネットワークまたは外部エンティティ内のリソースが、アクセスするべきではないリソースにアクセスするための許可を有していないと判定することを含み得る。
【００１４】
仮想ネットワーキングルールの適切なセットを有する仮想ネットワーク検証サービスの実施形態は、例えば、顧客が顧客の仮想ネットワークがペイメントカード業界データセキュリティ標準（ＰＣＩ  ＤＳＳ）、連邦リスクおよび認可管理プログラム（ＦｅｄＲＡＭＰ）標準、または医療保険の相互運用性と説明責任に関する法律（ＨＩＰＰＡ）標準のようなネットワーキングセキュリティ標準に準拠していることを検証するのを助けるために、または顧客の仮想ネットワークがクライアントの内部セキュリティ標準またはその他の内部ネットワーキング要件に準拠していることを検証するために、クライアントによって使用され得る。
【００１５】
仮想ネットワーク検証サービスの実施形態のための別の例示的なアプリケーションは、ネットワークセキュリティ問題またはソフトウェアバグなどの脆弱性の、仮想ネットワークにおける起こり得る影響を識別するためのものである。例えば、仮想ネットワーク内の特定のインスタンス上で動作している特定のソフトウェアプログラムに脆弱性が発見された場合、クライアントは、このインスタンスが仮想ネットワーク内の他のインスタンスと通信できるすべての方法を特定するためにクエリを作成および送信することができる。結果は、クライアントが、脆弱性の起こり得る影響を特定し、したがって状況を最もうまく処理する方法に関して決定を行うことを可能にし得る。例えば、脆弱性を有するインスタンスからミッションクリティカルなデータベースを有するインスタンスへの直接のパスがない場合、問題に、通常の保守スケジュールに従って処理される低い優先度を与えることができる。脆弱性を有するインスタンスがミッションクリティカルなデータベースを有するインスタンスに影響を与える場合、仮想ネットワークの少なくとも一部をシャットダウンして脆弱性に直ちに対処するという決定を行うことができる。
【００１６】
仮想ネットワーク検証サービスの実施形態のための別の例示的なアプリケーションは、プロバイダネットワーク環境のための仮想ネットワークに対する変更のオフラインテストにおけるものである。例えば、プロバイダネットワーク環境で仮想ネットワーキングがどのように機能するかの論理を記述する仮想ネットワーキングルールをテスト環境で使用して、仮想ネットワーキングプリミティブの変更を、当該変更が仮想ネットワークにどのような影響を与え得るかを特定するために、プロバイダネットワークに変更が適用される前にテストすることができる。
【００１７】
仮想ネットワーク検証サービスの実施形態のための別の例示的な用途は、クライアント用の仮想ネットワークを自動的に合成することにある。例えば、クライアントは、特定のネットワーキングセキュリティ標準に準拠するとともに指定されたネットワーキングプリミティブのセットを含む仮想ネットワークを確立したい場合がある。クライアントが自身で仮想ネットワークを構築およびテストする必要がないように、仮想ネットワーク検証サービスおよび仮想ネットワーキングルールを使用して制約（クライアント指定プリミティブ、ネットワーキングセキュリティ標準、仮想ネットワーキングがプロバイダネットワーク環境内でどのように機能するかの論理を記述する仮想ネットワーキングルール、など）のすべてを満たす仮想ネットワークを自動的に合成および検証することができる。例えば、標準によって課せられた制約をクエリとして提示することができ、クエリを解決して、制約を満たす仮想ネットワーク構成を決定することができ、あるいは仮想ネットワークの構成が制約に準拠するかどうかを判定することができる。その場合に、制約に準拠する仮想ネットワークが合成されてもよく、あるいは仮想ネットワークが制約に準拠するように修正されてもよい。
【００１８】
仮想ネットワーク検証サービスの実施形態の別の例示的な用途は、構成または変更がプロバイダネットワーク上で実装される前に、クライアントが新たな仮想ネットワーク構成または既存の仮想ネットワークの変更を検証することを可能にすることである。例えば、仮想ネットワーク構成は、クライアントによって生成または修正されてもよく、その構成に対する制約はクエリとして提示することが可能であって、構成がプロバイダネットワークに実装される前に、クエリを解決して、構成がクエリで提示されたクライアントの制約に準拠していることを検証してもよい。
【００１９】
図１は、いくつかの実施形態による、プロバイダネットワーク環境における仮想ネットワーク検証サービスを示す図である。クライアントにプロバイダネットワーク１００を提供するサービスプロバイダは、クライアントがプロバイダネットワーク１００上の仮想ネットワーク１１０内のリソースを確立および管理することを可能にするサービスおよびアプリケーションプログラミングインターフェース（ＡＰＩ）１０２を提供することができる。プロバイダネットワーク１００環境における仮想ネットワーク１１０は、それぞれのクライアントのプロバイダネットワークリソースのセットを含むネットワーク空間であって、クライアントのリソースのためのプロバイダネットワーク１００上の論理的に分離されたセクションとして機能するネットワーク空間として、広く定義され得る（例えば、アドレス範囲またはアドレス空間によって論理的に定義される）。仮想ネットワーク１１０は、ネットワークプロトコルに従ってプライベートまたはローカルのインターネットプロトコル（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ，ＩＰ）アドレス空間、例えばインターネットプロトコルバージョン４（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  ｖｅｒｓｉｏｎ  ４，ＩＰｖ４）アドレス範囲またはサブネット内の３２ビットＩＰアドレスを実装することができる。仮想ネットワーク１１０上のソース（例えば、計算リソース、ストレージリソース、サーバ、ホストデバイスなどのエンドポイント）には、仮想ネットワーク１１０のアドレス空間内のＩＰアドレス（例えば、３２ビットのＩＰｖ４アドレス）を割り当てることができる。プロバイダネットワーク１００上のクライアントの仮想ネットワーク１１０は、クライアントによって仮想コンピューティングリソースインスタンスとして構成されたホストデバイス上の仮想マシン（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ，ＶＭ）などのクライアントのリソースインスタンスを含む。プロバイダネットワーク上のリソースインスタンスの少なくともいくつかは、複数のオペレーティングシステムをホストコンピュータ上で同時に、すなわちホストデバイス上のＶＭとして実行することを可能にするハードウェア仮想化技術に従って実装することができる。ホストデバイス上のハイパーバイザ、または仮想マシンモニタ（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ  ｍｏｎｉｔｏｒ，ＶＭＭ）は、それぞれのホスト上のＶＭに仮想プラットフォームを提示し、ホストデバイス上のＶＭの実行を監視する。各ＶＭには１つ以上のＩＰアドレスが与えられ、それぞれのホスト上のＶＭＭは、ホスト上のＶＭのＩＰドレスを認識することができる。
【００２０】
様々なネットワークリソース、構造、および機能性（ネットワーキングプリミティブと呼ばれる）が、様々なプロバイダネットワークサービス１０２を介してプロバイダネットワーク１００のクライアントに提供され得る。クライアントは、少なくとも部分的には様々なサービスおよびＡＰＩ１０２を使用して、プロバイダネットワーク１００上でクライアントの仮想ネットワーク１１０を作成、構成、設定および修正することができる。以下は、サービス１０２によって提供され得る例示的なネットワーキングプリミティブを列挙し、限定することを意図しない。
●例えば図１、図１４および図１５に示すような仮想ネットワーク。
●リソースインスタンス（例えば、サービス１０２を使用するクライアントによる、仮想コンピューティングリソースインスタンスとして構成されたＶＭ（例えば、アプリケーションサーバ、Ｗｅｂサーバ、データベースサーバ、アクセスポイント、ゲートウェイ、ロードバランサー、ロギングサービスなどの特定のプロバイダネットワークサービスのインスタンス、ネットワーク監視および分析サービス、コードリポジトリサービス、コンテナ管理サービスなど）。
●タグ−いくつかの実施形態では、クライアントは、リソースインスタンスをタグ付けすることによって、クライアントの仮想ネットワーク内の特定のリソースインスタンス（例えば、ＶＭ）に特定の役割を割り当てることを可能にされ得る。タグは、例えば、ＰＲＯＤやＤＥＶなどのテキスト文字列であり得る。タグは、リソースインスタンスのメタデータに格納され得る。タグは、標準プロバイダネットワーク定義タグおよび／またはクライアント定義タグを含み得る。リソースインスタンスの例示的な役割には、セキュアソケットシェル（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｓｈｅｌｌ，ＳＳＨ）アクセスインスタンス、ロギングサービスインスタンス、コードリポジトリインスタンス、本番リソースインスタンスおよび開発リソースインスタンスが含まれるが、これらに限定されない。
●仮想ネットワークエンドポイント（例えば、計算リソース、ストレージリソース、サーバ、ホストデバイスなどのエンドポイント）。
●仮想ネットワークピアリング接続。いくつかの実施形態では、クライアントはプロバイダネットワーク上に２つ以上の仮想ネットワークを確立することができる。仮想ネットワークがインターネットなどの外部ネットワークを横断する必要なしにプロバイダネットワークを介して安全に通信することを可能にするピアリング接続が、仮想ネットワーク間で確立されてもよい。
●仮想ネットワークの外部のエンティティから仮想ネットワークのリソースの少なくともいくつかへのアクセスを提供するインターネットゲートウェイ。
●例えば、仮想ネットワーク上のリソースインスタンスのグループまたはクラスタ間でネットワークトラフィックを分散する仮想化ロードバランサインスタンスである、ロードバランサ。
●ネットワークアドレス変換（Ｎｅｔｗｏｒｋ  Ａｄｄｒｅｓｓ  Ｔｒａｎｓｌａｔｉｏｎ，ＮＡＴ）インスタンス。
●ＮＡＴゲートウェイ。
●ネットワークアクセスコントロールリスト（Ｎｅｔｗｏｒｋ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ  Ｌｉｓｔ，ＡＣＬ）。
●ネットワークインターフェース。
●ルートテーブル。
●サブネット−仮想ネットワークは、必ずしもそうとは限らないが、例えば図１４および図１５に示すように、２つ以上のサブネットワーク、またはサブネットに細分することができる。
●セキュリティグループ−いくつかの実施形態では、プロバイダネットワークは、例えば図１５に示すように、クライアントが、サブネット内またはサブネット間で、クライアントの仮想ネットワーク内の仮想セキュリティグループを確立および管理することを可能にし得る。セキュリティグループは、リソースインスタンスを論理的にグループ化したものであり、セキュリティグループルールに従ってセキュリティグループ内の１つ以上のリソースインスタンスに到達することを可能にされたトラフィックを制御する仮想ファイアウォールとして機能する。
●地域−プロバイダネットワークサービスおよびリソース（例えば、仮想ネットワーク、ＶＭインスタンス、データストレージ、ゲートウェイ、ロードバランサなど）は、複数の地理的な場所または地域でサポートされ得る。本明細書で使用されるとき、地域は、プロバイダネットワークサービスをサポートし、その中でクライアントがリソースを起動および構成することができる別個の地理的領域である。サービスおよびＡＰＩにより、クライアントは１つ以上の地域でクライアントのリソースを起動または複製することが可能になり得る。
●ゾーン−各地域には、本明細書でゾーンと呼ばれる複数の孤立した場所が含まれ得る。クライアントのリソースインスタンスは、１つのゾーン内のリソースインスタンスに障害が発生した場合に、別のゾーン内のインスタンスが要求を処理できるように、地域内の複数のゾーンに分散させることができる。
【００２１】
いくつかの実施形態では、クライアントは、それぞれのプロバイダネットワークサービス１０２を使用して、上記のネットワーキングプリミティブのうちの１つ以上のインスタンスを含む仮想ネットワーク１１０をプロバイダネットワーク１００上に確立することができる。図１は、プロバイダネットワーク１００上の例示的な仮想ネットワーク１１０を示し、限定することを意図していない。クライアントの仮想ネットワーク１１０は、仮想ネットワークの機能を実装するリソースインスタンス１１８（例えば、ＶＭ）、例えばアプリケーションサーバ、ウェブサーバ、データベースサーバなどを含むことができる。リソースインスタンス１１８は、インスタンス１１８Ａおよび１１８Ｂのグループまたはクラスタを含むことができ、例えば、インスタンス１１８Ａは本番環境を表すことができ、インスタンス１１８Ｂは開発環境を表すことができる。いくつかの実施形態では、インスタンス１１８Ａおよび１１８Ｂは異なるサブネットおよび／またはセキュリティグループ内にあり得る。
【００２２】
クライアントの仮想ネットワーク１１０はまた、アプリケーションおよびオペレーティングシステムロギングサービス、ネットワーク監視および分析サービス、コードリポジトリサービス、コンテナ管理サービスなど、クライアントの仮想ネットワーク１１０内に特定のプロバイダネットワークサービスを実装するサービスインスタンス１１６（例えば、ＶＭ）を含み得る。
【００２３】
クライアントの仮想ネットワーク１１０はまた、クライアントネットワーク１８０上のデバイス１８２および他の外部エンティティ１９０がインターネットなどの中間ネットワーク１５０を介して仮想ネットワーク１１０内のリソースおよびエンドポイントと通信することを可能にするアクセスインスタンスを含み得る。アクセスインスタンスは、例えば、ロードバランサおよびゲートウェイ（インターネットゲートウェイ、ＮＡＴゲートウェイなど）を含み得る。この例に示されるように、いくつかの実施形態では、アクセスインスタンスはＨＴＴＰＳアクセスインスタンス１１４およびＳＳＨアクセスインスタンス１１２を含み得る。ＨＴＴＰＳアクセスインスタンス１１４は、ＨＴＴＰＳプロトコルを使用して外部エンティティ１９０からリソースインスタンス１１８Ａおよび１１８Ｂにそれぞれアクセスするためのインスタンス１１４Ａおよび１１４Ｂ、ならびにＨＴＴＰＳプロトコルを使用してクライアントネットワーク１８０上のデバイス１８２からサービスインスタンス１１６にアクセスするためのインスタンス１１４Ｃを含み得る。いくつかの実施形態では、クライアントは、例えばＳＳＨを使用して、クライアントネットワーク１８０上のデバイス１８２（例えば、コンソール）から仮想ネットワーク１１０内のリソースインスタンスにアクセスすることができる。いくつかの実施形態では、ＳＳＨを使用してリソースインスタンスにアクセスするために、クライアントにインスタンスのＩＰアドレスとキーとが与えられる。クライアントは提供された情報を使用してインスタンスに直接ＳＳＨ接続することができる。いくつかの実施形態では、ＳＳＨアクセスインスタンス１１２は、クライアントがＳＳＨプロトコルを使用してクライアントネットワーク１８０上のデバイス１８２（例えば、コンソール）から仮想ネットワーク１１０上のクライアントのリソースインスタンスにアクセスすることを可能にするプロキシとして機能し得る。例えば、ＳＳＨアクセスインスタンス１１２は、クライアントの仮想ネットワークの公にアクセス可能なサブネット内にあり得る。クライアントのリソースインスタンスの少なくとも一部が、公にアクセスできないサブネットにある場合がある。これらのリソースインスタンスは、ＳＳＨアクセスインスタンス１１２に接続されたセキュリティグループからのＳＳＨアクセスを許可するセキュリティグループ内にあり得る。クライアントは、クライアントのリソースインスタンスに接続するためにＳＳＨアクセスインスタンス１１２に接続することができる。
【００２４】
図１に示すように、プロバイダネットワーク１００は、プロバイダネットワーク１００上の１つ以上のコンピューティングデバイスによって実施される仮想ネットワーク検証サービス１３０を含み得る。いくつかの実施形態では、仮想ネットワーク検証サービス１３０のインスタンスは、例えば図１に示すようにＳＳＨアクセスインスタンス１１２によって、クライアントの仮想ネットワーク１００上に実装することができる。仮想ネットワーク検証サービス１３０は、宣言的論理プログラミング言語（例えば、Ｄａｔａｌｏｇ）を利用して、クライアントがプロバイダネットワーク上の仮想ネットワークについて再帰クエリを含むクエリを制約問題として表現することを可能にし、制約ソルバーエンジンを使用してクエリを解決することによりクエリに対する結果を提供する。図２は、いくつかの実施形態による仮想ネットワーク検証サービス１３０を示す。
【００２５】
図１を参照すると、仮想ネットワーク検証サービス１３０において、サービス１０２によって提供されるネットワーキングプリミティブのための仮想ネットワーキングセマンティクスおよび論理は、論理プログラミング言語に従って仮想ネットワーキングルールのセットとして表現およびエンコードされ得る。仮想ネットワーキングルールは、仮想ネットワーク１１０に実装されている様々なネットワーキングプリミティブ間の共通の関係および相互作用を表現するルールを含むことができる。仮想ネットワーキングルールは、ネットワーキングセキュリティ標準（例えば、ＰＣＩ、ＦｅｄＲＡＭＰ、ＨＩＰＰＡなど）、またはクライアントの内部セキュリティ標準もしくは他のネットワーキング要件をエンコードするルールも組み込むことができる。
【００２６】
仮想ネットワーク検証サービス１３０は、クライアントの仮想ネットワーク１１０に対する記述的情報を取得する。記述的情報は、例えば、仮想ネットワーク１１０に実装されたネットワーキングプリミティブのインスタンスを識別し、様々なインスタンスの記述（例えば、インスタンスに割り当てられた役割、インスタンスに付与された、またはインスタンスに拒否された許可、インスタンスに割り当てられたＩＰアドレスなど）を含み、インスタンス間の関係（例えば、インスタンス間のパス）を記述し、そして外部エンティティ１９０へのインターフェースまたはアクセスポイントを記述する。いくつかの実施形態では、クライアントは、図３に示されるように、仮想ネットワーク１１０から記述的情報を取得し、その記述的情報を仮想ネットワーク検証サービス１３０に提供することができる。あるいは、いくつかの実施形態では、クライアントは、図４に示すように、仮想ネットワーク検証サービス１３０が仮想ネットワーク１１０から記述的情報を直接取得できるようにするために、仮想ネットワーク検証サービス１３０に許可を与えてもよい。仮想ネットワーク検証サービス１３０は、宣言的論理プログラミング言語に従って記述的情報を論理プログラムとしてエンコードすることができる。
【００２７】
仮想ネットワーク検証サービス１３０は、宣言型論理プログラミング言語を利用し、クライアントがプロバイダネットワーク１００上のクライアントの仮想ネットワーク１１０についてのクエリを、例えばクライアントネットワーク１８０内のクライアントデバイス１８２上のサービス１３０へのグラフィカルインターフェースまたはコマンドラインインターフェース（ＣＬＩ）を介して、提示できるようにする。いくつかの実施形態において使用され得る例示的な論理プログラミング言語は、Ｄａｔａｌｏｇである。他の宣言型論理プログラミング言語が使用されてもよいことに留意されたい。いくつかの実施形態では、クエリは、ＳＱＬに幾分類似している可能性があるがネットワーク構成に適用される表現可能なクエリ言語で提示され得る。あるいは、いくつかの実施形態では、クエリは人間に優しい方法で提示されてもよい。クエリは、生成された論理プログラムに関する定理に対応し、制約問題を表現する。仮想ネットワーク検証サービス１３０は、制約解決エンジンを使用して、エンコードされたルールに従って、エンコードされた記述に対するクエリによって表現された制約問題を解決し、その結果をクライアントに提供する。いくつかの実施形態では、仮想ネットワーク検証サービス１３０は、クエリを提示するためのＡＰＩおよびインターフェースを提供することができる。いくつかの実施形態では、仮想ネットワーク検証サービス１３０は、クライアントがＡＰＩおよびインターフェースを介して選択することができる標準クエリのセットを提供することができる。いくつかの実施形態では、仮想ネットワーク検証サービス１３０は、クライアントがＡＰＩおよびインターフェースを介してカスタムクエリを作成および送信することを可能にし得る。
【００２８】
以下は、図１に示される例示的な仮想ネットワークに関してクライアントによって提示され得る例示的なクエリを説明するものであり、限定することを意図するものではない。
【００２９】
仮想ネットワーク１１０のいくつかの実施形態では、仮想ネットワーク１１０上のリソースは、クライアントネットワーク１８０上の指定されたエンドポイントからＳＳＨアクセスインスタンス１１２を通じてＳＳＨを介してのみアクセス可能であるべきである。したがって、クライアントは、仮想ネットワーク１１０内のどのインスタンスも中間ネットワーク１５０上のエンドポイントからＳＳＨを介してアクセス可能ではないことを検証したい場合がある。これを検証するための例示的なクエリは、次のように表現され得る。
すべてのインスタンス：
！ｉｎｔｅｒｎｅｔ−ｃａｎ−ｓｓｈ−ｔｏ−ｉｎｓｔａｎｃｅ（インスタンス）
【００３０】
クライアントはまた、クライアントネットワーク１８０から、仮想ネットワーク１１０上のＳＳＨアクセスインスタンス１１２がＳＳＨを介してアクセス可能であることを検証したい場合もある。前述のように、いくつかの実施形態では、仮想ネットワーク１１０内のクライアントのインスタンスの少なくともいくつかに特定の役割を割り当てることができ、役割は、インスタンスのメタデータに格納されているタグによって示すことができる。タグは記述的情報に含まれてもよく、したがって仮想ネットワーク１１０のエンコードされた記述に示されてもよい。したがって、いくつかの実施形態では、タグは、例えば、特定の役割を割り当てられたインスタンスが実際にそれらの役割を実行できることを検証するために、クエリで使用され得る。クライアントネットワーク１８０から、仮想ネットワーク１１０上のＳＳＨアクセスインスタンス１１２がＳＳＨを介してアクセス可能であることを検証するための例示的なクエリは、次のように表現され得る。
すべてのインスタンス：
ａｔｏｍ／ｉｎｓｔａｎｃｅ−ｔａｇ（インスタンス、タグキー／名前、タグ値／ＳＳＨＡｃｃｅｓｓＩｎｓｔａｎｃｅ）
＜＝＞ＣｌｉｅｎｔＮｅｔｗｏｒｋ−ｃａｎ−ｓｓｈ−ｔｏ−ｉｎｓｔａｎｃｅ（インスタンス）
【００３１】
上記の式は、制約ソルバーによって評価されると、仮想ネットワーク１１０上のすべてのインスタンスをチェックし、  ＳＳＨＡｃｃｅｓｓＩｎｓｔａｎｃｅとしてタグ付けされたインスタンスについては、制約ソルバーは、そのインスタンスがクライアントネットワーク１８０からＳＳＨを介して到達可能であるかどうかを判定し、そうである場合にＴＲＵＥを返し、そうでない場合にＦＡＬＳＥを返す。
【００３２】
以下は、仮想ネットワーク検証サービス１３０に適切なクエリを提示することによってクライアントが検証することができる仮想ネットワーク１１０の態様のいくつかの他の例を列挙したものであり、限定を意図するものではない。
●ＳＳＨを介してクライアントネットワーク１８０からＳＳＨアクセスインスタンス１１２のみがアクセス可能である。
●リソースインスタンス１１８Ａおよび１１８Ｂは、中間ネットワーク１５０Ｂ（例えばインターネット）を介して外部エンティティ１９０によってそれぞれのＨＴＴＰＳアクセスインスタンス１１４Ａおよび１１４Ｂを通して到達可能である。
●リソースインスタンス１１８Ａおよび１１８Ｂは、要求を認証するために中間ネットワーク１５０Ｂに到達することができる。
●リソースインスタンス１１８Ａおよび１１８Ｂは特定のサービスインスタンス１１６に書き込むことができる。
●特定のサービスインスタンス１１６は、ＨＴＴＰＳアクセスインスタンス１１４Ｃを介してクライアントネットワーク１８０から到達することができる。
●指定サービスインスタンス１１６は、仮想ネットワーク１１０上の指定エンドポイントに到達することができる。
●すべてのインスタンスは、指定されたタグのセットのうちの１つでタグ付けされる。
【００３３】
図２は、いくつかの実施形態による、例示的な仮想ネットワーク検証サービスの構成要素および動作を示す図である。仮想ネットワーク検証サービス２３０は、プロバイダネットワーク上の１つ以上のコンピューティングデバイスによって実装することができる。いくつかの実施形態では、仮想ネットワーク検証サービス２３０のインスタンスは、例えば図１に示すようにＳＳＨアクセスインスタンス１１２によって、クライアントの仮想ネットワーク上に実装することができる。図２に示すように、いくつかの実施形態では、仮想ネットワーク検証サービス２３０は、サービスエンジン２３４、制約ソルバー２３６エンジンおよびＡＰＩ２３２を含むことができる。サービスエンジン２３４は、ルールエンコーディング２５０ロジック、クエリ処理２６０ロジックおよび記述エンコーディング２７０ロジックを実装してもよいが、それらに限定されない。制約ソルバー２３６は、エンコードされた仮想ネットワーキングルール２３８に基づいてエンコードされた記述２４０によって表される仮想ネットワークについての再帰クエリを含むクエリを解決するように構成された宣言型論理プログラミング言語エンジンである。ＡＰＩ２３２は、クライアントを含むがこれに限定されない外部エンティティにサービス２１０の機能を公開する。
【００３４】
図２の（１Ａ）および（１Ｂ）において、サービス２３０のルールエンコーディング２５０論理は、仮想ネットワークに適用されるべき仮想ネットワーキングルール２３８を取得（１Ａ）およびエンコード（１Ｂ）し得る。エンコードされるルールは、サービスプロバイダから、クライアントから、または他の外部のエンティティもしくは情報源から取得することができる。例示的なエンコードされたルール２３８は、本明細書の後半で提供される。
【００３５】
実施形態では、仮想ネットワークで使用されるネットワーキングプリミティブのための仮想ネットワーキングセマンティクスおよび論理は、論理プログラミング言語に従って仮想ネットワーキングルール２３８のセットとして取得およびエンコードされ得る。仮想ネットワーキングルール２３８は、仮想ネットワークに実装することができるとともにプロバイダネットワークのサービスおよびＡＰＩによって提供される様々なネットワーキングプリミティブ間の共通の関係および相互作用を表現するルールを含むことができる。したがって、実施形態は、プロバイダネットワーク環境において仮想ネットワーキングがどのように機能するかの論理を記述する仮想ネットワーキングルール２３８を１つのロケーションまたはファイルに提供することができる。
【００３６】
いくつかの実施形態では、仮想ネットワーク検証サービス２３０は、ペイメントカード業界データセキュリティ標準（ＰＣＩ  ＤＳＳ）、連邦リスクおよび認可管理プログラム（ＦｅｄＲＡＭＰ）標準、または医療保険の相互運用性と説明責任に関する法律（ＨＩＰＰＡ）標準などのネットワーキングセキュリティ標準のためのルールを取得およびエンコードすることができ、したがって、ネットワーキングセキュリティ標準を検証するためのルールを含む仮想ネットワーキングルール２３８のセットを実装することができる。いくつかの実施形態では、仮想ネットワーク検証サービス２３０は、クライアントの仮想ネットワークが特定の標準に準拠していることを検証するためにクライアントによって選択的に使用され得る異なるネットワーキングセキュリティ標準をそれぞれエンコードする仮想ネットワーキングルール２３８の２つ以上の異なるセットを提供し得る。いくつかの実施形態では、仮想ネットワーク検証サービス２３０は、クライアントの内部セキュリティ標準、ベストプラクティスまたは他のネットワーキング要件をエンコードするカスタムルールをクライアントが定義できるようにし、特定の仮想ネットワークに適用するためのクライアントによって定義されたカスタムルールを含む仮想ネットワーキングルール２３８のセットが実装され得る。
【００３７】
図２の（２）において、サービス２３０のクエリ処理２６０ロジックは、仮想ネットワーキングルール２３８に従って仮想ネットワークについて解決されるべきクエリをクライアントから受信することができる。いくつかの実施形態では、クライアントは、グラフィカルインターフェースまたはコマンドラインインターフェース（ＣＬＩ）を介して、プロバイダネットワーク上でクライアントの仮想ネットワークについてのクエリをサービスＡＰＩ２３２に提供することができる。いくつかの実施形態では、クエリは、ＳＱＬに類似しているがネットワーク構成に適用される表現言語で提示され得る。あるいは、いくつかの実施形態では、クエリはヒューマンフレンドリーな方法で提示されてもよい。例示的なクエリは、図１を参照して上述されている。
【００３８】
図２の（３Ａ）および（３Ｂ）において、サービス２３０の記述エンコーディング２７０ロジックは、仮想ネットワークの記述を取得（３Ａ）およびエンコード（３Ｂ）することができる。いくつかの実施形態では、サービス２３０の記述エンコーディング２７０ロジックは、仮想ネットワークについての記述的情報（３Ａ）を取得し、記述エンコーディング２７０ロジックが受け取る各クエリについて、クエリを解決するときに記述２４０が最新のものであることを保証するためのエンコードされた記述２４０として記述的情報をエンコード（３Ｂ）する。しかし、いくつかの実施形態では、記述的エンコーディング２７０ロジックは、仮想ネットワークに関する記述的情報を取得およびエンコードし、エンコードされた記述２４０を使用して２つ以上のクエリを処理することができる。図２の（３Ａ）において、サービス２３０の記述エンコーディング２７０ロジックは、クライアントの仮想ネットワークに対する記述的情報を取得する。記述的情報は、例えば、仮想ネットワークに実装されているネットワーキングプリミティブのインスタンスを識別し、様々なインスタンスの記述（例えば、インスタンスに割り当てられた役割、インスタンスに付与または拒否された許可、インスタンスに割り当てられたＩＰアドレスなど）を含み、インスタンス間の関係（例えば、インスタンス間のパスなど）を記述し、外部エンティティへのインターフェースまたはアクセスポイントを記述する。いくつかの実施形態では、クライアントは、図３に示すように、仮想ネットワークから記述的情報を取得し、その記述的情報をクエリとともに仮想ネットワーク検証サービス２３０に提供することができる。あるいは、いくつかの実施形態では、クライアントは、図４に示すように、仮想ネットワーク検証サービス２３０がクエリに応答して仮想ネットワークから記述的情報を直接取得することを可能にするために仮想ネットワーク検証サービス２３０に許可を与え得る。図２の（３Ｂ）において、サービス２３０の記述エンコーディング２７０ロジックは、宣言型論理プログラミング言語に従って、得られた記述的情報を論理プログラムとしてエンコードすることができる。
【００３９】
図２の（４）において、サービス２３０のクエリ処理２６０ロジックは、クエリを制約ソルバー２３６に提供することができる。制約ソルバー２３６は、エンコードされたルール２３８に従ってエンコードされた記述２４０に対するクエリによって表現された制約問題を解決し、（５Ａ）において、結果（例えば、クエリによって提示された質問に対する回答）をクエリ処理２６０に提供する。そして、（５Ｂ）で、フォーマットされた結果をＡＰＩ２３２を介してクライアントに提供する。フォーマットされた結果は、テキスト結果（例えば、「ＹＥＳ」、「ＮＯ」、「ＴＲＵＥ」または「ＦＡＬＳＥ」などのクエリによって課された制約に対する回答を表すテキスト、クエリによって提示された制約を満たすインスタンスのリスト）および／またはグラフィカル結果（例えば、クエリを解決することによって決定された２つ以上のインスタンス間の関係のグラフィカル表現、クエリを解決することによって識別されたインスタンスを識別する仮想ネットワークのグラフィカル表現など）を含み得る。
【００４０】
図３は、いくつかの実施形態による、クエリを処理して結果をクライアントに提供する仮想ネットワーク検証サービスに仮想ネットワークおよびクエリについての記述的情報を提供するクライアントを示す図である。図３の（１）において、例えば図１に示すようなクライアントネットワーク上のクライアントデバイス３８２中のクライアントは、プロバイダネットワーク上のクライアントの仮想ネットワーク３１０から記述的情報を取得することができる。例えば、いくつかの実施形態では、仮想ネットワークを記述するメタデータを保持するプロバイダネットワークの１つ以上のプロバイダネットワークサービスは、クライアントが仮想ネットワーク３１０上のインスタンスに対する記述的情報を要求できるようにそれぞれのＡＰＩを介してＤＥＳＣＲＩＢＥまたは類似のコールを提供してもよい。図３の（２）において、クライアントは、サービスＡＰＩ３３２を介してプロバイダネットワーク検証サービス３３０のサービスエンジン３３４にクエリおよび記述的情報を提供することができる。図３の（３Ａ）において、サービスエンジン３３４は、取得した記述的情報を宣言型論理プログラミング言語に従ってエンコードし、クエリおよびエンコードされた記述を制約ソルバー３３６に提供することができる。制約ソルバー３３６は、エンコードされた仮想ネットワーキングルール３３８に従って、エンコードされた記述に対するクエリを解決し、（３Ｂ）において結果（例えば、クエリによって提示された質問に対する回答）をサービスエンジン３３４に提供し、サービスエンジン３３４は結果をフォーマットし、フォーマットされた結果を（４）においてＡＰＩ３３２を介してクライアントに提供する。
【００４１】
図４は、いくつかの実施形態による、仮想ネットワークから記述的情報を取得し、クエリを処理し、結果をクライアントに提供する仮想ネットワーク検証サービスに対して、クエリと仮想ネットワークへのアクセス許可とを提供するクライアントを示す図である。図４の（１）で、クライアントは、プロバイダネットワークとのクライアントアカウント４８８を介して、仮想ネットワーク検証サービス４３０に許可を提供して、クライアントの仮想ネットワーク４１０から記述的情報を取得することができる。例えば、いくつかの実施形態では、仮想ネットワークを記述するメタデータを保持するプロバイダネットワークの１つ以上のプロバイダネットワークサービスは、クライアントが仮想ネットワーク４１０上のインスタンスに対する記述的情報を要求することを可能にするそれぞれのＡＰＩを介してＤＥＳＣＲＩＢＥまたは類似のコールを提供してもよい。クライアントは、サービス４３０が仮想ネットワーク４１０用のプロバイダネットワークサービスＡＰＩへのＤＥＳＣＲＩＢＥコールを実行できるようにするために、サービス４３０に許可を与えることができる。いくつかの実施形態では、クライアントは、仮想ネットワーク４１０内のインスタンスのメタデータに対する読み取り許可のみを与え、メタデータまたは仮想ネットワーク４１０上の他のデータ、または仮想ネットワーク４１０を介してアクセス可能な他のデータに対する書き込みまたは変更特権を与えない。図４の（２）において、クライアントは、サービスＡＰＩ４３２を介してプロバイダネットワーク検証サービス４３０のサービスエンジン４３４にクエリを提供することができる。図４の（３）において、クエリに応答して、サービスエンジン４３４は、例えば、それぞれのＡＰＩを介して仮想ネットワークを記述するメタデータを保持する１つ以上のプロバイダネットワークサービスへのＤＥＳＣＲＩＢＥコールを用いて、クライアントの仮想ネットワーク４１０から記述的情報を得ることができる。図４の（４Ａ）において、サービスエンジン４３４は、取得された記述的情報を宣言型論理プログラミング言語に従ってエンコードし、クエリおよびエンコードされた記述を制約ソルバー４３６に提供し得る。制約ソルバー４３６は、エンコードされた仮想ネットワーキングルール４３８に従って、エンコードされた記述についてのクエリを解決し、（４Ｂ）で結果（例えば、クエリによって提示された質問に対する回答）をサービスエンジン４３４に提供し、フォーマットされた結果を（５）でＡＰＩ４３２を介してクライアントに提供する。
【００４２】
図５は、いくつかの実施形態による、仮想ネットワークに関する情報をプロバイダネットワークのクライアントに提供するための方法のハイレベルフローチャートである。１０００に示されるように、仮想ネットワーキングルールが取得およびエンコードされ得る。エンコードされるルールは、サービスプロバイダから、クライアントから、または他の外部のエンティティもしくは情報源から取得することができる。仮想ネットワーキングルールは、プロバイダネットワーク上の仮想ネットワークで使用されるネットワーキングプリミティブのための仮想ネットワーキングセマンティクスおよび論理を表現することができる。いくつかの実施形態では、仮想ネットワーキングルールは、ペイメントカード業界データセキュリティ基準（ＰＣＩ  ＤＳＳ）、連邦リスクおよび認可管理プログラム（ＦｅｄＲＡＭＰ）規格、または医療保険の相互運用性と説明責任に関する法律（ＨＩＰＰＡ）などのネットワーキングセキュリティ標準のためのルールを表す。いくつかの実施形態では、仮想ネットワーキングルールは、クライアントの内部セキュリティ標準または他のネットワーキング要件を表すクライアント定義ルールを含み得る。例示的なエンコードされたルールは、本書類において後で提供される。
【００４３】
１０１０に示すように、仮想ネットワーク検証サービスは、クライアントから仮想ネットワークについてのクエリを受信することができる。実施形態では、仮想ネットワーク検証サービスは、コンソール上のサービスへのグラフィカルインターフェースを介して、またはコマンドラインインターフェース（ＣＬＩ）を介して、クライアントによって使用されて、プロバイダネットワーク上のクライアントの仮想ネットワークについての（再帰的クエリを含むクエリとして提示される）質問に対する回答を得ることができる。いくつかの実施形態では、クエリは、ＳＱＬに類似しているがネットワーク構成に適用される表現言語で提示され得る。あるいは、いくつかの実施形態では、クエリはヒューマンフレンドリーな方法で提示されてもよい。例示的なクエリは、図１を参照して上述されている。
【００４４】
１０２０に示されるように、仮想ネットワーク検証サービスは、仮想ネットワークについての記述的情報を取得およびエンコードすることができる。記述的情報は、例えば、仮想ネットワークに実装されたネットワーキングプリミティブのインスタンスを識別し、インスタンスの記述（例えば、計算インスタンスに割り当てられた役割、リソースインスタンスに付与または拒否された許可、インスタンスに割り当てられたＩＰアドレスなど）を含み、インスタンス間の関係（例えば、インスタンス間のパス）を記述し、そして外部エンティティ（例えば、仮想ネットワークの外部のエンティティによってアクセスされ得る計算インスタンス）へのインターフェースまたはアクセスポイントを記述する。いくつかの実施形態では、クライアントは、図６に示すように、仮想ネットワークから記述的情報を取得し、記述的情報を仮想ネットワーク検証サービスに提供することができる。あるいは、いくつかの実施形態では、クライアントは、図７に示すように、仮想ネットワーク検証サービスが仮想ネットワークから記述的情報を取得することを可能にするために仮想ネットワーク検証サービスに許可を与えてもよい。仮想ネットワーク検証サービスは、記述的論理プログラミング言語（例えば、Ｄａｔａｌｏｇ）に従って記述的情報を論理プログラムとしてエンコードすることができる。
【００４５】
１０３０に示されるように、仮想ネットワーク検証サービスは、宣言型論理プログラミング言語（例えば、Ｄａｔａｌｏｇ）制約ソルバーエンジンを使用して、エンコードされた仮想ネットワーキングルールに従って、エンコードされた記述に対するクエリを解決し得る。１０４０に示すように、クエリ解決の結果（例えば、クエリによって提示された質問に対する回答）をフォーマットしてクライアントに提供することができる。フォーマットされた結果は、テキスト結果（例えば、「ＹＥＳ」、「ＮＯ」、「ＴＲＵＥ」、または「ＦＡＬＳＥ」などのクエリによって課された制約に対する回答を表すテキスト、クエリによって提示された制約を満たすインスタンスのリストなど）および／またはグラフィカル結果（例えば、クエリを解決することによって決定された２つ以上のインスタンス間の関係のグラフィカル表現、クエリを解決することによって識別されたインスタンスを識別する仮想ネットワークのグラフィカル表現など）を含み得る。
【００４６】
要素１０４０から要素１０１０に戻る矢印によって示されるように、要素１０１０〜１０４０は、クライアントの仮想ネットワークについての複数のクエリを提示および解決するために繰り返し実行され得る。いくつかの実施形態では、例えば、クライアントは、一連のクエリを含むスクリプトを書いて、そのスクリプトを実行してクエリを仮想ネットワーク検証サービスに提示し、そこから結果を受け取ることができる。図５に示すように、いくつかの実施形態では、仮想ネットワーク検証サービスは、仮想ネットワークについての記述的情報を取得し、仮想ネットワーク検証サービスが受け取る各クエリについて、クエリを解決するときに記述が最新のものであることを保証するためのエンコードされた記述として記述的情報をエンコードすることができる。しかしながら、いくつかの実施形態では、仮想ネットワーク検証サービスは、仮想ネットワークについての記述的情報を取得してエンコードし、エンコードされた記述を使用して２つ以上のクエリを処理することができる。
【００４７】
図６は、いくつかの実施形態による、仮想ネットワークについての情報をプロバイダネットワークのクライアントに提供する方法のフローチャートであり、クライアントは、記述的情報およびクエリを仮想ネットワーク検証サービスに提供する。１１００に示されるように、クライアントは、例えばプロバイダネットワークサービスＡＰＩによって提供されるＤＥＳＣＲＩＢＥコールを使用して、仮想ネットワークから記述的情報を取得する。１１１０に示すように、クライアントは仮想ネットワーク検証サービスにクエリおよび記述的情報を送信する。１１２０に示すように、検証サービスは仮想ネットワークについての記述的情報をエンコードする。１１３０に示されるように、検証サービスは、制約ソルバーエンジンを使用して、エンコードされた仮想ネットワークルールに従って、エンコードされた記述に対するクエリを解決する。１１４０に示されるように、仮想ネットワーク検証サービスは、クエリ解決の結果をクライアントに提供する。
【００４８】
図７は、いくつかの実施形態による、仮想ネットワークについての情報をプロバイダネットワークのクライアントに提供する方法のフローチャートであり、クライアントは、仮想ネットワークにアクセスするための記述的情報および許可を仮想ネットワーク検証サービスに提供する。１２００に示すように、クライアントは、サービスが仮想ネットワークから記述的情報を取得することを可能にする許可、例えば仮想ネットワークを記述するメタデータを保持する１つ以上のプロバイダネットワークサービスへのＤＥＳＣＲＩＢＥコールを使用する許可を仮想ネットワーク検証サービスに与える。１２１０に示すように、クライアントは仮想ネットワーク検証サービスにクエリを送信する。１２２０に示すように、仮想ネットワーク検証サービスは、例えば仮想ネットワークを記述するメタデータを保持する１つ以上のプロバイダネットワークサービスへのＤＥＳＣＲＩＢＥコールを使用して、仮想ネットワークから記述的情報を取得する。１２３０に示すように、仮想ネットワーク検証サービスは仮想ネットワークについての記述的情報をエンコードする。１２４０に示すように、仮想ネットワーク検証サービスは、制約ソルバーエンジンを使用して、ルールに従って、エンコードされた記述に対するクエリを解決する。１２５０に示されるように、仮想ネットワーク検証サービスは、クエリ解決の結果をクライアントに提供する。
【００４９】
図８は、いくつかの実施形態による、２つ以上のピア仮想ネットワークを含むプロバイダネットワーク環境におけるクライアントの仮想ネットワーク実装を示す図である。図８は、本明細書で説明されるように仮想ネットワーク検証サービス２０３０において使用され得る例示的な仮想ネットワークルールを説明するために部分的に提供される。図８に示すように、プロバイダネットワーク２０００上のクライアントの仮想ネットワーク実装形態２０１０は、２つ以上の仮想ネットワーク２０２０を含み得る。図８は、クライアントの仮想ネットワーク実装形態２０１０における２つの仮想ネットワーク２０２０Ａおよび２０２０Ｂを示す。いくつかの実施形態では、仮想ネットワーク２０２０Ａおよび２０２０Ｂはそれぞれ１つ以上のサブネットを含むことができ、セキュリティグループは仮想ネットワーク２０２０Ａおよび２０２０Ｂ内に確立することができる（例えば、図１４および図１５を参照）。ネットワークエンドポイント２０２２Ａおよび２０２２Ｂは、それぞれの仮想ネットワーク２０２０Ａおよび２０２０Ｂにおけるネットワーキングプリミティブの様々なインスタンス（例えば、リソースインスタンス）のネットワークインターフェースを表す。仮想ネットワーク２０２０Ａおよび２０２０Ｂ上のインスタンスがインターネットなどの外部ネットワーク２０５０を横断する必要なしにプロバイダネットワーク２０００を介して安全に通信することを可能にするピアリング接続２０２４が、仮想ネットワーク２０２０Ａと２０２０Ｂとの間のプロバイダネットワーク２０００を介して確立される。
【００５０】
「プライベートルーティング」の例示的なルールを以下に示す。これらの例は限定的であることを意図しない。これらの例で使用される「ルーティング」は、ファイアウォールがない場合、ＩＰパケットが１つのエンドポイント２０２２から別のエンドポイント２０２２に流れ得ることを意味する。仮想ネットワーク実装形態２０１０内の２つのエンドポイント２０２２間のルーティングは、「プライベートルーティング」と呼ばれることがある。仮想ネットワーク実装形態２０１０において両方のエンドポイント２０２２が同じ仮想ネットワーク２０２０にあるか異なる仮想ネットワーク２０２０にあるかによって、ルールは異なり得る。以下は、仮想ネットワーク実装形態２０１０においてパケットが２つのエンドポイント２０２２間を流れ得るかどうかを判定するための記述的論理プログラミング言語に従う例示的なルールを説明する。
ｒｏｕｔａｂｌｅ−ｐｒｉｖａｔｅ：ｅｎｄｐｏｉｎｔ−＞ｅｎｄｐｏｉｎｔ−＞ｔｙｐｅ
−：ｒｏｕｔａｂｌｅ−ｐｒｉｖａｔｅ  Ｅｎｄｐｏｉｎｔ１  Ｅｎｄｐｏｉｎｔ２
＜−ｒｏｕｔａｂｌｅ−ｐｒｉｖａｔｅ−ｏｎｅ−ｗａｙ  Ｅｎｄｐｏｉｎｔ１  Ｅｎｄｐｏｉｎｔ２
＜−ｒｏｕｔａｂｌｅ−ｐｒｉｖａｔｅ−ｏｎｅ−ｗａｙ  Ｅｎｄｐｏｉｎｔ２  Ｅｎｄｐｏｉｎｔ１
【００５１】
最初の行はエンドポイントのタイプを定義する。Ｅｎｄｐｏｉｎｔ１およびＥｎｄｐｏｉｎｔ２は変数である。（ｒｏｕｔａｂｌｅ−ｐｒｉｖａｔｅ−ｏｎｅ−ｗａｙ  Ｅｎｄｐｏｉｎｔ１  Ｅｎｄｐｏｉｎｔ２）および（ｒｏｕｔａｂｌｅ−ｐｒｉｖａｔｅ−ｏｎｅ−ｗａｙ  Ｅｎｄｐｏｉｎｔ２  Ｅｎｄｐｏｉｎｔ１）が両方とも真（そうでない場合は偽）の場合、ルール（ｒｏｕｔａｂｌｅ−ｐｒｉｖａｔｅ  Ｅｎｄｐｏｉｎｔ１  Ｅｎｄｐｏｉｎｔ２）は真と評価される。仮想ネットワーク２０２０内のエンドポイント２０２２間のルーティングのために、ルールｒｏｕｔａｂｌｅ−ｐｒｉｖａｔｅ−ｏｎｅ−ｗａｙは以下のように定義されてもよい。
ｒｏｕｔａｂｌｅ−ｐｒｉｖａｔｅ−ｏｎｅ−ｗａｙ：ｅｎｄｐｏｉｎｔ−＞ｅｎｄｐｏｉｎｔ−＞ｔｙｐｅ
−：ｒｏｕｔａｂｌｅ−ｐｒｉｖａｔｅ−ｏｎｅ−ｗａｙ  Ｅｎｄｐｏｉｎｔ１  Ｅｎｄｐｏｉｎｔ２
＜−ｅｎｄｐｏｉｎｔ−ｈａｓ−ｖｉｒｔｕａｌ−ｎｅｔｗｏｒｋ  Ｅｎｄｐｏｉｎｔ１  Ｖｎｅｔｗｏｒｋ
＜−ｅｎｄｐｏｉｎｔ−ｈａｓ−ｖｉｒｔｕａｌ−ｎｅｔｗｏｒｋ  Ｅｎｄｐｏｉｎｔ２  Ｖｎｅｔｗｏｒｋ
【００５２】
Ｅｎｄｐｏｉｎｔ１およびＥｎｄｐｏｉｎｔ２は変数である。Ｖｎｅｔｗｏｒｋは同じ変数である（すなわち、同じ仮想ネットワーク２０２０を示す）。このルールは、Ｅｎｄｐｏｉｎｔ１およびＥｎｄｐｏｉｎｔ２の両方が同じ仮想ネットワーク２０２０内にある場合には真（そうでない場合には偽）と評価される。
【００５３】
ピアリング接続２０２４を介して異なる仮想ネットワーク２０２０内のエンドポイント２０２２間でルーティングするために、ルールｒｏｕｔａｂｌｅ−ｐｒｉｖａｔｅ−ｏｎｅ−ｗａｙを以下のように定義することができる。「／／」で始まるテキストはコメントである。
−：  ｒｏｕｔａｂｌｅ−ｐｒｉｖａｔｅ−ｏｎｅ−ｗａｙ  Ｅｎｄｐｏｉｎｔ１  Ｅｎｄｐｏｉｎｔ２
／／エンドポイントのＩＰを参照する
＜−ｅｎｄｐｏｉｎｔ−ｈａｓ−ｐｒｉｖａｔｅ−ｉｐ  Ｅｎｄｐｏｉｎｔ１  Ｉｐ１
＜−ｅｎｄｐｏｉｎｔ−ｈａｓ−  ｐｒｉｖａｔｅ−ｉｐ  Ｅｎｄｐｏｉｎｔ１  Ｉｐ２
／／エンドポイントの仮想ネットワークを参照する
＜−ｅｎｄｐｏｉｎｔ−ｈａｓ−ｖｉｒｔｕａｌ−ｎｅｔｗｏｒｋ  Ｅｎｄｐｏｉｎｔ１  Ｖｎｅｔｗｏｒｋ１
＜−ｅｎｄｐｏｉｎｔ−ｈａｓ−ｖｉｒｔｕａｌ−ｎｅｔｗｏｒｋ  Ｅｎｄｐｏｉｎｔ２  Ｖｎｅｔｗｏｒｋ２
／／ピアリングのＣＩＤＲ（クラスレスドメイン間ルーティング）を参照する
＜−ｐｅｅｒｅｄ−ｃｉｄｒｓ  Ｐｃｘ  Ｖｎｅｔｗｏｒｋ１  Ｃｉｄｒ１  Ｖｎｅｔｗｏｒｋ２  Ｃｉｄｒ２
／／ソースエンドポイントのルートテーブルを参照する
＜−ｅｎｄｐｏｉｎｔ−ｈａｓ−ｒｔｂ  Ｅｎｄｐｏｉｎｔ１  Ｒｔｂ１
／／テーブル内のルートのＣＩＤＲを参照し、そのルートがアクティブであることを確認する
＜−ａｔｏｍ／ｐｃｘ−ｒｏｕｔｅ  Ｒｔｂ１  Ｐｃｘ  Ｃｉｄｒ３  ｒｏｕｔｅ−ｓｔａｔｅ／ａｃｔｉｖｅ
／／３つのＣＩＤＲすべてがそれぞれのＩＰと一致することを確認する
＜−ｃｉｄｒ−ｍａｔｃｈｅｓ−ｐｒｉｖａｔｅ−ｉｐ  Ｃｉｄｒ１  Ｉｐ１
＜−ｃｉｄｒ−ｍａｔｃｈｅｓ−ｐｒｉｖａｔｅ−ｉｐ  Ｃｉｄｒ２  Ｉｐ２
＜−ｃｉｄｒ−ｍａｔｃｈｅｓ−ｐｒｉｖａｔｅ−ｉｐ  Ｃｉｄｒ３  Ｉｐ２
【００５４】
仮想ネットワークの合成
いくつかの実施形態では、仮想ネットワーク検証サービスは、クライアントが仮想ネットワーク自体を構築およびテストする必要がないように、制約、例えばクエリに課される制約を満たす仮想ネットワークを自動的に合成するのに使用できる。例えば、クライアントは、特定のネットワーキングセキュリティ標準および／またはクライアント指定のネットワーキング標準に準拠し、指定されたネットワーキングプリミティブのセットを含む仮想ネットワークを確立したいと思う場合がある。標準によって課された制約はクエリとして提示されることができ、クエリは、制約を満たす仮想ネットワーク構成を決定するために、あるいは仮想ネットワークの構成が制約に適合するかどうかを決定するために解決され得る。制約に適合する仮想ネットワークが合成されてもよく、あるいは仮想ネットワークが制約に適合するように修正されてもよい。
【００５５】
図９は、いくつかの実施形態による、クライアント用の仮想ネットワークを自動的に合成するための方法のフローチャートである。３０００に示されるように、クライアントはネットワーキングプリミティブのセットを指定し、そして所望の仮想ネットワークに対する制約を指定するクエリのセットを提示する。３０１０に示すように、検証サービスは、ネットワーキングプリミティブのセットを含む仮想ネットワーク構成であって、仮想ネットワーキングルールのセットに従ってクエリによって指定された制約を満たす仮想ネットワーク構成を決定する。３０２０に示されるように、仮想ネットワークは、適切なプロバイダネットワークサービスを介して仮想ネットワーク構成に従ってプロバイダネットワーク上に生成されてもよい。
【００５６】
図１０は、いくつかの実施形態による、クライアント用の仮想ネットワークを自動的に合成するための別の方法のフローチャートである。３１００に示すように、クライアントは、既存の仮想ネットワークを指定し、仮想ネットワークに対する制約を指定するクエリのセットを提示する。３１１０に示されるように、検証サービスは、仮想ネットワークが仮想ネットワーキングルールのセットに従って、クエリによって指定された制約を満たすかどうかを判定するためにクエリを解決する。３１２０で、既存の仮想ネットワークが制約を満たす場合には、クライアントに通知することができ、方法は終了する。３１２０で、既存の仮想ネットワークが制約を満たさない場合には、制約に適合する新たな仮想ネットワークが適切なプロバイダネットワークサービスを通じてプロバイダネットワーク上に生成され得る。あるいは、いくつかの実施形態では、既存の仮想ネットワークは、制約を満たすために適切なプロバイダネットワークサービスを通じて修正されてもよい。
【００５７】
例示的なプロバイダネットワーク環境
本項では、図１から図１０を参照して説明した方法および装置の実施形態が実装され得る例示的なプロバイダネットワーク環境について説明する。しかしながら、これらの例示的なプロバイダネットワーク環境は限定的であることを意図していない。
【００５８】
図１１は、いくつかの実施形態による、例示的なプロバイダネットワーク環境を示す図である。プロバイダネットワーク４０００は、プロバイダネットワークまたは１つ以上のデータセンター内のネットワーク内のデバイス上に実装された計算およびストレージリソースを含むがこれらに限定されない仮想化リソースのインスタンス４０１２を購入、レンタル、または他の方法で取得することを可能にする１つ以上の仮想化サービス４０１０を介してクライアントにリソース仮想化を提供し得る。プライベートＩＰアドレス４０１６は、リソースインスタンス４０１２に関連付けられてもよく、プライベートＩＰアドレスは、プロバイダネットワーク４０００上のリソースインスタンス４０１２の内部ネットワークアドレスである。いくつかの実施形態では、プロバイダネットワーク４０００は、クライアントがプロバイダ４０００から取得し得るパブリックＩＰアドレス４０１４および／またはパブリックＩＰアドレス範囲（例えば、インターネットプロトコルバージョン４（ＩＰｖ４）またはインターネットプロトコルバージョン６（ＩＰｖ６）アドレス）も提供し得る。
【００５９】
従来、プロバイダネットワーク４０００は、仮想化サービス４０１０を介して、サービスプロバイダのクライアント（例えば、クライアントネットワーク４０５０Ａを操作するクライアント）が、クライアントに割り当てられた、またはアロケートされた少なくともいくつかのパブリックＩＰアドレス４０１４を、特に、クライアントに割り当てられたリソースインスタンス４０１２に、動的に関連付けることを可能にし得る。プロバイダネットワーク４０００はまた、クライアントが、そのクライアントにアロケートされた１つの仮想化コンピューティングリソースインスタンス４０１２に以前にマッピングされたパブリックＩＰアドレス４０１４を、やはりそのクライアントにアロケートされた別の仮想化コンピューティングリソースインスタンス４０１２に再マッピングすることを可能にし得る。サービスプロバイダによって提供された仮想化コンピューティングリソースインスタンス４０１２およびパブリックＩＰアドレス４０１４を使用して、クライアントネットワーク４０５０Ａのオペレータなどのサービスプロバイダのクライアントは、例えば、クライアント固有のアプリケーションを実装し、クライアントのアプリケーションをインターネットなどの中間ネットワーク４０４０に提示することができる。次いで、中間ネットワーク４０４０上の他のネットワークエンティティ４０２０は、クライアントネットワーク４０５０Ａによって公開された宛先パブリックＩＰアドレス４０１４へのトラフィックを生成することができ、トラフィックはサービスプロバイダのデータセンターにルーティングされ、データセンターではネットワーク基板を介して、現在宛先パブリックＩＰアドレス４０１４にマッピングされている仮想化コンピューティングリソースインスタンス４０１２のプライベートＩＰアドレス４０１６にルーティングされる。同様に、仮想化コンピューティングリソースインスタンス４０１２からの応答トラフィックは、ネットワーク基板を介して中間ネットワーク４０４０に戻ってソースエンティティ４０２０にルーティングされ得る。
【００６０】
本明細書で使用されるプライベートＩＰアドレスは、プロバイダネットワーク内のリソースインスタンスの内部ネットワークアドレスを指す。プライベートＩＰアドレスはプロバイダネットワーク内でのみルーティング可能である。プロバイダネットワークの外部から発信されたネットワークトラフィックは、プライベートＩＰアドレスに直接ルーティングされず、代わりに、トラフィックはリソースインスタンスにマッピングされているパブリックＩＰアドレスを使用する。プロバイダネットワークは、パブリックＩＰアドレスからプライベートＩＰアドレスへのマッピング、およびその逆のマッピングを実行するためのネットワークアドレス変換（ＮＡＴ）または同様の機能を提供するネットワークデバイスまたは機器を含むことができる。
【００６１】
本明細書で使用される場合、パブリックＩＰアドレスは、サービスプロバイダまたはクライアントによってリソースインスタンスに割り当てられるインターネットルーティング可能なネットワークアドレスである。パブリックＩＰアドレスにルーティングされたトラフィックは、例えば１：１ネットワークアドレス変換（ＮＡＴ）を介して変換され、リソースインスタンスのそれぞれのプライベートＩＰアドレスに転送される。
【００６２】
いくつかのパブリックＩＰアドレスが、プロバイダネットワークインフラストラクチャによって特定のリソースインスタンスに割り当てられることが可能であり、これらのパブリックＩＰアドレスは、標準パブリックＩＰアドレス、または単に標準ＩＰアドレスと呼ばれることがある。いくつかの実施形態では、標準ＩＰアドレスからリソースインスタンスのプライベートＩＰアドレスへのマッピングは、すべてのリソースインスタンスタイプに対するデフォルトの起動設定である。
【００６３】
少なくともいくつかのパブリックＩＰアドレスがプロバイダネットワーク４０００のクライアントにアロケートされ、またはそれによって取得されることが可能であり、その場合にクライアントは、アロケートされたパブリックＩＰアドレスを、クライアントにアロケートされた特定のリソースインスタンスに割り当てることができる。これらのパブリックＩＰアドレスは、クライアントパブリックＩＰアドレス、または単にクライアントＩＰアドレスと呼ばれることがある。標準ＩＰアドレスの場合のようにプロバイダネットワーク４０００によってリソースインスタンスに割り当てられる代わりに、クライアントＩＰアドレスは、例えばサービスプロバイダによって提供されるＡＰＩを介してクライアントによってリソースインスタンスに割り当てられてもよい。標準ＩＰアドレスとは異なり、クライアントＩＰアドレスはクライアントアカウントに割り当てられ、必要に応じて、または好みに応じて、各クライアントによって他のリソースインスタンスに再マッピングされ得る。クライアントＩＰアドレスは、特定のリソースインスタンスではなく、クライアントのアカウントに関連付けられており、クライアントがクライアントＩＰアドレスを解放することを選択するまで、クライアントはそのＩＰアドレスを制御する。従来の静的ＩＰアドレスとは異なり、クライアントＩＰアドレスは、クライアントのパブリックＩＰアドレスをクライアントのアカウントに関連付けられた任意のリソースインスタンスに再マッピングすることによって、リソースインスタンスまたはアベイラビリティゾーンの障害をマスクすることを可能にする。例えば、クライアントＩＰアドレスは、クライアントＩＰアドレスを代替のリソースインスタンスに再マッピングすることによって、クライアントはクライアントのリソースインスタンスまたはソフトウェアに関する問題を管理することができる。
【００６４】
図１２は、いくつかの実施形態による、ＩＰトンネリング技術を使用してネットワーク基板上にオーバーレイネットワークを実装する例示的なデータセンターを示す図である。プロバイダデータセンター４１００は、ルータ、スイッチ、ネットワークアドレス変換装置（ＮＡＴ）などのネットワーキングデバイス４１１２を含むネットワーク基板を含むことができる。いくつかの実施形態は、トンネルを使用してカプセル化されたパケットがネットワーク基板４１１０を通過することができるオーバーレイネットワークを提供するためにインターネットプロトコル（ＩＰ）トンネリング技術を使用することができる。ＩＰトンネリング技術は、ネットワーク上にオーバーレイネットワーク（例えば、図１２のデータセンター４１００内のローカルネットワーク）を作成するためのマッピングおよびカプセル化システムを提供することができ、オーバーレイ層（パブリックＩＰアドレス）およびネットワーク基板４１１０層（プライベートＩＰアドレス）に別のネームスペースを提供することができる。オーバーレイ層内のパケットは、それらのトンネル基板ターゲット（プライベートＩＰアドレス）が何であるべきかを決定するために、（例えばマッピングサービス４１３０によって提供される）マッピングディレクトリに対してチェックされ得る。ＩＰトンネリング技術は、仮想ネットワークトポロジ（オーバーレイネットワーク）を提供し、クライアントがパケットを送信したいＩＰアドレスを提供するときに、ＩＰオーバーレイアドレスがどこにあるかを知っているマッピングサービス（例えば、マッピングサービス４１３０）と通信することによってＩＰアドレスが仮想空間内で実行されるように、クライアントに提示されるインターフェース（例えば、サービスＡＰＩ）がオーバーレイネットワークに付加される。
【００６５】
いくつかの実施形態では、ＩＰトンネリング技術は、ＩＰオーバーレイアドレス（パブリックＩＰアドレス）をサブストレートＩＰアドレス（プライベートＩＰアドレス）にマッピングし、２つのネームスペース間のトンネルにおいてパケットをカプセル化し、カプセル化がパケットから除去される正しいエンドポイントにトンネルを介してパケットを配信することができる。図１２では、ホスト４１２０Ａ上の仮想マシン（ＶＭ）４１２４Ａから中間ネットワーク４１５０上のデバイスへの例示的なオーバーレイネットワークトンネル４１３４Ａと、ホスト４１２０Ｂ上のＶＭ４１２４Ｂとホスト４１２０Ｃ上のＶＭ４１２４Ｃとの間の例示的なオーバーレイネットワークトンネル４１３４Ｂとが示されている。いくつかの実施形態では、パケットは送信前にオーバーレイネットワークパケットフォーマットでカプセル化されてもよく、オーバーレイネットワークパケットは受信後に除去されてもよい。他の実施形態では、オーバーレイネットワークパケットにおいてパケットをカプセル化する代わりに、オーバーレイネットワークアドレス（パブリックＩＰアドレス）を送信前にパケットの基板アドレス（プライベートＩＰアドレス）に埋め込み、受信時にパケットアドレスから除去してもよい。一例として、オーバーレイネットワークは、パブリックＩＰアドレスとして３２ビットのＩＰｖ４（インターネットプロトコルバージョン４）アドレスを使用して実装され、ＩＰｖ４アドレスは、プライベートＩＰアドレスとしてサブストレートネットワーク上で使用される１２８ビットのＩＰｖ６（インターネットプロトコルバージョン６）アドレスの一部として埋め込まれ得る。
【００６６】
図１２を参照すると、実施形態が実装され得る少なくともいくつかのネットワークは、複数のオペレーティングシステムがホストコンピュータ（例えば、図１２のホスト４１２０Ａおよび４１２０Ｂ）上で同時に動作することを可能にする、すなわち、ホスト４１２０上の仮想マシン（ＶＭ）４１２４のような、ハードウェア仮想化技術を含み得る。ＶＭ４１２４は、例えば、ネットワークプロバイダのクライアントにレンタルまたはリースされ得る。ホスト４１２０上のハイパーバイザまたは仮想マシンモニタ（ＶＭＭ）４１２２は、ホスト上のＶＭ４１２４に仮想プラットフォームを提示し、ＶＭ４１２４の実行を監視する。各ＶＭ４１２４は、１つ以上のプライベートＩＰアドレスを与えられてもよく、ホスト４１２０上のＶＭＭ４１２２は、ホスト上のＶＭ４１２４のプライベートＩＰアドレスを認識してもよい。マッピングサービス４１３０は、すべてのネットワークＩＰプレフィックス、およびローカルネットワーク上でＩＰアドレスを提供しているルータまたは他のデバイスのＩＰアドレスを認識してもよい。これは、複数のＶＭ４１２４にサービスを提供するＶＭＭ４１２２のＩＰアドレスを含む。マッピングサービス４１３０は、例えばサーバシステム上に集中させることができ、あるいは２つ以上のサーバシステムまたはネットワーク上の他のデバイスの間に分散させることができる。ネットワークは、例えば、マッピングサービス技術およびＩＰトンネリング技術を使用して、例えば、データセンター４１００ネットワーク内の異なるホスト４１２０上のＶＭ４１２４間でデータパケットをルーティングすることができ、内部ゲートウェイプロトコル（Ｉｎｔｅｒｉｏｒ  Ｇａｔｅｗａｙ  Ｐｒｏｔｏｃｏｌ，ＩＧＰ）を使用してこのようなローカルネットワーク内でルーティング情報を交換し得ることに留意されたい。
【００６７】
さらに、プロバイダデータセンター４１００ネットワーク（自律システム（ａｕｔｏｎｏｍｏｕｓ  ｓｙｓｔｅｍ，ＡＳ）と呼ばれることもある）などのネットワークは、マッピングサービス技術、ＩＰトンネリング技術およびルーティングサービス技術を使用して、ＶＭ４１２４からインターネットデスティネーションに、およびインターネットソースからＶＭ４１２４に、パケットをルーティングすることができる。インターネット上のソースとデスティネーションとの間のインターネットルーティングには、通常、外部ゲートウェイプロトコル（ＥＧＰ）または境界ゲートウェイプロトコル（ＢＧＰ）が使用されることに留意されたい。図１２は、いくつかの実施形態による、リソース仮想化技術を提供し、インターネットトランジットプロバイダに接続するエッジルータ４１１４を介して完全なインターネットアクセスを提供するネットワークを実装する例示的なプロバイダデータセンター４１００を示す。プロバイダデータセンター４１００は、例えば、ハードウェア仮想化サービスを介して仮想コンピューティングシステム（ＶＭ４１２４）を実装する能力、およびストレージ仮想化サービスを介してストレージリソース４１１８上に仮想化データストア４１１６を実装する能力をクライアントに提供し得る。
【００６８】
データセンター４１００ネットワークは、例えばデータセンター４１００内のホスト４１２０上のＶＭ４１２４からインターネットデスティネーションに、およびインターネットソースからＶＭ４１２４にパケットをルーティングするために、仮想化リソースとの間を行き来するトラフィックをルーティングするＩＰトンネリング技術、マッピングサービス技術およびルーティングサービス技術を実装することができる。インターネットソースおよびデスティネーションは、例えば、中間ネットワーク４１４０に接続されたコンピューティングシステム４１７０と、（例えば、ネットワーク４１５０をインターネットトランジットプロバイダに接続するエッジルータ４１１４を介して）中間ネットワーク４１４０に接続するローカルネットワーク４１５０に接続されたコンピューティングシステム４１５２とを含むことができる。プロバイダデータセンター４１００ネットワークはまた、例えばデータセンター４１００内のホスト４１２０上のＶＭ４１２４から同じホスト上の、またはデータセンター４１００内の他のホスト４１２０上の他のＶＭ４１２４へと、データセンター４１００内のリソース間でパケットをルーティングしてもよい。
【００６９】
データセンター４１００を提供するサービスプロバイダはまた、データセンター４１００と同様のハードウェア仮想化技術を含むとともに中間ネットワーク４１４０にも接続され得る追加のデータセンター４１６０を、提供し得る。パケットは、データセンター４１００から他のデータセンター４１６０へ、例えば、データセンター４１００内のホスト４１２０上のＶＭ４１２４から他の類似のデータセンター４１６０内の他のホスト上の他のＶＭへ、およびその逆に転送することができる。
【００７０】
上記は、複数のオペレーティングシステムがホスト上の仮想マシン（ＶＭ）としてホストコンピュータ上で同時に動作することを可能にするハードウェア仮想化技術を説明しているが、ＶＭはネットワークプロバイダのクライアントにレンタルまたはリースされてもよく、同様に、ストレージリソース４１１８などの他のコンピューティングリソースをネットワークプロバイダのクライアントに仮想化リソースとして提供するために使用されてもよい。
【００７１】
図１３は、いくつかの実施形態による、ストレージ仮想化サービスおよびハードウェア仮想化サービスをクライアントに提供する例示的なプロバイダネットワークのブロック図である。ハードウェア仮想化サービス４２２０は、複数の計算リソース４２２４（例えば、ＶＭ）をクライアントに提供する。計算リソース４２２４は、例えば、プロバイダネットワーク４２００のクライアントに（例えば、クライアントネットワーク４２５０を実装するクライアントに）レンタルまたはリースすることができる。各計算リソース４２２４は、１つ以上のプライベートＩＰアドレスを与えられてもよい。プロバイダネットワーク４２００は、計算リソース４２２４のプライベートＩＰアドレスからパブリックインターネットデスティネーションに、およびパブリックインターネットソースから計算リソース４２２４にパケットをルーティングするように構成され得る。
【００７２】
プロバイダネットワーク４２００は、例えばローカルネットワーク４２５６を介して中間ネットワーク４２４０に結合されたクライアントネットワーク４２５０、中間ネットワーク４２４０およびプロバイダネットワーク４２００に結合されたハードウェア仮想化サービス４２２０を介して仮想コンピューティングシステム４２９２を実装する能力を提供し得る。いくつかの実施形態では、ハードウェア仮想化サービス４２２０は、１つ以上のＡＰＩ４２０２、例えばウェブサービスインターフェースを提供することができ、それを介してクライアントネットワーク４２５０は例えばコンソール４２９４を介してハードウェア仮想化サービス４２２０によって提供される機能にアクセスできる。いくつかの実施形態では、プロバイダネットワーク４２００において、クライアントネットワーク４２５０の各仮想コンピューティングシステム４２９２は、リース、レンタルまたは他の方法でクライアントネットワーク４２５０に提供される計算リソース４２２４に対応し得る。
【００７３】
仮想コンピューティングシステム４２９２および／または別のクライアントデバイス４２９０、またはコンソール４２９４の、インスタンスから、クライアントは、例えば１つ以上のＡＰＩ４２０２を介してストレージ仮想化サービス４２１０の機能にアクセスして、プロバイダネットワーク４２００によって提供される仮想データストア４２１６からデータにアクセスし、仮想データストア４２１６にデータを格納することができる。いくつかの実施形態では、少なくともいくつかのデータ、例えば頻繁にアクセスされるまたは重要なデータをローカルにキャッシュすることができ、１つ以上の通信チャネルを介して仮想化データストアサービス４２１０と通信することができる仮想化データストアゲートウェイ（図示世せず）をクライアントネットワーク４２５０に設けて、一次データストア（仮想化データストア４２１６）が保持されるように、ローカルキャッシュから新たなまたは修正されたデータをアップロードすることができる。いくつかの実施形態では、ユーザは、仮想コンピューティングシステム４２９２を介して、および／または別のクライアントデバイス４２９０上で、ローカル仮想化ストレージ４２９８としてユーザに見える仮想データストア４２１６のボリュームをマウントおよびアクセスすることができる。
【００７４】
図１３には示されていないが、仮想化サービスはまた、ＡＰＩ４２０２を介してプロバイダネットワーク４２００内のリソースインスタンスからアクセスされてもよい。例えば、クライアント、機器サービスプロバイダ、または他のエンティティは、プロバイダネットワーク４２００上のそれぞれの仮想ネットワーク内からＡＰＩ４２０２を介して仮想化サービスにアクセスして、仮想ネットワーク内または別の仮想ネットワーク内の１つ以上のリソースインスタンスのアロケーションを要求し得る。ネットワーク。
【００７５】
図１４は、いくつかの実施形態による、プロバイダネットワーク上の仮想ネットワークを少なくともいくつかのクライアントに提供する例示的なプロバイダネットワークを示す図である。例えば、プロバイダネットワーク４３００上のクライアントの仮想ネットワーク４３６０は、クライアントネットワーク４３５０上のそれらの既存のインフラストラクチャ（例えば、デバイス４３５２）を論理的に分離されたリソースインスタンスのセット（例えば、ＶＭ４３２４Ａおよび４３２４Ｂならびにストレージ４３１８Ａおよび４３１８Ｂ）に接続し、セキュリティサービス、ファイアウォール、侵入検知システムなどの管理機能を拡張して、それらのリソースインスタンスを含めることを可能にする。
【００７６】
クライアントの仮想ネットワーク４３６０は、プライベート通信チャネル４３４２を介してクライアントネットワーク４３５０に接続することができる。プライベート通信チャネル４３４２は、例えば、ネットワークトンネリング技術または中間ネットワーク４３４０を介した他の何らかの技術に従って実装されるトンネルであり得る。中間ネットワークは、例えば、共有ネットワークまたはインターネットなどの公衆ネットワークとすることができる。あるいは、プライベート通信チャネル４３４２は、仮想ネットワーク４３６０とクライアントネットワーク４３５０との間の直接の専用接続を介して実装されてもよい。
【００７７】
公衆ネットワークは、複数のエンティティへのオープンアクセスおよびそれらの間の相互接続性を提供するネットワークとして広く定義され得る。インターネット、またはワールドワイドウェブ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ，ＷＷＷ）は公衆ネットワークの一例である。共有ネットワークは、アクセスが一般に制限されていない公衆ネットワークとは対照的に、アクセスが２つ以上のエンティティに制限されるネットワークとして広く定義され得る。共有ネットワークは、例えば、１つ以上のローカルエリアネットワーク（ＬＡＮ）および／またはデータセンターネットワーク、または相互接続されて広域ネットワーク（ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ，ＷＡＮ）を形成する２つ以上のＬＡＮもしくはデータセンターネットワークを含み得る。共有ネットワークの例には、企業ネットワークおよび他の企業ネットワークが含まれ得るが、これらに限定されない。共有ネットワークは、ローカルエリアをカバーするネットワークからグローバルネットワークまで、範囲内のどこにあってもよい。共有ネットワークは、少なくともいくつかのネットワークインフラストラクチャをパブリックネットワークと共有することができ、共有ネットワークは、パブリックネットワークを含むことができる１以上の他のネットワークに、他のネットワークと共有ネットワークとの間の制御されるアクセスによって結合することができることに留意されたい。共有ネットワークは、インターネットなどの公衆ネットワークとは対照的に、プライベートネットワークと見なすこともできる。いくつかの実施形態では、共有ネットワークまたは公衆ネットワークのいずれかが、プロバイダネットワークとクライアントネットワークとの間の中間ネットワークとして機能し得る。
【００７８】
プロバイダネットワーク４３００上のクライアントに対して仮想ネットワーク４３６０を確立するために、１つ以上のリソースインスタンス（例えば、ＶＭ４３２４Ａおよび４３２４Ｂならびにストレージ４３１８Ａおよび４３１８Ｂ）を仮想ネットワーク４３６０に割り当てることができる。他のリソースインスタンス（例えば、ストレージ４３１８ＣおよびＶＭ４３２４Ｃ）は、他のクライアント使用のためにプロバイダネットワーク４３００上で利用可能なままであり得ることに留意されたい。ある範囲のパブリックＩＰアドレスも仮想ネットワーク４３６０にアロケートすることができる。さらに、プロバイダネットワーク４３００の１つ以上のネットワーキングデバイス（ルータ、スイッチなど）を仮想ネットワーク４３６０にアロケートすることができる。プライベート通信チャネル４３４２は、仮想ネットワーク４３６０のプライベートゲートウェイ４３６２とクライアントネットワーク４３５０のゲートウェイ４３５６との間に確立されてもよい。
【００７９】
いくつかの実施形態では、プライベートゲートウェイ４３６２に加えて、またはその代わりに、仮想ネットワーク４３６０は、プライベート通信チャネル４３４２を介する代わりに、またはそれに加えて、仮想ネットワーク４３６０内のリソースが中間ネットワーク４３４０を介してエンティティ（例えば、ネットワークエンティティ４３４４）と直接通信でき、その逆もできるようにするパブリックゲートウェイ４３６４を含み得る。
【００８０】
仮想ネットワーク４３６０は、必ずというわけではないが、２つ以上のサブネットワークまたはサブネット４３７０に細分することができる。例えば、プライベートゲートウェイ４３６２およびパブリックゲートウェイ４３６４の両方を含む実装形態では、仮想ネットワーク４３６０は、プライベートゲートウェイ４３６２を通じて到達可能なリソース（この例ではＶＭ４３２４Ａおよびストレージ４３１８Ａ）を含むサブネット４３７０Ａと、パブリックゲートウェイ４３６４を介して到達可能なリソース（この例では、ＶＭ４３２４Ｂおよびストレージ４３１８Ｂ）を含むサブネット４３７０Ｂとに細分することができる。
【００８１】
クライアントは、仮想ネットワーク４３６０内の特定のリソースインスタンスに特定のクライアントパブリックＩＰアドレスを割り当てることができる。中間ネットワーク４３４０上のネットワークエンティティ４３４４はその後、クライアントによって公開されたパブリックＩＰアドレスにトラフィックを送信することができ、トラフィックは、プロバイダネットワーク４３００によって、関連付けられたリソースインスタンスにルーティングされる。リソースインスタンスからの戻りトラフィックは、プロバイダネットワーク４３００によってルーティングされ、中間ネットワーク４３４０を介してネットワークエンティティ４３４４に戻される。リソースインスタンスとネットワークエンティティ４３４４との間のトラフィックをルーティングすることは、リソースインスタンスのパブリックＩＰアドレスとプライベートＩＰアドレスとの間で変換するためのネットワークアドレス変換を必要とし得ることに留意されたい。
【００８２】
いくつかの実施形態は、図１４に示されるように、クライアントがクライアントの仮想ネットワーク４３６０内のパブリックＩＰアドレスをクライアントの外部ネットワーク４３５０上のデバイスに再マッピングすることを可能にし得る。パケットが（例えば、ネットワークエンティティ４３４４から）受信されると、ネットワーク４３００は、パケットによって示されたデスティネーションＩＰアドレスが外部ネットワーク４３５０上のエンドポイントに再マッピングされたと判断し、プライベート通信チャネル４３４２を介して、または中間ネットワーク４３４０を介して、パケットのそれぞれのエンドポイントへのルーティングを処理する。応答トラフィックは、エンドポイントからプロバイダネットワーク４３００を介してネットワークエンティティ４３４４にルーティングされてもよく、あるいはクライアントネットワーク４３５０によってネットワークエンティティ４３４４に直接ルーティングされてもよい。ネットワークエンティティ４３４４の観点からは、あたかもネットワークエンティティ４３４４がプロバイダネットワーク４３００上のクライアントのパブリックＩＰアドレスと通信しているように見える。しかしながら、ネットワークエンティティ４３４４は実際にはクライアントネットワーク４３５０上のエンドポイントと通信している。
【００８３】
図１４は、中間ネットワーク４３４０上およびプロバイダネットワーク４３００の外部にあるネットワークエンティティ４３４４を示しているが、ネットワークエンティティは、プロバイダネットワーク４３００上のエンティティとすることができる。例えば、プロバイダネットワーク４３００によって提供されるリソースインスタンスのうちの１つは、クライアントによって公開されたパブリックＩＰアドレスにトラフィックを送信するネットワークエンティティであり得る。
【００８４】
図１５は、いくつかの実施形態による、プロバイダネットワーク上の例示的な仮想ネットワーク内のサブネットおよびセキュリティグループを示す図である。いくつかの実施形態では、図１４のプロバイダネットワーク４３００などのプロバイダネットワークは、クライアントが、サブネット４４１４内またはサブネット４４１４間で、クライアントの仮想ネットワーク４４１０内の仮想セキュリティグループ４４１６を確立および管理することを可能にし得る。セキュリティグループ４４１６は、リソースインスタンス４４１８の論理グループであり、セキュリティグループルールに従ってセキュリティグループ４４１６内の１つ以上のリソースインスタンス４４１８に到達することを可能にされたトラフィックを制御する仮想ファイアウォールとして機能する。クライアントは、仮想ネットワーク４４１０内に１つ以上のセキュリティグループ４４１６を確立し、仮想ネットワーク４４１０内の各リソースインスタンス４４１８をセキュリティグループ４４１６の１つ以上に関連付けることができる。いくつかの実施形態では、クライアントは、セキュリティグループ４４１６に関連付けられたリソースインスタンス４４１８に到達することを可能にされたインバウンドトラフィックを制御する各セキュリティグループ４４１６のルールを確立および／または変更することができる。
【００８５】
図１５に示す例示的な仮想ネットワーク４４１０では、仮想ネットワーク４４１０は２つのサブネット４４１４Ａおよび４４１４Ｂに細分される。仮想ネットワーク４４１０へのアクセスは、ゲートウェイ４４３０によって制御される。各サブネット４４１４は、それぞれのサブネット４４１４上のリソースインスタンス４４１８へ（および、からの）トラフィックをルーティングするように動作する少なくとも１つのルータ４４１２を含むことができる。いくつかの実施形態では、ネットワークアクセス制御リスト（ａｃｃｅｓｓ  ｃｏｎｔｒｏｌ  ｌｉｓｔ，ＡＣＬ）を使用して、ルータ４４１２のサブネット４４１４へのアクセスを制御することができる。図１５に示す例では、リソースインスタンス４４１８Ａ〜４４１８Ｅはサブネット４４１４Ａ上にあり、リソースインスタンス４４１８Ｆ〜４４１８Ｊはサブネット４４１４Ｂ上にある。クライアントは、４つのセキュリティグループ４４１６Ａ〜４４１６Ｄを確立している。図１５に示されるように、セキュリティグループは、サブネット４４１４Ａ上のリソースインスタンス４４１８Ａおよび４４１８Ｂとサブネット４４１４Ｂ上のリソースインスタンス４４１８Ｆとを含むセキュリティグループ４４１６Ａがそうであるように、サブネット４４１４間に広がってもよい。さらに、リソースインスタンス４４１８は、セキュリティグループ４４１６Ａおよび４４１６Ｂに含まれるリソースインスタンス４４１８Ａと同様に、２つ以上のセキュリティグループ４４１６に含まれてもよい。
【００８６】
本開示の実施形態は、以下の節を考慮して説明され得る。
１．メモリに結合されたプロセッサを含むコンピュータシステムであって、メモリは仮想ネットワーク検証サービスの命令を含み、命令は、実行時にシステムに、
クライアントデバイスを介してクライアントから、仮想ネットワークであってプロバイダネットワーク内でインスタンス化され仮想マシンを含む仮想ネットワークについての、クエリであって制約問題として表現されるクエリを受信させ、
クエリに応答して、
クライアントの仮想ネットワークに対する記述的情報を取得させ、
宣言的論理プログラミング言語に従って記述的情報をエンコードして、仮想ネットワークのエンコードされた記述を生成させ、
制約ソルバープログラムであって宣言型論理プログラミング言語に従って制約問題を解決するように構成された制約ソルバープログラムを使用して、エンコードされた仮想ネットワーキングルールに従ってクエリを解決させ、
クエリ解決の結果をクライアントデバイスに提供させる、システム。
２．メモリは、実行時にシステムにプロバイダネットワークのアプリケーションプログラムインターフェースから記述的情報を取得させる命令をさらに含む、条項１に記載のシステム。
３．実行時にシステムに記述的情報を取得させる命令は、実行時にシステムに、
１つ以上のプロバイダネットワークサービスから仮想ネットワークの記述的情報を取得するための許可をクライアントから受け取らせ、
１つ以上のプロバイダネットワークサービスから、プロバイダネットワーク上の仮想ネットワークに対する記述的情報を取得させる命令をさらに含む、条項１に記載のシステム。
４．記述的情報は、仮想ネットワーク内で実装されたネットワーキングプリミティブのインスタンスを識別する情報、仮想ネットワーク内の仮想マシンの記述、仮想ネットワーク内の仮想マシン間の関係の記述、または仮想ネットワークの外部のエンティティへのインターフェースの記述のうちの１つ以上を含む条項１に記載のシステム。
５．仮想ネットワーキングルールは、仮想ネットワークに実装されたネットワーキングプリミティブのための仮想ネットワーキングセマンティクスおよび論理をエンコードするルール、１つ以上のネットワーキングセキュリティ標準をエンコードするルール、またはクライアントのネットワーキング要件をエンコードするクライアント定義ルールのうちの１つ以上を含む、条項１に記載のシステム。
６．クエリは、仮想ネットワーク内の仮想マシンと仮想ネットワーク内の他の仮想マシンとの間のパスが開いていることを検証するか、仮想ネットワーク内の仮想マシンと仮想ネットワークの外部の１つ以上のエンティティとの間のパスが開いていることを検証するか、または仮想ネットワーク内の仮想マシンが、仮想マシンにアクセスすべきでないエンティティによってアクセス可能ではないことを検証するように提示される、条項１に記載のシステム。
７．結果が、クエリ解決の結果のテキスト表現、またはクエリ解決の結果のグラフィック表現のうちの１つ以上を含む、条項１に記載のシステム。
８．方法であって、
プロバイダネットワーク上の１つ以上のデバイスによって実装された仮想ネットワーク検証サービスによって、
プロバイダネットワーク上でクライアントの仮想ネットワークについてのクエリを受信し、クエリは制約問題を表すことと、
仮想ネットワークの記述的情報を取得することと、
宣言型論理プログラミング言語に従って記述的情報をエンコードして仮想ネットワークのエンコードされた記述を生成することと、
制約ソルバーエンジンを使用して、エンコードされた仮想ネットワーキングルールに従って、エンコードされた記述に対するクエリを解決することと、
クエリ解決の結果をクライアントに提供することと、を実行することを含む、方法。
９．記述的情報はクライアントから取得される、条項８に記載の方法。
１０．記述的情報を取得することは、
１つ以上のプロバイダネットワークサービスから仮想ネットワークの記述的情報を取得するための許可をクライアントから取得することと、
１つ以上のプロバイダネットワークサービスからプロバイダネットワーク上の仮想ネットワークに対する記述的情報を取得することと、を含む、条項８に記載の方法。
１１．記述的情報は、仮想ネットワークに実装されたネットワーキングプリミティブのインスタンスを識別する情報、仮想ネットワーク内の仮想マシンの記述、仮想ネットワーク内の仮想マシン間の関係の記述、または仮想ネットワークの外部のエンティティへのインターフェースの記述のうちの１つ以上を含む、条項８に記載の方法。
１２．仮想ネットワーキングルールは、仮想ネットワークに実装されたネットワーキングプリミティブのための仮想ネットワーキングセマンティクスおよび論理をエンコードするルール、１つ以上のネットワーキングセキュリティ標準をエンコードするルール、またはクライアントのネットワーキング要件をエンコードするクライアント定義ルールのうちの１つ以上を含む、条項８に記載の方法。
１３．クライアントからエンコードされた仮想ネットワーキングルールを受信することをさらに含み、エンコードされた仮想ネットワーキングルールは、クライアントによって定義された仮想ネットワークに対するベストプラクティスを指定するルールを含み、クエリは、仮想ネットワークがベストプラクティスに準拠することを検証するように提示される、条項８に記載の方法。
１４．クエリは、仮想ネットワーク内の仮想マシンと仮想ネットワーク内の別の仮想マシンとの間のパスが開いていることを検証するか、仮想ネットワーク内の仮想マシンと仮想ネットワークの外部の１つ以上のエンティティとの間のパスが開いていることを検証するか、または仮想ネットワーク内の仮想マシンが、仮想マシンにアクセスすべきでないエンティティによってアクセス可能ではないことを検証するように提示される、条項８に記載の方法。
１５．クエリ解決の結果をクライアントに提供することは、クエリ解決の結果のテキスト表現をクライアントに提供すること、またはクエリ解決の結果のグラフィック表現をクライアントに提供することを含む、条項８に記載の方法。
１６．クエリを受信することと、記述的情報を取得することと、仮想ネットワーク検証サービスへのアプリケーションプログラミングインターフェースに従ってクエリ解決の結果を提供することと、をさらに含む、条項８に記載の方法。
１７．クライアントの仮想ネットワークは２つのピア仮想ネットワークを含み、クエリは、第１のピア仮想ネットワーク内の仮想マシンがプロバイダネットワークを介したピア仮想ネットワーク間のピア接続を介して第２のピア仮想ネットワーク内の別の仮想マシンと通信できることを検証するように提示される、条項８に記載の方法。
１８．プログラム命令を格納した非一時的コンピュータ可読記憶媒体であって、前記プログラム命令は１つ以上のコンピュータによって実行されると前記１つ以上のコンピュータに、
プロバイダネットワーク上におけるクライアントの仮想ネットワークについての１つ以上のクエリであって制約問題として表現されるクエリを受け取らせ、
仮想ネットワークの記述的情報を取得させ、
宣言的論理プログラミング言語に従って記述的情報をエンコードして仮想ネットワークのエンコードされた記述を生成させ、
制約ソルバーエンジンを使用して、エンコードされた仮想ネットワーキングルールに従って、エンコードされた記述に対する１つ以上のクエリを解決させ、
１つ以上のクエリの解決の結果をクライアントに提供させる、非一時的コンピュータ可読記憶媒体。
１９．記述的情報は、クライアントから、または仮想ネットワークを記述するメタデータを保持する１つ以上のプロバイダネットワークサービスから取得される、条項１８に記載の非一時的コンピュータ可読記憶媒体。
２０．記述的情報は、仮想ネットワーク内で実装されたネットワーキングプリミティブのインスタンスを識別する情報、仮想ネットワーク内の仮想マシンの記述、仮想ネットワーク内の仮想マシン間の関係の記述、または仮想ネットワークの外部のエンティティへのインターフェースの記述のうちの１つ以上を含む、条項１８に記載の非一時的コンピュータ可読記憶媒体。
２１．仮想ネットワーキングルールは、仮想ネットワークに実装されたネットワーキングプリミティブのための仮想ネットワーキングセマンティクスおよび論理をエンコードするルール、１つ以上のネットワーキングセキュリティ標準をエンコードするルール、またはクライアントのネットワーキング要件をエンコードするクライアント定義ルールのうちの１つ以上を含む、条項１８に記載の非一時的コンピュータ可読記憶媒体。
【００８７】
例示的なシステム
いくつかの実施形態では、本明細書に記載のプロバイダネットワーク環境において仮想ネットワークを検証するための方法および装置の一部または全部を実装するシステムは、１つ以上のコンピュータアクセス可能媒体を含む、またはこれにアクセスするように構成された、例えば、図１６に示すコンピュータシステム５０００などの汎用コンピュータシステムを含み得る。図示の実施形態では、コンピュータシステム５０００は、入出力（Ｉ／Ｏ）インターフェース５０３０を介してシステムメモリ５０２０に結合された１つ以上のプロセッサ５０１０を含む。コンピュータシステム５０００は、Ｉ／Ｏインターフェース５０３０に結合されたネットワークインターフェース５０４０をさらに含む。
【００８８】
様々な実施形態において、コンピュータシステム５０００は、１つのプロセッサ５０１０を含む単一プロセッサシステム、またはいくつかのプロセッサ５０１０（例えば、２、４、８、または他の適切な数）を含むマルチプロセッサシステムであり得る。プロセッサ５０１０は、命令を実行することができる任意の適切なプロセッサであり得る。例えば、様々な実施形態において、プロセッサ５０１０は、ｘ８６、ＰｏｗｅｒＰＣ、ＳＰＡＲＣ、またはＭＩＰＳ  ＩＳＡ、または任意の他の適切なＩＳＡなどの任意の様々な命令セットアーキテクチャ（ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ，ＩＳＡ）を実装する汎用または組み込みプロセッサであり得る。マルチプロセッサシステムでは、プロセッサ５０１０のそれぞれは、必ずしもそうとは限らないが一般的に同じＩＳＡを実装することができる。
【００８９】
システムメモリ５０２０は、プロセッサ５０１０によってアクセス可能な命令およびデータを格納するように構成され得る。様々な実施形態において、システムメモリ５０２０は、スタティックランダムアクセスメモリ（ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ，ＳＲＡＭ）、シンクロナスダイナミックＲＡＭ（ｓｙｎｃｈｒｏｎｏｕｓ  ｄｙｎａｍｉｃ  ＲＡＭ，ＳＤＲＡＭ）、不揮発性／フラッシュ型メモリ、または任意の他のタイプのメモリなどの任意の適切なメモリ技術を使用して実装され得る。図示の実施形態では、プロバイダネットワーク環境においてクライアントのリソースに対してクライアント定義ルールを提供するための上述の方法、技法、およびデータなどの１つ以上の所望の機能を実装するプログラム命令およびデータは、コード５０２５およびデータ５０２６としてシステムメモリ５０２０内に格納されて示される。
【００９０】
一実施形態では、Ｉ／Ｏインターフェース５０３０は、プロセッサ５０１０、システムメモリ５０２０、およびネットワークインターフェース５０４０または他の周辺インターフェースを含むデバイス内の任意の周辺デバイスの間のＩ／Ｏトラフィックを調整するように構成され得る。いくつかの実施形態では、Ｉ／Ｏインターフェース５０３０は、ある構成要素（例えば、システムメモリ５０２０）からのデータ信号を別の構成要素（例えば、プロセッサ５０１０）による使用に適したフォーマットに変換するために必要な任意のプロトコル、タイミングまたは他のデータ変換を実行し得る。いくつかの実施形態では、Ｉ／Ｏインターフェース５０３０は、例えば、ペリフェラルコンポーネントインターコネクト（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ，ＰＣＩ）バス規格またはユニバーサルシリアルバス（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ，ＵＳＢ）規格の変形など、様々なタイプの周辺バスを介して付設されたデバイスのサポートを含むことができる。いくつかの実施形態において、Ｉ／Ｏインターフェース５０３０の機能は、例えば、ノースブリッジおよびサウスブリッジなどの２つ以上の別々の構成要素に分割され得る。また、いくつかの実施形態では、システムメモリ５０２０へのインターフェースなど、Ｉ／Ｏインターフェース５０３０の機能の一部または全部をプロセッサ５０１０に直接組み込むことができる。
【００９１】
ネットワークインターフェース５０４０は、コンピュータシステム５０００と、例えば図１から図１５に示されるような他のコンピュータシステムまたはデバイスなどのネットワーク５０５０に付設された他のデバイス５０６０との間でデータを交換することを可能にするように構成され得る。様々な実施形態において、ネットワークインターフェース５０４０は、例えば、イーサネットネットワークの種類など、任意の適切な有線または無線の一般データネットワークを介した通信をサポートしてもよい。さらに、ネットワークインターフェース５０４０は、アナログ音声ネットワークまたはデジタルファイバ通信ネットワークなどの電気通信／電話ネットワーク、ファイバチャネルＳＡＮなどのストレージエリアネットワーク、または任意の他の適切な種類のネットワークおよび／またはプロトコルを介した通信をサポートし得る。
【００９２】
いくつかの実施形態では、システムメモリ５０２０は、プロバイダネットワーク環境において仮想ネットワークを検証するための方法および装置の実施形態を実装するための、図１〜図１０に関して上述したプログラム命令およびデータを格納するように構成されたコンピュータアクセス可能媒体の一実施形態であり得る。しかしながら、他の実施形態では、プログラム命令および／またはデータは、異なるタイプのコンピュータアクセス可能媒体上で受信、送信または記憶されてもよい。一般的に言えば、コンピュータアクセス可能媒体は、Ｉ／Ｏインターフェース５０３０を介してコンピュータシステム５０００に結合されたディスクまたはＤＶＤ／ＣＤなどの磁気または光学媒体などの非一時的記憶媒体またはメモリ媒体を含むことができる。非一時的コンピュータアクセス可能記憶媒体はまた、システムメモリ５０２０または他のタイプのメモリとしてコンピュータシステム５０００のいくつかの実施形態に含まれ得る、ＲＡＭ（例えば、ＳＤＲＡＭ、ＤＤＲ  ＳＤＲＡＭ、ＲＤＲＡＭ、ＳＲＡＭなど）、ＲＯＭなどのような任意の揮発性または不揮発性媒体を含み得る。さらに、コンピュータアクセス可能媒体は、ネットワークインターフェース５０４０を介して実装され得るような、ネットワークおよび／または無線リンクなどの通信媒体を介して伝達される、電気信号、電磁気信号、またはデジタル信号などの伝送媒体または信号を含み得る。
【００９３】
結論
様々な実施形態は、コンピュータアクセス可能媒体上で前述の説明に従って実装された命令および／またはデータを受信、送信または記憶することをさらに含むことができる。一般的に言えば、コンピュータアクセス可能媒体は、ディスクまたはＤＶＤ／ＣＤ−ＲＯＭなどの磁気または光媒体、ＲＡＭ（例えば、ＳＤＲＡＭ、ＤＤＲ、ＲＤＲＡＭ、ＳＲＡＭなど）、ＲＯＭなどの揮発性または不揮発性媒体、ならびにネットワークおよび／または無線リンクなどの通信媒体を介して伝達される、電気信号、電磁気信号、またはデジタル信号などの伝送媒体または信号を含むことができる。
【００９４】
図面に示され、本明細書に記載されるような様々な方法は方法の例示的な実施形態を表す。方法は、ソフトウェア、ハードウェア、またはそれらの組み合わせで実装することができる。方法の順序は変更されてもよく、様々な要素が追加、並べ替え、結合、省略、修正などされてもよい。
【００９５】
本開示の恩恵を受ける当業者に明らかであるように、様々な修正および変更がなされ得る。そのような修正および変更をすべて包含し、したがって上記の説明を限定的な意味ではなく例示的な意味で見なすことを意図している。
【図１】
0006737965.tif 000002
【図２】
0006737965.tif 000003
【図３】
0006737965.tif 000004
【図４】
0006737965.tif 000005
【図５】
0006737965.tif 000006
【図６】
0006737965.tif 000007
【図７】
0006737965.tif 000008
【図８】
0006737965.tif 000009
【図９】
0006737965.tif 000010
【図１０】
0006737965.tif 000011
【図１１】
0006737965.tif 000012
【図１２】
0006737965.tif 000013
【図１３】
0006737965.tif 000014
【図１４】
0006737965.tif 000015
【図１５】
0006737965.tif 000016
【図１６】
0006737965.tif 000017