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

:Signatures

最終更新日:Mar 18, 2020

署名メカニズム

アクセスリクエストのたびに、Auto Scaling は認証を実行します。したがって、HTTP と HTTPS のどちらで送信する場合も、各リクエストには署名情報が必要です。Auto Scaling は Access Key ID と Access Key Secret を使用して、対称暗号化方式によるリクエスト送信者の認証を実行します。Access Key ID と Access Key Secret は、Alibaba Cloud から訪問者に対して公式に発行されます (訪問者は Alibaba Cloud の公式 Web サイトでこれらの情報を申請し、管理することができます)。Access Key ID は訪問者の ID を示します。Access Key Secret は暗号化に使用する秘密鍵であり、サーバーで署名文字列を検証する際にも用いられます。機密として取り扱い、Alibaba Cloud と当該ユーザー以外に知られてはならない情報です。

ユーザーがサーバーへの呼び出しを実行する際に、以下の方法でリクエストに署名します。

  1. リクエストパラメーターを使用して、正規化クエリ文字列を作成します。

    1. リクエストパラメーターは、パラメーター名でアルファベット順に並べます (これには “パブリックリクエストパラメーター” と、このドキュメントで取り上げる任意のリクエストインターフェイスに対するユーザー定義パラメーターが含まれますが、「パブリックリクエストパラメーター」に説明のある Signature パラメーターは含まれません)。

      注意: GET メソッドを使用して送信するリクエストの場合、これらのパラメーターはリクエスト URI のパラメーターセクションを構成します (つまり、URI の “?” 以降に “&” で連結)。

    2. 各リクエストパラメーターの名前と値をエンコードします。名前と値は、UTF-8 文字セットを使用して URL エンコードする必要があります。この URL エンコーディングのルールは以下のとおりです。

      • 英字 A ~ Z および a ~ z、数字 0 ~ 9、記号 “-“、”_”、”.”、”~” はエンコードされません。
      • 他の文字は “%XY” 形式でエンコードされます。この “XY” は、16 進表記の文字の ASCII コードです。たとえば、英字の二重引用符は “%22” としてエンコードされます。
      • UTF-8 拡張文字は “%XY%ZA…” の形式でエンコードされます。
      • スペースは、プラス記号 “+” ではなく “%20” としてエンコードされることに注意してください。

      注意: 一般的に、URL エンコーディングに対応しているライブラリ (Java の java.net.URLEncoder など) は、すべて “application/x-www-form-urlencoded” MIME タイプのルールに従ってエンコードされます。このエンコーディング方法を用いる場合は、前述のエンコーディングルールに合わせて、エンコードされた文字列内のプラス記号 “+” を “%20” に、アスタリスク “*” を “%2A” に置き換え、”%7E” をチルダ “~” に戻してください。

    3. エンコードしたパラメーター名と値を半角の等号 “=” で連結します。

    4. 次に等号で結んだパラメーター名と値のペアをアルファベット順に並べ、”&” 記号で連結して、正規化クエリ文字列を作成します。

  2. 以下のルールに従い、前の手順で作成した正規化クエリ文字列を使用して、署名の計算に用いる文字列を作成します。

    1. StringToSign=
    2. HTTPMethod + “&” +
    3. percentEncode(“/”) + ”&” +
    4. percentEncode(CanonicalizedQueryString)
    • HTTPMethod は、リクエスト送信に使用する GET などの HTTP メソッドです。

    • percentEncode(“/“) は、1.ii の URL エンコーディングルールに従って文字 “/“ をコード化した値、つまり “%2F” です。

    • percentEncode(CanonicalizedQueryString) はステップ 1 で作成した正規化クエリ文字列を、1.ii の URL エンコーディングルールに従ってエンコードした文字列です。

  3. RFC2104 の定義に従い、前述の署名文字列を使用して署名の HMAC 値を計算します。

    注意: 署名を計算する際の Key は、ユーザーが保持する Access Key Secret の末尾に、SHA1 ハッシュに基づいて “&” 文字 (ASCII: 38) を付加したものです。

  4. Base64 エンコーディングルールに従って、上記の HMAC 値を文字列にエンコードします。これにより署名値が得られます。

  5. 得られた署名値を、Signature パラメーターとしてリクエストパラメーターに追加します。これで、リクエストの署名プロセスは完了です。

    注意: 得られた署名値を最終的なリクエストパラメーター値として ECS サーバーに送信する際に、RFC3986 のルールに従って、他のパラメーターと同様に値は URL エンコーディングされます。

    DescribeScalingGroups を例に説明します。署名前のリクエスト URL は次のとおりです。

    1. http://ess.aliyuncs.com/?TimeStamp=2014-08-15T11%3A10%3A07Z&Format=xml&AccessKeyId=testid&Action=DescribeScalingGroups&SignatureMethod=HMAC-SHA1&RegionId=cn-qingdao&SignatureNonce=1324fd0e-e2bb-4bb1-917c-bd6e437f1710&SignatureVersion=1.0&Version=2014-08-28

    この場合、StringToSign は次のようになります。

    1. GET&%2F&AccessKeyId%3Dtestid&Action%3DDescribeScalingGroups&Format%3Dxml&RegionId%3Dcn-qingdao&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3D1324fd0e-e2bb-4bb1-917c-bd6e437f1710&SignatureVersion%3D1.0&TimeStamp%3D2014-08-15T11%253A10%253A07Z&Version%3D2014-08-28

    Access Key ID が “testid”、Access Key Secret が “testsecret”、HMAC の計算に使用する Key が “testsecret&” であると想定します。計算された署名値は “SmhZuLUnXmqxSEZ%2FGqyiwGqmf%2BM=” です。

    署名付きリクエスト URL は次のとおりです (Signature パラメーターによって追加されています)。

    1. http://ess.aliyuncs.com/?TimeStamp=2014-08-15T11%3A10%3A07Z&Format=xml&AccessKeyId=testid&Action=DescribeScalingGroups&SignatureMethod=HMAC-SHA1&RegionId=cn-qingdao&SignatureNonce=1324fd0e-e2bb-4bb1-917c-bd6e437f1710&SignatureVersion=1.0&Version=2014-08-28&Signature=SmhZuLUnXmqxSEZ%2FGqyiwGqmf%2BM%3D

署名と送信の詳細については、付録[インターフェイスの呼び出し方法]を参照してください。