ApsaraDB for PolarDB は、API リクエストを送信するユーザーをそれぞれ認証します。 したがって、HTTP リクエストと HTTPS リクエストのどちらを送信する場合でも、リクエストに署名情報を付加する必要があります。 ApsaraDB for PolarDB は、AccessKey ID と AccessKey Secret を使用して対称暗号化を実行し、各リクエストの送信者を認証します。 AccessKey ID とAccessKey Secret は、Alibaba Cloud によってユーザーに公式に発行されます。 AccessKey ID とAccessKey Secret は Alibaba Cloud の公式 Web サイトでリクエストおよび管理できます。 AccessKey ID はユーザーの ID を示します。 AccessKey Secret は、署名文字列を暗号化し、サーバー側で署名文字列を検証するために使用されるキーです。 AccessKey Secret は機密情報として厳格に保護し、Alibaba Cloud とユーザー以外に知られてはなりません。

API リクエストを送信するときは、次のようにリクエストの署名を生成する必要があります。

  1. リクエストパラメーターを使用して、正規化クエリ文字列を作成します。
    1. すべてのリクエストパラメーター (「共通パラメーター」トピックで説明されている共通リクエストパラメーターと操作固有のパラメーター。ただし Signature パラメーターは除く) をパラメーター名の辞書順でソートします。
      重要 GET メソッドを使用してリクエストを送信する場合、URL にはリクエストパラメーターを付加します。 これは、リクエスト URL の疑問符 (?) の後に各パラメーターをアンパサンド (&) で接続したものです。
    2. 各リクエストパラメーターの名前と値をエンコードします。 UTF-8 を使用して URL エンコードを実行します。 URL のエンコード規則は以下のとおりです。
        1. 英大文字 (A〜Z)、英小文字 (a〜z)、数字 (0〜9)、ならびに特殊文字のハイフン (-)、アンダースコア (_)、ピリオド (.)、およびチルダ (~) はエンコードしません。
        2. 他の文字は %XY の形でエンコードします。「XY」は、文字に対応する ASCII コードの 16 進値です。 たとえば、二重引用符 (“) は %22 とエンコードします。
        3. UTF-8 拡張文字を %XY%ZA… の形でエンコードします。
        4. スペース ( ) はプラス記号 (+) ではなく %20 にエンコードします。
          重要 基本的に、URL エンコードをサポートするライブラリ (たとえば java.net.URLEncoder) はすべて MIME タイプ application/x-www-form-urlen-urlencoded のルールに沿ってエンコードします。 このエンコード方式を使用する場合、エンコードされた文字列でプラス記号 (+) を %20 に、アスタリスク (*) を %2A に、%7E をチルダ (~) に置き換えて、必要な文字列を生成できます。
    3. 等号 (=) を使用して、URL エンコードされた各リクエストパラメーターの名前と値をキーと値のペアとして接続します。
    4. URL エンコードされたリクエストパラメーターのキーと値のペアをパラメーター名の辞書順でソートし、それらをアンパサンド (&) で接続して、正規化クエリ文字列を生成します。
  2. ステップ 1 で取得した正規化クエリ文字列を使用して、次の規則に従って StringToSign 文字列を生成します。
    StringToSign=
    HTTPMethod + "&" +
    percentEncode("/") + "&" +
    percentEncode(CanonicalizedQueryString)
    パラメーターの意味は次のとおりです。
      • HTTPMethod:リクエストの送信に使用する HTTP メソッド (GET など) を示します。
      • percentEncode("/"):1.b で説明されている URL エンコード規則に従ったスラッシュ (/) のエンコード値。エンコード値は %2F です。
      • percentEncode(CanonicalizedQueryString):ステップ 1 で作成した正規化クエリ文字列を使用してエンコードされた文字列。 エンコード方式は、ステップ 1.ii で説明した URL エンコード規則に従います。
  3. StringToSign 文字列を使用して、RFC2104 で定義されている署名の HMAC 値を計算します。
    重要 署名の計算に使用されるキーは、AccessKey Secret の最後にアンパサンド (&) (ASCII コード: 38) を追加したものです。 使用されるハッシュアルゴリズムは SHA1 です。
  4. HMAC 値を Base64 エンコード規則に基づいてエンコードして文字列に変換し、署名文字列を生成します。
  5. 署名文字列を Signature パラメーターの値としてリクエストパラメーターに追加して、リクエストの署名生成プロセスを完了します。

    Signature パラメーターを ApsaraDB for PolarDB サーバーにリクエストパラメーターとして送信する前に、RFC3986 に従って、Signature パラメーターの名前と値の URL エンコードも実行する必要があります。

    たとえば、DescribeCdnService 操作の署名なしのリクエスト URL は次のとおりです。

    http://polardb.aliyuncs.com/?Timestamp=2013-06-01T10:33:56Z&Format=XML&AccessKeyId=testid&Action=DescribeDBClusters&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&Version=2014-08-15&SignatureVersion=1.0
    構築された StringToSign 文字列は次のとおりです。
    GET&%2F&AccessKeyId%3Dtestid&Action%3DDescribeDBClusters&Format%3DXML&RegionId%3Dregion1&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3DNwDAxvLU6tFE0DVb&SignatureVersion%3D1.0&TimeStamp%3D2013-06-01T10%253A33%253A56Z&Version%3D2014-08-15
    AccessKey ID は testid で、AccessKey Secret は testsecret です。 そして署名の HMAC 値を計算するために使用されるキーは testsecret& です。 計算された署名は、BIPOMlu8LXBeZtLQkJTw6iFvw1E= となります。

    Signature パラメーターを追加したリクエスト URL は次のとおりです 。

    http://polardb.aliyuncs.com/?Timestamp=2013-06-01T10%3A33%3A56Z&Format=XML&AccessKeyId=testid&Action=DescribeDBClusters&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&SignatureVersion=1.0&Version=2014-08-15&Signature=BIPOMlu8LXBeZtLQkJTw6iFvw1E%3D