すべてのプロダクト
Search
ドキュメントセンター

PolarDB:署名

最終更新日:Jun 03, 2024

PolarDBは、各アクセス要求を認証します。 したがって、リクエストには、HTTPまたはHTTPSで送信されるかどうかに関係なく、署名情報が含まれている必要があります。 PolarDBは、AccessKey IDとAccessKeyシークレットで構成されるAccessKeyペアを使用して対称暗号化を実装し、リクエスト送信者のIDを検証します。 AccessKey ID とAccessKey Secret は、Alibaba Cloud によってユーザーに公式に発行されます。 Alibaba Cloud公式WebサイトでAccessKeyペアをリクエストおよび管理できます。 AccessKey ID はユーザーの ID を示します。 AccessKey Secret は、署名文字列を暗号化し、サーバー側で署名文字列を検証するために使用されるキーです。 AccessKeyシークレットは厳密に機密保持する必要があります。

次の手順を実行して、リクエストに署名します。

  1. リクエストパラメータを使用して、正規化クエリ文字列を作成します。
    1. すべてのリクエストパラメーターをパラメーター名のアルファベット順に並べ替えます。 これらのパラメーターには、「共通パラメーター」のトピックに記載されている共通のリクエストパラメーターと、操作固有のパラメーターが含まれます。 ただし、Signatureパラメーターは含まれません。
      重要 GETメソッドを使用してリクエストを送信する場合、リクエストパラメーターはリクエストURLの一部として含まれます。 リクエストパラメーターはリクエストURLの疑問符 (?) の後に続き、アンパサンド (&) と連結されます。
    2. 各リクエストパラメータの名前と値をエンコードします。 パラメーター名と値は、次のエンコード規則に基づいてUTF-8でURLエンコードする必要があります。
        1. 英大文字 (A〜Z)、英小文字 (a〜z)、数字 (0〜9)、ならびに特殊文字のハイフン (-)、アンダースコア (_)、ピリオド (.)、およびチルダ (~) はエンコードしません。
        2. 他の文字を % XY形式にエンコードします。 XYは、文字に対応するASCIIコードの16進値である。 たとえば、二重引用符 (“) は %22 とエンコードします。
        3. 拡張UTF-8文字は % XY % ZA... 形式でエンコードされます。
        4. プラス記号 (+) の代わりに % 20としてスペースをエンコードします。
          重要 s java.net.URLEncoderなどのURLエンコーディングをサポートするほとんどのライブラリは、「application/x-www-form-urlencoded」の多目的インターネットメール拡張機能 (MIME) エンコーディングルールに準拠しています。 このエンコード方法を使用する場合は、各プラス記号 (+) を % 20に、各アスタリスク (*) を % 2Aに、% 7Eをチルダ (~) に置き換えます。
    3. 等号 (=) を使用して、URLでエンコードされた各リクエストパラメーターの名前と値をキーと値のペアとして接続します。
    4. 等号 (=) で接続されたキーと値のペアをアルファベット順に並べ替え、アンパサンド (&) で区切り、正規化されたクエリ文字列を取得します。
  2. 正規化されたクエリ文字列を使用して、次のルール
    に基づいて署名用の文字列を作成します。HTTPMethod + "&" +
    percentEncode("/") + "&" +
    percentEncode(CanonicalizedQueryString) 
    のパラメータ:
      • HTTPMethod:リクエストの送信に使用する HTTP メソッド (GET など) を示します。
      • percentEncode("/"): 1.bに記載されているURLエンコーディングルールに基づいたスラッシュ (/) のエンコード値。 エンコードされた値は % 2Fです。
      • percentEncode(CanonicalizedQueryString): 手順1で構築された正規化クエリ文字列を使用してエンコードされた文字列。 エンコーディングは、ステップ1.iiで説明したURLエンコーディング規則に従います。
  3. 上記の文字列を使用して、RFC 2104で定義されている署名のハッシュベースのメッセージ認証コード (HMAC) 値を計算します。
    重要 署名の計算に使用されるキーは、アンパサンド (&) (ASCII:38) が付加された AccessKey secret です。 計算には SHA1 が使用されます。
  4. Base64 を使用して、HMAC 値を文字列にエンコードします。 エンコードされた文字列が署名となります。
  5. signatureパラメーターの値として、署名文字列をリクエストに追加します。
    説明

    リクエストパラメーターの最終値として署名文字列をPolarDBサーバーに送信する場合、RFC 3986で定義されているルールに基づいて、文字列を他のパラメーターとしてURLエンコードする必要があります。

    たとえば、DescribeDBClusters操作の署名なしのリクエスト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
    AccessingToSign文字列は次のとおりです。
    GET&% 2F&AccessKeyId % 3Dtestid&Action %
    % 3DDescribeDBClusters&Format % 3DXML&RegionId % 3Dregion1&SignatureMethod % 3DHMAC-SHA1&SignatureNononceOnce % 3D252514-3D2013-secretキーであるキー そして署名の 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