(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-04-22
(45)【発行日】2025-05-01
(54)【発明の名称】ソフトウェア展開構成のための署名の施行
(51)【国際特許分類】
H04L 9/32 20060101AFI20250423BHJP
G06F 21/64 20130101ALI20250423BHJP
G06F 21/51 20130101ALI20250423BHJP
【FI】
H04L9/32 200B
G06F21/64
G06F21/51
(21)【出願番号】P 2023501605
(86)(22)【出願日】2021-06-18
(86)【国際出願番号】 IB2021055395
(87)【国際公開番号】W WO2022018539
(87)【国際公開日】2022-01-27
【審査請求日】2023-11-14
(32)【優先日】2020-07-20
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【氏名又は名称】片岡 忠彦
(72)【発明者】
【氏名】マッカイ、マイケル
(72)【発明者】
【氏名】キッチナー、ジェイコブ、アンドリュー
(72)【発明者】
【氏名】キング、リチャード、アダム
(72)【発明者】
【氏名】レウィット、アレクサンダー
【審査官】行田 悦資
(56)【参考文献】
【文献】特開2017-108255(JP,A)
【文献】特開2013-047854(JP,A)
【文献】特表2017-500642(JP,A)
【文献】特表2019-534618(JP,A)
【文献】米国特許出願公開第2018/0091484(US,A1)
【文献】国際公開第2020/105032(WO,A1)
【文献】国際公開第2000/064122(WO,A1)
【文献】須田 瑛大 ほか,Docker/Kubernetes 開発・運用のためのセキュリティ実践ガイド,第1版,株式会社マイナビ出版 滝口 直樹,2020年02月27日,pp.187-190
【文献】MOUAT, Adrian,Docker,第1版,株式会社オライリー・ジャパン オライリー ティム,2016年08月12日,pp.312-320
【文献】福田 潔,注目のコンテナー運用管理/運用自動化ツール Kubernetesを知る,シェルスクリプトマガジン,日本,USP研究所,2018年05月25日,vol. 54,pp.42-51
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/32
G06F 21/64
G06F 21/51
(57)【特許請求の範囲】
【請求項1】
コンピュータ実施方法であって、
プロセッサによって、
ソフトウェアをノードに展開する前に前記ソフトウェアに関連付けられた展開リソースを遮断することであって、前記展開リソースが、前記ソフトウェアが展開され、動作する方法を構成する、前記遮断することと、
前記展開リソースの中に存在するデジタル署名の真正性を検証することと、
前記デジタル署名の前記真正性を検証することに応答して、前記展開リソースに従って前記ソフトウェアを前記ノードに展開することと、
を含み、
ここで、前記デジタル署名はメッセージ・ダイジェストが秘密鍵で暗号化されたものであり、前記メッセージ・ダイジェストは、前記展開リソースのうちのユーザによって選択された1つまたは複数のセクションを一方向ハッシュ関数で暗号化して生成されたものである、前記1つまたは複数のセクションは、検証されることが保証されることが意図されるセクションである、
コンピュータ実施方法。
【請求項2】
前記デジタル署名の前記真正性を検証することが、
前記プロセッサによって、
アドミッション・ポリシーを取り出すことであって、前記アドミッション・ポリシーが、前記ソフトウェアの展開に必要な1つまたは複数の
デジタル署名を指定する、前記取り出すことと、
前記必要な1つまたは複数の
デジタル署名が前記展開リソースの中に存在することを検証することと、
をさらに含む、請求項1に記載のコンピュータ実施方法。
【請求項3】
前記プロセッサによって、
署名する前記展開リソースの中のセクションの選択を受信することと、
選択された前記セクションをハッシュ関数および秘密鍵で暗号化することと、
デジタル署名および前記展開リソースの中の前記セクションの識別を付加することと、
をさらに含む、請求項1に記載のコンピュータ実施方法。
【請求項4】
前記デジタル署名の前記真正性を検証することが、
前記プロセッサによって、
前記デジタル署名を復号することと、
結果となるハッシュ関数を、前記セクションにおいてデータに関連付けられたハッシュ関数と比較することと、
を含む、請求項3に記載のコンピュータ実施方法。
【請求項5】
前記アドミッション・ポリシーが、前記展開リソースの複数のセクションおよび各セクションに必要な対応する
デジタル署名をさらに指定する、請求項2に記載のコンピュータ実施方法。
【請求項6】
前記展開リソースが、Kubernetes YAMLファイルである、請求項1に記載のコンピュータ実施方法。
【請求項7】
前記デジタル署名および前記展開リソースの中の前記セクションの識別が、前記展開リソースについての最上位メタデータ内の注釈に付加される、請求項3に記載のコンピュータ実施方法。
【請求項8】
プロセッサに、請求項1ないし7のいずれか一項に記載のコンピュータ実施方法を実行させるためのプログラム。
【請求項9】
請求項8に記載のプログラムを記憶する記憶媒体。
【請求項10】
請求項1ないし7のいずれか一項に記載のコンピュータ実施方法を実行するプロセッサを備えたコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、ソフトウェア展開の分野に関し、より詳細には、ソフトウェア展開構成データの署名の施行に関する。
【背景技術】
【0002】
ソフトウェア展開は、ソフトウェア・システムを使用するために利用可能にするアクティビティの全てを含む。典型的には、ソフトウェア展開のための2つの必要な項目は、コンテンツおよび構成である。構成は、アプリケーションが展開される方法、およびアプリケーションが一旦展開されるとどのように動作するかを構成するデータを指す。構成ファイルは、アプリケーションまたはコンテナのためのパラメータおよび初期設定を構成するために使用される。例としての構成ファイルは、Kubernetes(R)YAML(YAML Ain’t Markup Language)およびAnsible(R)Playbookを含む。Ansibleは、米国およびその他の国におけるRed Hat,Inc.またはその子会社の商標または登録商標である。
【0003】
デジタル署名(digital signature)などの暗号署名技術は、デジタル・メッセージまたは文書の真正性を検証するための数学的方式である。有効なデジタル署名は、文書が署名者によって生成または編集されたこと、およびメッセージが輸送中に変更されなかったことを信じる1つの強力な理由を与える。デジタル署名は、非対称暗号を採用し、安全でないチャネルを通して送信されたメッセージまたは文書に対して妥当性検査およびセキュリティの層を提供し得る。典型的には、デジタル署名プロセスに関係する3つのアルゴリズムが存在する。鍵生成アルゴリズムは、秘密鍵をその対応する公開鍵と共に受信すると署名を作り出す。署名アルゴリズムは、秘密鍵および署名されているメッセージまたはデータを受信すると署名を作り出す。検証アルゴリズムは、署名および公開鍵と共にメッセージを検証することによってメッセージの真正性をチェックする。
【発明の概要】
【0004】
本発明の実施形態の態様は、方法、コンピュータ・プログラム製品、およびコンピュータ・システムを開示する。プロセッサは、ソフトウェアをノードに展開する前にソフトウェアに関連付けられた展開リソース(deployment resource)を遮断し、展開リソースが、ソフトウェアが展開され、動作する方法を構成する。プロセッサは、展開リソースの中に存在するデジタル署名の真正性を検証する。プロセッサは、デジタル署名の真正性を検証することに応答して、展開リソースに従ってソフトウェアをノードに展開する。
【0005】
発明の実施形態は、ここで単なる例として添付図面を参照して説明される。
【図面の簡単な説明】
【0006】
【
図1】本発明の実施形態による、クラウド・コンピューティング・ノードを示す図である。
【
図2】本発明の実施形態による、クラウド・コンピューティング環境を示す図である。
【
図3】本発明の実施形態による、抽象モデル層を示す図である。
【
図4】本発明の実施形態による、コンピューティング環境のブロック図である。
【
図5】本発明の実施形態による、展開リソースにおいてデジタル署名を生成する動作ステップを示すフローチャートである。
【
図6】本発明の実施形態による、展開リソースにおいてデジタル署名を検証する動作ステップを示すフローチャートである。
【
図7】本発明の実施形態による、例としてのアドミッション・ポリシー(admissionpolicy)を示す図である。
【
図8】本発明の実施形態による、例としての展開リソースを示す図である。
【
図9】本発明の実施形態による、別の例としての展開リソースを示す図である。
【発明を実施するための形態】
【0007】
ソフトウェア展開は、展開されるソフトウェア(即ち、コンテンツ)および構成データを含む。構成データおよび関連する展開メタデータは、本明細書ではまとめて展開リソースと呼ばれ、アプリケーションが展開される方法、およびアプリケーションが一旦展開されるとどのように動作するかを構成する機密データを含み得る。本発明の実施形態は、ソフトウェア展開において、構成データおよび関連する展開メタデータの起点および完全性を検証する方法が現在存在しないことを認識している。本発明の実施形態は、コンテンツおよび展開リソースの両方の検証がソフトウェア・プラットフォームのセキュリティに不可欠であることをさらに認識している。本発明の実施形態は、ソフトウェア展開構成またはメタデータ展開リソースあるいはその両方に署名する暗号署名技術を使用する手法を提供する。システムは、その際、展開リソースの起点および完全性を検証し、署名がアドミッション・ポリシーに準拠しているかどうかを判定する暗号署名技術に依存し得る。その後、そのような検証は、提供された展開リソースに従って、ソフトウェアを展開するか否かを判定するために使用され得る。
【0008】
本開示は、クラウド・コンピューティングについての詳細な説明を含むが、本明細書に挙げる教示の実施態様は、クラウド・コンピューティング環境に限定されないと理解されたい。むしろ、本発明の実施形態は、現在既知の、または後に開発される任意の他の種類のコンピューティング環境と併せて実施されることが可能である。
【0009】
クラウド・コンピューティングは、最小の管理労力またはサービス・プロバイダとの対話で迅速に供給され、リリースされ得る、構成可能なコンピューティング・リソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想機械、およびサービス)の共有プールへの便利なオンデマンド・ネットワーク・アクセスを可能にするためのサービス配信のモデルである。このクラウド・モデルは、少なくとも5つの特性、少なくとも3つのサービス・モデル、および少なくとも4つの展開モデルを含み得る。
【0010】
特性は、以下の通りである。
オンデマンド・セルフサービス:クラウド消費者は、サービス・プロバイダと人との対話を必要とすることなく、必要に応じて自動的に、サーバ時間およびネットワーク・ストレージなどのコンピューティング・ケイパビリティを一方的に供給し得る。
幅広いネットワーク・アクセス:ケイパビリティは、ネットワーク上で利用可能であり、異種シン・クライアントまたはシック・クライアント・プラットフォーム(例えば、携帯電話、ラップトップ、およびPDA)による使用を促進する標準的なメカニズムを通してアクセスされる。
リソースの共用:プロバイダのコンピューティング・リソースが、マルチテナント型モデルを使用して複数の消費者にサービスするためにプールされ、異なる物理リソースおよび仮想リソースが要求に従って動的に割り当ておよび再割り当てされる。消費者が、概して、提供されるリソースの正確な場所に対する制御または知識を有しないが、より高い抽象レベル(例えば、国、州、またはデータセンタ)において場所を指定することが可能であり得るという点において、位置独立の意味がある。
スピーディな拡張性:ケイパビリティは、場合によっては自動的に、即座にスケール・アウトするようにスピーディかつ弾力的に供給され、即座にスケール・インするようにスピーディに解放され得る。消費者に対しては、供給に利用可能なケイパビリティが、多くの場合無制限であるように見え、いつでも任意の量で購入可能である。
サービスが計測可能であること:クラウド・システムは、サービスの種類(例えば、ストレージ、処理、帯域幅、およびアクティブ・ユーザ・アカウント)に適したある抽象レベルにおいて計測ケイパビリティを活用することによって、リソース使用を自動的に制御し、最適化する。リソース使用量は、モニタリングされ、制御され、報告されて、利用サービスのプロバイダおよび消費者の両方に透明性をもたらし得る。
【0011】
サービス・モデルは、以下の通りである。
サービスとしてのソフトウェア(SaaS):消費者に提供されるケイパビリティは、クラウド・インフラ上で実行中のプロバイダのアプリケーションを使用することである。アプリケーションは、ウェブ・ブラウザなどのシン・クライアント・インターフェース(例えば、ウェブ・ベースの電子メール)を通して、様々なクライアント・デバイスからアクセス可能である。消費者は、限定されたユーザ固有アプリケーションの構成設定は例外である可能性があるが、ネットワーク、サーバ、オペレーティング・システム、ストレージ、または個々のアプリケーション・ケイパビリティでさえも含む、基礎的なクラウド・インフラを管理または制御しない。
サービスとしてのプラットフォーム(PaaS):消費者に提供されるケイパビリティは、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、消費者が作成したアプリケーションまたは消費者が取得したアプリケーションを、クラウド・インフラ上に展開することである。消費者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基礎的なクラウド・インフラを管理または制御しないが、展開されたアプリケーション、および可能な限りアプリケーション・ホスティング環境構成に対して制御を行う。
サービスとしてのインフラ(IaaS):消費者に提供されるケイパビリティは、処理、ストレージ、ネットワーク、ならびに消費者がオペレーティング・システムおよびアプリケーションを含み得る任意のソフトウェアを展開および実行することが可能な、他の基本コンピューティング・リソースを供給することである。消費者は、基礎となるクラウド・インフラを管理または制御しないが、オペレーティング・システム、ストレージ、展開されたアプリケーションに対して制御を行い、かつ可能な限り選択ネットワーキング・コンポーネント(例えば、ホスト・ファイアウォール)の限定的な制御を行う。
【0012】
展開モデルは、以下の通りである。
プライベート・クラウド:クラウド・インフラは、ある組織のためだけに運用される。クラウド・インフラは、その組織または第三者によって管理されてもよく、構内または構外に存在し得る。
コミュニティ・クラウド:クラウド・インフラは、複数の組織によって共有され、共有の関心事(例えば、任務、セキュリティ要件、ポリシー、およびコンプライアンスの考慮事項)を有する特定のコミュニティをサポートする。クラウド・インフラは、組織または第三者によって管理されてもよく、構内または構外に存在し得る。
パブリック・クラウド:クラウド・インフラは、一般公衆または大きな業界団体に利用可能とされ、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド:クラウド・インフラは、一意なエンティティのままであるが、データおよびアプリケーション・ポータビリティを可能にする標準化技術または独自技術(例えば、クラウド間のロード・バランシングのためのクラウド・バースティング)によって結合された、2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)の合成物である。
【0013】
クラウド・コンピューティング環境は、無国籍、低結合、モジュール性、および意味相互運用性を中心としたサービス指向型である。クラウド・コンピューティングの中心は、相互接続されたノードのネットワークを含むインフラである。
【0014】
ここで
図1を参照すると、クラウド・コンピューティング・ノードの一例の概略が示されている。クラウド・コンピューティング・ノード10は、適当なコンピューティング・ノードの単なる一例であり、本明細書に記載される発明の実施形態の使用または機能性の範囲に関していかなる限定も示唆することを意図するものではない。それに関わらず、クラウド・コンピューティング・ノード10は、実施されること、または上述した機能性のいずれかを実行すること、あるいはその両方が可能である。
【0015】
クラウド・コンピューティング・ノード10には、コンピュータ・システム/サーバ12が存在し、コンピュータ・システム/サーバ12は、多数の他の汎用または専用コンピューティング・システム環境または構成を用いて動作可能である。コンピュータ・システム/サーバ12を用いた使用に適当であり得る周知のコンピューティング・システム、環境、または構成、あるいはそれらの組み合わせの例は、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、手持ち式またはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサベース・システム、セット・トップ・ボックス、プログラマブル家電、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記システムまたはデバイスのいずれかを含む分散型クラウド・コンピューティング環境などを含むが、それらに限定されない。
【0016】
コンピュータ・システム/サーバ12は、コンピュータ・システムによって実行されている、プログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的文脈において説明され得る。概して、プログラム・モジュールは、特定のタスクを実行し、または特定の抽象データ型を実施する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含み得る。コンピュータ・システム/サーバ12は、通信ネットワークを通してリンクされたリモート処理デバイスによってタスクが実行される、分散型クラウド・コンピューティング環境において実施され得る。分散型クラウド・コンピューティング環境では、プログラム・モジュールが、メモリ記憶デバイスを含むローカルおよびリモート両方のコンピュータ・システム記憶媒体内に位置し得る。
【0017】
図1に示されるように、クラウド・コンピューティング・ノード10内のコンピュータ・システム/サーバ12は、汎用コンピューティング・デバイスの形態で示されている。コンピュータ・システム/サーバ12のコンポーネントは、1つまたは複数のプロセッサまたは処理ユニット16、システム・メモリ28、およびシステム・メモリ28を含む様々なシステム・コンポーネントをプロセッサ16に連結するバス18を含み得るが、それらに限定されない。
【0018】
バス18は、メモリ・バスまたはメモリ・コントローラ、周辺バス、高速グラフィック・ポート、および多様なバス・アーキテクチャのいずれかを使用するプロセッサまたはローカル・バスを含む、複数種類のバス構造のいずれかの1つまたは複数を表す。限定ではなく例として、そのようなアーキテクチャは、インダストリ・スタンダード・アーキテクチャ(ISA)・バス、マイクロ・チャネル・アーキテクチャ(MCA)・バス、拡張ISA(EISA)バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション(VESA)・ローカル・バス、およびペリフェラル・コンポーネント・インターコネクト(PCI)・バスを含む。
【0019】
コンピュータ・システム/サーバ12は、典型的には多様なコンピュータ・システム可読媒体を含む。このような媒体は、コンピュータ・システム/サーバ12によってアクセス可能な任意の利用可能な媒体であってもよく、それは、揮発性媒体および不揮発性媒体の両方、リムーバブル媒体および非リムーバブル媒体の両方を含む。
【0020】
システム・メモリ28は、コンピュータ・システム可読媒体を、ランダム・アクセス・メモリ(RAM)30またはキャッシュ・メモリ32あるいはその両方などの揮発性メモリの形態で含み得る。コンピュータ・システム/サーバ12は、他のリムーバブル/非リムーバブル、揮発性/不揮発性コンピュータ・システム記憶媒体をさらに含み得る。単なる例として、記憶システム34は、非リムーバブル不揮発性磁気媒体(図示せず、かつ典型的には「ハード・ドライブ」と呼ばれる)からの読み出しおよび書き込みのために提供され得る。図示されないが、リムーバブル不揮発性磁気ディスク(例えば、「フロッピー・ディスク」)からの読み出しおよび書き込みのための磁気ディスク・ドライブ、ならびにCD-ROM、DVD-ROM、または他の光学媒体などのリムーバブル不揮発性光ディスクからの読み出しまたは書き込みのための光学ディスク・ドライブが、提供されてもよい。このような事例では、それぞれが、1つまたは複数のデータ媒体インターフェースによってバス18に接続され得る。さらに図示され、後述されるように、メモリ28は、本発明の実施形態の機能を実行するように構成されるプログラム・モジュールのセット(例えば、少なくとも1つ)を有する少なくとも1つのプログラム製品を含み得る。
【0021】
プログラム・モジュール42のセット(少なくとも1つ)を有するプログラム/ユーティリティ40は、限定ではなく例として、オペレーティング・システム、1つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データと同様に、メモリ28に記憶され得る。オペレーティング・システム、1つもしくは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データのそれぞれ、またはそれらの何らかの組み合わせは、ネットワーキング環境の実施態様を含み得る。プログラム・モジュール42は、概して、本明細書に記載される発明の実施形態の機能または方法論あるいはその両方を実行する。
【0022】
コンピュータ・システム/サーバ12は、また、キーボード、ポインティング・デバイス、ディスプレイ24などの1つもしくは複数の外部デバイス14、ユーザがコンピュータ・システム/サーバ12と対話することを可能にする1つもしくは複数のデバイス、またはコンピュータ・システム/サーバ12が1つもしくは複数の他のコンピューティング・デバイスと通信することを可能にする任意のデバイス(例えば、ネットワーク・カード、モデムなど)、あるいはそれらの組み合わせと通信し得る。このような通信は、入力/出力(I/O)インターフェース22を介して発生し得る。さらに、コンピュータ・システム/サーバ12は、ローカル・エリア・ネットワーク(LAN)、汎用ワイド・エリア・ネットワーク(WAN)、または公衆ネットワーク(例えば、インターネット)、あるいはそれらの組み合わせなどの1つまたは複数のネットワークと、ネットワーク・アダプタ20を介して通信し得る。図示されるように、ネットワーク・アダプタ20は、バス18を介してコンピュータ・システム/サーバ12の他のコンポーネントと通信する。図示されないが、他のハードウェア・コンポーネントまたはソフトウェア・コンポーネント、あるいはその両方が、コンピュータ・システム/サーバ12と併せて使用され得ると理解されたい。例は、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、およびデータ・アーカイブ記憶システムなどを含むが、それらに限定されない。
【0023】
ここで
図2を参照すると、例示的なクラウド・コンピューティング環境50が示されている。図示するように、クラウド・コンピューティング環境50は、クラウド消費者によって使用されるローカル・コンピューティング・デバイス、例えば、携帯情報端末(PDA)もしくは携帯電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、または自動車コンピュータ・システム54N、あるいはそれらの組み合わせが通信し得る、1つまたは複数のクラウド・コンピューティング・ノード10を含む。ノード10は、互いに通信し得る。それらは、上述のようなプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、もしくはハイブリッド・クラウド、またはそれらの組み合わせなどの、1つまたは複数のネットワーク内で物理的または仮想的にグループ化され得る(図示せず)。これによって、クラウド・コンピューティング環境50が、インフラ、プラットフォーム、またはソフトウェア、あるいはそれらの組み合わせを、クラウド消費者がローカル・コンピューティング・デバイス上でリソースを維持する必要がないサービスとして提案することが可能となる。
図2に示されるコンピューティング・デバイス54A~Nの種類は、単なる例示であるように意図され、コンピューティング・ノード10およびクラウド・コンピューティング環境50は、(例えば、ウェブ・ブラウザを用いて)任意の種類のネットワークまたはネットワーク・アドレス可能な接続あるいはその両方を経て、任意の種類のコンピュータ化デバイスと通信し得ると理解されたい。
【0024】
ここで
図3を参照すると、クラウド・コンピューティング環境50(
図2)によって提供される機能抽象層のセットが示されている。
図3に示されるコンポーネント、層、および機能は、単なる例示であるように意図され、本発明の実施形態は、それらに限定されないと、予め理解されたい。図示されるように、以下の層および対応する機能が提供される。
【0025】
ハードウェアおよびソフトウェア層60は、ハードウェアおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例は、メインフレーム61、RISC(Reduced Instruction Set Computer)アーキテクチャ・ベース・サーバ62、サーバ63、ブレード・サーバ64、記憶デバイス65、ならびにネットワークおよびネットワーキング・コンポーネント66を含む。いくつかの実施形態において、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア67およびデータベース・ソフトウェア68を含む。
【0026】
仮想化層70は、仮想エンティティの以下の例、仮想サーバ71、仮想ストレージ72、仮想プライベート・ネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティング・システム74、ならびに仮想クライアント75が提供され得る、抽象層を提供する。
【0027】
一例では、管理層80は、後述の機能を提供し得る。リソース供給81は、クラウド・コンピューティング環境内でタスクを実行するために利用される、コンピューティング・リソースおよび他のリソースの動的な調達を提供する。測定および価格設定82は、リソースが、クラウド・コンピューティング環境内で利用され、これらのリソースの消費に対して課金または請求されるときに、コスト追跡を提供する。一例では、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含み得る。セキュリティは、データおよび他のリソースについての保護だけでなく、クラウド消費者およびタスクのための本人確認を提供する。ユーザ・ポータル83は、消費者およびシステム管理者にクラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理84は、要求されるサービス・レベルが満たされるように、クラウド・コンピューティング・リソース割り当ておよび管理を提供する。サービス水準合意(SLA)計画および遂行85は、SLAに従って将来の要件が予期されるクラウド・コンピューティング・リソースの事前配置および調達を提供する。
【0028】
ワークロード層90は、クラウド・コンピューティング環境が利用され得る機能性の例を提供する。この層から提供され得るワークロードおよび機能の例は、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想クラスルーム教育配信93、データ解析処理94、トランザクション処理95、ならびにモバイル・デスクトップ96を含む。
【0029】
図4は、本発明の一実施形態による、概して400と指定されたコンピューティング環境を示す機能ブロック図である。コンピューティング環境400は、
図2を参照して説明されるように、クラウド・コンピューティング環境50のアーキテクチャの一例の部分図である。
図4は、一実施形態の例示のみを提供し、異なる実施形態が実施され得る環境に関していかなる限定も示唆しない。
【0030】
図示される実施形態では、コンピューティング環境400は、ネットワーク410を経て相互接続されたサーバ420およびノード480を含む。ネットワーク410は、ローカル・エリア・ネットワーク(LAN)、インターネットなどのワイド・エリア・ネットワーク(WAN)、公衆電話交換網(PSTN)、それらの任意の組み合わせ、またはサーバ420とノード480との間の通信をサポートする接続およびプロトコルの任意の組み合わせであってもよい。ネットワーク410は、有線、無線、または光ファイバ接続を含んでもよい。コンピューティング環境400は、図示されない追加サーバ、コンピューティング・デバイス、または他のデバイスを含んでもよい。
【0031】
サーバ420は、管理サーバ、ウェブサーバ、またはデータを受信および送信することが可能な任意の他の電子デバイスもしくはコンピューティング・システムであってもよい。いくつかの実施形態では、サーバ420は、ラップトップ・コンピュータ、タブレット・コンピュータ、パーソナル・コンピュータ(PC)、デスクトップ・コンピュータ、またはネットワーク410を介してノード480と通信することが可能な任意のプログラマブル電子デバイスであってもよい。一実施形態では、サーバ420は、クラウド・コンピューティング環境50などのクラウド・コンピューティング環境の、ノード10などのノードを表す(
図2を参照)。いくつかの実施形態では、サーバ420は、クラスタ化コンピュータおよびコンポーネントを使用してシームレスなリソースの単一プールとして機能するサーバ・コンピューティング・システムを表し得る。図示される実施形態では、サーバ420は、展開プログラム430、署名機能(signature function)440、検証機能(verification function)450、ソフトウェア460、およびアドミッション・ポリシー470を少なくとも含む。
【0032】
ノード480は、管理サーバ、ウェブサーバ、またはデータを受信および送信することが可能な任意の他の電子デバイスもしくはコンピューティング・システムであってもよい。いくつかの実施形態では、ノード480は、ラップトップ・コンピュータ、タブレット・コンピュータ、ネットブック・コンピュータ、パーソナル・コンピュータ(PC)、デスクトップ・コンピュータ、またはネットワーク410を介してサーバ420と通信することが可能な任意のプログラマブル電子デバイスであってもよい。一実施形態では、ノード480は、クラウド・コンピューティング環境50にアクセスし、または通信し、あるいはその両方を行うために使用される、コンピューティング・デバイス54A~54Nなどのコンピューティング・デバイスの一例である。別の実施形態では、ノード480は、クラウド・コンピューティング環境50などのクラウド・コンピューティング環境の、ノード10などのノードを表す(
図2を参照)。いくつかの実施形態では、ノード480は、クラウド・コンピューティング環境などにおけるサーバ・システムとして複数のコンピュータを使用するサーバ・コンピューティング・システムを表し得る。いくつかの実施形態では、ノード480は、クラスタ化コンピュータおよびコンポーネントを使用してシームレスなリソースの単一プールとして機能するコンピューティング・システムを表す。図示された実施形態では、ノード480は、ソフトウェア490を含む。複数のノードとして図示されているが、ノード480は、様々な実施形態において、1つまたは任意の他の数のノードを表し得る。
【0033】
一実施形態では、サーバ420およびノード480は、Kubernetes(R)環境の一部であり、そこでは、サーバ420はマスタ・ノードを表し、ノード480は、1つまたは複数のワーカー・ノードを表す。そのような実施形態では、検証機能450は、マスタ・ノード内のアプリケーション・プログラミング・インターフェース(API)・サーバの一部であってもよい。
【0034】
展開プログラム430は、サーバ420上で実行する。展開プログラム430は、専用展開プログラム、オーケストレーションもしくはソフトウェア展開プログラムなどの別のプログラム内に統合された機能、またはノード480と通信し、展開リソースと対話するため、および展開リソースの暗号署名を生成/施行するためのユーザ・インターフェースを提供し得る任意の他のプログラムもしくは機能であってもよい。他の実施形態では、展開プログラム430が、ソフトウェア460、アドミッション・ポリシー470、およびノード480と通信し得る限り、展開プログラム430は、他のデバイス上に存在してもよい。展開プログラム430は、署名機能440および検証機能450を含み得る。
【0035】
署名機能440は、署名される展開リソースの1つまたは複数のセクションの選択を受信し、選択されたセクションを暗号化し、展開リソースへ署名を付加するように動作する。署名機能440は、展開プログラム430の機能であってもよく、またはスタンドアロン・プログラムであってもよい。一実施形態では、署名機能440は、サーバ420上に存在する。他の実施形態では、署名機能440が、展開プログラム430にアクセス可能であり、ソフトウェア460またはアドミッション・ポリシー470あるいはその両方へのアクセス権を有する限り、署名機能は、別のサーバまたは別のコンピューティング・デバイス上に存在してもよい。
【0036】
検証機能450は、ソフトウェアの展開の前に展開リソースを遮断し、展開リソース内に存在する署名がアドミッション・ポリシーに準拠しているかどうかを検証するように、動作する。検証機能450は、展開プログラム430の機能であってもよく、またはスタンドアロン・プログラムであってもよい。Kubernetes(R)環境では、検証機能450は、アドミッション・コントローラとして実施され得る。アドミッション・コントローラは、Kubernetes(R)APIサーバに対する要求を遮断するコードの一部分である。一実施形態では、検証機能450は、サーバ420上に存在する。他の実施形態では、検証サーバが、展開プログラム430にアクセス可能であり、ソフトウェア460およびアドミッション・ポリシー470へのアクセス権を有する限り、検証機能450は、別のサーバまたは別のコンピューティング・デバイス上に存在してもよい。
【0037】
ソフトウェア460は、展開プログラム430および署名機能440によって書き込みおよび読み出しされ得る、かつ検証機能450にアクセス可能であり得るリポジトリであってもよい。ソフトウェア460は、例えば、ソフトウェア、ならびに構成ファイル(例えば、YAML、Ansible(R)Playbook)および関連メタデータなどの展開リソースを含み得る。ソフトウェア・コンテンツは、例えば、仮想機械およびコンテナ・イメージを含み得る。概して、ソフトウェア460は、ノード480に展開可能なコンテンツおよび構成データの任意の組み合わせを含み得る。ソフトウェア460は、例えば、データベースであってもよい。
【0038】
アドミッション・ポリシー470は、展開プログラム430によって書き込みおよび読み出しされ得る、かつ署名機能440または検証機能450あるいはその両方にアクセス可能なリポジトリであってもよい。アドミッション・ポリシー470は、ソフトウェア・リソースの展開についての1つまたは複数のアドミッション・ポリシーを含み得る。概して、アドミッション・ポリシーは、ソフトウェアを展開するために満たしている必要がある、特定のセクションまたは構成ファイル全体のいずれかについての署名要件を指定する。より詳細には、アドミッション・ポリシー470は、構成ファイルの特定のセクションおよび特定のセクションのそれぞれについて必要な署名を指定し得る。例としてのアドミッション・ポリシーが、
図7に示されている。各アドミッション・ポリシーは、いくつかの識別手段、例えば電子メール・アドレスまたはユーザ識別を介して、1つまたは複数の個人を指定し得る。アドミッション・ポリシーは、識別された個人によって署名される必要がある、構成ファイルのセクションを示す特定のパスをさらに指定する。アドミッション・ポリシーは、セクションに署名する必要がある任意の数の特定の個人を指定してもよく、または、例えば署名が必要ない場合、いかなる個人も指定しなくてもよい。いくつかの実施形態では、複数のユーザが列挙される場合、列挙された各個人が、セクションに署名する必要がある。他の実施形態では、複数のユーザが列挙される場合、列挙された個人のうちの少なくとも1人が、セクションに署名する必要がある。適用可能なアドミッション・ポリシーは、クライアント、対象ノード、ソフトウェアの種類などの因子に基づいて変化し得る。いくつかの実施形態では、アドミッション・ポリシーは、展開を担当するクライアントまたはエンティティにより手動で入力される。
【0039】
ソフトウェア490は、検証機能450によって検証されている適用可能なアドミッション・ポリシー要件を満たした後展開プログラム430によって展開されているソフトウェアであってもよい。ソフトウェア490は、例えば、コンテナ、仮想機械、アプリケーション、または展開可能な任意の他のソフトウェアであってもよい。
【0040】
図5は、本発明の一実施形態による、デジタル署名を構成ファイルなどの展開リソースに追加するために、
図1~4のコンピューティング環境内で実行する署名機能のステップのフローチャート500を示す。
【0041】
一実施形態では、最初に、管理ユーザが、ソフトウェア460に記憶されたソフトウェアなどの、展開されるソフトウェアに対応する構成ファイルなどの展開リソースを生成または編集する。そのような構成ファイルの例が、
図8および
図9に示されている。構成ファイルは、例えば、YAMLファイルであってもよい。概して、構成ファイルは、展開されるソフトウェアについてのパラメータおよび初期設定を構成するために使用される。本発明の実施形態は、構成ファイルなどの展開リソースに暗号署名技術を提供することの重要性を認識しており、これは、そのような展開リソースが、アプリケーションまたは他のソフトウェアが展開される方法および展開後に動作する方法を構成する機密データを含み得るためである。構成ファイルは、複数のセクション、および管理ユーザが構成ファイル内の特定セクションを選択することを可能にし得る組織構造を含み得る。
【0042】
ステップ510において、署名機能440は、署名する展開リソースの1つまたは複数のセクションの選択を受信する。いくつかの事例において、署名するユーザは、セクションの全てを選択してもよく、またはファイル全体が署名されることを指定してもよい。一方、他の事例において、署名するユーザは、展開リソースの1つまたは複数のセクションを選択してもよい。選択されたセクションは、署名するユーザが選択された各セクションのコンテンツに含まれる作業成果物を検証または保証することを意図する、展開リソースのセクションを表す。いくつかの事例において、選択されたセクションは、ユーザが編集または生成したセクションに対応し得る。他の事例において、選択されたセクションは、ユーザがレビューしたセクションに対応し得る。選択されたセクションは、ドット表記、スラッシュ表記、または別の手段によって識別され得る。いくつかの実施形態では、署名機能440は、そのような表記を提供するためのテキスト入力オプションを提供する。他の実施形態では、署名機能440は、ユーザが、グラフィック・ユーザ・インターフェース、および例えばカーソルを使用して展開リソースの1つまたは複数のセクションを強調または選択することを可能にし得る。
【0043】
ステップ520において、署名機能440は、1つまたは複数のダイジェストまたは暗号化メッセージあるいはその両方として選択されたセクションを暗号化する。いくつかの実施形態では、一方向ハッシュ関数が、選択されたセクション毎のメッセージ・ダイジェストを生成するために使用される。メッセージ・ダイジェストは、ハッシュ関数によって計算された、メッセージのコンテンツの固定サイズ数字表現である。メッセージ・ダイジェストは、暗号化されてデジタル署名を形成し得る。このようにして、他の実施形態では、生成されたメッセージ・ダイジェストが、秘密鍵で暗号化されて、デジタル署名を生成する。このような実施形態では、対応する公開鍵は、(i)検証機能450に既にアクセス可能にされているか、または(ii)展開リソースを検証する前に検証機能450にアクセス可能にされるか、のいずれかである。いくつかの実施形態では、対応する公開鍵は、アドミッション・ポリシー470に記憶される。
【0044】
ステップ530において、署名機能440は、展開リソースにデジタル署名を付加する。メッセージ・ダイジェストだけを必要とする実施形態では、デジタル署名ではなくメッセージ・ダイジェストが、リソースに付加されることに留意されたい。デジタル署名を必要とする実施形態では、デジタル署名が、展開リソースに付加される。いくつかの実施形態では、デジタル署名は、展開リソースについてのメタデータの最上位において注釈として付加される。しかしながら、本発明の実施形態は、デジタル署名が展開リソースの任意の位置に付加され得ることを認識している。デジタル署名と共に、署名機能440は、また、どのセクションまたは属性あるいはその両方が署名の中に含まれるかの記述を含み得る。言い換えると、デジタル署名は、どのセクションの検証かを証明している。どのセクションの記述が署名に含まれるかが、ドット表記またはスラッシュ表記など、これらに限定されない任意のフォーマットを用いてもよい。例えば、構成ファイルがYAMLファイルである場合、署名に関連付けられたYAMLファイルのセクションへのパスを記述するために、ドット表記が使用され得る。
【0045】
付加されるデジタル署名は、構成および利用メタデータの起点および完全性を確保し、検証する方法として機能し、検証機能450によって1つまたは複数の必要な集団または個人による署名の存在および真正性を検証するために使用され得る。
【0046】
図6は、本発明の一実施形態による、ソフトウェア展開前にアドミッション・ポリシーに対して構成ファイルなどの展開リソースの署名を検証するために、
図1~4のコンピューティング環境内で実行する検証機能450のステップのフローチャート600を示す。
【0047】
一実施形態では、最初に、ソフトウェア460からのソフトウェアは、1つまたは複数のノードに展開される。アドミッション・ポリシーは、生成され、アドミッション・ポリシー470に記憶されており、アドミッション・ポリシーは、ソフトウェア展開に関連付けられた1つまたは複数のセクション(または構成ファイル全体)についての署名要件を指定する。加えて、デジタル署名が使用されている場合、アドミッション・ポリシーによって必要とされる個人に関連付けられた1つまたは複数の公開鍵が、検証機能450にアクセス可能であってもよく、いくつかの実施形態では、そのような公開鍵は、アドミッション・ポリシー470のリポジトリ、または検証機能450にアクセス可能な別のデータベース/リポジトリにも記憶される。
【0048】
ステップ610において、検証機能450は、対応するソフトウェアの展開前に、展開リソースを遮断する。いくつかの実施形態では、検証機能450は、Kubernetes(R)アドミッション・コントローラである。アドミッション・コントローラは、オブジェクトの永続化の前であるが、要求が認証および認可された後に、Kubernetes(R)APIサーバへの要求を遮断するコードの一部分である。本発明の実施形態では、検証機能450は、妥当性検査コントローラとして動作する。妥当性検査コントローラは、それらが認めるオブジェクトを修正しなくてもよい。他の環境では、検証機能450は、対応するソフトウェアの展開前に展開リソースを遮断するように動作する展開プログラム430の任意の機能であってもよい。
【0049】
ステップ620において、検証機能450は、展開に必要な署名を識別する。検証機能450は、アドミッション・ポリシー470に記憶された、予め記憶されたアドミッション・ポリシーなどの、予め記憶されたアドミッション・ポリシーにアクセスし得る。前述の通り、アドミッション・ポリシーは、特定のソフトウェア、ソフトウェアが展開されるノード480に関連付けられたクライアント、開発/展開チーム、または展開を開始する前に確立され、アドミッション・ポリシーに記憶されている他の因子に対応する。検証機能450は、関連アドミッション・ポリシーから、必要な1つまたは複数の署名、およびそれらの署名に関連付けられた任意の関連セクションを抽出し得る。
【0050】
決定630において、検証機能450は、遮断される展開リソースにおいて署名が存在し、検証されるかどうかを判定する。検証機能450は、構成ファイルまたは他の展開リソースに存在する署名を比較し、必要な署名が存在するかどうかを判定する。加えて、検証機能450は、署名のそれぞれに関連付けられたハッシュ・アルゴリズムまたは公開鍵あるいはその両方を使用して、署名が有効であるかどうかを識別する。署名の検証は、ハッシュ関数をデータに適用すること、および署名者の公開鍵を用いて署名を復号することによって達成される。結果となるハッシュが等しい場合、署名は、有効であると確認され得る。署名機能440を参照して説明されたように、検証機能450は、付加されたパスまたはセクションの他の記述に基づいて、どのセクションが署名に関連付けられているかを判定する。いくつかの実施形態では、アドミッション・ポリシーは、複数の署名が1つのセクションに必要であり得ることを指定し得る。他の実施形態では、アドミッション・ポリシーは、以下の署名のうちの少なくとも1つが特定のセクションに必要であることを指定し得る。全てのセクションが署名検証を必要とするわけではない。
【0051】
検証機能450が、全ての必要署名が存在し検証されたと判定する場合(決定630、はいの分岐)、検証機能450は、構成および展開パラメータに従ってノード480へのソフトウェアの展開を許可し(ステップ640)、ソフトウェア490が関連ノード480上で動作する結果をもたらす。
【0052】
検証機能450が、必要署名が全て存在するわけではなく、または必要署名の全てが真正であると検証され得るわけではないと判定する場合(決定630、分岐なし)、検証機能は、ノード480へのソフトウェアの展開を妨げる。いくつかの実施形態では、展開が生じることを妨げることに加えて、検証機能450は、エラーまたは他の通知を生成し得る。そのようなエラーまたは通信は、展開に関連付けられた管理ユーザ、ソフトウェアの展開を予期していたノード480のそれぞれに関連付けられたユーザ、または他のユーザ、あるいはそれらの組み合わせに通信されてもよい。いくつかの実施形態では、通知は、ソフトウェアを展開できなくさせるものについての詳細を含んでもよい。例えば、検証機能450は、認証または検証されることができなかった展開リソースまたは署名あるいはその両方から欠落した必要な署名を指定し得る。署名を認証または検証することができないことは、署名者が署名を生成した後で、署名に関連付けられたセクションが修正されたことを意味し得る。そのような通知は、ソフトウェアを展開することを担当する管理ユーザに詳細を提供して、彼らが展開リソースでの任意の問題を訂正し、必要に応じて様々なセクションを放棄し、再びソフトウェアの展開を試みることをよりよく可能にし得る。
【0053】
図7は、
図8および
図9によって示される展開リソースに対する署名要件を施行するために使用される例としてのアドミッション・ポリシー700を示す。
【0054】
アドミッション・ポリシー700は、署名要件を含む5つのセクションを示す。より詳細には、「spec.replicas」、「spec.template.metadeta.*」、「spec.template.spec.containers.image」、「spec.template.spec.containers.ports」、および「spec.template.spec.containers.env.*」である。セクションを指定するパスは、ドット表記で書かれるが、本発明の実施形態は、セクションを識別するための他の種類の表記または記述手段が使用され得ることを認識している。「*」は、ワイルドカードとして機能し、例えば、メタデータ項目の全てのサブセクションが署名対象であることを示す。各セクションは、コロンの後に現れるそのセクションについての署名要件も含む。図示されるように、単一の署名を必要とするセクションもあれば、複数の列挙された署名(「または」が「||」と示される)から少なくとも1つの署名を必要とするセクションもある。図示されないが、アドミッション・ポリシー700において、他のアドミッション・ポリシーが、特定セクションについて複数の署名を列挙してもよく、列挙された署名の全てがソフトウェアの展開前に取得される必要があってもよい。例えば、アドミッション・ポリシー700には含まれないが、複数の署名を必要とするポリシーは、「spec.template.spec.containers.ports:bobsmith@foo.com&&alicejones@foo.com」(「および」が「&&」と示される)であってもよい。
【0055】
図8は、本明細書で展開リソース800と呼ばれる、例としての構成ファイルまたは展開リソースを示す。図示されるように、展開リソース800は、アドミッション・ポリシー700に対応し、検証機能450による検証を通過する展開リソースの例である。
【0056】
展開リソース800は、注釈として展開リソース800に付加されている署名セクション810を含み、署名セクション810は、アドミッション・ポリシー700の要件に対応するデジタル署名およびパスを含む。各署名は、(i)署名されているセクションを指定するパス、署名者識別タグ(図示される例では、署名者識別タグは電子メール・アドレスである)、および長い文字列として示される暗号化署名を含む。上述の通り、暗号化署名は、ハッシュ・アルゴリズムまたは署名者の秘密鍵あるいはその両方を用いて生成される。署名は、署名機能440によって、展開リソース800に付加されており、リポジトリ・アドミッション・ポリシー470からアドミッション・ポリシー700にアクセスすることによって、検証機能450により検証され得る。検証機能450は、署名者に関連付けられた公開鍵を用いて、暗号化された署名が正当であること、および関連セクション内のデータが修正されていないことを検証し得る。
【0057】
展開リソース800をアドミッション・ポリシー700と比較すると、アドミッション・ポリシー700によって指定された署名要件の全てが存在する。検証機能450が署名の完全性を検証することが可能であると仮定すると、展開リソース800は、ソフトウェア展開プロセスの間にソフトウェアを構成する際に使用されることが可能である。
【0058】
これに対して、
図9は、アドミッション・ポリシー700の要件を満たさない展開リソース900を示す。署名セクション910をレビューすると、署名920は、「bobsmith@foo.com」を指定し、アドミッション・ポリシー700は、セクション「spec.template.metadeta.*」に対して、「chrisbuck@foo.com」からの署名を要求している。したがって、検証機能450は、アドミッション・ポリシー700から必要な署名が不足しており、ノード480に展開されるように予定された対応ソフトウェアを構成するために展開リソース900が使用されることを妨げる。加えて、図示されないが、展開リソース900は、検証できない署名により困難をきたすこともある。例えば、必要な署名が追加され、次いで署名追加後に、関連セクションからのデータが修正された場合、セクションのコンテンツに対する変更が検証プロセスの間に不整合をもたらすため、署名はもはや有効ではなくなる。そのような状況では、検証機能450は、無効な署名に起因してソフトウェア展開のために展開リソースを処理できないと、再び判定する。
【0059】
前述の通り、検証機能450は、展開リソース900における欠陥を記述するエラーまたは通知を生成し得る。この特定の例では、検証機能450は、展開リソース900の「spec.template.metadeta.*」セクションに「bobsmith@foo.com」が署名したこと、およびアドミッション・ポリシー700が「chrisbuck@foo.com」からのデジタル署名を必要とすることを識別する通知を生成してもよい。さらに、別の署名が検証機能450によって無効であると判定されたと仮定すると、検証機能450は、通知に無効な署名を識別させる。そのような情報は、展開リソース900がアドミッション・ポリシー700の署名要件を満たすように、欠陥に対処し、展開リソース900を更新するように管理ユーザによって使用され得る。
【0060】
図8および
図9は、YAML構成ファイルとして示されているが、任意の種類の展開リソースまたは構成ファイルが、本発明の様々な実施形態によって使用され得ることに留意されたい。
【0061】
本発明は、統合の任意の可能な技術的詳細レベルにおけるシステム、方法、またはコンピュータ・プログラム製品、あるいはそれらの組み合わせであってもよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体(または複数の媒体)を含み得る。
【0062】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持し、記憶し得る有形デバイスであってもよい。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁気記憶デバイス、半導体記憶デバイス、または前述したものの任意の適当な組み合わせであってもよいが、それらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROMまたはフラッシュ・メモリ)、静的ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピー・ディスク、パンチカードまたは命令をその上に記録させる溝内の隆起構造などの機械的に符号化されたデバイス、および前述したものの任意の適当な組み合わせを含む。本明細書で用いられるコンピュータ可読記憶媒体は、電波もしくは他の自由伝播する電磁波、導波管もしくは他の送信媒体を通って伝播する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、または電線を通って送信される電気信号などの、一過性信号それ自体であると解釈されるべきではない。
【0063】
本明細書に記載されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいはネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくは無線ネットワーク、またはそれらの組み合わせを介して外部コンピュータまたは外部記憶デバイスに、ダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの組み合わせを含み得る。各コンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受信し、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体の記憶用にコンピュータ可読プログラム命令を転送する。
【0064】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路用の構成データ、またはSmalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語もしくは類似のプログラミング言語などの手続き型プログラミング言語を含む、1つもしくは複数のプログラミング言語の任意の組み合わせで書かれたソース・コードもしくはオブジェクト・コードのいずれかであってもよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で完全に、ユーザのコンピュータ上で部分的に、スタンドアロン・ソフトウェア・パッケージとして、ユーザのコンピュータ上で部分的にかつリモート・コンピュータ上で部分的に、またはリモート・コンピュータもしくはサーバ上で完全に、実行してもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意の種類のネットワークを通してユーザのコンピュータに接続されてもよく、または、接続は、(例えば、インターネット・サービス・プロバイダを用いてインターネットを通して)外部コンピュータに対して行われてもよい。いくつかの実施形態では、例えば、プログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を用いて電子回路を個別化することによって、コンピュータ可読プログラム命令を実行し得る。
【0065】
本発明の態様は、発明の実施形態による、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して、本明細書に記載される。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方のブロックの組み合わせが、コンピュータ可読プログラム命令によって実施され得ると理解されたい。
【0066】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作を実施する手段を生成するように、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。また、これらのコンピュータ可読プログラム命令は、命令が記憶されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作の態様を実施する命令を含む製品を含むように、コンピュータ可読記憶媒体に記憶され、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはそれらの組み合わせに特定の方式で機能するように指示することができるものであってもよい。
【0067】
また、コンピュータ可読プログラム命令は、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作を実施するように、コンピュータ実施プロセスを作り出すために、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【0068】
図面中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の考えられる実施態様のアーキテクチャ、機能性、および動作を例示している。この点に関して、フローチャートまたはブロック図内の各ブロックは、指定された論理機能を実施するための1つまたは複数の実行可能命令を含む、モジュール、セグメント、または命令の一部を表し得る。いくつかの代替実施態様において、ブロック内に記載された機能は、図面中に記載された順序以外で発生してもよい。例えば、連続して示される2つのブロックが、実際には、同時に、実質的に同時に、部分的もしくは全体的に時間的に重複して実行されて、1つのステップとして実現されてもよく、または、ブロックが、関係する機能性次第で逆の順序で実行されることがあってもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組み合わせが、指定された機能もしくは動作を実行し、または専用ハードウェアおよびコンピュータ命令の組み合わせを実行する専用ハードウェア・ベース・システムによって実施され得ることにも留意されたい。
【0069】
本発明の様々な実施形態の説明は、例示の目的で提示されているが、網羅的であること、または開示された実施形態に限定することを意図するものではない。本発明の範囲および思想から逸脱することなく、多くの変更および変形が当業者には明らかであろう。本明細書で使用される用語は、実施形態の原理、実際の用途、もしくは市場で発見される技術を超える技術的改善を最もよく説明するため、または他の当業者が本明細書で開示された実施形態を理解することを可能にするために、選択された。