ApsaraDB for Redis は、API が呼び出されるたびに、リクエストの送信者を認証します。 アクセスリクエストの送信に HTTP または HTTPS のどちらを使用する場合でも、すべてのリクエストには署名情報が含まれている必要があります。

リクエストを送信すると、ApsaraDB for Redisは、AccessKey ID および AccessKey secret に基づく対称暗号化を使用してユーザーを認証します。

AccessKey ID と AccessKey secret は、Alibaba Cloudによって発行されます。 申請および管理は、Alibaba Cloud の Web サイトで行います。 AccessKey ID はユーザーの身元を示します。 Access Key Secret は、署名文字列の暗号化と、サーバー上の署名文字列の検証に使用される秘密鍵です。 鍵は機密情報として管理し、 内容を Alibaba Cloud とユーザー以外に知られないようにする必要があります。

リクエストに署名する

リクエストを送信する場合、次の手順を実行してリクエストに署名します。
  1. リクエストパラメーターを使用して、正規化したクエリ文字列を作成します。
    1. 正規化されたクエリ文字列を作成するには、すべてのリクエストパラメーターをパラメーター名のアルファベット順に並べ替えます。 各パラメーターには、指定された API に共通のリクエストパラメーターとカスタマイズされたリクエストパラメーターを設定しますが、Signature パラメーターは設定しません。
      重要 GET メソッドでリクエストを送信する場合、各パラメーターはリクエスト URI の疑問符 (?) の後のセクションに配置され、アンパサンド (&) で接続されます。
    2. 各リクエストパラメーターの名前と値をエンコードします。
      パラメーターの名前と値は、UTF-8 文字セットに基づいて URL にエンコードされます。 URL のエンコーディング規則は以下のとおりです。
      • 大文字 (A - Z)、小文字 (a - z)、数字 (0 - 9)、およびハイフン (-)、アンダースコア (_)、ピリオド (.)、波形符号 (~) はエンコードされません。
      • 他の文字は %XY 形式でエンコードされます ( XY は ASCII 文字の 16 進表現)。 たとえば、二重引用符 (“) は %22 とエンコードされます。
      • 拡張 UTF-8 文字は %XY%ZA… 形式でエンコードされます。
      • スペースは、プラス記号 (+) ではなく、%20 としてエンコードされます。
      重要 java.net.URLEncoder など、URL エンコードをサポートするほとんどのライブラリは、MIME エンコード規則 ( application/x-www-form-urlencoded) に準拠しています。 このエンコード方法を使用した場合、上記のエンコード規則に準拠するため、エンコードした文字列内のプラス記号 (+) を %20 に、アスタリスク (*) を %2A に置き換え、波形符号 (~) を %7E に置き換えます。
    3. エンコードされたパラメーター名と値を等号 (=) で接続します。
    4. 等号(=)で接続されたパラメーター名と値のペアをアルファベット順にソートし、それぞれのペアをアンパサンド (&) で接続します。
  2. 作成された正規化されたクエリ文字列を使用し、次の規則に基づいて署名計算用の文字列を作成します。
     StringToSign=
     HTTPMethod + “&” +
     percentEncode(“/”) + ”&” +
     percentEncode(CanonicalizedQueryString)
    上記のコードでは、
    • HTTPMethod は、リクエストの送信に使用する HTTP メソッド ("GET" など) を示します。
    • percentEncode("/") は、スラッシュ(/)がエンコードされた値 (%2F ) を示します。 エンコード方式は、手順 1.b で説明した URL エンコード規則に従います。
    • percentEncode (CanonicalizedQueryString) は、正規化されたクエリ文字列を使用して構築された文字列です。 エンコード方式は、手順 1.b で説明した URL エンコード規則に従います。
  3. 署名の計算に文字列を使用して、RFC 2104 に定義された、署名の HMAC 値を計算します。
    重要 署名の計算に使用されるキーは、アンパサンド (&) (ASCII:38) が付加された AccessKey secret です。 計算には SHA1 が使用されます。
  4. Base64 を使用して、HMAC 値を文字列にエンコードします。 エンコードされた文字列が署名となります。
  5. 署名をSignatureパラメーターの値としてリクエストパラメーターに追加して、リクエストの署名プロセスを完了します。
    重要 署名値を最終的なリクエストパラメーター値として ApisaraDB for Redis インスタンスに送信する場合、他のパラメーターと同様に、RFC 3986で定義されたルールに基づいてこのパラメーターの URL エンコードを実行します。

ここでは、例としてDescribeDBInstancesを使用しています。 署名前のリクエスト URL は以下のとおりです。

http://r-kvstore.aliyuncs.com/?Timestamp=2013-06-01T10:33:56Z&Format=XML&AccessKeyId=testid&Action=DescribeInstances&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&Version=2015-01-01&SignatureVersion=1.0
署名計算用に計算された StringToSign は以下のとおりです。
GET&%2F&AccessKeyId%3Dtestid&Action%3DDescribeInstances&Format%3DXML&RegionId%3Dregion1&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3DNwDAxvLU6tFE0****&SignatureVersion%3D1.0&Timestamp%3D2013-06-01T10%253A33%253A56Z&Version%3D2015-01-01

この例では、 AccessKey ID を testid、AccessKey secret を testsecret と仮定し、 HMAC 計算に使用したキーを testsecret& としています。 計算された署名は、 BIPOMlu8LXBeZtLQkJTw6iFv****= となります。

署名付きリクエスト URL (Signature パラメーターを追加) は以下のとおりです 。

http://r-kvstore.aliyuncs.com/?Timestamp=2013-06-01T10%3A33%3A56Z&Format=XML&AccessKeyId=testid&Action=DescribeInstances&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE****&SignatureVersion=1.0&Version=2015-01-01&Signature=BIPOMlu8LXBeZtLQkJTw6iFvw1E%3D