

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# クエリ API を使用する
<a name="programmingguide.queryapi"></a>

## クエリパラメータ
<a name="query-parameters"></a>

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

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

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

## クエリリクエストの認証
<a name="query-authentication"></a>

HTTPS 経由でのみリクエストを送信できます。また、各クエリリクエストには署名を含める必要があります。このセクションでは、署名を作成する方法について説明します。次に説明する方法は、*署名バージョン 4* と呼ばれます。

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

**クエリ認証プロセス**

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

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

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

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

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

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

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

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

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

   1. 自然なバイト順のパラメータ名で、UTF-8 のクエリ文字列コンポーネントを並び替えます。パラメータは、GET URI または POST ボディから取得される場合があります。(Content-Type が application/x-www-form-urlencoded の場合)

   1. URL は、以下の規則に応じてパラメータ名と値をエンコードします。

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

      1. 他のすべての文字についても、%XY (X および Y には HEX 文字の 0-9 および大文字の A-F が入る) によるパーセントエンコードが必要です。

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

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

   1. パラメータの値が空値の場合でも、エンコードされるパラメータ名とエンコードされる値の間に等号 (=) (ASCII コード 61) を入れます。

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

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

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

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

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

   詳細については、[https://www.ietf.org/rfc/rfc2104.txt](https://www.ietf.org/rfc/rfc2104.txt) を参照してください。

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

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

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

```
https://memory-db.us-east-1.amazonaws.com/
    ?Action=DescribeClusters
    &ClusterName=myCluster
    &SignatureMethod=HmacSHA256
    &SignatureVersion=4
    &Version=2021-01-01
```

前のクエリ文字列では、次の文字列に対する HMAC 署名が生成されます。

```
GET\n
    memory-db.amazonaws.com\n
    Action=DescribeClusters
    &ClusterName=myCluster
    &SignatureMethod=HmacSHA256
    &SignatureVersion=4
    &Version=2021-01-01
    &X-Amz-Algorithm=Amazon4-HMAC-SHA256
    &X-Amz-Credential=AKIADQKE4SARGYLE%2F20140523%2Fus-east-1%2Fmemorydb%2Faws4_request
    &X-Amz-Date=20210801T223649Z
    &X-Amz-SignedHeaders=content-type%3Bhost%3Buser-agent%3Bx-amz-content-sha256%3Bx-amz-date
        content-type:
        host:memory-db.us-east-1.amazonaws.com
        user-agent:ServicesAPICommand_Client
    x-amz-content-sha256:
    x-amz-date:
```

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

```
https://memory-db.us-east-1.amazonaws.com/
    ?Action=DescribeClusters
    &ClusterName=myCluster
    &SignatureMethod=HmacSHA256
    &SignatureVersion=4
    &Version=2021-01-01
    &X-Amz-Algorithm=Amazon4-HMAC-SHA256
    &X-Amz-Credential=AKIADQKE4SARGYLE/20141201/us-east-1/memorydb/aws4_request
    &X-Amz-Date=20210801T223649Z
    &X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date
    &X-Amz-Signature=2877960fced9040b41b4feaca835fd5cfeb9264f768e6a0236c9143f915ffa56
```

プロセスへの署名とリクエスト署名の計算の詳細については、トピック「‭[Signature Version 4 signing process‭‬‭](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)‬」とそのサブトピックを参照してください。