クエリ文字列認証
クエリ文字列認証は、上記の Authorization ヘッダーを使用する代わりに認証するための「署名」をURLのクエリパラメータに含めて認証する方法です。
この認証方法を利用することで、ウェブブラウザなどから本サービスのストレージに格納しているリソースに直接アクセスすることができます。
署名の作成方法
以下のリクエストを例に署名を作成する方法を説明します。
GET /mybucket/sample.zip Host: s3api.iot.iij.jp
クエリ文字列認証には以下のクエリパラメータを使用します。
パラメータ名 | 説明 |
---|---|
IIJGIOAccessKeyId | 認証するアカウントのアクセスキーID |
Expires | 署名の有効期限 Epoch TimeまたはUNIX時間(1970/01/01からの経過秒)の形式で指定します。 |
Signature | 認証に用いる署名文字列 URLに含めるため最終的にURLエンコードした文字列となります。詳細は以下をご覽ください。 |
署名の作成のステップは以下の通りです。
以下に示す署名元となる文字列を作ります。
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
1 で作成した文字列をUTF-8にエンコードし、アクセスキーIDに対応するシークレットアクセスキーを秘密鍵としてHMAC-SHA1ハッシュ値を取ります。
SignatureRaw = HMAC-SHA1( UTF-8-Encoding-Of( YourSecretAccessKey ), UTF-8-Encoding-Of( StringToSign ) )
2 で生成された値をBase64方式でエンコードし、その値をさらにURLエンコードします。
Signature = URL-Encode( Base64( SignatureRaw ) );
例えば、
アクセスキーIDがEXAMPLE0000000000000
シークレットアクセスキーがExampleSecretAccessKey000000000000000000
の場合は Signature は以下の文字列になります。37N5r3U0ZBr4Avh6B/rqZL7bftE%3D
作成した署名をURLに配置します。
https://s3api.iot.iij.jp/mybucket/sample.zip?Expires=1412168119&IIJGIOAccessKeyId=EXAMPLE0000000000000&Signature=37N5r3U0ZBr4Avh6B/rqZL7bftE%3D