クエリ文字列認証

クエリ文字列認証は、上記の Authorization ヘッダーを使用する代わりに認証するための「署名」をURLのクエリパラメータに含めて認証する方法です。
この認証方法を利用することで、ウェブブラウザなどから本サービスのストレージに格納しているリソースに直接アクセスすることができます。

署名の作成方法

以下のリクエストを例に署名を作成する方法を説明します。

GET /mybucket/sample.zip
Host: s3api.iot.iij.jp

クエリ文字列認証には以下のクエリパラメータを使用します。

パラメータ名説明
IIJGIOAccessKeyId認証するアカウントのアクセスキーID
Expires

署名の有効期限

Epoch TimeまたはUNIX時間(1970/01/01からの経過秒)の形式で指定します。

Signature

認証に用いる署名文字列

URLに含めるため最終的にURLエンコードした文字列となります。詳細は以下をご覽ください。

 

署名の作成のステップは以下の通りです。


  1. 以下に示す署名元となる文字列を作ります。

    StringToSign = HTTP-VERB + "\n" +
      Content-MD5 + "\n" +
      Content-Type + "\n" +
      Expires + "\n" +
      CanonicalizedAmzHeaders +
      CanonicalizedResource;

    例のリクエストの有効期限を 2014年10月1日(2014-10-01T00:00:00) として作成すると以下のようになります。

    GET\n
    \n
    \n
    1412168119\n
    /mybucket/sample.zip
  2. 1 で作成した文字列をUTF-8にエンコードし、アクセスキーIDに対応するシークレットアクセスキーを秘密鍵としてHMAC-SHA1ハッシュ値を取ります。

    SignatureRaw = HMAC-SHA1( UTF-8-Encoding-Of( YourSecretAccessKey ), UTF-8-Encoding-Of( StringToSign ) ) 
  3. 2 で生成された値をBase64方式でエンコードし、その値をさらにURLエンコードします。

    Signature = URL-Encode( Base64( SignatureRaw ) ); 

    例えば、
    アクセスキーIDが EXAMPLE0000000000000
    シークレットアクセスキーが ExampleSecretAccessKey000000000000000000
    の場合は Signature は以下の文字列になります。

    37N5r3U0ZBr4Avh6B/rqZL7bftE%3D
  4. 作成した署名をURLに配置します。

    https://s3api.iot.iij.jp/mybucket/sample.zip?Expires=1412168119&IIJGIOAccessKeyId=EXAMPLE0000000000000&Signature=37N5r3U0ZBr4Avh6B/rqZL7bftE%3D