IaaS クラウドで重要なProgrammable Infrastructure
SOAP API の電文
SOAP API として実際に送信するSOAP メッセージは、Amazon Web Services で定義されたWSDL に従った形式になっています。なお、SOAP メッセージはWS-Security 仕様に従って暗号化されたメッセージとなります。次に、暗号化される前のインスタンス起動要求を示します。
<RunInstances xmlns="http://ec2.amazonaws.com/doc/2009-04-04/"> <instancesSet> <item> <imageId>emi-CE56899A</imageId> <minCount>1</minCount> <maxCount>1</maxCount> </item> </instancesSet> <groupSet/> </RunInstances>
送信時にはこのXML メッセージ全体が暗号化され、セキュアなSOAP メッセージとして送信されます。
Query API の電文
Query API はSOAP API よりも単純なメッセージ構成です。Eucalyptus のエンドポイントに対して次のリクエストパラメータを付与し、HTTP リクエストをPOST します。
Action=RunInstances&AddressingType=public&AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXXXXXXXXXX&ImageId=emi-CE56899&MaxCount=1&MinCount=1&SignatureVersion=1&Timestamp=2010-12-28T12%3A31%3A00Z&Version=2009-04-04&Signature=XXXXXXXXXXXXXXXXXXXXXXXXXX
API の認証
Eucalyptus で提供されるAPI は、第三者からの攻撃を防ぐため、またAPI を利用するユーザーを特定するために認証を行います。認証の方式はSOAP API とQuery API とで異なりますが、ユーザー情報は両API で共通です。認証のための情報はEucalyptus のWeb UI から取得できます。
表1 にWeb UI からダウンロードできるユーザーの認証情報の一覧を示します。
表1 認証情報
クリックで拡大 |
SOAP メッセージの認証
SOAP メッセージを認証しリクエストを発行したユーザーを特定するために、X.509 証明書を利用します。また、WS-Security の仕様に基づき、メッセージの暗号化と署名が行われるため、ネットワークの盗み見やなり済ましなどのクラック行為に対して安全性を保つことができます( 図2 )。
図2:SOAP メッセージの暗号化と真正性(クリックで拡大) |
要求するリクエストメッセージは、XML 署名の仕様に従い秘密鍵で暗号化されます。暗号化されたリクエストメッセージを復号するためには秘密鍵に対応する公開鍵が必要となり、これはEucalyptus のデータベースに保存されています。ただし、このままだとどのユーザーからのリクエストなのかを判別できないため、X.509 証明書をBase64 でエンコードした状態でSOAP メッセージ内に配置します。これを「BinarySecurityToken」と呼びます。SOAP メッセージを受け取ったEucalyptus は、最初にX.509 証明書を見てどのユーザーから発行されたメッセージなのかを特定します。次に、ユーザーの持つ公開鍵をデータベースから取り出し、リクエストメッセージを復号して処理します。
なお、SOAP メッセージは発行時にタイムスタンプが付与されます。Eucalyptus ではメッセージ発行から5 分以上経過したメッセージは期限切れとして扱います。