メニュー
Amazon Relational Database Service
ユーザーガイド (API Version 2014-10-31)

クエリ API の使用

以下のセクションでは、Query API で使用されるパラメータおよびリクエスト認証について説明します。

クエリパラメータ

HTTP クエリベースのリクエストとは、HTTP 動詞 (GET または POST) とクエリパラメータ Action で記述する HTTP リクエストです。

各クエリリクエストに、アクションの認証と選択を処理するための一般的なパラメータがいくつか含まれている必要があります。

オペレーションの中にはパラメータのリストを取るものがあります。これらのリストは、param.n 表記を使用して指定されます。n 値は、1 から始まる整数です。

Amazon RDS のリージョンとエンドポイントの詳細については、『アマゾン ウェブ サービス全般のリファレンス』の「リージョンとエンドポイント」セクションの「Amazon Relational Database Service (RDS)」を参照してください。

クエリリクエストの認証

HTTPS 経由でのみリクエストを送信できます。また、各クエリリクエストには署名を含める必要があります。署名バージョン 2 または署名バージョン 4 のどちらかを使用してください。このセクションでは、署名バージョン 2 の作成方法について説明します。署名バージョン 4 の作成方法については、「署名バージョン 4 の署名プロセス」を参照してください。

AWS へのリクエストを認証するために使用される基本的な手順を次に示します。このプロセスでは、AWS に登録されており、アクセスキー ID とシークレットアクセスキーを持っていることを前提としています。

ヒント

アクセスキー ID とシークレットアクセスキーは、AWS の [Your Account] ページにある [Security Credentials] セクションで確認できます。

AWS へのリクエストを認証するには

  1. 送信者は、AWS へのリクエストを構築します。

  2. このトピックの次のセクションに示すように、送信者は、SHA-1 ハッシュ関数を使用してリクエストの署名 (キー付きハッシュメッセージ認証コード (HMAC) ) を生成します。

  3. リクエストの送信者は、リクエストデータ、署名、およびアクセスキー ID (使用するシークレットアクセスキーのキー識別子) を AWS に送信します。

  4. AWS ではアクセスキー ID を使用して、シークレットアクセスキーを調べます。

  5. AWS では、リクエストの署名を生成する際に使用したものと同じアルゴリズムを使い、リクエストデータとシークレットアクセスキーから署名を生成します。

  6. 署名が一致すると、リクエストは認証されたものと見なされます。署名が一致しなかった場合、リクエストの処理は拒否され、AWS はエラーレスポンスを返します。

注記

リクエストに Timestamp パラメーターが含まれている場合、リクエストに対して生成された署名はパラメーターの値の 15 分後に期限が切れます。リクエストに Expires パラメーターが含まれている場合、署名は Expires パラメーターで指定された時刻に期限が切れます。

リクエストの署名を計算するには

  1. 本手順で後に必要となる、正規化されたクエリ文字列を作成します。

    1. 自然なバイト順のパラメーター名で、UTF-8 のクエリ文字列コンポーネントを並び替えます。

      パラメーターは、GET URI または POST ボディから取得される場合があります。(Content-Type が application/x-www-form-urlencoded の場合)
    2. URL は、以下の規則に応じてパラメーター名と値をエンコードします。

      1. RFC 3986 が定義する非予約文字を、URL がエンコードすることはありません。非予約文字とは、A〜Z、a〜z、0〜9、ハイフン (-)、アンダーバー (_)、ピリオド (.) およびチルダ (~) です。

      2. 他のすべての文字は %XY の形式でパーセントエンコードします。X と Y は、16 進数文字 (0〜9 と英大文字 A〜F) です。

      3. パーセントは、拡張 UTF-8 文字を %XY%ZA.... 形式でエンコードします。

      4. パーセントは、スペース文字を %20 (通常エンコードスキーマが行なうような + ではありません) としてエンコードします。

    3. パラメーターの値が空値の場合でも、エンコードされるパラメーター名は、エンコードされる値と等号 (=) (ASCII 文字 61) で分離します。

    4. それぞれのパラメーター名と値のペアをアンド (&) (ASCII コード 38) で分割します。

  2. 文字列を作成し、以下の擬似文法に従って ("\n" は ASCII 新規行を意味します) 署名を作成します。

    Copy
    StringToSign = HTTPVerb + "\n" + ValueOfHostHeaderInLowercase + "\n" + HTTPRequestURI + "\n" + CanonicalizedQueryString <from the preceding step>

    HTTPRequestURI 要素は URI の HTTP 絶対パス要素ですが、クエリ文字列は含みません。HTTPRequestURI が空値の場合は、スラッシュ (/) を使用してください。

  3. 作成した文字列を使用し、キーとしてシークレットアクセスキー、ハッシュアルゴリズムとして SHA256 または SHA1 を使用して、RFC 準拠の HMAC を計算します。

    詳細については、RFC 2104 を参照してください。

  4. 結果の値を base64 に変換します。

  5. その値は、Signature パラメーターの値としてリクエストに含めます。

サンプルのリクエストを次に示します (見やすくするために改行が追加されています)。

Copy
https://rds.amazonaws.com/ ?Action=DescribeDBInstances &DBInstanceIdentifier=myinstance &Version=2010-01-01 &Timestamp=2010-05-10T17%3A09%3A03.726Z &SignatureVersion=2 &SignatureMethod=HmacSHA256 &AWSAccessKeyId=<Your AWS Access Key ID>

前のクエリ文字列では、続く文字列に対する HMAC 署名を計算します。

Copy
GET\n rds.amazonaws.com\n AWSAccessKeyId=<Your AWS Access Key ID> &Action=DescribeDBInstances &DBInstanceIdentifier=myinstance &Timestamp=2010-05-10T17%3A09%3A03.726Z &SignatureMethod=HmacSHA256 &SignatureVersion=2 &Version=2009-10-16

結果の署名付きリクエストは次のようになります。

Copy
https://rds.amazonaws.com/ ?Action=DescribeDBInstances &DBInstanceIdentifier=myinstance &Version=2010-01-01 &Timestamp=2010-05-10T17%3A09%3A03.726Z &Signature=<URLEncode(Base64Encode(Signature))> &SignatureVersion=2 &SignatureMethod=HmacSHA256 &AWSAccessKeyId=<Your AWS Access Key ID>