リクエスト認証¶
本サービスへのアクセスはRESTベースのリクエストとして行なわれ、HTTPリクエストヘッダーに記述した認証ヘッダーにより正当性の検査が行なわれます。
認証ヘッダー¶
認証は、Authorizationヘッダーの内容により行なわれます。Authorizationヘッダーには、リクエスト内容の正当性を示すシグネチャを設定します。
シグネチャの内容¶
- シグネチャ(Signature)の内容を以下に示します。
Authorization = "IIJGIO" + " " + IIJGIOAccessKeyId + ":" + Signature; Signature = Base64( HMAC-SHA1( UTF-8-Encoding-Of( YourSecretAccessKeyID, StringToSign ) ) ); StringToSign = HTTP-Verb + "\n" + Content-Type + "\n" + Date + "\n" + CanonicalizedHeaders + CanonicalizedResource; CanonicalizedResource = [ "/" + Resource ] + <HTTP-Request-URI, from the protocol name up to the query string> + [ sub-resource, if present. ]; CanonicalizedHeaders = <described below>
CanonicalizedHeaders要素¶
CanonicalizedHeaders要素は、リクエストに含まれる全てのヘッダーのうち、x-iijgio-から始まるもの全てから生成されます。
CanonicalizedHeaders要素の生成の手順は以下の通りです。
- 全ての”x-iijgio-“で始まるヘッダーを小文字化します。(例:x-IIJgio-MyHeader -> x-iijgio-myheader)
全ての”x-iijgio-“で始まるヘッダーを、ヘッダー名でソートします。
- 複数の同名ヘッダーを1つのヘッダーとして結合します。(例: “x-iijgio-meta-username: fred”, “x-iijgio-meta-username: barney” -> “x-iijgio-meta-username: fred,barney”)
改行を含む連続した空白を単一の空白で置き換えます。
- ヘッダー内のコロン
:
に隣接するスペースを削除します。(例: “x-iijgio-meta-username: fred,barney” -> “x-iijgio-meta-username:fred,barney”) - 結果リストの全てのヘッダーに改行(
U+000A
)を付加します。CanonicalizedResource要素の生成は、このリストに含まれる全てのヘッダー文字列として連結して行います。
CanonicalizedResource要素¶
CanonicalizedResource要素は、リクエストの対象となる本サービスのリソースを表します。
CanonicalizedResource要素の生成の手順は以下の通りです。
空文字列(”“)で始めます。
- リクエストURLのパス部分を追加します。
バケットのURL指定方式が仮想ホスト形式の場合はバケット名を先頭に含めます
- 例:
/SampleCluster/sampledb/sampletbl
- リクエストに含まれるサブリソースを追加します。
URLのクエリストリングと同様に、パス部分と
?
で区切ります。- サブリソースの値と名前は
=
で区切ります。 - 値が無い(空白)の場合は
=
は含めません。
- 値が無い(空白)の場合は
- サブリソースの値と名前は
サブリソースが複数ある場合は辞書順(ABC順)でソートし、区切り文字に
&
を使用して列挙します。- 例:
/SampleCluster/sampledb/sampletbl?table
- CanonicalizedResource要素の生成時に含めるサブリソースのリストは以下のとおりです。
- clusterManagement
- database
- table
- query
- select
- split
StringToSign要素¶
StringToSign要素は、シグネチャを生成するためのソースとなる文字列です。
このStringToSign要素の生成にはCanonicalizedHeaders要素とCanonicalizedResource要素を使用しますので事前に生成しておく必要があります。
StringToSign要素の生成の手順は以下の通りです。
- HTTPのメソッド名、Content-Typeヘッダー、Dateヘッダーを改行それぞれの末尾に改行(
U+000A
)を付加し、連結します。 - リクエストにContent-Typeヘッダーを含まない場合は空文字列が代入されます。
- HTTPのメソッド名、Content-Typeヘッダー、Dateヘッダーを改行それぞれの末尾に改行(
CanonicalizedHeaders要素を追加します。
CanonicalizedResource要素を追加します。
例として、以下のリクエストの場合に生成されるStringToSignを示します。
POST /v1/?select HTTP1.1
Host: analysis-dag.iijgio.com
Content-Type: application/json
Content-Length: 233
Date: Wed, 25 Nov 2009 12:00:00 GMT
StringToSign:
POST
application/json
Wed, 25 Nov 2009 12:00:00 GMT
/v1/?select